@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,30 @@
1
+ import type { View, Pressable } from 'react-native';
2
+
3
+ export interface MenuTriggerRect { pageX: number; pageY: number; width: number; height: number; }
4
+
5
+ export interface MenuContextValue {
6
+ isOpen: boolean;
7
+ onToggle: () => void;
8
+ onClose: () => void;
9
+ triggerRect: MenuTriggerRect;
10
+ setTriggerRect: (rect: MenuTriggerRect) => void;
11
+ }
12
+
13
+ export interface MenuProps {
14
+ isOpen?: boolean;
15
+ onOpenChange?: (open: boolean) => void;
16
+ defaultOpen?: boolean;
17
+ children: React.ReactNode;
18
+ }
19
+
20
+ export interface MenuTriggerProps extends React.ComponentPropsWithoutRef<typeof Pressable> { className?: string; }
21
+ export interface MenuContentProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
22
+ export interface MenuItemProps extends React.ComponentPropsWithoutRef<typeof Pressable> {
23
+ className?: string;
24
+ isDisabled?: boolean;
25
+ }
26
+ export interface MenuItemTextProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
27
+ export interface MenuItemIconProps { as: React.ElementType; className?: string; }
28
+ export interface MenuSeparatorProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
29
+ export interface MenuGroupProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
30
+ export interface MenuGroupTitleProps extends React.ComponentPropsWithoutRef<typeof View> { className?: string; }
@@ -0,0 +1,18 @@
1
+ export { Modal } from './modal';
2
+ export { ModalBackdrop } from './modal-backdrop';
3
+ export { ModalContent } from './modal-content';
4
+ export { ModalHeader } from './modal-header';
5
+ export { ModalBody } from './modal-body';
6
+ export { ModalFooter } from './modal-footer';
7
+ export { ModalCloseButton } from './modal-close-button';
8
+
9
+ export type {
10
+ ModalProps,
11
+ ModalBackdropProps,
12
+ ModalContentProps,
13
+ ModalHeaderProps,
14
+ ModalBodyProps,
15
+ ModalFooterProps,
16
+ ModalCloseButtonProps,
17
+ ModalSize,
18
+ } from './types';
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { Pressable } from 'react-native';
3
+ import { useModalContext } from './modal';
4
+ import type { ModalBackdropProps } from './types';
5
+ import { modalBackdropStyle } from './styles';
6
+
7
+ export const ModalBackdrop = React.forwardRef<
8
+ React.ElementRef<typeof Pressable>,
9
+ ModalBackdropProps
10
+ >(({ className, ...props }, ref) => {
11
+ const { onClose, closeOnOverlayClick } = useModalContext();
12
+
13
+ return (
14
+ <Pressable
15
+ ref={ref}
16
+ onPress={closeOnOverlayClick ? onClose : undefined}
17
+ className={modalBackdropStyle({ class: className })}
18
+ {...props}
19
+ />
20
+ );
21
+ });
22
+
23
+ ModalBackdrop.displayName = 'ModalBackdrop';
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import type { ModalBodyProps } from './types';
4
+ import { modalBodyStyle } from './styles';
5
+
6
+ export const ModalBody = React.forwardRef<
7
+ React.ElementRef<typeof View>,
8
+ ModalBodyProps
9
+ >(({ className, ...props }, ref) => {
10
+ return (
11
+ <View
12
+ ref={ref}
13
+ className={modalBodyStyle({ class: className })}
14
+ {...props}
15
+ />
16
+ );
17
+ });
18
+
19
+ ModalBody.displayName = 'ModalBody';
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { Pressable, Text } from 'react-native';
3
+ import { useModalContext } from './modal';
4
+ import type { ModalCloseButtonProps } from './types';
5
+ import { modalCloseButtonStyle } from './styles';
6
+
7
+ export const ModalCloseButton = React.forwardRef<
8
+ React.ElementRef<typeof Pressable>,
9
+ ModalCloseButtonProps
10
+ >(({ className, children, ...props }, ref) => {
11
+ const { onClose } = useModalContext();
12
+
13
+ return (
14
+ <Pressable
15
+ ref={ref}
16
+ onPress={onClose}
17
+ accessibilityRole="button"
18
+ accessibilityLabel="Close"
19
+ className={modalCloseButtonStyle({ class: className })}
20
+ {...props}
21
+ >
22
+ {children ?? (
23
+ <Text className="text-typography-500 text-lg leading-none">✕</Text>
24
+ )}
25
+ </Pressable>
26
+ );
27
+ });
28
+
29
+ ModalCloseButton.displayName = 'ModalCloseButton';
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import { useModalContext } from './modal';
4
+ import type { ModalContentProps } from './types';
5
+ import { modalContentStyle } from './styles';
6
+
7
+ export const ModalContent = React.forwardRef<
8
+ React.ElementRef<typeof View>,
9
+ ModalContentProps
10
+ >(({ className, ...props }, ref) => {
11
+ const { size } = useModalContext();
12
+
13
+ return (
14
+ <View
15
+ ref={ref}
16
+ className={modalContentStyle({ size, class: className })}
17
+ {...props}
18
+ />
19
+ );
20
+ });
21
+
22
+ ModalContent.displayName = 'ModalContent';
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import type { ModalFooterProps } from './types';
4
+ import { modalFooterStyle } from './styles';
5
+
6
+ export const ModalFooter = React.forwardRef<
7
+ React.ElementRef<typeof View>,
8
+ ModalFooterProps
9
+ >(({ className, ...props }, ref) => {
10
+ return (
11
+ <View
12
+ ref={ref}
13
+ className={modalFooterStyle({ class: className })}
14
+ {...props}
15
+ />
16
+ );
17
+ });
18
+
19
+ ModalFooter.displayName = 'ModalFooter';
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import type { ModalHeaderProps } from './types';
4
+ import { modalHeaderStyle } from './styles';
5
+
6
+ export const ModalHeader = React.forwardRef<
7
+ React.ElementRef<typeof View>,
8
+ ModalHeaderProps
9
+ >(({ className, ...props }, ref) => {
10
+ return (
11
+ <View
12
+ ref={ref}
13
+ className={modalHeaderStyle({ class: className })}
14
+ {...props}
15
+ />
16
+ );
17
+ });
18
+
19
+ ModalHeader.displayName = 'ModalHeader';
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import {
3
+ Modal as RNModal,
4
+ View,
5
+ KeyboardAvoidingView,
6
+ Platform,
7
+ } from 'react-native';
8
+ import { createComponentContext } from '../utils/create-context';
9
+ import type { ModalProps, ModalContextValue } from './types';
10
+
11
+ export const [ModalProvider, useModalContext] =
12
+ createComponentContext<ModalContextValue>('Modal');
13
+
14
+ export const Modal: React.FC<ModalProps> = ({
15
+ isOpen,
16
+ onClose,
17
+ size = 'md',
18
+ closeOnOverlayClick = true,
19
+ avoidKeyboard = false,
20
+ children,
21
+ }) => {
22
+ const content = (
23
+ <View className="flex-1 items-center justify-center">{children}</View>
24
+ );
25
+
26
+ return (
27
+ <ModalProvider value={{ isOpen, onClose, size, closeOnOverlayClick }}>
28
+ <RNModal
29
+ visible={isOpen}
30
+ transparent
31
+ animationType="fade"
32
+ onRequestClose={onClose}
33
+ statusBarTranslucent
34
+ >
35
+ {avoidKeyboard ? (
36
+ <KeyboardAvoidingView
37
+ behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
38
+ className="flex-1"
39
+ >
40
+ {content}
41
+ </KeyboardAvoidingView>
42
+ ) : (
43
+ content
44
+ )}
45
+ </RNModal>
46
+ </ModalProvider>
47
+ );
48
+ };
49
+
50
+ Modal.displayName = 'Modal';
@@ -0,0 +1,37 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const modalBackdropStyle = tv({
4
+ base: 'absolute inset-0 bg-black/50',
5
+ });
6
+
7
+ export const modalContentStyle = tv({
8
+ base: 'bg-background-0 rounded-xl overflow-hidden shadow-hard-5',
9
+ variants: {
10
+ size: {
11
+ xs: 'w-[60%] max-w-[280px]',
12
+ sm: 'w-[70%] max-w-[360px]',
13
+ md: 'w-[80%] max-w-[480px]',
14
+ lg: 'w-[90%] max-w-[640px]',
15
+ full: 'w-[95%] max-w-full max-h-[90%]',
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ size: 'md',
20
+ },
21
+ });
22
+
23
+ export const modalHeaderStyle = tv({
24
+ base: 'flex-row items-center justify-between px-5 pt-5 pb-2',
25
+ });
26
+
27
+ export const modalBodyStyle = tv({
28
+ base: 'px-5 py-3',
29
+ });
30
+
31
+ export const modalFooterStyle = tv({
32
+ base: 'flex-row items-center justify-end gap-3 px-5 pb-5 pt-2',
33
+ });
34
+
35
+ export const modalCloseButtonStyle = tv({
36
+ base: 'p-1 rounded-md active:bg-background-200',
37
+ });
@@ -0,0 +1,49 @@
1
+ import type { View, Pressable, Text as RNText } from 'react-native';
2
+
3
+ export type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'full';
4
+
5
+ export interface ModalContextValue {
6
+ isOpen: boolean;
7
+ onClose: () => void;
8
+ size: ModalSize;
9
+ closeOnOverlayClick: boolean;
10
+ }
11
+
12
+ export interface ModalProps {
13
+ isOpen: boolean;
14
+ onClose: () => void;
15
+ size?: ModalSize;
16
+ closeOnOverlayClick?: boolean;
17
+ avoidKeyboard?: boolean;
18
+ children: React.ReactNode;
19
+ }
20
+
21
+ export interface ModalBackdropProps
22
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
23
+ className?: string;
24
+ }
25
+
26
+ export interface ModalContentProps
27
+ extends React.ComponentPropsWithoutRef<typeof View> {
28
+ className?: string;
29
+ }
30
+
31
+ export interface ModalHeaderProps
32
+ extends React.ComponentPropsWithoutRef<typeof View> {
33
+ className?: string;
34
+ }
35
+
36
+ export interface ModalBodyProps
37
+ extends React.ComponentPropsWithoutRef<typeof View> {
38
+ className?: string;
39
+ }
40
+
41
+ export interface ModalFooterProps
42
+ extends React.ComponentPropsWithoutRef<typeof View> {
43
+ className?: string;
44
+ }
45
+
46
+ export interface ModalCloseButtonProps
47
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
48
+ className?: string;
49
+ }
@@ -0,0 +1 @@
1
+ /// <reference types="nativewind/types" />
@@ -0,0 +1,18 @@
1
+ export {
2
+ NumberInput,
3
+ NumberInputProvider,
4
+ useNumberInputContext,
5
+ NumberInputField,
6
+ NumberInputStepper,
7
+ NumberInputIncrementButton,
8
+ NumberInputDecrementButton,
9
+ } from './number-input';
10
+ export type {
11
+ NumberInputProps,
12
+ NumberInputFieldProps,
13
+ NumberInputStepperProps,
14
+ NumberInputIncrementProps,
15
+ NumberInputDecrementProps,
16
+ NumberInputSize,
17
+ NumberInputContextValue,
18
+ } from './types';
@@ -0,0 +1,161 @@
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
+ NumberInputProps,
6
+ NumberInputFieldProps,
7
+ NumberInputStepperProps,
8
+ NumberInputIncrementProps,
9
+ NumberInputDecrementProps,
10
+ NumberInputContextValue,
11
+ } from './types';
12
+ import {
13
+ numberInputStyle,
14
+ numberInputFieldStyle,
15
+ numberInputStepperStyle,
16
+ numberInputButtonStyle,
17
+ numberInputButtonTextStyle,
18
+ } from './styles';
19
+
20
+ export const [NumberInputProvider, useNumberInputContext] =
21
+ createComponentContext<NumberInputContextValue>('NumberInput');
22
+
23
+ export const NumberInput = React.forwardRef<
24
+ React.ElementRef<typeof View>,
25
+ NumberInputProps
26
+ >(
27
+ (
28
+ {
29
+ className,
30
+ value: controlledValue,
31
+ defaultValue = 0,
32
+ onChange,
33
+ min,
34
+ max,
35
+ step = 1,
36
+ size = 'md',
37
+ isDisabled = false,
38
+ children,
39
+ ...props
40
+ },
41
+ ref,
42
+ ) => {
43
+ const [internalValue, setInternalValue] = useState(defaultValue);
44
+ const value =
45
+ controlledValue !== undefined ? controlledValue : internalValue;
46
+ const clamp = (v: number) => {
47
+ let r = v;
48
+ if (min !== undefined) r = Math.max(min, r);
49
+ if (max !== undefined) r = Math.min(max, r);
50
+ return r;
51
+ };
52
+ const update = (v: number) => {
53
+ const clamped = clamp(v);
54
+ setInternalValue(clamped);
55
+ onChange?.(clamped);
56
+ };
57
+ return (
58
+ <NumberInputProvider
59
+ value={{
60
+ value,
61
+ onIncrement: () => update(value + step),
62
+ onDecrement: () => update(value - step),
63
+ onChangeValue: update,
64
+ size,
65
+ min,
66
+ max,
67
+ step,
68
+ isDisabled,
69
+ }}
70
+ >
71
+ <View
72
+ ref={ref}
73
+ className={numberInputStyle({ size, isDisabled, class: className })}
74
+ {...props}
75
+ >
76
+ {children}
77
+ </View>
78
+ </NumberInputProvider>
79
+ );
80
+ },
81
+ );
82
+ NumberInput.displayName = 'NumberInput';
83
+
84
+ export const NumberInputField = React.forwardRef<
85
+ React.ElementRef<typeof TextInput>,
86
+ NumberInputFieldProps
87
+ >(({ className, ...props }, ref) => {
88
+ const { value, onChangeValue, size, isDisabled } =
89
+ useNumberInputContext();
90
+ return (
91
+ <TextInput
92
+ ref={ref}
93
+ value={String(value)}
94
+ onChangeText={(t) => {
95
+ const n = parseFloat(t);
96
+ if (!isNaN(n)) onChangeValue(n);
97
+ }}
98
+ keyboardType="numeric"
99
+ editable={!isDisabled}
100
+ className={numberInputFieldStyle({ size, class: className })}
101
+ {...props}
102
+ />
103
+ );
104
+ });
105
+ NumberInputField.displayName = 'NumberInputField';
106
+
107
+ export const NumberInputStepper = React.forwardRef<
108
+ React.ElementRef<typeof View>,
109
+ NumberInputStepperProps
110
+ >(({ className, ...props }, ref) => {
111
+ return <View ref={ref} className={numberInputStepperStyle({ class: className })} {...props} />;
112
+ });
113
+ NumberInputStepper.displayName = 'NumberInputStepper';
114
+
115
+ export const NumberInputIncrementButton = React.forwardRef<
116
+ React.ElementRef<typeof Pressable>,
117
+ NumberInputIncrementProps
118
+ >(({ className, children, ...props }, ref) => {
119
+ const { onIncrement, size, isDisabled } = useNumberInputContext();
120
+ return (
121
+ <Pressable
122
+ ref={ref}
123
+ onPress={onIncrement}
124
+ disabled={isDisabled}
125
+ className={numberInputButtonStyle({ size, class: className })}
126
+ accessibilityRole="button"
127
+ accessibilityLabel="Increment"
128
+ {...props}
129
+ >
130
+ {children ?? (
131
+ <Text className={numberInputButtonTextStyle({ size })}>+</Text>
132
+ )}
133
+ </Pressable>
134
+ );
135
+ });
136
+ NumberInputIncrementButton.displayName = 'NumberInputIncrementButton';
137
+
138
+ export const NumberInputDecrementButton = React.forwardRef<
139
+ React.ElementRef<typeof Pressable>,
140
+ NumberInputDecrementProps
141
+ >(({ className, children, ...props }, ref) => {
142
+ const { onDecrement, size, isDisabled } = useNumberInputContext();
143
+ return (
144
+ <Pressable
145
+ ref={ref}
146
+ onPress={onDecrement}
147
+ disabled={isDisabled}
148
+ className={numberInputButtonStyle({ size, class: className })}
149
+ accessibilityRole="button"
150
+ accessibilityLabel="Decrement"
151
+ {...props}
152
+ >
153
+ {children ?? (
154
+ <Text className={numberInputButtonTextStyle({ size })}>
155
+ {'\u2212'}
156
+ </Text>
157
+ )}
158
+ </Pressable>
159
+ );
160
+ });
161
+ NumberInputDecrementButton.displayName = 'NumberInputDecrementButton';
@@ -0,0 +1,35 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const numberInputStyle = tv({
4
+ base: 'flex-row items-center border border-outline-300 rounded-lg overflow-hidden',
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 numberInputFieldStyle = tv({
12
+ base: 'flex-1 text-center text-typography-900',
13
+ variants: {
14
+ size: { sm: 'text-sm px-2', md: 'text-base px-3', lg: 'text-lg px-4' },
15
+ },
16
+ defaultVariants: { size: 'md' },
17
+ });
18
+ export const numberInputStepperStyle = tv({
19
+ base: 'self-stretch justify-center',
20
+ variants: {},
21
+ });
22
+ export const numberInputButtonStyle = tv({
23
+ base: 'items-center justify-center bg-background-50 border-l border-outline-200',
24
+ variants: {
25
+ size: { sm: 'w-8 flex-1', md: 'w-10 flex-1', lg: 'w-12 flex-1' },
26
+ },
27
+ defaultVariants: { size: 'md' },
28
+ });
29
+ export const numberInputButtonTextStyle = tv({
30
+ base: 'font-semibold text-typography-600',
31
+ variants: {
32
+ size: { sm: 'text-sm', md: 'text-base', lg: 'text-lg' },
33
+ },
34
+ defaultVariants: { size: 'md' },
35
+ });
@@ -0,0 +1,44 @@
1
+ import type { View, TextInput, Pressable } from 'react-native';
2
+
3
+ export type NumberInputSize = 'sm' | 'md' | 'lg';
4
+
5
+ export interface NumberInputContextValue {
6
+ value: number;
7
+ onIncrement: () => void;
8
+ onDecrement: () => void;
9
+ onChangeValue: (val: number) => void;
10
+ size: NumberInputSize;
11
+ min?: number;
12
+ max?: number;
13
+ step: number;
14
+ isDisabled: boolean;
15
+ }
16
+
17
+ export interface NumberInputProps
18
+ extends React.ComponentPropsWithoutRef<typeof View> {
19
+ className?: string;
20
+ value?: number;
21
+ defaultValue?: number;
22
+ onChange?: (value: number) => void;
23
+ min?: number;
24
+ max?: number;
25
+ step?: number;
26
+ size?: NumberInputSize;
27
+ isDisabled?: boolean;
28
+ }
29
+ export interface NumberInputFieldProps
30
+ extends React.ComponentPropsWithoutRef<typeof TextInput> {
31
+ className?: string;
32
+ }
33
+ export interface NumberInputStepperProps
34
+ extends React.ComponentPropsWithoutRef<typeof View> {
35
+ className?: string;
36
+ }
37
+ export interface NumberInputIncrementProps
38
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
39
+ className?: string;
40
+ }
41
+ export interface NumberInputDecrementProps
42
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
43
+ className?: string;
44
+ }
@@ -0,0 +1,2 @@
1
+ export { Overlay } from './overlay';
2
+ export type { OverlayProps } from './types';
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import type { OverlayProps } from './types';
4
+ import { overlayStyle } from './styles';
5
+
6
+ export const Overlay = React.forwardRef<
7
+ React.ElementRef<typeof View>,
8
+ OverlayProps
9
+ >(({ className, isVisible = true, ...props }, ref) => {
10
+ if (!isVisible) return null;
11
+
12
+ return (
13
+ <View
14
+ ref={ref}
15
+ className={overlayStyle({ class: className })}
16
+ {...props}
17
+ />
18
+ );
19
+ });
20
+
21
+ Overlay.displayName = 'Overlay';
@@ -0,0 +1,6 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const overlayStyle = tv({
4
+ base: 'absolute inset-0 bg-black/50',
5
+ variants: {},
6
+ });
@@ -0,0 +1,7 @@
1
+ import type { View } from 'react-native';
2
+
3
+ export interface OverlayProps
4
+ extends React.ComponentPropsWithoutRef<typeof View> {
5
+ className?: string;
6
+ isVisible?: boolean;
7
+ }
@@ -0,0 +1,2 @@
1
+ export { Pagination, PaginationProvider, usePaginationContext, PaginationItem, PaginationPrevious, PaginationNext, PaginationEllipsis } from './pagination';
2
+ export type { PaginationProps, PaginationItemProps, PaginationPreviousProps, PaginationNextProps, PaginationEllipsisProps, PaginationSize, PaginationContextValue } from './types';