@masumdev/rn-ui 0.1.6 → 0.2.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 (316) hide show
  1. package/README.md +47 -1752
  2. package/lib/commonjs/components/Accordion.js +28 -13
  3. package/lib/commonjs/components/Accordion.js.map +1 -1
  4. package/lib/commonjs/components/Alert.js +229 -73
  5. package/lib/commonjs/components/Alert.js.map +1 -1
  6. package/lib/commonjs/components/AlertDialog.js +143 -87
  7. package/lib/commonjs/components/AlertDialog.js.map +1 -1
  8. package/lib/commonjs/components/AspectRatio.js.map +1 -1
  9. package/lib/commonjs/components/Avatar.js +31 -28
  10. package/lib/commonjs/components/Avatar.js.map +1 -1
  11. package/lib/commonjs/components/Badge.js +25 -9
  12. package/lib/commonjs/components/Badge.js.map +1 -1
  13. package/lib/commonjs/components/BottomSheet.js +63 -8
  14. package/lib/commonjs/components/BottomSheet.js.map +1 -1
  15. package/lib/commonjs/components/Breadcrumb.js +31 -9
  16. package/lib/commonjs/components/Breadcrumb.js.map +1 -1
  17. package/lib/commonjs/components/Button.js +22 -6
  18. package/lib/commonjs/components/Button.js.map +1 -1
  19. package/lib/commonjs/components/ButtonGroup.js +2 -4
  20. package/lib/commonjs/components/ButtonGroup.js.map +1 -1
  21. package/lib/commonjs/components/Calendar.js +113 -31
  22. package/lib/commonjs/components/Calendar.js.map +1 -1
  23. package/lib/commonjs/components/Card.js +8 -3
  24. package/lib/commonjs/components/Card.js.map +1 -1
  25. package/lib/commonjs/components/Carousel.js +67 -21
  26. package/lib/commonjs/components/Carousel.js.map +1 -1
  27. package/lib/commonjs/components/Checkbox.js +12 -7
  28. package/lib/commonjs/components/Checkbox.js.map +1 -1
  29. package/lib/commonjs/components/Collapsible.js +47 -36
  30. package/lib/commonjs/components/Collapsible.js.map +1 -1
  31. package/lib/commonjs/components/Combobox.js +110 -48
  32. package/lib/commonjs/components/Combobox.js.map +1 -1
  33. package/lib/commonjs/components/Command.js +121 -77
  34. package/lib/commonjs/components/Command.js.map +1 -1
  35. package/lib/commonjs/components/DropdownMenu.js +78 -25
  36. package/lib/commonjs/components/DropdownMenu.js.map +1 -1
  37. package/lib/commonjs/components/Empty.js +24 -10
  38. package/lib/commonjs/components/Empty.js.map +1 -1
  39. package/lib/commonjs/components/FloatingActionButton.js.map +1 -1
  40. package/lib/commonjs/components/FormField.js +63 -13
  41. package/lib/commonjs/components/FormField.js.map +1 -1
  42. package/lib/commonjs/components/IconButton.js +22 -6
  43. package/lib/commonjs/components/IconButton.js.map +1 -1
  44. package/lib/commonjs/components/Input.js +11 -13
  45. package/lib/commonjs/components/Input.js.map +1 -1
  46. package/lib/commonjs/components/InputGroup.js +19 -10
  47. package/lib/commonjs/components/InputGroup.js.map +1 -1
  48. package/lib/commonjs/components/InputOTP.js +46 -15
  49. package/lib/commonjs/components/InputOTP.js.map +1 -1
  50. package/lib/commonjs/components/Popover.js +90 -23
  51. package/lib/commonjs/components/Popover.js.map +1 -1
  52. package/lib/commonjs/components/Progress.js +108 -7
  53. package/lib/commonjs/components/Progress.js.map +1 -1
  54. package/lib/commonjs/components/RadioGroup.js +109 -51
  55. package/lib/commonjs/components/RadioGroup.js.map +1 -1
  56. package/lib/commonjs/components/Rating.js +109 -95
  57. package/lib/commonjs/components/Rating.js.map +1 -1
  58. package/lib/commonjs/components/Select.js +109 -43
  59. package/lib/commonjs/components/Select.js.map +1 -1
  60. package/lib/commonjs/components/Sheet.js +217 -29
  61. package/lib/commonjs/components/Sheet.js.map +1 -1
  62. package/lib/commonjs/components/Stepper.js +119 -24
  63. package/lib/commonjs/components/Stepper.js.map +1 -1
  64. package/lib/commonjs/components/Switch.js +21 -11
  65. package/lib/commonjs/components/Switch.js.map +1 -1
  66. package/lib/commonjs/components/Tabs.js +159 -28
  67. package/lib/commonjs/components/Tabs.js.map +1 -1
  68. package/lib/commonjs/components/Timeline.js +35 -12
  69. package/lib/commonjs/components/Timeline.js.map +1 -1
  70. package/lib/commonjs/components/Toast.js +163 -38
  71. package/lib/commonjs/components/Toast.js.map +1 -1
  72. package/lib/commonjs/components/index.js +19 -0
  73. package/lib/commonjs/components/index.js.map +1 -1
  74. package/lib/commonjs/components/types.js +53 -0
  75. package/lib/commonjs/components/types.js.map +1 -1
  76. package/lib/commonjs/theme/tokens.js +7 -7
  77. package/lib/commonjs/theme/tokens.js.map +1 -1
  78. package/lib/commonjs/utils/haptics.js +42 -0
  79. package/lib/commonjs/utils/haptics.js.map +1 -0
  80. package/lib/commonjs/utils/index.js +7 -0
  81. package/lib/commonjs/utils/index.js.map +1 -1
  82. package/lib/module/components/Accordion.js +28 -13
  83. package/lib/module/components/Accordion.js.map +1 -1
  84. package/lib/module/components/Alert.js +229 -73
  85. package/lib/module/components/Alert.js.map +1 -1
  86. package/lib/module/components/AlertDialog.js +144 -88
  87. package/lib/module/components/AlertDialog.js.map +1 -1
  88. package/lib/module/components/AspectRatio.js.map +1 -1
  89. package/lib/module/components/Avatar.js +31 -28
  90. package/lib/module/components/Avatar.js.map +1 -1
  91. package/lib/module/components/Badge.js +25 -9
  92. package/lib/module/components/Badge.js.map +1 -1
  93. package/lib/module/components/BottomSheet.js +64 -4
  94. package/lib/module/components/BottomSheet.js.map +1 -1
  95. package/lib/module/components/Breadcrumb.js +31 -9
  96. package/lib/module/components/Breadcrumb.js.map +1 -1
  97. package/lib/module/components/Button.js +22 -6
  98. package/lib/module/components/Button.js.map +1 -1
  99. package/lib/module/components/ButtonGroup.js +3 -5
  100. package/lib/module/components/ButtonGroup.js.map +1 -1
  101. package/lib/module/components/Calendar.js +114 -32
  102. package/lib/module/components/Calendar.js.map +1 -1
  103. package/lib/module/components/Card.js +8 -3
  104. package/lib/module/components/Card.js.map +1 -1
  105. package/lib/module/components/Carousel.js +67 -21
  106. package/lib/module/components/Carousel.js.map +1 -1
  107. package/lib/module/components/Checkbox.js +12 -7
  108. package/lib/module/components/Checkbox.js.map +1 -1
  109. package/lib/module/components/Collapsible.js +49 -38
  110. package/lib/module/components/Collapsible.js.map +1 -1
  111. package/lib/module/components/Combobox.js +110 -48
  112. package/lib/module/components/Combobox.js.map +1 -1
  113. package/lib/module/components/Command.js +121 -77
  114. package/lib/module/components/Command.js.map +1 -1
  115. package/lib/module/components/DropdownMenu.js +79 -26
  116. package/lib/module/components/DropdownMenu.js.map +1 -1
  117. package/lib/module/components/Empty.js +24 -10
  118. package/lib/module/components/Empty.js.map +1 -1
  119. package/lib/module/components/FloatingActionButton.js.map +1 -1
  120. package/lib/module/components/FormField.js +63 -14
  121. package/lib/module/components/FormField.js.map +1 -1
  122. package/lib/module/components/IconButton.js +22 -6
  123. package/lib/module/components/IconButton.js.map +1 -1
  124. package/lib/module/components/Input.js +12 -14
  125. package/lib/module/components/Input.js.map +1 -1
  126. package/lib/module/components/InputGroup.js +19 -10
  127. package/lib/module/components/InputGroup.js.map +1 -1
  128. package/lib/module/components/InputOTP.js +46 -15
  129. package/lib/module/components/InputOTP.js.map +1 -1
  130. package/lib/module/components/Popover.js +90 -24
  131. package/lib/module/components/Popover.js.map +1 -1
  132. package/lib/module/components/Progress.js +109 -9
  133. package/lib/module/components/Progress.js.map +1 -1
  134. package/lib/module/components/RadioGroup.js +108 -51
  135. package/lib/module/components/RadioGroup.js.map +1 -1
  136. package/lib/module/components/Rating.js +109 -95
  137. package/lib/module/components/Rating.js.map +1 -1
  138. package/lib/module/components/Select.js +111 -45
  139. package/lib/module/components/Select.js.map +1 -1
  140. package/lib/module/components/Sheet.js +216 -24
  141. package/lib/module/components/Sheet.js.map +1 -1
  142. package/lib/module/components/Stepper.js +120 -25
  143. package/lib/module/components/Stepper.js.map +1 -1
  144. package/lib/module/components/Switch.js +21 -11
  145. package/lib/module/components/Switch.js.map +1 -1
  146. package/lib/module/components/Tabs.js +158 -29
  147. package/lib/module/components/Tabs.js.map +1 -1
  148. package/lib/module/components/Timeline.js +35 -12
  149. package/lib/module/components/Timeline.js.map +1 -1
  150. package/lib/module/components/Toast.js +164 -38
  151. package/lib/module/components/Toast.js.map +1 -1
  152. package/lib/module/components/index.js +3 -2
  153. package/lib/module/components/index.js.map +1 -1
  154. package/lib/module/components/types.js +53 -0
  155. package/lib/module/components/types.js.map +1 -1
  156. package/lib/module/theme/tokens.js +7 -7
  157. package/lib/module/theme/tokens.js.map +1 -1
  158. package/lib/module/utils/haptics.js +38 -0
  159. package/lib/module/utils/haptics.js.map +1 -0
  160. package/lib/module/utils/index.js +1 -0
  161. package/lib/module/utils/index.js.map +1 -1
  162. package/lib/typescript/commonjs/components/Accordion.d.ts +6 -3
  163. package/lib/typescript/commonjs/components/Accordion.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/components/Alert.d.ts +4 -4
  165. package/lib/typescript/commonjs/components/Alert.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/components/AlertDialog.d.ts +5 -4
  167. package/lib/typescript/commonjs/components/AlertDialog.d.ts.map +1 -1
  168. package/lib/typescript/commonjs/components/AspectRatio.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/components/Avatar.d.ts +9 -4
  170. package/lib/typescript/commonjs/components/Avatar.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/components/Badge.d.ts +5 -8
  172. package/lib/typescript/commonjs/components/Badge.d.ts.map +1 -1
  173. package/lib/typescript/commonjs/components/BottomSheet.d.ts +13 -4
  174. package/lib/typescript/commonjs/components/BottomSheet.d.ts.map +1 -1
  175. package/lib/typescript/commonjs/components/Breadcrumb.d.ts +6 -5
  176. package/lib/typescript/commonjs/components/Breadcrumb.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/components/Button.d.ts +6 -12
  178. package/lib/typescript/commonjs/components/Button.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/components/ButtonGroup.d.ts.map +1 -1
  180. package/lib/typescript/commonjs/components/Calendar.d.ts +9 -1
  181. package/lib/typescript/commonjs/components/Calendar.d.ts.map +1 -1
  182. package/lib/typescript/commonjs/components/Card.d.ts +3 -2
  183. package/lib/typescript/commonjs/components/Card.d.ts.map +1 -1
  184. package/lib/typescript/commonjs/components/Carousel.d.ts +4 -1
  185. package/lib/typescript/commonjs/components/Carousel.d.ts.map +1 -1
  186. package/lib/typescript/commonjs/components/Checkbox.d.ts +3 -3
  187. package/lib/typescript/commonjs/components/Checkbox.d.ts.map +1 -1
  188. package/lib/typescript/commonjs/components/Collapsible.d.ts.map +1 -1
  189. package/lib/typescript/commonjs/components/Combobox.d.ts +11 -6
  190. package/lib/typescript/commonjs/components/Combobox.d.ts.map +1 -1
  191. package/lib/typescript/commonjs/components/Command.d.ts +3 -0
  192. package/lib/typescript/commonjs/components/Command.d.ts.map +1 -1
  193. package/lib/typescript/commonjs/components/DropdownMenu.d.ts +4 -2
  194. package/lib/typescript/commonjs/components/DropdownMenu.d.ts.map +1 -1
  195. package/lib/typescript/commonjs/components/Empty.d.ts +7 -4
  196. package/lib/typescript/commonjs/components/Empty.d.ts.map +1 -1
  197. package/lib/typescript/commonjs/components/FloatingActionButton.d.ts +2 -5
  198. package/lib/typescript/commonjs/components/FloatingActionButton.d.ts.map +1 -1
  199. package/lib/typescript/commonjs/components/FormField.d.ts +12 -4
  200. package/lib/typescript/commonjs/components/FormField.d.ts.map +1 -1
  201. package/lib/typescript/commonjs/components/IconButton.d.ts +4 -7
  202. package/lib/typescript/commonjs/components/IconButton.d.ts.map +1 -1
  203. package/lib/typescript/commonjs/components/Input.d.ts +2 -1
  204. package/lib/typescript/commonjs/components/Input.d.ts.map +1 -1
  205. package/lib/typescript/commonjs/components/InputGroup.d.ts +3 -2
  206. package/lib/typescript/commonjs/components/InputGroup.d.ts.map +1 -1
  207. package/lib/typescript/commonjs/components/InputOTP.d.ts +9 -4
  208. package/lib/typescript/commonjs/components/InputOTP.d.ts.map +1 -1
  209. package/lib/typescript/commonjs/components/Popover.d.ts +1 -1
  210. package/lib/typescript/commonjs/components/Popover.d.ts.map +1 -1
  211. package/lib/typescript/commonjs/components/Progress.d.ts +15 -2
  212. package/lib/typescript/commonjs/components/Progress.d.ts.map +1 -1
  213. package/lib/typescript/commonjs/components/RadioGroup.d.ts +3 -2
  214. package/lib/typescript/commonjs/components/RadioGroup.d.ts.map +1 -1
  215. package/lib/typescript/commonjs/components/Rating.d.ts +3 -23
  216. package/lib/typescript/commonjs/components/Rating.d.ts.map +1 -1
  217. package/lib/typescript/commonjs/components/Select.d.ts +5 -4
  218. package/lib/typescript/commonjs/components/Select.d.ts.map +1 -1
  219. package/lib/typescript/commonjs/components/Sheet.d.ts +25 -6
  220. package/lib/typescript/commonjs/components/Sheet.d.ts.map +1 -1
  221. package/lib/typescript/commonjs/components/Stepper.d.ts +5 -3
  222. package/lib/typescript/commonjs/components/Stepper.d.ts.map +1 -1
  223. package/lib/typescript/commonjs/components/Switch.d.ts +3 -3
  224. package/lib/typescript/commonjs/components/Switch.d.ts.map +1 -1
  225. package/lib/typescript/commonjs/components/Tabs.d.ts +21 -4
  226. package/lib/typescript/commonjs/components/Tabs.d.ts.map +1 -1
  227. package/lib/typescript/commonjs/components/Timeline.d.ts +9 -3
  228. package/lib/typescript/commonjs/components/Timeline.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/components/Toast.d.ts +3 -0
  230. package/lib/typescript/commonjs/components/Toast.d.ts.map +1 -1
  231. package/lib/typescript/commonjs/components/index.d.ts +7 -6
  232. package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
  233. package/lib/typescript/commonjs/components/types.d.ts +110 -0
  234. package/lib/typescript/commonjs/components/types.d.ts.map +1 -1
  235. package/lib/typescript/commonjs/utils/haptics.d.ts +6 -0
  236. package/lib/typescript/commonjs/utils/haptics.d.ts.map +1 -0
  237. package/lib/typescript/commonjs/utils/index.d.ts +1 -0
  238. package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
  239. package/lib/typescript/module/components/Accordion.d.ts +6 -3
  240. package/lib/typescript/module/components/Accordion.d.ts.map +1 -1
  241. package/lib/typescript/module/components/Alert.d.ts +4 -4
  242. package/lib/typescript/module/components/Alert.d.ts.map +1 -1
  243. package/lib/typescript/module/components/AlertDialog.d.ts +5 -4
  244. package/lib/typescript/module/components/AlertDialog.d.ts.map +1 -1
  245. package/lib/typescript/module/components/AspectRatio.d.ts.map +1 -1
  246. package/lib/typescript/module/components/Avatar.d.ts +9 -4
  247. package/lib/typescript/module/components/Avatar.d.ts.map +1 -1
  248. package/lib/typescript/module/components/Badge.d.ts +5 -8
  249. package/lib/typescript/module/components/Badge.d.ts.map +1 -1
  250. package/lib/typescript/module/components/BottomSheet.d.ts +13 -4
  251. package/lib/typescript/module/components/BottomSheet.d.ts.map +1 -1
  252. package/lib/typescript/module/components/Breadcrumb.d.ts +6 -5
  253. package/lib/typescript/module/components/Breadcrumb.d.ts.map +1 -1
  254. package/lib/typescript/module/components/Button.d.ts +6 -12
  255. package/lib/typescript/module/components/Button.d.ts.map +1 -1
  256. package/lib/typescript/module/components/ButtonGroup.d.ts.map +1 -1
  257. package/lib/typescript/module/components/Calendar.d.ts +9 -1
  258. package/lib/typescript/module/components/Calendar.d.ts.map +1 -1
  259. package/lib/typescript/module/components/Card.d.ts +3 -2
  260. package/lib/typescript/module/components/Card.d.ts.map +1 -1
  261. package/lib/typescript/module/components/Carousel.d.ts +4 -1
  262. package/lib/typescript/module/components/Carousel.d.ts.map +1 -1
  263. package/lib/typescript/module/components/Checkbox.d.ts +3 -3
  264. package/lib/typescript/module/components/Checkbox.d.ts.map +1 -1
  265. package/lib/typescript/module/components/Collapsible.d.ts.map +1 -1
  266. package/lib/typescript/module/components/Combobox.d.ts +11 -6
  267. package/lib/typescript/module/components/Combobox.d.ts.map +1 -1
  268. package/lib/typescript/module/components/Command.d.ts +3 -0
  269. package/lib/typescript/module/components/Command.d.ts.map +1 -1
  270. package/lib/typescript/module/components/DropdownMenu.d.ts +4 -2
  271. package/lib/typescript/module/components/DropdownMenu.d.ts.map +1 -1
  272. package/lib/typescript/module/components/Empty.d.ts +7 -4
  273. package/lib/typescript/module/components/Empty.d.ts.map +1 -1
  274. package/lib/typescript/module/components/FloatingActionButton.d.ts +2 -5
  275. package/lib/typescript/module/components/FloatingActionButton.d.ts.map +1 -1
  276. package/lib/typescript/module/components/FormField.d.ts +12 -4
  277. package/lib/typescript/module/components/FormField.d.ts.map +1 -1
  278. package/lib/typescript/module/components/IconButton.d.ts +4 -7
  279. package/lib/typescript/module/components/IconButton.d.ts.map +1 -1
  280. package/lib/typescript/module/components/Input.d.ts +2 -1
  281. package/lib/typescript/module/components/Input.d.ts.map +1 -1
  282. package/lib/typescript/module/components/InputGroup.d.ts +3 -2
  283. package/lib/typescript/module/components/InputGroup.d.ts.map +1 -1
  284. package/lib/typescript/module/components/InputOTP.d.ts +9 -4
  285. package/lib/typescript/module/components/InputOTP.d.ts.map +1 -1
  286. package/lib/typescript/module/components/Popover.d.ts +1 -1
  287. package/lib/typescript/module/components/Popover.d.ts.map +1 -1
  288. package/lib/typescript/module/components/Progress.d.ts +15 -2
  289. package/lib/typescript/module/components/Progress.d.ts.map +1 -1
  290. package/lib/typescript/module/components/RadioGroup.d.ts +3 -2
  291. package/lib/typescript/module/components/RadioGroup.d.ts.map +1 -1
  292. package/lib/typescript/module/components/Rating.d.ts +3 -23
  293. package/lib/typescript/module/components/Rating.d.ts.map +1 -1
  294. package/lib/typescript/module/components/Select.d.ts +5 -4
  295. package/lib/typescript/module/components/Select.d.ts.map +1 -1
  296. package/lib/typescript/module/components/Sheet.d.ts +25 -6
  297. package/lib/typescript/module/components/Sheet.d.ts.map +1 -1
  298. package/lib/typescript/module/components/Stepper.d.ts +5 -3
  299. package/lib/typescript/module/components/Stepper.d.ts.map +1 -1
  300. package/lib/typescript/module/components/Switch.d.ts +3 -3
  301. package/lib/typescript/module/components/Switch.d.ts.map +1 -1
  302. package/lib/typescript/module/components/Tabs.d.ts +21 -4
  303. package/lib/typescript/module/components/Tabs.d.ts.map +1 -1
  304. package/lib/typescript/module/components/Timeline.d.ts +9 -3
  305. package/lib/typescript/module/components/Timeline.d.ts.map +1 -1
  306. package/lib/typescript/module/components/Toast.d.ts +3 -0
  307. package/lib/typescript/module/components/Toast.d.ts.map +1 -1
  308. package/lib/typescript/module/components/index.d.ts +7 -6
  309. package/lib/typescript/module/components/index.d.ts.map +1 -1
  310. package/lib/typescript/module/components/types.d.ts +110 -0
  311. package/lib/typescript/module/components/types.d.ts.map +1 -1
  312. package/lib/typescript/module/utils/haptics.d.ts +6 -0
  313. package/lib/typescript/module/utils/haptics.d.ts.map +1 -0
  314. package/lib/typescript/module/utils/index.d.ts +1 -0
  315. package/lib/typescript/module/utils/index.d.ts.map +1 -1
  316. package/package.json +10 -1
