@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,62 @@
1
+ import type { View, Pressable } from 'react-native';
2
+
3
+ export type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom';
4
+
5
+ export type DrawerSize = 'sm' | 'md' | 'lg' | 'full';
6
+
7
+ export type DrawerAnimationType = 'slide' | 'fade' | 'none';
8
+
9
+ /** Direction the drawer panel slides in from. When set, overrides animationType with a custom directional animation. */
10
+ export type DrawerSlideFrom = 'top' | 'left' | 'bottom' | 'right';
11
+
12
+ export interface DrawerContextValue {
13
+ isOpen: boolean;
14
+ onClose: () => void;
15
+ placement: DrawerPlacement;
16
+ size: DrawerSize;
17
+ animationType: DrawerAnimationType;
18
+ slideFrom?: DrawerSlideFrom;
19
+ }
20
+
21
+ export interface DrawerProps {
22
+ isOpen: boolean;
23
+ onClose: () => void;
24
+ placement?: DrawerPlacement;
25
+ size?: DrawerSize;
26
+ animationType?: DrawerAnimationType;
27
+ /** Slide the drawer panel in from this direction (custom animation; overrides animationType). */
28
+ slideFrom?: DrawerSlideFrom;
29
+ /** When false the drawer renders inline (no RNModal) so background content stays interactive. */
30
+ isModal?: boolean;
31
+ children: React.ReactNode;
32
+ }
33
+
34
+ export interface DrawerBackdropProps
35
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
36
+ className?: string;
37
+ }
38
+
39
+ export interface DrawerContentProps
40
+ extends React.ComponentPropsWithoutRef<typeof View> {
41
+ className?: string;
42
+ }
43
+
44
+ export interface DrawerHeaderProps
45
+ extends React.ComponentPropsWithoutRef<typeof View> {
46
+ className?: string;
47
+ }
48
+
49
+ export interface DrawerBodyProps
50
+ extends React.ComponentPropsWithoutRef<typeof View> {
51
+ className?: string;
52
+ }
53
+
54
+ export interface DrawerFooterProps
55
+ extends React.ComponentPropsWithoutRef<typeof View> {
56
+ className?: string;
57
+ }
58
+
59
+ export interface DrawerCloseButtonProps
60
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
61
+ className?: string;
62
+ }
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import { View, Text } from 'react-native';
3
+ import type { EmptyProps, EmptyIconProps, EmptyTitleProps, EmptyDescriptionProps, EmptyActionProps } from './types';
4
+ import { emptyStyle, emptyIconStyle, emptyTitleStyle, emptyDescriptionStyle, emptyActionStyle } from './styles';
5
+
6
+ export const Empty = React.forwardRef<
7
+ React.ElementRef<typeof View>,
8
+ EmptyProps
9
+ >(({ className, ...props }, ref) => {
10
+ return (
11
+ <View ref={ref} className={emptyStyle({ class: className })} {...props} />
12
+ );
13
+ });
14
+ Empty.displayName = 'Empty';
15
+
16
+ export const EmptyIcon = React.forwardRef<any, EmptyIconProps>(
17
+ ({ as: AsComp, className, ...props }, ref) => {
18
+ return (
19
+ <AsComp ref={ref} className={emptyIconStyle({ class: className })} {...props} />
20
+ );
21
+ },
22
+ );
23
+ EmptyIcon.displayName = 'EmptyIcon';
24
+
25
+ export const EmptyTitle = React.forwardRef<
26
+ React.ElementRef<typeof Text>,
27
+ EmptyTitleProps
28
+ >(({ className, ...props }, ref) => {
29
+ return (
30
+ <Text ref={ref} className={emptyTitleStyle({ class: className })} {...props} />
31
+ );
32
+ });
33
+ EmptyTitle.displayName = 'EmptyTitle';
34
+
35
+ export const EmptyDescription = React.forwardRef<
36
+ React.ElementRef<typeof Text>,
37
+ EmptyDescriptionProps
38
+ >(({ className, ...props }, ref) => {
39
+ return (
40
+ <Text ref={ref} className={emptyDescriptionStyle({ class: className })} {...props} />
41
+ );
42
+ });
43
+ EmptyDescription.displayName = 'EmptyDescription';
44
+
45
+ export const EmptyAction = React.forwardRef<
46
+ React.ElementRef<typeof View>,
47
+ EmptyActionProps
48
+ >(({ className, ...props }, ref) => {
49
+ return (
50
+ <View ref={ref} className={emptyActionStyle({ class: className })} {...props} />
51
+ );
52
+ });
53
+ EmptyAction.displayName = 'EmptyAction';
@@ -0,0 +1,2 @@
1
+ export { Empty, EmptyIcon, EmptyTitle, EmptyDescription, EmptyAction } from './empty';
2
+ export type { EmptyProps, EmptyIconProps, EmptyTitleProps, EmptyDescriptionProps, EmptyActionProps } from './types';
@@ -0,0 +1,26 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const emptyStyle = tv({
4
+ base: 'items-center justify-center py-12 px-6',
5
+ variants: {},
6
+ });
7
+
8
+ export const emptyIconStyle = tv({
9
+ base: 'h-12 w-12 text-typography-300 mb-4',
10
+ variants: {},
11
+ });
12
+
13
+ export const emptyTitleStyle = tv({
14
+ base: 'text-lg font-semibold text-typography-900 mb-1 text-center',
15
+ variants: {},
16
+ });
17
+
18
+ export const emptyDescriptionStyle = tv({
19
+ base: 'text-sm text-typography-500 text-center mb-4',
20
+ variants: {},
21
+ });
22
+
23
+ export const emptyActionStyle = tv({
24
+ base: 'mt-2',
25
+ variants: {},
26
+ });
@@ -0,0 +1,22 @@
1
+ import type { View, Text as RNText } from 'react-native';
2
+
3
+ export interface EmptyProps extends React.ComponentPropsWithoutRef<typeof View> {
4
+ className?: string;
5
+ }
6
+
7
+ export interface EmptyIconProps {
8
+ as: React.ElementType;
9
+ className?: string;
10
+ }
11
+
12
+ export interface EmptyTitleProps extends React.ComponentPropsWithoutRef<typeof RNText> {
13
+ className?: string;
14
+ }
15
+
16
+ export interface EmptyDescriptionProps extends React.ComponentPropsWithoutRef<typeof RNText> {
17
+ className?: string;
18
+ }
19
+
20
+ export interface EmptyActionProps extends React.ComponentPropsWithoutRef<typeof View> {
21
+ className?: string;
22
+ }
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { useFabContext } from './fab';
3
+ import type { FabIconProps } from './types';
4
+ import { fabIconStyle } from './styles';
5
+
6
+ export const FabIcon = React.forwardRef<any, FabIconProps>(
7
+ ({ as: AsComp, className, ...props }, ref) => {
8
+ const { size } = useFabContext();
9
+
10
+ return (
11
+ <AsComp
12
+ ref={ref}
13
+ className={fabIconStyle({ size, class: className })}
14
+ {...props}
15
+ />
16
+ );
17
+ },
18
+ );
19
+
20
+ FabIcon.displayName = 'FabIcon';
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { useFabContext } from './fab';
4
+ import type { FabLabelProps } from './types';
5
+ import { fabLabelStyle } from './styles';
6
+
7
+ export const FabLabel = React.forwardRef<
8
+ React.ElementRef<typeof Text>,
9
+ FabLabelProps
10
+ >(({ className, ...props }, ref) => {
11
+ const { size } = useFabContext();
12
+
13
+ return (
14
+ <Text
15
+ ref={ref}
16
+ className={fabLabelStyle({ size, class: className })}
17
+ {...props}
18
+ />
19
+ );
20
+ });
21
+
22
+ FabLabel.displayName = 'FabLabel';
@@ -0,0 +1,45 @@
1
+ import React from 'react';
2
+ import { Pressable } from 'react-native';
3
+ import { createComponentContext } from '../utils/create-context';
4
+ import type { FabProps, FabContextValue } from './types';
5
+ import { fabStyle } from './styles';
6
+
7
+ export const [FabProvider, useFabContext] =
8
+ createComponentContext<FabContextValue>('Fab');
9
+
10
+ export const Fab = React.forwardRef<
11
+ React.ElementRef<typeof Pressable>,
12
+ FabProps
13
+ >(
14
+ (
15
+ {
16
+ className,
17
+ placement = 'bottom-right',
18
+ size = 'md',
19
+ isExtended = false,
20
+ children,
21
+ ...props
22
+ },
23
+ ref,
24
+ ) => {
25
+ return (
26
+ <FabProvider value={{ size }}>
27
+ <Pressable
28
+ ref={ref}
29
+ role="button"
30
+ className={fabStyle({
31
+ placement,
32
+ size,
33
+ isExtended,
34
+ class: className,
35
+ })}
36
+ {...props}
37
+ >
38
+ {children}
39
+ </Pressable>
40
+ </FabProvider>
41
+ );
42
+ },
43
+ );
44
+
45
+ Fab.displayName = 'Fab';
@@ -0,0 +1,11 @@
1
+ export { Fab } from './fab';
2
+ export { FabIcon } from './fab-icon';
3
+ export { FabLabel } from './fab-label';
4
+
5
+ export type {
6
+ FabProps,
7
+ FabIconProps,
8
+ FabLabelProps,
9
+ FabPlacement,
10
+ FabSize,
11
+ } from './types';
@@ -0,0 +1,57 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const fabStyle = tv({
4
+ base: 'absolute bg-primary-500 flex-row items-center justify-center shadow-hard-3 z-20 active:bg-primary-600',
5
+ variants: {
6
+ placement: {
7
+ 'top-left': 'top-4 left-4',
8
+ 'top-right': 'top-4 right-4',
9
+ 'bottom-left': 'bottom-4 left-4',
10
+ 'bottom-right': 'bottom-4 right-4',
11
+ 'top-center': 'top-4 self-center',
12
+ 'bottom-center': 'bottom-4 self-center',
13
+ },
14
+ size: {
15
+ sm: 'h-10 min-w-[40px] rounded-full',
16
+ md: 'h-13 min-w-[52px] rounded-full',
17
+ lg: 'h-15 min-w-[60px] rounded-full',
18
+ },
19
+ isExtended: {
20
+ true: 'px-5 gap-2',
21
+ false: '',
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ placement: 'bottom-right',
26
+ size: 'md',
27
+ isExtended: false,
28
+ },
29
+ });
30
+
31
+ export const fabIconStyle = tv({
32
+ base: 'text-typography-0',
33
+ variants: {
34
+ size: {
35
+ sm: 'h-4 w-4',
36
+ md: 'h-[18px] w-[18px]',
37
+ lg: 'h-5 w-5',
38
+ },
39
+ },
40
+ defaultVariants: {
41
+ size: 'md',
42
+ },
43
+ });
44
+
45
+ export const fabLabelStyle = tv({
46
+ base: 'text-typography-0 font-semibold',
47
+ variants: {
48
+ size: {
49
+ sm: 'text-sm',
50
+ md: 'text-base',
51
+ lg: 'text-lg',
52
+ },
53
+ },
54
+ defaultVariants: {
55
+ size: 'md',
56
+ },
57
+ });
@@ -0,0 +1,33 @@
1
+ import type { Pressable, Text as RNText } from 'react-native';
2
+
3
+ export type FabPlacement =
4
+ | 'top-left'
5
+ | 'top-right'
6
+ | 'bottom-left'
7
+ | 'bottom-right'
8
+ | 'top-center'
9
+ | 'bottom-center';
10
+
11
+ export type FabSize = 'sm' | 'md' | 'lg';
12
+
13
+ export interface FabContextValue {
14
+ size: FabSize;
15
+ }
16
+
17
+ export interface FabProps
18
+ extends React.ComponentPropsWithoutRef<typeof Pressable> {
19
+ className?: string;
20
+ placement?: FabPlacement;
21
+ size?: FabSize;
22
+ isExtended?: boolean;
23
+ }
24
+
25
+ export interface FabIconProps {
26
+ as: React.ElementType;
27
+ className?: string;
28
+ }
29
+
30
+ export interface FabLabelProps
31
+ extends React.ComponentPropsWithoutRef<typeof RNText> {
32
+ className?: string;
33
+ }
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { useFormControlContext } from './form-control';
3
+ import type { FormControlErrorIconProps } from './types';
4
+ import { formControlErrorIconStyle } from './styles';
5
+
6
+ export const FormControlErrorIcon = React.forwardRef<any, FormControlErrorIconProps>(
7
+ ({ as: AsComp, className, ...props }, ref) => {
8
+ const ctx = useFormControlContext();
9
+
10
+ if (!AsComp) return null;
11
+
12
+ return (
13
+ <AsComp
14
+ ref={ref}
15
+ className={formControlErrorIconStyle({
16
+ size: ctx?.size,
17
+ class: className,
18
+ })}
19
+ {...props}
20
+ />
21
+ );
22
+ },
23
+ );
24
+
25
+ FormControlErrorIcon.displayName = 'FormControlErrorIcon';
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { View, Text } from 'react-native';
3
+ import { useFormControlContext } from './form-control';
4
+ import type { FormControlErrorMessageProps } from './types';
5
+ import {
6
+ formControlErrorMessageStyle,
7
+ formControlErrorMessageTextStyle,
8
+ } from './styles';
9
+
10
+ export const FormControlErrorMessage = React.forwardRef<
11
+ React.ElementRef<typeof View>,
12
+ FormControlErrorMessageProps
13
+ >(({ className, children, ...props }, ref) => {
14
+ const ctx = useFormControlContext();
15
+
16
+ if (!ctx?.isInvalid) {
17
+ return null;
18
+ }
19
+
20
+ return (
21
+ <View
22
+ ref={ref}
23
+ className={formControlErrorMessageStyle({ class: className })}
24
+ role="alert"
25
+ {...props}
26
+ >
27
+ {typeof children === 'string' ? (
28
+ <Text
29
+ className={formControlErrorMessageTextStyle({ size: ctx.size })}
30
+ >
31
+ {children}
32
+ </Text>
33
+ ) : (
34
+ children
35
+ )}
36
+ </View>
37
+ );
38
+ });
39
+
40
+ FormControlErrorMessage.displayName = 'FormControlErrorMessage';
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { useFormControlContext } from './form-control';
4
+ import type { FormControlHelperTextProps } from './types';
5
+ import { formControlHelperTextStyle } from './styles';
6
+
7
+ export const FormControlHelperText = React.forwardRef<
8
+ React.ElementRef<typeof Text>,
9
+ FormControlHelperTextProps
10
+ >(({ className, ...props }, ref) => {
11
+ const ctx = useFormControlContext();
12
+
13
+ return (
14
+ <Text
15
+ ref={ref}
16
+ className={formControlHelperTextStyle({
17
+ size: ctx?.size,
18
+ class: className,
19
+ })}
20
+ {...props}
21
+ />
22
+ );
23
+ });
24
+
25
+ FormControlHelperText.displayName = 'FormControlHelperText';
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { Text } from 'react-native';
3
+ import { useFormControlContext } from './form-control';
4
+ import type { FormControlLabelTextProps } from './types';
5
+ import { formControlLabelTextStyle } from './styles';
6
+
7
+ export const FormControlLabelText = React.forwardRef<
8
+ React.ElementRef<typeof Text>,
9
+ FormControlLabelTextProps
10
+ >(({ className, ...props }, ref) => {
11
+ const ctx = useFormControlContext();
12
+
13
+ return (
14
+ <Text
15
+ ref={ref}
16
+ className={formControlLabelTextStyle({
17
+ size: ctx?.size,
18
+ class: className,
19
+ })}
20
+ {...props}
21
+ />
22
+ );
23
+ });
24
+
25
+ FormControlLabelText.displayName = 'FormControlLabelText';
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import { View, Text } from 'react-native';
3
+ import { useFormControlContext } from './form-control';
4
+ import type { FormControlLabelProps } from './types';
5
+ import {
6
+ formControlLabelStyle,
7
+ formControlRequiredIndicatorStyle,
8
+ } from './styles';
9
+
10
+ export const FormControlLabel = React.forwardRef<
11
+ React.ElementRef<typeof View>,
12
+ FormControlLabelProps
13
+ >(({ className, children, ...props }, ref) => {
14
+ const ctx = useFormControlContext();
15
+
16
+ return (
17
+ <View
18
+ ref={ref}
19
+ className={formControlLabelStyle({ class: className })}
20
+ {...props}
21
+ >
22
+ {children}
23
+ {ctx?.isRequired && (
24
+ <Text
25
+ className={formControlRequiredIndicatorStyle({
26
+ size: ctx.size,
27
+ })}
28
+ >
29
+ *
30
+ </Text>
31
+ )}
32
+ </View>
33
+ );
34
+ });
35
+
36
+ FormControlLabel.displayName = 'FormControlLabel';
@@ -0,0 +1,46 @@
1
+ import React, { createContext, useContext } from 'react';
2
+ import { View } from 'react-native';
3
+ import type { FormControlProps, FormControlContextValue } from './types';
4
+ import { formControlStyle } from './styles';
5
+
6
+ export const FormControlContext =
7
+ createContext<FormControlContextValue | null>(null);
8
+
9
+ export function useFormControlContext(): FormControlContextValue | null {
10
+ return useContext(FormControlContext);
11
+ }
12
+
13
+ export const FormControl = React.forwardRef<
14
+ React.ElementRef<typeof View>,
15
+ FormControlProps
16
+ >(
17
+ (
18
+ {
19
+ className,
20
+ isDisabled = false,
21
+ isInvalid = false,
22
+ isRequired = false,
23
+ isReadOnly = false,
24
+ size = 'md',
25
+ children,
26
+ ...props
27
+ },
28
+ ref,
29
+ ) => {
30
+ return (
31
+ <FormControlContext.Provider
32
+ value={{ isDisabled, isInvalid, isRequired, isReadOnly, size }}
33
+ >
34
+ <View
35
+ ref={ref}
36
+ className={formControlStyle({ size, class: className })}
37
+ {...props}
38
+ >
39
+ {children}
40
+ </View>
41
+ </FormControlContext.Provider>
42
+ );
43
+ },
44
+ );
45
+
46
+ FormControl.displayName = 'FormControl';
@@ -0,0 +1,20 @@
1
+ export {
2
+ FormControl,
3
+ FormControlContext,
4
+ useFormControlContext,
5
+ } from './form-control';
6
+ export { FormControlLabel } from './form-control-label';
7
+ export { FormControlLabelText } from './form-control-label-text';
8
+ export { FormControlHelperText } from './form-control-helper-text';
9
+ export { FormControlErrorMessage } from './form-control-error-message';
10
+ export { FormControlErrorIcon } from './form-control-error-icon';
11
+
12
+ export type {
13
+ FormControlProps,
14
+ FormControlContextValue,
15
+ FormControlLabelProps,
16
+ FormControlLabelTextProps,
17
+ FormControlHelperTextProps,
18
+ FormControlErrorMessageProps,
19
+ FormControlErrorIconProps,
20
+ } from './types';
@@ -0,0 +1,105 @@
1
+ import { tv } from 'tailwind-variants';
2
+
3
+ export const formControlStyle = tv({
4
+ base: 'w-full',
5
+ variants: {
6
+ size: {
7
+ xs: 'gap-0.5',
8
+ sm: 'gap-1',
9
+ md: 'gap-1',
10
+ lg: 'gap-1.5',
11
+ xl: 'gap-2',
12
+ },
13
+ },
14
+ defaultVariants: {
15
+ size: 'md',
16
+ },
17
+ });
18
+
19
+ export const formControlLabelStyle = tv({
20
+ base: 'flex-row items-center',
21
+ });
22
+
23
+ export const formControlLabelTextStyle = tv({
24
+ base: 'text-typography-700 font-medium',
25
+ variants: {
26
+ size: {
27
+ xs: 'text-xs',
28
+ sm: 'text-sm',
29
+ md: 'text-sm',
30
+ lg: 'text-base',
31
+ xl: 'text-lg',
32
+ },
33
+ },
34
+ defaultVariants: {
35
+ size: 'md',
36
+ },
37
+ });
38
+
39
+ export const formControlHelperTextStyle = tv({
40
+ base: 'text-typography-500',
41
+ variants: {
42
+ size: {
43
+ xs: 'text-2xs',
44
+ sm: 'text-xs',
45
+ md: 'text-xs',
46
+ lg: 'text-sm',
47
+ xl: 'text-base',
48
+ },
49
+ },
50
+ defaultVariants: {
51
+ size: 'md',
52
+ },
53
+ });
54
+
55
+ export const formControlErrorMessageStyle = tv({
56
+ base: 'flex-row items-center gap-1',
57
+ });
58
+
59
+ export const formControlErrorMessageTextStyle = tv({
60
+ base: 'text-error-600',
61
+ variants: {
62
+ size: {
63
+ xs: 'text-2xs',
64
+ sm: 'text-xs',
65
+ md: 'text-xs',
66
+ lg: 'text-sm',
67
+ xl: 'text-base',
68
+ },
69
+ },
70
+ defaultVariants: {
71
+ size: 'md',
72
+ },
73
+ });
74
+
75
+ export const formControlErrorIconStyle = tv({
76
+ base: 'text-error-600',
77
+ variants: {
78
+ size: {
79
+ xs: 'h-3 w-3',
80
+ sm: 'h-3.5 w-3.5',
81
+ md: 'h-4 w-4',
82
+ lg: 'h-4 w-4',
83
+ xl: 'h-5 w-5',
84
+ },
85
+ },
86
+ defaultVariants: {
87
+ size: 'md',
88
+ },
89
+ });
90
+
91
+ export const formControlRequiredIndicatorStyle = tv({
92
+ base: 'text-error-500 font-medium ml-0.5',
93
+ variants: {
94
+ size: {
95
+ xs: 'text-xs',
96
+ sm: 'text-sm',
97
+ md: 'text-sm',
98
+ lg: 'text-base',
99
+ xl: 'text-lg',
100
+ },
101
+ },
102
+ defaultVariants: {
103
+ size: 'md',
104
+ },
105
+ });