@@ -1,22 +1,75 @@
1
1
  "use strict";
2
2
 
3
3
  import React from "react";
4
- import { View } from "react-native";
4
+ import { Pressable, View } from "react-native";
5
5
  import { useTheme } from "../theme/index.js";
6
- import { Button } from "./Button.js";
6
+ import { withAlpha } from "../utils/index.js";
7
+ import { triggerHaptic } from "../utils/haptics.js";
7
8
  import { Text } from "./Text.js";
8
9
  import { renderIcon } from "./types.js";
9
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ const stepperHeights = {
12
+ sm: 36,
13
+ md: 44,
14
+ lg: 52
15
+ };
10
16
  function clampStepper(value, min, max) {
11
17
  return Math.min(max, Math.max(min, value));
12
18
  }
19
+ function MinusIcon({
20
+ color,
21
+ size
22
+ }) {
23
+ return /*#__PURE__*/_jsx(View, {
24
+ style: {
25
+ width: size,
26
+ height: 2,
27
+ backgroundColor: color,
28
+ borderRadius: 1
29
+ }
30
+ });
31
+ }
32
+ function PlusIcon({
33
+ color,
34
+ size
35
+ }) {
36
+ return /*#__PURE__*/_jsxs(View, {
37
+ style: {
38
+ width: size,
39
+ height: size,
40
+ alignItems: "center",
41
+ justifyContent: "center"
42
+ },
43
+ children: [/*#__PURE__*/_jsx(View, {
44
+ style: {
45
+ position: "absolute",
46
+ width: size,
47
+ height: 2,
48
+ backgroundColor: color,
49
+ borderRadius: 1
50
+ }
51
+ }), /*#__PURE__*/_jsx(View, {
52
+ style: {
53
+ position: "absolute",
54
+ width: 2,
55
+ height: size,
56
+ backgroundColor: color,
57
+ borderRadius: 1
58
+ }
59
+ })]
60
+ });
61
+ }
13
62
  export function Stepper({
14
63
  value,
15
64
  defaultValue = 0,
16
65
  min = 0,
17
66
  max = 999,
18
67
  step = 1,
68
+ variant = "input",
69
+ size = "md",
19
70
  disabled = false,
71
+ glass = false,
72
+ haptic = true,
20
73
  onValueChange,
21
74
  decrementIcon,
22
75
  incrementIcon,
@@ -27,15 +80,30 @@ export function Stepper({
27
80
  colors,
28
81
  components,
29
82
  radii,
30
- spacing
83
+ spacing,
84
+ isDark
31
85
  } = useTheme();
32
86
  const [internalValue, setInternalValue] = React.useState(defaultValue);
33
87
  const currentValue = clampStepper(value ?? internalValue, min, max);
34
88
  const setNextValue = nextValue => {
89
+ if (disabled) return;
35
90
  const next = clampStepper(nextValue, min, max);
91
+ if (haptic) triggerHaptic("selection");
36
92
  if (value === undefined) setInternalValue(next);
37
93
  onValueChange?.(next);
38
94
  };
95
+ const containerHeight = stepperHeights[size];
96
+ const padding = 4;
97
+ const buttonSize = containerHeight - padding * 2;
98
+ const iconSize = size === "sm" ? 12 : size === "md" ? 14 : 16;
99
+ const glassBg = isDark ? "rgba(15, 27, 45, 0.70)" : "rgba(255, 255, 255, 0.85)";
100
+ const containerBg = disabled ? withAlpha(colors.input, 0.55) : glass ? glassBg : variant === "soft" ? withAlpha(colors.primary, 0.08) : colors.input;
101
+ const borderColor = glass ? isDark ? "rgba(248, 250, 252, 0.20)" : "rgba(15, 23, 42, 0.14)" : colors.border;
102
+
103
+ // Concentric inner radius (Outer 16px - 4px padding = 12px inner)
104
+ const innerRadius = radii.md;
105
+ const canDecrement = !disabled && currentValue > min;
106
+ const canIncrement = !disabled && currentValue < max;
39
107
  return /*#__PURE__*/_jsxs(View, {
40
108
  accessibilityRole: "adjustable",
41
109
  accessibilityValue: {
@@ -44,46 +112,73 @@ export function Stepper({
44
112
  now: currentValue
45
113
  },
46
114
  style: [{
47
- minHeight: 44,
115
+ height: containerHeight,
116
+ minHeight: containerHeight,
48
117
  flexDirection: "row",
49
118
  alignItems: "center",
50
119
  borderWidth: components.borderWidth.strong,
51
- borderColor: colors.border,
120
+ borderColor,
52
121
  borderRadius: radii.lg,
53
- backgroundColor: colors.surface,
54
- overflow: "hidden",
55
- opacity: disabled ? 0.5 : 1
122
+ backgroundColor: containerBg,
123
+ padding,
124
+ opacity: disabled ? 0.56 : 1
56
125
  }, style],
57
126
  ...props,
58
- children: [/*#__PURE__*/_jsx(Button, {
59
- size: "sm",
60
- variant: "ghost",
61
- tone: "secondary",
62
- shape: "square",
63
- disabled: disabled || currentValue <= min,
127
+ children: [/*#__PURE__*/_jsx(Pressable, {
128
+ accessibilityRole: "button",
129
+ accessibilityLabel: "Decrement stepper",
130
+ disabled: !canDecrement,
64
131
  onPress: () => setNextValue(currentValue - step),
65
- children: decrementIcon ? renderIcon(decrementIcon, colors.text, 16) : "-"
132
+ style: ({
133
+ pressed
134
+ }) => [{
135
+ width: buttonSize,
136
+ height: buttonSize,
137
+ borderRadius: innerRadius,
138
+ backgroundColor: pressed && canDecrement ? colors.backgroundMuted : canDecrement ? withAlpha(colors.secondary, 0.12) : colors.transparent,
139
+ alignItems: "center",
140
+ justifyContent: "center",
141
+ opacity: canDecrement ? pressed ? 0.8 : 1 : 0.4
142
+ }],
143
+ children: decrementIcon ? renderIcon(decrementIcon, canDecrement ? colors.text : colors.disabledText, iconSize) : /*#__PURE__*/_jsx(MinusIcon, {
144
+ color: canDecrement ? colors.text : colors.disabledText,
145
+ size: iconSize
146
+ })
66
147
  }), /*#__PURE__*/_jsx(View, {
67
148
  style: {
68
- minWidth: 52,
149
+ flex: 1,
69
150
  alignItems: "center",
70
- paddingHorizontal: spacing.sm
151
+ justifyContent: "center",
152
+ paddingHorizontal: spacing.xs
71
153
  },
72
154
  children: /*#__PURE__*/_jsx(Text, {
73
- variant: "label",
155
+ variant: size === "sm" ? "bodySmall" : "label",
156
+ weight: "600",
74
157
  style: {
75
158
  fontVariant: ["tabular-nums"]
76
159
  },
77
160
  children: currentValue
78
161
  })
79
- }), /*#__PURE__*/_jsx(Button, {
80
- size: "sm",
81
- variant: "ghost",
82
- tone: "secondary",
83
- shape: "square",
84
- disabled: disabled || currentValue >= max,
162
+ }), /*#__PURE__*/_jsx(Pressable, {
163
+ accessibilityRole: "button",
164
+ accessibilityLabel: "Increment stepper",
165
+ disabled: !canIncrement,
85
166
  onPress: () => setNextValue(currentValue + step),
86
- children: incrementIcon ? renderIcon(incrementIcon, colors.text, 16) : "+"
167
+ style: ({
168
+ pressed
169
+ }) => [{
170
+ width: buttonSize,
171
+ height: buttonSize,
172
+ borderRadius: innerRadius,
173
+ backgroundColor: pressed && canIncrement ? colors.backgroundMuted : canIncrement ? withAlpha(colors.secondary, 0.12) : colors.transparent,
174
+ alignItems: "center",
175
+ justifyContent: "center",
176
+ opacity: canIncrement ? pressed ? 0.8 : 1 : 0.4
177
+ }],
178
+ children: incrementIcon ? renderIcon(incrementIcon, canIncrement ? colors.text : colors.disabledText, iconSize) : /*#__PURE__*/_jsx(PlusIcon, {
179
+ color: canIncrement ? colors.text : colors.disabledText,
180
+ size: iconSize
181
+ })
87
182
  })]
88
183
  });
89
184
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","useTheme","Button","Text","renderIcon","jsx","_jsx","jsxs","_jsxs","clampStepper","value","min","max","Math","Stepper","defaultValue","step","disabled","onValueChange","decrementIcon","incrementIcon","style","props","colors","components","radii","spacing","internalValue","setInternalValue","useState","currentValue","setNextValue","nextValue","next","undefined","accessibilityRole","accessibilityValue","now","minHeight","flexDirection","alignItems","borderWidth","strong","borderColor","border","borderRadius","lg","backgroundColor","surface","overflow","opacity","children","size","variant","tone","shape","onPress","text","minWidth","paddingHorizontal","sm","fontVariant"],"sourceRoot":"../../../src","sources":["components/Stepper.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Pressable","View","useTheme","withAlpha","triggerHaptic","Text","renderIcon","jsx","_jsx","jsxs","_jsxs","stepperHeights","sm","md","lg","clampStepper","value","min","max","Math","MinusIcon","color","size","style","width","height","backgroundColor","borderRadius","PlusIcon","alignItems","justifyContent","children","position","Stepper","defaultValue","step","variant","disabled","glass","haptic","onValueChange","decrementIcon","incrementIcon","props","colors","components","radii","spacing","isDark","internalValue","setInternalValue","useState","currentValue","setNextValue","nextValue","next","undefined","containerHeight","padding","buttonSize","iconSize","glassBg","containerBg","input","primary","borderColor","border","innerRadius","canDecrement","canIncrement","accessibilityRole","accessibilityValue","now","minHeight","flexDirection","borderWidth","strong","opacity","accessibilityLabel","onPress","pressed","backgroundMuted","secondary","transparent","text","disabledText","flex","paddingHorizontal","xs","weight","fontVariant"],"sourceRoot":"../../../src","sources":["components/Stepper.tsx"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@ import React from "react";
4
4
  import { Pressable } from "react-native";
5
5
  import Animated, { interpolateColor, useAnimatedStyle, useSharedValue, withSpring, withTiming } from "react-native-reanimated";
6
6
  import { useTheme } from "../theme/index.js";
7
+ import { triggerHaptic } from "../utils/haptics.js";
7
8
  import { renderIcon } from "./types.js";
8
9
  import { jsx as _jsx } from "react/jsx-runtime";
9
10
  export function Switch({
@@ -14,6 +15,8 @@ export function Switch({
14
15
  invalid = false,
15
16
  size = "md",
16
17
  tone = "primary",
18
+ glass = false,
19
+ haptic = true,
17
20
  style,
18
21
  trackStyle,
19
22
  thumbStyle,
@@ -32,7 +35,8 @@ export function Switch({
32
35
  const {
33
36
  colors,
34
37
  components,
35
- radii
38
+ radii,
39
+ isDark
36
40
  } = useTheme();
37
41
  const isControlled = value !== undefined;
38
42
  const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
@@ -47,7 +51,6 @@ export function Switch({
47
51
  });
48
52
  }, [checked, progress]);
49
53
  const activeColor = invalid ? colors.danger : colors[tone];
50
- const activeSoftColor = invalid ? colors.dangerSoft : tone === "primary" ? colors.primarySoft : tone === "secondary" ? colors.secondarySoft : tone === "accent" ? colors.accentSoft : tone === "success" ? colors.successSoft : tone === "warning" ? colors.warningSoft : tone === "danger" ? colors.dangerSoft : colors.infoSoft;
51
54
  const thumbIcon = checked ? activeIcon : inactiveIcon;
52
55
  const selectedThumbContent = (checked ? activeThumbContent : inactiveThumbContent) ?? thumbContent;
53
56
  const width = components.switch.width[size];
@@ -57,12 +60,19 @@ export function Switch({
57
60
  const borderWidth = components.borderWidth.focus;
58
61
  const inset = (height - thumbSize) / 2;
59
62
  const travel = width - thumbSize - (inset + borderWidth) * 2;
60
- const thumbColor = disabled ? colors.disabledText : colors.surface;
61
- const inactiveTrackColor = disabled ? colors.disabled : colors.backgroundMuted;
62
- const inactiveBorderColor = invalid ? colors.danger : colors.border;
63
+ const glassBg = isDark ? "rgba(15, 27, 45, 0.60)" : "rgba(255, 255, 255, 0.70)";
64
+ const inactiveTrackColor = disabled ? colors.disabled : glass ? glassBg : isDark ? "rgba(30, 41, 59, 0.90)" : colors.backgroundMuted;
65
+ const activeTrackColor = disabled ? colors.disabled : activeColor;
66
+ const inactiveBorderColor = invalid ? colors.danger : glass ? isDark ? "rgba(248, 250, 252, 0.20)" : "rgba(15, 23, 42, 0.14)" : isDark ? "rgba(148, 163, 184, 0.30)" : colors.border;
67
+ const activeBorderColor = invalid ? colors.danger : activeColor;
68
+
69
+ // Crisp white/light-slate knob for OFF state in both dark & light mode
70
+ const inactiveThumbColor = disabled ? colors.disabledText : isDark ? "#e2e8f0" : "#ffffff";
71
+ const activeThumbColor = disabled ? colors.disabledText : "#ffffff";
63
72
  const handlePress = event => {
64
73
  onPress?.(event);
65
74
  if (disabled) return;
75
+ if (haptic) triggerHaptic("selection");
66
76
  const nextValue = !checked;
67
77
  if (!isControlled) {
68
78
  setUncontrolledValue(nextValue);
@@ -82,8 +92,8 @@ export function Switch({
82
92
  });
83
93
  };
84
94
  const trackAnimatedStyle = useAnimatedStyle(() => ({
85
- backgroundColor: interpolateColor(progress.value, [0, 1], [inactiveTrackColor, activeSoftColor]),
86
- borderColor: interpolateColor(progress.value, [0, 1], [inactiveBorderColor, activeColor])
95
+ backgroundColor: interpolateColor(progress.value, [0, 1], [inactiveTrackColor, activeTrackColor]),
96
+ borderColor: interpolateColor(progress.value, [0, 1], [inactiveBorderColor, activeBorderColor])
87
97
  }));
88
98
  const thumbAnimatedStyle = useAnimatedStyle(() => ({
89
99
  transform: [{
@@ -91,9 +101,9 @@ export function Switch({
91
101
  }, {
92
102
  scale: 1 + pressed.value * 0.06
93
103
  }],
94
- backgroundColor: interpolateColor(progress.value, [0, 1], [thumbColor, activeColor])
104
+ backgroundColor: interpolateColor(progress.value, [0, 1], [inactiveThumbColor, activeThumbColor])
95
105
  }));
96
- const iconColor = checked ? invalid ? colors.onDanger : tone === "primary" ? colors.onPrimary : tone === "secondary" ? colors.onSecondary : tone === "accent" ? colors.onAccent : tone === "success" ? colors.onSuccess : tone === "warning" ? colors.onWarning : tone === "danger" ? colors.onDanger : colors.onInfo : colors.textSubtle;
106
+ const iconColor = checked ? invalid ? colors.danger : activeColor : colors.textSubtle;
97
107
  const thumbContentParams = {
98
108
  checked,
99
109
  disabled,
@@ -116,7 +126,7 @@ export function Switch({
116
126
  style: ({
117
127
  pressed: isPressed
118
128
  }) => [{
119
- opacity: disabled ? 0.56 : isPressed ? 0.9 : 1,
129
+ opacity: disabled ? 0.45 : isPressed ? 0.9 : 1,
120
130
  alignSelf: "flex-start"
121
131
  }, style],
122
132
  ...props,
@@ -137,7 +147,7 @@ export function Switch({
137
147
  alignItems: "center",
138
148
  justifyContent: "center",
139
149
  borderWidth: components.borderWidth.default,
140
- borderColor: checked ? activeColor : colors.borderMuted
150
+ borderColor: checked ? activeColor : "transparent"
141
151
  }, thumbAnimatedStyle, thumbStyle],
142
152
  children: renderThumb ? renderThumb(thumbContentParams) : renderedThumbContent ? renderedThumbContent : thumbIcon ? renderIcon(thumbIcon, iconColor, iconSize) : null
143
153
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","Pressable","Animated","interpolateColor","useAnimatedStyle","useSharedValue","withSpring","withTiming","useTheme","renderIcon","jsx","_jsx","Switch","value","defaultValue","onValueChange","disabled","invalid","size","tone","style","trackStyle","thumbStyle","activeIcon","inactiveIcon","thumbContent","activeThumbContent","inactiveThumbContent","renderThumb","onPress","onPressIn","onPressOut","accessibilityLabel","props","colors","components","radii","isControlled","undefined","uncontrolledValue","setUncontrolledValue","useState","checked","progress","pressed","useEffect","damping","stiffness","mass","activeColor","danger","activeSoftColor","dangerSoft","primarySoft","secondarySoft","accentSoft","successSoft","warningSoft","infoSoft","thumbIcon","selectedThumbContent","width","switch","height","thumbSize","iconSize","borderWidth","focus","inset","travel","thumbColor","disabledText","surface","inactiveTrackColor","backgroundMuted","inactiveBorderColor","border","handlePress","event","nextValue","handlePressIn","duration","handlePressOut","trackAnimatedStyle","backgroundColor","borderColor","thumbAnimatedStyle","transform","translateX","scale","iconColor","onDanger","onPrimary","onSecondary","onAccent","onSuccess","onWarning","onInfo","textSubtle","thumbContentParams","color","renderedThumbContent","accessibilityRole","accessibilityState","isPressed","opacity","alignSelf","children","View","borderRadius","full","padding","justifyContent","alignItems","default","borderMuted"],"sourceRoot":"../../../src","sources":["components/Switch.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Pressable","Animated","interpolateColor","useAnimatedStyle","useSharedValue","withSpring","withTiming","useTheme","triggerHaptic","renderIcon","jsx","_jsx","Switch","value","defaultValue","onValueChange","disabled","invalid","size","tone","glass","haptic","style","trackStyle","thumbStyle","activeIcon","inactiveIcon","thumbContent","activeThumbContent","inactiveThumbContent","renderThumb","onPress","onPressIn","onPressOut","accessibilityLabel","props","colors","components","radii","isDark","isControlled","undefined","uncontrolledValue","setUncontrolledValue","useState","checked","progress","pressed","useEffect","damping","stiffness","mass","activeColor","danger","thumbIcon","selectedThumbContent","width","switch","height","thumbSize","iconSize","borderWidth","focus","inset","travel","glassBg","inactiveTrackColor","backgroundMuted","activeTrackColor","inactiveBorderColor","border","activeBorderColor","inactiveThumbColor","disabledText","activeThumbColor","handlePress","event","nextValue","handlePressIn","duration","handlePressOut","trackAnimatedStyle","backgroundColor","borderColor","thumbAnimatedStyle","transform","translateX","scale","iconColor","textSubtle","thumbContentParams","color","renderedThumbContent","accessibilityRole","accessibilityState","isPressed","opacity","alignSelf","children","View","borderRadius","full","padding","justifyContent","alignItems","default"],"sourceRoot":"../../../src","sources":["components/Switch.tsx"],"mappings":"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","ignoreList":[]}
@@ -2,13 +2,28 @@
2
2
 
3
3
  import React from "react";
4
4
  import { Pressable, View } from "react-native";
5
+ import Animated, { useAnimatedStyle, useSharedValue, withTiming } from "react-native-reanimated";
5
6
  import { useTheme } from "../theme/index.js";
7
+ import { triggerHaptic } from "../utils/haptics.js";
6
8
  import { Text } from "./Text.js";
7
- import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { renderIcon } from "./types.js";
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
11
  const TabsContext = /*#__PURE__*/React.createContext(null);
12
+ export function useTabsContext() {
13
+ const context = React.useContext(TabsContext);
14
+ if (!context) {
15
+ throw new Error("Tabs compound components must be rendered inside <Tabs />");
16
+ }
17
+ return context;
18
+ }
9
19
  export function Tabs({
10
20
  value,
11
21
  defaultValue,
22
+ variant = "segmented",
23
+ size = "md",
24
+ glass = false,
25
+ haptic = true,
26
+ animated = true,
12
27
  onValueChange,
13
28
  style,
14
29
  ...props
@@ -17,15 +32,35 @@ export function Tabs({
17
32
  spacing
18
33
  } = useTheme();
19
34
  const [internalValue, setInternalValue] = React.useState(defaultValue);
35
+ const [tabNodes, setTabNodes] = React.useState({});
20
36
  const currentValue = value ?? internalValue;
37
+ const registerTabNode = React.useCallback((tabValue, layout) => {
38
+ setTabNodes(prev => {
39
+ if (prev[tabValue]?.x === layout.x && prev[tabValue]?.width === layout.width) {
40
+ return prev;
41
+ }
42
+ return {
43
+ ...prev,
44
+ [tabValue]: layout
45
+ };
46
+ });
47
+ }, []);
21
48
  const handleValueChange = React.useCallback(next => {
49
+ if (haptic) triggerHaptic("selection");
22
50
  if (value === undefined) setInternalValue(next);
23
51
  onValueChange?.(next);
24
- }, [onValueChange, value]);
52
+ }, [haptic, onValueChange, value]);
25
53
  const context = React.useMemo(() => ({
26
54
  value: currentValue,
27
- onValueChange: handleValueChange
28
- }), [currentValue, handleValueChange]);
55
+ onValueChange: handleValueChange,
56
+ variant,
57
+ size,
58
+ glass,
59
+ haptic,
60
+ animated,
61
+ registerTabNode,
62
+ tabNodes
63
+ }), [currentValue, handleValueChange, variant, size, glass, haptic, animated, registerTabNode, tabNodes]);
29
64
  return /*#__PURE__*/_jsx(TabsContext.Provider, {
30
65
  value: context,
31
66
  children: /*#__PURE__*/_jsx(View, {
@@ -37,73 +72,165 @@ export function Tabs({
37
72
  })
38
73
  });
39
74
  }
75
+ const listHeights = {
76
+ sm: 36,
77
+ md: 44,
78
+ lg: 52
79
+ };
40
80
  export function TabsList({
41
81
  style,
82
+ children,
42
83
  ...props
43
84
  }) {
44
85
  const {
45
86
  colors,
46
87
  components,
47
88
  radii,
48
- spacing
89
+ spacing,
90
+ isDark
49
91
  } = useTheme();
50
- return /*#__PURE__*/_jsx(View, {
92
+ const {
93
+ value,
94
+ variant,
95
+ size,
96
+ glass,
97
+ animated,
98
+ tabNodes
99
+ } = useTabsContext();
100
+ const activeNode = value ? tabNodes[value] : undefined;
101
+ const indicatorX = useSharedValue(0);
102
+ const indicatorWidth = useSharedValue(0);
103
+ const initialized = useSharedValue(false);
104
+ React.useEffect(() => {
105
+ if (activeNode && activeNode.width > 0) {
106
+ if (!animated || !initialized.value) {
107
+ indicatorX.value = activeNode.x;
108
+ indicatorWidth.value = activeNode.width;
109
+ initialized.value = true;
110
+ } else {
111
+ indicatorX.value = withTiming(activeNode.x, {
112
+ duration: 180
113
+ });
114
+ indicatorWidth.value = withTiming(activeNode.width, {
115
+ duration: 180
116
+ });
117
+ }
118
+ }
119
+ }, [activeNode, animated, indicatorX, indicatorWidth, initialized]);
120
+ const glassBg = isDark ? "rgba(15, 27, 45, 0.70)" : "rgba(255, 255, 255, 0.85)";
121
+ const isUnderline = variant === "underline";
122
+ const isPills = variant === "pills";
123
+ const height = listHeights[size];
124
+ const indicatorStyle = useAnimatedStyle(() => ({
125
+ transform: [{
126
+ translateX: indicatorX.value
127
+ }],
128
+ width: indicatorWidth.value
129
+ }));
130
+ const activeBg = variant === "segmented" || variant === "pills" ? colors.primary : variant === "soft" ? colors.primarySoft : colors.transparent;
131
+ const padding = isUnderline ? 0 : 4;
132
+ // Concentric radius rule: InnerRadius = OuterRadius - Padding (16 - 4 = 12px)
133
+ const innerRadius = isPills ? radii.full : isUnderline ? 0 : radii.md;
134
+ return /*#__PURE__*/_jsxs(View, {
51
135
  style: [{
52
136
  width: "100%",
53
- minHeight: 44,
54
- padding: 3,
55
- borderRadius: radii.lg,
56
- borderWidth: components.borderWidth.strong,
57
- borderColor: colors.border,
58
- backgroundColor: colors.surface,
137
+ minHeight: height,
138
+ height: isUnderline ? undefined : height,
139
+ padding,
140
+ borderRadius: isUnderline ? 0 : radii.lg,
141
+ borderWidth: isUnderline ? 0 : components.borderWidth.strong,
142
+ borderColor: glass ? isDark ? "rgba(248, 250, 252, 0.20)" : "rgba(15, 23, 42, 0.14)" : colors.border,
143
+ borderBottomWidth: isUnderline ? components.borderWidth.strong : undefined,
144
+ borderBottomColor: isUnderline ? colors.border : undefined,
145
+ backgroundColor: isUnderline ? colors.transparent : isPills ? colors.transparent : glass ? glassBg : colors.input,
59
146
  flexDirection: "row",
60
- gap: spacing.xs
147
+ alignItems: "stretch",
148
+ gap: isPills ? spacing.xs : isUnderline ? spacing.md : 4,
149
+ position: "relative"
61
150
  }, style],
62
- ...props
151
+ ...props,
152
+ children: [activeNode && /*#__PURE__*/_jsx(Animated.View, {
153
+ style: [{
154
+ position: "absolute",
155
+ top: isUnderline ? undefined : padding,
156
+ bottom: isUnderline ? 0 : padding,
157
+ height: isUnderline ? 2.5 : undefined,
158
+ borderRadius: innerRadius,
159
+ backgroundColor: isUnderline ? colors.primary : activeBg,
160
+ zIndex: 0
161
+ }, indicatorStyle]
162
+ }), children]
63
163
  });
64
164
  }
65
165
  export function TabsTrigger({
66
166
  value,
167
+ icon,
67
168
  children,
68
169
  style,
69
170
  disabled,
70
171
  ...props
71
172
  }) {
72
- const context = React.useContext(TabsContext);
173
+ const {
174
+ value: selectedValue,
175
+ onValueChange,
176
+ variant,
177
+ size,
178
+ registerTabNode
179
+ } = useTabsContext();
73
180
  const {
74
181
  colors,
75
182
  radii,
76
183
  spacing
77
184
  } = useTheme();
78
- const active = context?.value === value;
79
- return /*#__PURE__*/_jsx(Pressable, {
185
+ const active = selectedValue === value;
186
+ const handleLayout = event => {
187
+ const {
188
+ x,
189
+ width,
190
+ height
191
+ } = event.nativeEvent.layout;
192
+ registerTabNode(value, {
193
+ x,
194
+ width,
195
+ height
196
+ });
197
+ };
198
+ const activeTextColor = variant === "segmented" || variant === "pills" ? colors.onPrimary : colors.primary;
199
+ const isPills = variant === "pills";
200
+ const isUnderline = variant === "underline";
201
+ const triggerRadius = isPills ? radii.full : isUnderline ? 0 : radii.md;
202
+ return /*#__PURE__*/_jsxs(Pressable, {
80
203
  accessibilityRole: "tab",
81
204
  accessibilityState: {
82
205
  selected: active,
83
206
  disabled: Boolean(disabled)
84
207
  },
85
208
  disabled: disabled,
86
- onPress: () => context?.onValueChange?.(value),
209
+ onLayout: handleLayout,
210
+ onPress: () => onValueChange?.(value),
87
211
  style: ({
88
212
  pressed
89
213
  }) => [{
90
214
  flex: 1,
91
- minHeight: 36,
92
- borderRadius: radii.md,
93
- backgroundColor: active ? colors.primary : colors.transparent,
215
+ height: isUnderline ? listHeights[size] : "100%",
216
+ borderRadius: triggerRadius,
94
217
  alignItems: "center",
95
218
  justifyContent: "center",
96
- paddingHorizontal: spacing.md,
97
- opacity: disabled ? 0.5 : pressed ? 0.78 : 1
219
+ flexDirection: "row",
220
+ gap: spacing.xs,
221
+ paddingHorizontal: spacing.sm,
222
+ zIndex: 1,
223
+ opacity: disabled ? 0.5 : pressed ? 0.82 : 1
98
224
  }, style],
99
225
  ...props,
100
- children: typeof children === "string" ? /*#__PURE__*/_jsx(Text, {
101
- variant: "label",
226
+ children: [icon ? renderIcon(icon, active ? activeTextColor : colors.textMuted, size === "sm" ? 14 : 16) : null, typeof children === "string" ? /*#__PURE__*/_jsx(Text, {
227
+ variant: size === "sm" ? "bodySmall" : "label",
228
+ weight: active ? "600" : "400",
102
229
  style: {
103
- color: active ? colors.onPrimary : colors.textMuted
230
+ color: active ? activeTextColor : colors.textMuted
104
231
  },
105
232
  children: children
106
- }) : children
233
+ }) : children]
107
234
  });
108
235
  }
109
236
  export function TabsContent({
@@ -112,8 +239,10 @@ export function TabsContent({
112
239
  style,
113
240
  ...props
114
241
  }) {
115
- const context = React.useContext(TabsContext);
116
- const active = context?.value === value;
242
+ const {
243
+ value: selectedValue
244
+ } = useTabsContext();
245
+ const active = selectedValue === value;
117
246
  if (!active && !forceMount) return null;
118
247
  return /*#__PURE__*/_jsx(View, {
119
248
  style: [{