react-native-system-ui 0.0.7 → 1.0.1

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 (411) hide show
  1. package/README.md +46 -31
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +128 -142
  3. package/dist/cjs/components/action-sheet/tokens.js +16 -27
  4. package/dist/cjs/components/area/Area.js +57 -70
  5. package/dist/cjs/components/area/tokens.js +6 -3
  6. package/dist/cjs/components/avatar/Avatar.js +38 -36
  7. package/dist/cjs/components/badge/Badge.js +68 -73
  8. package/dist/cjs/components/badge/tokens.js +6 -8
  9. package/dist/cjs/components/button/Button.js +135 -176
  10. package/dist/cjs/components/button/ButtonGroup.js +11 -45
  11. package/dist/cjs/components/button/tokens.js +1 -8
  12. package/dist/cjs/components/calendar/Calendar.js +212 -223
  13. package/dist/cjs/components/calendar/tokens.js +3 -3
  14. package/dist/cjs/components/cascader/Cascader.js +257 -267
  15. package/dist/cjs/components/cascader/tokens.js +2 -2
  16. package/dist/cjs/components/cascader/useCascaderExtend.js +25 -29
  17. package/dist/cjs/components/cell/Cell.js +94 -104
  18. package/dist/cjs/components/cell/CellGroup.js +37 -49
  19. package/dist/cjs/components/checkbox/Checkbox.js +140 -132
  20. package/dist/cjs/components/checkbox/CheckboxGroup.js +21 -51
  21. package/dist/cjs/components/checkbox/tokens.js +7 -10
  22. package/dist/cjs/components/circle/Circle.js +87 -74
  23. package/dist/cjs/components/collapse/Collapse.js +88 -104
  24. package/dist/cjs/components/config-provider/ConfigProvider.js +17 -4
  25. package/dist/cjs/components/config-provider/DirectionContext.js +15 -0
  26. package/dist/cjs/components/config-provider/index.js +7 -0
  27. package/dist/cjs/components/config-provider/locale/en-US.js +32 -0
  28. package/dist/cjs/components/config-provider/locale/zh-CN.js +32 -0
  29. package/dist/cjs/components/config-provider/useDirection.js +16 -0
  30. package/dist/cjs/components/count-down/CountDown.js +32 -27
  31. package/dist/cjs/components/datetime-picker/DatetimePicker.js +80 -104
  32. package/dist/cjs/components/datetime-picker/tokens.js +14 -3
  33. package/dist/cjs/components/dialog/Dialog.js +159 -121
  34. package/dist/cjs/components/dialog/imperative.js +24 -43
  35. package/dist/cjs/components/dialog/tokens.js +1 -0
  36. package/dist/cjs/components/divider/Divider.js +57 -62
  37. package/dist/cjs/components/empty/Empty.js +53 -52
  38. package/dist/cjs/components/error-boundary/ErrorBoundary.js +74 -0
  39. package/dist/cjs/components/error-boundary/index.js +19 -0
  40. package/dist/cjs/components/field/Field.js +109 -106
  41. package/dist/cjs/components/flex/Flex.js +32 -32
  42. package/dist/cjs/components/flex/FlexItem.js +27 -27
  43. package/dist/cjs/components/form/Form.js +178 -196
  44. package/dist/cjs/components/form/FormItem.js +87 -109
  45. package/dist/cjs/components/form/FormList.js +57 -45
  46. package/dist/cjs/components/form/tokens.js +6 -3
  47. package/dist/cjs/components/form/utils.js +15 -34
  48. package/dist/cjs/components/grid/Grid.js +44 -43
  49. package/dist/cjs/components/grid/GridItem.js +92 -86
  50. package/dist/cjs/components/image/Image.js +76 -79
  51. package/dist/cjs/components/image/tokens.js +5 -3
  52. package/dist/cjs/components/image-preview/ImagePreview.js +125 -113
  53. package/dist/cjs/components/image-preview/imperative.js +4 -13
  54. package/dist/cjs/components/image-preview/tokens.js +3 -1
  55. package/dist/cjs/components/index.js +13 -0
  56. package/dist/cjs/components/input/Input.js +40 -35
  57. package/dist/cjs/components/loading/Loading.js +32 -33
  58. package/dist/cjs/components/nav-bar/NavBar.js +88 -100
  59. package/dist/cjs/components/nav-bar/tokens.js +4 -10
  60. package/dist/cjs/components/notice-bar/NoticeBar.js +81 -80
  61. package/dist/cjs/components/notice-bar/tokens.js +3 -1
  62. package/dist/cjs/components/notify/Notify.js +89 -84
  63. package/dist/cjs/components/notify/imperative.js +32 -55
  64. package/dist/cjs/components/notify/tokens.js +2 -11
  65. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +277 -283
  66. package/dist/cjs/components/number-keyboard/tokens.js +7 -1
  67. package/dist/cjs/components/overlay/Overlay.js +37 -52
  68. package/dist/cjs/components/overlay/tokens.js +5 -3
  69. package/dist/cjs/components/password-input/PasswordInput.js +114 -95
  70. package/dist/cjs/components/picker/Picker.js +465 -454
  71. package/dist/cjs/components/picker/tokens.js +1 -1
  72. package/dist/cjs/components/popup/Popup.js +269 -299
  73. package/dist/cjs/components/popup/tokens.js +1 -0
  74. package/dist/cjs/components/portal/Portal.js +12 -30
  75. package/dist/cjs/components/portal/PortalHost.js +151 -234
  76. package/dist/cjs/components/progress/Progress.js +103 -101
  77. package/dist/cjs/components/progress/tokens.js +1 -0
  78. package/dist/cjs/components/radio/Radio.js +98 -91
  79. package/dist/cjs/components/radio/RadioGroup.js +13 -45
  80. package/dist/cjs/components/radio/tokens.js +7 -10
  81. package/dist/cjs/components/safe-area-view/SafeAreaView.js +22 -26
  82. package/dist/cjs/components/search/Search.js +65 -57
  83. package/dist/cjs/components/selector/Selector.js +21 -27
  84. package/dist/cjs/components/share-sheet/ShareSheet.js +165 -161
  85. package/dist/cjs/components/share-sheet/tokens.js +3 -1
  86. package/dist/cjs/components/sidebar/Sidebar.js +51 -51
  87. package/dist/cjs/components/sidebar/SidebarContext.js +1 -2
  88. package/dist/cjs/components/sidebar/SidebarItem.js +19 -21
  89. package/dist/cjs/components/sidebar/tokens.js +4 -4
  90. package/dist/cjs/components/skeleton/Skeleton.js +71 -77
  91. package/dist/cjs/components/skeleton/tokens.js +1 -2
  92. package/dist/cjs/components/slider/Slider.js +156 -135
  93. package/dist/cjs/components/space/Space.js +57 -76
  94. package/dist/cjs/components/space/tokens.js +7 -1
  95. package/dist/cjs/components/stepper/Stepper.js +182 -158
  96. package/dist/cjs/components/stepper/tokens.js +1 -0
  97. package/dist/cjs/components/swiper/Swiper.js +256 -255
  98. package/dist/cjs/components/swiper/SwiperPagIndicator.js +26 -27
  99. package/dist/cjs/components/swiper/tokens.js +10 -3
  100. package/dist/cjs/components/switch/Switch.js +23 -25
  101. package/dist/cjs/components/tabbar/Tabbar.js +48 -40
  102. package/dist/cjs/components/tabbar/TabbarContext.js +1 -2
  103. package/dist/cjs/components/tabbar/TabbarItem.js +65 -68
  104. package/dist/cjs/components/tabs/Tabs.js +402 -439
  105. package/dist/cjs/components/tabs/tokens.js +3 -1
  106. package/dist/cjs/components/tag/Tag.js +68 -59
  107. package/dist/cjs/components/toast/Toast.js +91 -90
  108. package/dist/cjs/components/toast/imperative.js +16 -41
  109. package/dist/cjs/components/toast/tokens.js +1 -0
  110. package/dist/cjs/components/typography/Typography.js +25 -25
  111. package/dist/cjs/components/water-mark/WaterMark.js +80 -78
  112. package/dist/cjs/design-system/Text.js +38 -0
  113. package/dist/cjs/design-system/ThemeProvider.js +5 -11
  114. package/dist/cjs/design-system/createComponentTokensHook.js +11 -13
  115. package/dist/cjs/design-system/index.js +7 -0
  116. package/dist/cjs/design-system/mergeTokensOverride.js +1 -4
  117. package/dist/cjs/design-system/presets.js +2 -3
  118. package/dist/cjs/design-system/tokens.js +2 -11
  119. package/dist/cjs/hooks/animation/index.js +25 -0
  120. package/dist/cjs/hooks/animation/useAnimatedTransition.js +72 -0
  121. package/dist/cjs/hooks/animation/useReducedMotion.js +75 -0
  122. package/dist/cjs/hooks/aria/useAriaListBox.js +8 -16
  123. package/dist/cjs/hooks/aria/useAriaOverlay.js +3 -3
  124. package/dist/cjs/hooks/aria/useAriaPress.js +8 -21
  125. package/dist/cjs/hooks/aria/useAriaToggle.js +3 -3
  126. package/dist/cjs/hooks/gesture/useGestureScroll.js +60 -61
  127. package/dist/cjs/hooks/index.js +12 -0
  128. package/dist/cjs/hooks/overlay/OverlayStackStore.js +49 -69
  129. package/dist/cjs/hooks/overlay/useOverlayStack.js +13 -19
  130. package/dist/cjs/hooks/useControllableValue.js +13 -24
  131. package/dist/cjs/hooks/useCountDown.js +30 -38
  132. package/dist/cjs/hooks/useHairline.js +17 -29
  133. package/dist/cjs/hooks/useSafeAreaPadding.js +1 -4
  134. package/dist/cjs/index.js +67 -1
  135. package/dist/cjs/platform/animation.js +10 -2
  136. package/dist/cjs/platform/measure.js +21 -37
  137. package/dist/cjs/utils/color.js +20 -39
  138. package/dist/cjs/utils/compare.js +7 -12
  139. package/dist/cjs/utils/createPlatformShadow.js +28 -39
  140. package/dist/cjs/utils/date.js +20 -50
  141. package/dist/cjs/utils/deepMerge.js +16 -26
  142. package/dist/cjs/utils/hairline.js +75 -71
  143. package/dist/cjs/utils/index.js +22 -0
  144. package/dist/cjs/utils/number.js +21 -29
  145. package/dist/cjs/utils/render.js +21 -0
  146. package/dist/cjs/utils/rtl.js +25 -0
  147. package/dist/cjs/utils/string.js +8 -25
  148. package/dist/cjs/utils/validate.js +2 -4
  149. package/dist/es/components/action-sheet/ActionSheet.js +130 -144
  150. package/dist/es/components/action-sheet/tokens.js +16 -27
  151. package/dist/es/components/area/Area.js +58 -71
  152. package/dist/es/components/area/tokens.js +6 -3
  153. package/dist/es/components/avatar/Avatar.js +38 -36
  154. package/dist/es/components/avatar/index.js +1 -2
  155. package/dist/es/components/badge/Badge.js +70 -75
  156. package/dist/es/components/badge/tokens.js +6 -8
  157. package/dist/es/components/button/Button.js +136 -177
  158. package/dist/es/components/button/ButtonGroup.js +12 -46
  159. package/dist/es/components/button/tokens.js +2 -3
  160. package/dist/es/components/calendar/Calendar.js +214 -225
  161. package/dist/es/components/calendar/tokens.js +3 -3
  162. package/dist/es/components/cascader/Cascader.js +260 -270
  163. package/dist/es/components/cascader/tokens.js +2 -2
  164. package/dist/es/components/cascader/useCascaderExtend.js +25 -29
  165. package/dist/es/components/cell/Cell.js +95 -105
  166. package/dist/es/components/cell/CellGroup.js +37 -48
  167. package/dist/es/components/checkbox/Checkbox.js +141 -133
  168. package/dist/es/components/checkbox/CheckboxGroup.js +22 -52
  169. package/dist/es/components/checkbox/tokens.js +7 -10
  170. package/dist/es/components/circle/Circle.js +87 -73
  171. package/dist/es/components/collapse/Collapse.js +90 -105
  172. package/dist/es/components/config-provider/ConfigProvider.js +11 -4
  173. package/dist/es/components/config-provider/DirectionContext.js +2 -0
  174. package/dist/es/components/config-provider/index.js +1 -0
  175. package/dist/es/components/config-provider/locale/en-US.js +32 -0
  176. package/dist/es/components/config-provider/locale/zh-CN.js +32 -0
  177. package/dist/es/components/config-provider/useDirection.js +3 -0
  178. package/dist/es/components/count-down/CountDown.js +35 -30
  179. package/dist/es/components/datetime-picker/DatetimePicker.js +80 -104
  180. package/dist/es/components/datetime-picker/tokens.js +14 -3
  181. package/dist/es/components/dialog/Dialog.js +160 -121
  182. package/dist/es/components/dialog/imperative.js +24 -43
  183. package/dist/es/components/dialog/tokens.js +1 -0
  184. package/dist/es/components/divider/Divider.js +59 -63
  185. package/dist/es/components/empty/Empty.js +54 -52
  186. package/dist/es/components/error-boundary/ErrorBoundary.js +62 -0
  187. package/dist/es/components/error-boundary/index.js +1 -0
  188. package/dist/es/components/field/Field.js +109 -106
  189. package/dist/es/components/flex/Flex.js +32 -31
  190. package/dist/es/components/flex/FlexItem.js +28 -27
  191. package/dist/es/components/form/Form.js +179 -197
  192. package/dist/es/components/form/FormItem.js +86 -107
  193. package/dist/es/components/form/FormList.js +57 -45
  194. package/dist/es/components/form/tokens.js +6 -3
  195. package/dist/es/components/form/utils.js +15 -34
  196. package/dist/es/components/grid/Grid.js +44 -42
  197. package/dist/es/components/grid/GridItem.js +94 -87
  198. package/dist/es/components/image/Image.js +79 -82
  199. package/dist/es/components/image/tokens.js +5 -3
  200. package/dist/es/components/image-preview/ImagePreview.js +125 -113
  201. package/dist/es/components/image-preview/imperative.js +4 -13
  202. package/dist/es/components/image-preview/tokens.js +3 -1
  203. package/dist/es/components/index.js +3 -1
  204. package/dist/es/components/input/Input.js +41 -36
  205. package/dist/es/components/loading/Loading.js +34 -34
  206. package/dist/es/components/nav-bar/NavBar.js +88 -100
  207. package/dist/es/components/nav-bar/tokens.js +4 -4
  208. package/dist/es/components/notice-bar/NoticeBar.js +81 -79
  209. package/dist/es/components/notice-bar/tokens.js +3 -1
  210. package/dist/es/components/notify/Notify.js +93 -87
  211. package/dist/es/components/notify/imperative.js +33 -56
  212. package/dist/es/components/notify/tokens.js +2 -5
  213. package/dist/es/components/number-keyboard/NumberKeyboard.js +277 -283
  214. package/dist/es/components/number-keyboard/tokens.js +7 -1
  215. package/dist/es/components/overlay/Overlay.js +36 -51
  216. package/dist/es/components/overlay/tokens.js +5 -3
  217. package/dist/es/components/password-input/PasswordInput.js +114 -95
  218. package/dist/es/components/picker/Picker.js +465 -454
  219. package/dist/es/components/picker/tokens.js +1 -1
  220. package/dist/es/components/popup/Popup.js +269 -298
  221. package/dist/es/components/popup/tokens.js +1 -0
  222. package/dist/es/components/portal/Portal.js +13 -30
  223. package/dist/es/components/portal/PortalHost.js +152 -234
  224. package/dist/es/components/progress/Progress.js +103 -101
  225. package/dist/es/components/progress/tokens.js +1 -0
  226. package/dist/es/components/radio/Radio.js +100 -93
  227. package/dist/es/components/radio/RadioGroup.js +15 -46
  228. package/dist/es/components/radio/tokens.js +7 -10
  229. package/dist/es/components/safe-area-view/SafeAreaView.js +22 -25
  230. package/dist/es/components/search/Search.js +66 -58
  231. package/dist/es/components/selector/Selector.js +21 -27
  232. package/dist/es/components/share-sheet/ShareSheet.js +167 -163
  233. package/dist/es/components/share-sheet/tokens.js +3 -1
  234. package/dist/es/components/sidebar/Sidebar.js +53 -53
  235. package/dist/es/components/sidebar/SidebarContext.js +1 -2
  236. package/dist/es/components/sidebar/SidebarItem.js +19 -20
  237. package/dist/es/components/sidebar/tokens.js +4 -4
  238. package/dist/es/components/skeleton/Skeleton.js +71 -77
  239. package/dist/es/components/skeleton/tokens.js +1 -2
  240. package/dist/es/components/slider/Slider.js +156 -134
  241. package/dist/es/components/space/Space.js +59 -78
  242. package/dist/es/components/space/tokens.js +7 -1
  243. package/dist/es/components/stepper/Stepper.js +183 -159
  244. package/dist/es/components/stepper/tokens.js +1 -0
  245. package/dist/es/components/swiper/Swiper.js +258 -257
  246. package/dist/es/components/swiper/SwiperPagIndicator.js +26 -27
  247. package/dist/es/components/swiper/tokens.js +10 -3
  248. package/dist/es/components/switch/Switch.js +23 -25
  249. package/dist/es/components/tabbar/Tabbar.js +49 -41
  250. package/dist/es/components/tabbar/TabbarContext.js +1 -2
  251. package/dist/es/components/tabbar/TabbarItem.js +66 -69
  252. package/dist/es/components/tabs/Tabs.js +403 -440
  253. package/dist/es/components/tabs/tokens.js +3 -1
  254. package/dist/es/components/tag/Tag.js +71 -61
  255. package/dist/es/components/toast/Toast.js +94 -91
  256. package/dist/es/components/toast/imperative.js +16 -41
  257. package/dist/es/components/toast/tokens.js +1 -0
  258. package/dist/es/components/typography/Typography.js +25 -25
  259. package/dist/es/components/water-mark/WaterMark.js +81 -79
  260. package/dist/es/design-system/Text.js +19 -0
  261. package/dist/es/design-system/ThemeProvider.js +5 -11
  262. package/dist/es/design-system/createComponentTokensHook.js +11 -13
  263. package/dist/es/design-system/index.js +1 -0
  264. package/dist/es/design-system/mergeTokensOverride.js +1 -4
  265. package/dist/es/design-system/presets.js +2 -3
  266. package/dist/es/design-system/tokens.js +1 -9
  267. package/dist/es/hooks/animation/index.js +2 -0
  268. package/dist/es/hooks/animation/useAnimatedTransition.js +53 -0
  269. package/dist/es/hooks/animation/useReducedMotion.js +54 -0
  270. package/dist/es/hooks/aria/useAriaListBox.js +8 -16
  271. package/dist/es/hooks/aria/useAriaOverlay.js +3 -3
  272. package/dist/es/hooks/aria/useAriaPress.js +8 -21
  273. package/dist/es/hooks/aria/useAriaToggle.js +3 -3
  274. package/dist/es/hooks/gesture/useGestureScroll.js +60 -61
  275. package/dist/es/hooks/index.js +1 -0
  276. package/dist/es/hooks/overlay/OverlayStackStore.js +49 -69
  277. package/dist/es/hooks/overlay/useOverlayStack.js +13 -19
  278. package/dist/es/hooks/useControllableValue.js +13 -24
  279. package/dist/es/hooks/useCountDown.js +30 -38
  280. package/dist/es/hooks/useHairline.js +16 -28
  281. package/dist/es/hooks/useSafeAreaPadding.js +1 -4
  282. package/dist/es/index.js +8 -1
  283. package/dist/es/platform/animation.js +9 -1
  284. package/dist/es/platform/measure.js +21 -37
  285. package/dist/es/utils/color.js +18 -35
  286. package/dist/es/utils/compare.js +7 -12
  287. package/dist/es/utils/createPlatformShadow.js +28 -39
  288. package/dist/es/utils/date.js +20 -50
  289. package/dist/es/utils/deepMerge.js +16 -26
  290. package/dist/es/utils/hairline.js +74 -65
  291. package/dist/es/utils/index.js +2 -0
  292. package/dist/es/utils/number.js +21 -29
  293. package/dist/es/utils/render.js +7 -0
  294. package/dist/es/utils/rtl.js +17 -0
  295. package/dist/es/utils/string.js +8 -25
  296. package/dist/es/utils/validate.js +1 -2
  297. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -1
  298. package/dist/types/components/area/Area.d.ts +1 -1
  299. package/dist/types/components/area/tokens.d.ts +4 -0
  300. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  301. package/dist/types/components/avatar/index.d.ts +1 -2
  302. package/dist/types/components/badge/Badge.d.ts +1 -1
  303. package/dist/types/components/button/Button.d.ts +1 -1
  304. package/dist/types/components/button/index.d.ts +1 -1
  305. package/dist/types/components/calendar/Calendar.d.ts +1 -1
  306. package/dist/types/components/cascader/Cascader.d.ts +1 -1
  307. package/dist/types/components/cell/Cell.d.ts +1 -1
  308. package/dist/types/components/cell/CellGroup.d.ts +1 -1
  309. package/dist/types/components/cell/index.d.ts +2 -2
  310. package/dist/types/components/checkbox/Checkbox.d.ts +1 -1
  311. package/dist/types/components/circle/Circle.d.ts +1 -1
  312. package/dist/types/components/collapse/Collapse.d.ts +1 -2
  313. package/dist/types/components/config-provider/DirectionContext.d.ts +3 -0
  314. package/dist/types/components/config-provider/index.d.ts +2 -1
  315. package/dist/types/components/config-provider/locale/en-US.d.ts +32 -0
  316. package/dist/types/components/config-provider/locale/zh-CN.d.ts +32 -0
  317. package/dist/types/components/config-provider/useDirection.d.ts +1 -0
  318. package/dist/types/components/count-down/CountDown.d.ts +1 -1
  319. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -1
  320. package/dist/types/components/datetime-picker/tokens.d.ts +12 -0
  321. package/dist/types/components/dialog/Dialog.d.ts +1 -1
  322. package/dist/types/components/dialog/tokens.d.ts +1 -0
  323. package/dist/types/components/divider/Divider.d.ts +1 -1
  324. package/dist/types/components/empty/Empty.d.ts +1 -1
  325. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +6 -0
  326. package/dist/types/components/error-boundary/index.d.ts +2 -0
  327. package/dist/types/components/field/Field.d.ts +1 -1
  328. package/dist/types/components/flex/Flex.d.ts +1 -1
  329. package/dist/types/components/flex/FlexItem.d.ts +1 -1
  330. package/dist/types/components/flex/index.d.ts +2 -2
  331. package/dist/types/components/form/Form.d.ts +1 -1
  332. package/dist/types/components/form/FormItem.d.ts +2 -1
  333. package/dist/types/components/form/index.d.ts +2 -2
  334. package/dist/types/components/form/tokens.d.ts +4 -0
  335. package/dist/types/components/grid/Grid.d.ts +1 -1
  336. package/dist/types/components/grid/GridItem.d.ts +1 -1
  337. package/dist/types/components/grid/index.d.ts +2 -2
  338. package/dist/types/components/image/Image.d.ts +1 -1
  339. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -1
  340. package/dist/types/components/image-preview/tokens.d.ts +1 -0
  341. package/dist/types/components/index.d.ts +4 -1
  342. package/dist/types/components/input/Input.d.ts +3 -3
  343. package/dist/types/components/loading/Loading.d.ts +1 -1
  344. package/dist/types/components/nav-bar/NavBar.d.ts +1 -1
  345. package/dist/types/components/nav-bar/tokens.d.ts +1 -1
  346. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -1
  347. package/dist/types/components/notice-bar/tokens.d.ts +1 -0
  348. package/dist/types/components/notify/Notify.d.ts +2 -2
  349. package/dist/types/components/notify/index.d.ts +1 -1
  350. package/dist/types/components/number-keyboard/tokens.d.ts +5 -0
  351. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  352. package/dist/types/components/overlay/tokens.d.ts +3 -0
  353. package/dist/types/components/password-input/PasswordInput.d.ts +1 -1
  354. package/dist/types/components/picker/Picker.d.ts +6 -6
  355. package/dist/types/components/popup/Popup.d.ts +3 -42
  356. package/dist/types/components/popup/tokens.d.ts +1 -0
  357. package/dist/types/components/portal/Portal.d.ts +9 -6
  358. package/dist/types/components/portal/PortalHost.d.ts +1 -1
  359. package/dist/types/components/radio/RadioGroup.d.ts +1 -1
  360. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -1
  361. package/dist/types/components/search/Search.d.ts +1 -1
  362. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -1
  363. package/dist/types/components/share-sheet/tokens.d.ts +1 -0
  364. package/dist/types/components/sidebar/Sidebar.d.ts +1 -1
  365. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -1
  366. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -1
  367. package/dist/types/components/sidebar/index.d.ts +2 -2
  368. package/dist/types/components/skeleton/Skeleton.d.ts +1 -1
  369. package/dist/types/components/slider/Slider.d.ts +1 -1
  370. package/dist/types/components/stepper/Stepper.d.ts +1 -1
  371. package/dist/types/components/stepper/tokens.d.ts +1 -0
  372. package/dist/types/components/swiper/Swiper.d.ts +1 -1
  373. package/dist/types/components/swiper/index.d.ts +1 -1
  374. package/dist/types/components/swiper/tokens.d.ts +8 -0
  375. package/dist/types/components/tabbar/Tabbar.d.ts +2 -2
  376. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -1
  377. package/dist/types/components/tabbar/TabbarItem.d.ts +2 -2
  378. package/dist/types/components/tabs/Tabs.d.ts +1 -1
  379. package/dist/types/components/tabs/index.d.ts +1 -1
  380. package/dist/types/components/tabs/tokens.d.ts +1 -0
  381. package/dist/types/components/tag/Tag.d.ts +1 -1
  382. package/dist/types/components/toast/Toast.d.ts +2 -2
  383. package/dist/types/components/toast/index.d.ts +1 -1
  384. package/dist/types/components/toast/tokens.d.ts +1 -0
  385. package/dist/types/components/water-mark/WaterMark.d.ts +1 -1
  386. package/dist/types/design-system/Text.d.ts +3 -0
  387. package/dist/types/design-system/index.d.ts +1 -0
  388. package/dist/types/design-system/tokens.d.ts +0 -1
  389. package/dist/types/hooks/animation/index.d.ts +3 -0
  390. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +13 -0
  391. package/dist/types/hooks/animation/useReducedMotion.d.ts +3 -0
  392. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -1
  393. package/dist/types/hooks/gesture/useGestureScroll.d.ts +11 -10
  394. package/dist/types/hooks/index.d.ts +1 -0
  395. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +8 -8
  396. package/dist/types/hooks/useCountDown.d.ts +1 -1
  397. package/dist/types/hooks/useHairline.d.ts +1 -1
  398. package/dist/types/index.d.ts +5 -0
  399. package/dist/types/platform/animation.d.ts +8 -0
  400. package/dist/types/platform/measure.d.ts +1 -1
  401. package/dist/types/utils/color.d.ts +0 -2
  402. package/dist/types/utils/compare.d.ts +1 -1
  403. package/dist/types/utils/createPlatformShadow.d.ts +2 -2
  404. package/dist/types/utils/date.d.ts +2 -2
  405. package/dist/types/utils/hairline.d.ts +5 -10
  406. package/dist/types/utils/index.d.ts +2 -0
  407. package/dist/types/utils/number.d.ts +2 -2
  408. package/dist/types/utils/render.d.ts +5 -0
  409. package/dist/types/utils/rtl.d.ts +5 -0
  410. package/dist/types/utils/validate.d.ts +0 -1
  411. package/package.json +25 -4
@@ -2,12 +2,15 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
2
2
  import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
3
3
  import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native';
4
4
  import { useControllableValue } from '../../hooks';
5
- import { parseNumber, addNumber as add, clampValue, formatNumber as formatValue, numberToString as valueToString, parseDecimalLength, isFiniteNumber, isPromiseLike } from '../../utils';
5
+ import { parseNumber, addNumber, clampValue, formatNumber, numberToString, parseDecimalLength, isFiniteNumber, isPromiseLike } from '../../utils';
6
+ import { useDirection } from '../config-provider/useDirection';
6
7
  import { useStepperTokens } from './tokens';
8
+ import { createHairlineView } from '../../utils/hairline';
7
9
  const LONG_PRESS_DELAY = 600;
8
10
  const LONG_PRESS_INTERVAL = 100;
9
- export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
10
- const tokens = useStepperTokens(p.tokensOverride);
11
+ const StepperImpl = (props, ref) => {
12
+ const tokens = useStepperTokens(props.tokensOverride);
13
+ const layoutDir = useDirection();
11
14
  const {
12
15
  min,
13
16
  max,
@@ -40,50 +43,66 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
40
43
  inputStyle,
41
44
  buttonStyle,
42
45
  style,
43
- ...rest
44
- } = p;
45
- const [changing, setChanging] = useState(false);
46
+ ...restProps
47
+ } = props;
48
+ const [isChanging, setIsChanging] = useState(false);
46
49
  const changingRef = useRef(false);
47
- const decimalLength = parseDecimalLength(decimalLengthProp);
48
- const resolvedStepRaw = Number(step ?? 1);
49
- const resolvedStep = isFiniteNumber(resolvedStepRaw) && resolvedStepRaw > 0 ? resolvedStepRaw : 1;
50
- const resolvedButtonSize = Math.max(0, parseNumber(buttonSize, tokens.defaults.buttonSize));
51
- const resolvedInputWidth = Math.max(0, parseNumber(inputWidth, tokens.defaults.inputWidth));
52
- const resolvedDefaultValue = useMemo(() => {
53
- const raw = p.defaultValue;
50
+ const onPlusRef = useRef(onPlus);
51
+ const onMinusRef = useRef(onMinus);
52
+ const onOverlimitRef = useRef(onOverlimit);
53
+ const onFocusRef = useRef(onFocus);
54
+ const onBlurRef = useRef(onBlur);
55
+ const onClickRef = useRef(onClick);
56
+ const valueRef = useRef(null);
57
+ const inputRef = useRef(null);
58
+ const inputValueRef = useRef('');
59
+ const inputPropsRef = useRef(inputProps);
60
+ const longPressRef = useRef({
61
+ hadLongPress: false
62
+ });
63
+ onPlusRef.current = onPlus;
64
+ onMinusRef.current = onMinus;
65
+ onOverlimitRef.current = onOverlimit;
66
+ onFocusRef.current = onFocus;
67
+ onBlurRef.current = onBlur;
68
+ onClickRef.current = onClick;
69
+ inputPropsRef.current = inputProps;
70
+ const decimalLen = parseDecimalLength(decimalLengthProp);
71
+ const stepRaw = Number(step ?? 1);
72
+ const stepSize = isFiniteNumber(stepRaw) && stepRaw > 0 ? stepRaw : 1;
73
+ const rBtnSize = Math.max(0, parseNumber(buttonSize, tokens.defaults.buttonSize));
74
+ const rInputW = Math.max(0, parseNumber(inputWidth, tokens.defaults.inputWidth));
75
+ const defaultVal = useMemo(() => {
76
+ const raw = props.defaultValue;
54
77
  if (raw === null) return null;
55
78
  const base = isFiniteNumber(raw) ? raw : 0;
56
- const formatted = formatValue(base, integer, decimalLength);
57
- return autoFixed ? clampValue(formatted, min, max) : formatted;
58
- }, [autoFixed, decimalLength, integer, max, min, p.defaultValue]);
79
+ const fmt = formatNumber(base, integer, decimalLen);
80
+ return autoFixed ? clampValue(fmt, min, max) : fmt;
81
+ }, [autoFixed, decimalLen, integer, max, min, props.defaultValue]);
59
82
  const [value, triggerChange] = useControllableValue({
60
- ...p,
61
- defaultValue: resolvedDefaultValue
83
+ ...props,
84
+ defaultValue: defaultVal
62
85
  }, {
63
- defaultValue: resolvedDefaultValue
86
+ defaultValue: defaultVal
64
87
  });
65
- const valueRef = useRef(value ?? null);
66
88
  useEffect(() => {
67
89
  valueRef.current = value ?? null;
68
90
  }, [value]);
69
- const inputRef = useRef(null);
70
91
  useImperativeHandle(ref, () => ({
71
92
  focus: () => inputRef.current?.focus(),
72
93
  blur: () => inputRef.current?.blur()
73
94
  }));
74
- const [hasFocus, setHasFocus] = useState(false);
75
- const [inputValue, setInputValue] = useState(() => valueToString(value, decimalLength));
76
- const inputValueRef = useRef(inputValue);
77
- const setInputText = useCallback(text => {
95
+ const [isFocused, setIsFocused] = useState(false);
96
+ const [inputText, setInputTextState] = useState(() => numberToString(value, decimalLen));
97
+ const updateInputText = useCallback(text => {
78
98
  inputValueRef.current = text;
79
- setInputValue(text);
99
+ setInputTextState(text);
80
100
  }, []);
81
101
  useEffect(() => {
82
- if (!hasFocus) {
83
- const nextText = valueToString(value, decimalLength);
84
- setInputText(nextText);
102
+ if (!isFocused) {
103
+ updateInputText(numberToString(value, decimalLen));
85
104
  }
86
- }, [decimalLength, hasFocus, setInputText, value]);
105
+ }, [decimalLen, isFocused, updateInputText, value]);
87
106
  const getCurrentNumber = useCallback(() => {
88
107
  const current = valueRef.current;
89
108
  if (isFiniteNumber(current)) return current;
@@ -94,15 +113,11 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
94
113
  if (type === 'plus' && disablePlus) return true;
95
114
  if (type === 'minus' && disableMinus) return true;
96
115
  const current = getCurrentNumber();
97
- if (type === 'plus' && isFiniteNumber(max) && current >= max) {
98
- return true;
99
- }
100
- if (type === 'minus' && isFiniteNumber(min) && current <= min) {
101
- return true;
102
- }
116
+ if (type === 'plus' && isFiniteNumber(max) && current >= max) return true;
117
+ if (type === 'minus' && isFiniteNumber(min) && current <= min) return true;
103
118
  return false;
104
119
  }, [disableMinus, disablePlus, disabled, getCurrentNumber, max, min]);
105
- const setValue = useCallback(next => {
120
+ const commitValue = useCallback(next => {
106
121
  const prev = valueRef.current ?? null;
107
122
  if (Object.is(prev, next)) return false;
108
123
  valueRef.current = next;
@@ -111,93 +126,87 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
111
126
  });
112
127
  return true;
113
128
  }, [name, triggerChange]);
114
- const applyNextValue = useCallback(nextRaw => {
115
- const formatted = formatValue(nextRaw, integer, decimalLength);
129
+ const normalizeNumber = useCallback(nextRaw => {
130
+ const formatted = formatNumber(nextRaw, integer, decimalLen);
116
131
  return autoFixed ? clampValue(formatted, min, max) : formatted;
117
- }, [autoFixed, decimalLength, integer, max, min]);
118
- const performValueChange = useCallback((next, committed) => {
119
- if (changingRef.current) {
120
- return 'noop';
121
- }
132
+ }, [autoFixed, decimalLen, integer, max, min]);
133
+ const processValueChange = useCallback((next, committed) => {
134
+ if (changingRef.current) return 'noop';
122
135
  const commit = () => {
123
- const didChange = setValue(next);
136
+ const didChange = commitValue(next);
124
137
  if (!didChange) return 'noop';
125
- setInputText(valueToString(next, decimalLength));
138
+ updateInputText(numberToString(next, decimalLen));
126
139
  committed?.(next);
127
140
  return 'changed';
128
141
  };
129
- if (!beforeChange) {
130
- return commit();
131
- }
142
+ if (!beforeChange) return commit();
132
143
  try {
133
144
  const result = beforeChange(next);
134
145
  if (isPromiseLike(result)) {
135
146
  changingRef.current = true;
136
- setChanging(true);
147
+ setIsChanging(true);
137
148
  result.then(allowed => {
138
149
  if (allowed === false) {
139
- setInputText(valueToString(valueRef.current, decimalLength));
150
+ updateInputText(numberToString(valueRef.current, decimalLen));
140
151
  return;
141
152
  }
153
+ ;
142
154
  commit();
143
- }).catch(() => {
144
- commit();
145
- }).finally(() => {
155
+ }).catch(() => commit()).finally(() => {
146
156
  changingRef.current = false;
147
- setChanging(false);
157
+ setIsChanging(false);
148
158
  });
149
159
  return 'pending';
150
160
  }
161
+ ;
151
162
  if (result === false) {
152
- setInputText(valueToString(valueRef.current, decimalLength));
163
+ updateInputText(numberToString(valueRef.current, decimalLen));
153
164
  return 'noop';
154
165
  }
166
+ ;
155
167
  return commit();
156
168
  } catch {
157
169
  return commit();
158
170
  }
159
- }, [beforeChange, decimalLength, setInputText, setValue]);
171
+ }, [beforeChange, decimalLen, updateInputText, commitValue]);
160
172
  const stepOnce = useCallback((type, event, options) => {
161
- if (changingRef.current) {
162
- return 'noop';
163
- }
173
+ if (changingRef.current) return 'noop';
164
174
  const emitOverlimit = options?.emitOverlimit ?? true;
165
- const emitButtonCallbacks = options?.emitButtonCallbacks ?? Boolean(event);
175
+ const emitCallbacks = options?.emitButtonCallbacks ?? Boolean(event);
166
176
  if (isActionDisabled(type)) {
167
- if (emitOverlimit) onOverlimit?.(type);
177
+ if (emitOverlimit) onOverlimitRef.current?.(type);
168
178
  return 'overlimit';
169
179
  }
180
+ ;
170
181
  const current = getCurrentNumber();
171
- const diff = type === 'plus' ? resolvedStep : -resolvedStep;
172
- const next = applyNextValue(add(current, diff));
173
- return performValueChange(next, committedValue => {
174
- if (!emitButtonCallbacks || !event) return;
182
+ const diff = type === 'plus' ? stepSize : -stepSize;
183
+ const next = normalizeNumber(addNumber(current, diff));
184
+ return processValueChange(next, committedValue => {
185
+ if (!emitCallbacks || !event) return;
175
186
  if (type === 'plus') {
176
- onPlus?.(event, committedValue);
187
+ onPlusRef.current?.(event, committedValue);
177
188
  } else {
178
- onMinus?.(event, committedValue);
189
+ onMinusRef.current?.(event, committedValue);
179
190
  }
180
191
  });
181
- }, [applyNextValue, getCurrentNumber, isActionDisabled, onMinus, onOverlimit, onPlus, performValueChange, resolvedStep]);
182
- const longPressRef = useRef({
183
- hadLongPress: false
184
- });
192
+ }, [normalizeNumber, getCurrentNumber, isActionDisabled, processValueChange, stepSize]);
185
193
  const clearLongPress = useCallback(() => {
186
194
  if (longPressRef.current.delay) {
187
195
  clearTimeout(longPressRef.current.delay);
188
196
  longPressRef.current.delay = undefined;
189
197
  }
198
+ ;
190
199
  if (longPressRef.current.interval) {
191
200
  clearInterval(longPressRef.current.interval);
192
201
  longPressRef.current.interval = undefined;
193
202
  }
194
203
  }, []);
195
- useEffect(() => clearLongPress, [clearLongPress]);
204
+ useEffect(() => clearLongPress(), [clearLongPress]);
196
205
  useEffect(() => {
197
- if (disabled || changing || !longPress) {
206
+ if (disabled || isChanging || !longPress) {
198
207
  clearLongPress();
199
208
  }
200
- }, [changing, clearLongPress, disabled, longPress]);
209
+ }, [isChanging, clearLongPress, disabled, longPress]);
201
210
  const startLongPress = useCallback(type => {
202
211
  if (!longPress) return;
203
212
  if (changingRef.current) return;
@@ -214,6 +223,7 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
214
223
  clearLongPress();
215
224
  return;
216
225
  }
226
+ ;
217
227
  longPressRef.current.interval = setInterval(() => {
218
228
  const result = stepOnce(type, undefined, {
219
229
  emitOverlimit: true,
@@ -225,14 +235,13 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
225
235
  }, LONG_PRESS_INTERVAL);
226
236
  }, LONG_PRESS_DELAY);
227
237
  }, [clearLongPress, isActionDisabled, longPress, stepOnce]);
228
- const handlePressOut = useCallback(() => {
229
- clearLongPress();
230
- }, [clearLongPress]);
238
+ const handlePressOut = useCallback(() => clearLongPress(), [clearLongPress]);
231
239
  const handleButtonPress = useCallback((type, event) => {
232
240
  if (longPressRef.current.hadLongPress) {
233
241
  longPressRef.current.hadLongPress = false;
234
242
  return;
235
243
  }
244
+ ;
236
245
  longPressRef.current.hadLongPress = false;
237
246
  stepOnce(type, event, {
238
247
  emitOverlimit: true,
@@ -242,122 +251,129 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
242
251
  const currentForCompare = isFiniteNumber(value) ? value : 0;
243
252
  const minNumber = isFiniteNumber(min) ? min : undefined;
244
253
  const maxNumber = isFiniteNumber(max) ? max : undefined;
245
- const disabledForAll = disabled || changing;
246
- const minusDisabled = disabledForAll || disableMinus || minNumber !== undefined && currentForCompare <= minNumber;
247
- const plusDisabled = disabledForAll || disablePlus || maxNumber !== undefined && currentForCompare >= maxNumber;
254
+ const isDisabledAll = disabled || isChanging;
255
+ const isMinusDisabled = isDisabledAll || disableMinus || minNumber != null && currentForCompare <= minNumber;
256
+ const isPlusDisabled = isDisabledAll || disablePlus || maxNumber != null && currentForCompare >= maxNumber;
248
257
  const radius = tokens.radii.default;
249
- const buttonBaseStyle = useMemo(() => ({
250
- width: resolvedButtonSize,
251
- height: resolvedButtonSize
252
- }), [resolvedButtonSize]);
253
- const inputBoxStyle = useMemo(() => ({
254
- width: resolvedInputWidth,
255
- height: resolvedButtonSize,
258
+ const btnSizeStyle = useMemo(() => ({
259
+ width: rBtnSize,
260
+ height: rBtnSize
261
+ }), [rBtnSize]);
262
+ const inputSizeStyle = useMemo(() => ({
263
+ width: rInputW,
264
+ height: rBtnSize,
256
265
  marginHorizontal: tokens.spacing.gap
257
- }), [resolvedButtonSize, resolvedInputWidth, tokens.spacing.gap]);
266
+ }), [rBtnSize, rInputW, tokens.spacing.gap]);
258
267
  const getButtonStyle = useCallback((type, state) => {
259
268
  const isPlus = type === 'plus';
260
- const disabledState = isPlus ? plusDisabled : minusDisabled;
269
+ const isDisabled = isPlus ? isPlusDisabled : isMinusDisabled;
261
270
  if (theme === 'round') {
262
- const base = [styles.button, buttonBaseStyle, {
263
- borderRadius: resolvedButtonSize / 2,
264
- opacity: disabledState ? tokens.opacity.roundDisabled : 1
271
+ const base = [S.btn, btnSizeStyle, {
272
+ borderRadius: rBtnSize / 2,
273
+ opacity: isDisabled ? tokens.opacity.roundDisabled : 1
265
274
  }];
266
275
  if (isPlus) {
267
276
  return [...base, {
268
277
  backgroundColor: tokens.colors.roundTheme,
269
- ...(state.pressed && !disabledState && {
278
+ ...(state.pressed && !isDisabled && {
270
279
  opacity: tokens.opacity.pressed
271
280
  })
272
281
  }, buttonStyle];
273
282
  }
283
+ ;
274
284
  return [...base, {
275
285
  backgroundColor: tokens.colors.roundThemeBackground,
276
- borderWidth: StyleSheet.hairlineWidth,
277
- borderColor: tokens.colors.roundTheme,
278
- ...(state.pressed && !disabledState && {
286
+ ...(state.pressed && !isDisabled && {
279
287
  opacity: tokens.opacity.pressed
280
288
  })
281
289
  }, buttonStyle];
282
290
  }
283
- const cornerStyle = type === 'minus' ? {
291
+ ;
292
+ const isLeading = type === 'minus' !== (layoutDir === 'rtl');
293
+ const cornerStyle = isLeading ? {
284
294
  borderTopLeftRadius: radius,
285
295
  borderBottomLeftRadius: radius
286
296
  } : {
287
297
  borderTopRightRadius: radius,
288
298
  borderBottomRightRadius: radius
289
299
  };
290
- const backgroundColor = disabledState ? tokens.colors.buttonDisabledBackground : state.pressed ? tokens.colors.active : tokens.colors.background;
291
- return [styles.button, buttonBaseStyle, cornerStyle, {
292
- backgroundColor
300
+ const bgColor = isDisabled ? tokens.colors.buttonDisabledBackground : state.pressed ? tokens.colors.active : tokens.colors.background;
301
+ return [S.btn, btnSizeStyle, cornerStyle, {
302
+ backgroundColor: bgColor
293
303
  }, buttonStyle];
294
- }, [buttonBaseStyle, buttonStyle, minusDisabled, plusDisabled, radius, resolvedButtonSize, theme, tokens.colors.active, tokens.colors.background, tokens.colors.buttonDisabledBackground, tokens.colors.roundTheme, tokens.colors.roundThemeBackground, tokens.opacity.pressed, tokens.opacity.roundDisabled]);
304
+ }, [btnSizeStyle, buttonStyle, isMinusDisabled, isPlusDisabled, radius, rBtnSize, theme, layoutDir, tokens.colors.active, tokens.colors.background, tokens.colors.buttonDisabledBackground, tokens.colors.roundTheme, tokens.colors.roundThemeBackground, tokens.opacity.pressed, tokens.opacity.roundDisabled]);
295
305
  const getButtonTextStyle = useCallback(type => {
296
306
  const isPlus = type === 'plus';
297
- const disabledState = isPlus ? plusDisabled : minusDisabled;
307
+ const isDisabled = isPlus ? isPlusDisabled : isMinusDisabled;
298
308
  if (theme === 'round') {
299
309
  const color = isPlus ? tokens.colors.roundThemeText : tokens.colors.roundTheme;
300
- return [styles.buttonText, {
310
+ return [S.btnTxt, {
301
311
  color,
312
+ fontFamily: tokens.typography.fontFamily,
302
313
  fontSize: tokens.typography.fontSize,
303
314
  fontWeight: tokens.typography.fontWeight
304
315
  }];
305
316
  }
306
- return [styles.buttonText, {
307
- color: disabledState ? tokens.colors.buttonDisabledIcon : tokens.colors.buttonIcon,
317
+ ;
318
+ return [S.btnTxt, {
319
+ color: isDisabled ? tokens.colors.buttonDisabledIcon : tokens.colors.buttonIcon,
320
+ fontFamily: tokens.typography.fontFamily,
308
321
  fontSize: tokens.typography.fontSize,
309
322
  fontWeight: tokens.typography.fontWeight
310
323
  }];
311
- }, [minusDisabled, plusDisabled, theme, tokens.colors.buttonDisabledIcon, tokens.colors.buttonIcon, tokens.colors.roundTheme, tokens.colors.roundThemeText, tokens.typography.fontSize, tokens.typography.fontWeight]);
324
+ }, [isMinusDisabled, isPlusDisabled, theme, tokens.colors.buttonDisabledIcon, tokens.colors.buttonIcon, tokens.colors.roundTheme, tokens.colors.roundThemeText, tokens.typography.fontFamily, tokens.typography.fontSize, tokens.typography.fontWeight]);
312
325
  const handleChangeText = useCallback(text => {
313
326
  if (disableInput || disabled || changingRef.current) return;
314
- setInputText(text);
315
- inputProps?.onChangeText?.(text);
327
+ updateInputText(text);
328
+ inputPropsRef.current?.onChangeText?.(text);
316
329
  const trimmed = text.trim();
317
330
  if (trimmed === '') {
318
- performValueChange(allowEmpty ? null : resolvedDefaultValue);
331
+ processValueChange(allowEmpty ? null : defaultVal);
319
332
  return;
320
333
  }
321
- const numeric = Number.parseFloat(trimmed);
322
- if (!Number.isFinite(numeric)) return;
323
- performValueChange(applyNextValue(numeric));
324
- }, [allowEmpty, applyNextValue, changingRef, disableInput, disabled, inputProps, performValueChange, resolvedDefaultValue, setInputText]);
334
+ ;
335
+ const num = Number.parseFloat(trimmed);
336
+ if (!Number.isFinite(num)) return;
337
+ processValueChange(normalizeNumber(num));
338
+ }, [allowEmpty, normalizeNumber, changingRef, disableInput, disabled, inputPropsRef, processValueChange, defaultVal, updateInputText]);
325
339
  const handleFocus = useCallback(event => {
326
340
  if (disableInput) {
327
341
  inputRef.current?.blur();
328
342
  return;
329
343
  }
330
- setHasFocus(true);
331
- onFocus?.(event);
332
- inputProps?.onFocus?.(event);
333
- }, [disableInput, inputProps, onFocus]);
344
+ ;
345
+ setIsFocused(true);
346
+ onFocusRef.current?.(event);
347
+ inputPropsRef.current?.onFocus?.(event);
348
+ }, [disableInput]);
334
349
  const handleBlur = useCallback(event => {
335
- setHasFocus(false);
350
+ setIsFocused(false);
336
351
  if (!changingRef.current) {
337
352
  const trimmed = inputValueRef.current.trim();
338
353
  if (trimmed === '') {
339
- performValueChange(allowEmpty ? null : resolvedDefaultValue);
354
+ processValueChange(allowEmpty ? null : defaultVal);
340
355
  } else {
341
- const numeric = Number.parseFloat(trimmed);
342
- if (Number.isFinite(numeric)) {
343
- performValueChange(applyNextValue(numeric));
356
+ const num = Number.parseFloat(trimmed);
357
+ if (Number.isFinite(num)) {
358
+ processValueChange(normalizeNumber(num));
344
359
  }
345
360
  }
346
361
  }
347
- onBlur?.(event);
348
- inputProps?.onBlur?.(event);
349
- }, [allowEmpty, applyNextValue, inputProps, onBlur, performValueChange, resolvedDefaultValue]);
362
+ ;
363
+ onBlurRef.current?.(event);
364
+ inputPropsRef.current?.onBlur?.(event);
365
+ }, [allowEmpty, normalizeNumber, processValueChange, defaultVal]);
350
366
  const handleInputPressIn = useCallback(event => {
351
- onClick?.(event);
352
- inputProps?.onPressIn?.(event);
353
- }, [inputProps, onClick]);
367
+ onClickRef.current?.(event);
368
+ inputPropsRef.current?.onPressIn?.(event);
369
+ }, []);
354
370
  const handleMinusPress = useCallback(event => handleButtonPress('minus', event), [handleButtonPress]);
355
371
  const handlePlusPress = useCallback(event => handleButtonPress('plus', event), [handleButtonPress]);
356
372
  const handleMinusPressIn = useCallback(() => startLongPress('minus'), [startLongPress]);
357
373
  const handlePlusPressIn = useCallback(() => startLongPress('plus'), [startLongPress]);
358
- const getMinusButtonStyle = useCallback(state => getButtonStyle('minus', state), [getButtonStyle]);
359
- const getPlusButtonStyle = useCallback(state => getButtonStyle('plus', state), [getButtonStyle]);
360
- const renderMinusButton = useCallback(() => {
374
+ const getMinusBtnStyle = useCallback(state => getButtonStyle('minus', state), [getButtonStyle]);
375
+ const getPlusBtnStyle = useCallback(state => getButtonStyle('plus', state), [getButtonStyle]);
376
+ const renderMinusBtn = useCallback(() => {
361
377
  if (!showMinus) return null;
362
378
  return /*#__PURE__*/React.createElement(Pressable, {
363
379
  key: "minus",
@@ -365,17 +381,23 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
365
381
  accessibilityRole: "button",
366
382
  accessibilityLabel: "minus",
367
383
  accessibilityState: {
368
- disabled: minusDisabled
384
+ disabled: isMinusDisabled
369
385
  },
370
386
  onPress: handleMinusPress,
371
387
  onPressIn: handleMinusPressIn,
372
388
  onPressOut: handlePressOut,
373
- style: getMinusButtonStyle
389
+ style: getMinusBtnStyle
374
390
  }, /*#__PURE__*/React.createElement(Text, {
375
391
  style: getButtonTextStyle('minus')
376
- }, "-"));
377
- }, [getButtonTextStyle, getMinusButtonStyle, handleMinusPress, handleMinusPressIn, handlePressOut, minusDisabled, showMinus]);
378
- const renderPlusButton = useCallback(() => {
392
+ }, "-"), theme === 'round' && /*#__PURE__*/React.createElement(View, {
393
+ style: createHairlineView({
394
+ position: 'all',
395
+ color: tokens.colors.roundTheme,
396
+ borderRadius: rBtnSize / 2
397
+ })
398
+ }));
399
+ }, [getButtonTextStyle, getMinusBtnStyle, handleMinusPress, handleMinusPressIn, handlePressOut, isMinusDisabled, showMinus, theme, tokens.colors.roundTheme, rBtnSize]);
400
+ const renderPlusBtn = useCallback(() => {
379
401
  if (!showPlus) return null;
380
402
  return /*#__PURE__*/React.createElement(Pressable, {
381
403
  key: "plus",
@@ -383,33 +405,33 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
383
405
  accessibilityRole: "button",
384
406
  accessibilityLabel: "add",
385
407
  accessibilityState: {
386
- disabled: plusDisabled
408
+ disabled: isPlusDisabled
387
409
  },
388
410
  onPress: handlePlusPress,
389
411
  onPressIn: handlePlusPressIn,
390
412
  onPressOut: handlePressOut,
391
- style: getPlusButtonStyle
413
+ style: getPlusBtnStyle
392
414
  }, /*#__PURE__*/React.createElement(Text, {
393
415
  style: getButtonTextStyle('plus')
394
416
  }, "+"));
395
- }, [getButtonTextStyle, getPlusButtonStyle, handlePlusPress, handlePlusPressIn, handlePressOut, plusDisabled, showPlus]);
417
+ }, [getButtonTextStyle, getPlusBtnStyle, handlePlusPress, handlePlusPressIn, handlePressOut, isPlusDisabled, showPlus]);
396
418
  const inputNode = useMemo(() => {
397
419
  if (!showInput) return null;
398
- const editable = !disabledForAll && !disableInput;
399
- const inputDisabled = disabledForAll || disableInput;
400
- const inputBackground = theme === 'round' ? tokens.colors.transparent : inputDisabled ? tokens.colors.inputDisabledBackground : tokens.colors.background;
401
- const inputTextColor = inputDisabled ? tokens.colors.inputDisabledText : tokens.colors.inputText;
420
+ const editable = !isDisabledAll && !disableInput;
421
+ const isInputDisabled = isDisabledAll || disableInput;
422
+ const bgColor = theme === 'round' ? tokens.colors.transparent : isInputDisabled ? tokens.colors.inputDisabledBackground : tokens.colors.background;
423
+ const textColor = isInputDisabled ? tokens.colors.inputDisabledText : tokens.colors.inputText;
402
424
  const keyboardType = integer ? 'number-pad' : 'decimal-pad';
403
425
  return /*#__PURE__*/React.createElement(TextInput, _extends({
404
426
  ref: inputRef
405
427
  }, inputProps, {
406
- style: [styles.input, inputBoxStyle, {
407
- backgroundColor: inputBackground,
408
- color: inputTextColor,
428
+ style: [S.inp, inputSizeStyle, {
429
+ backgroundColor: bgColor,
430
+ color: textColor,
409
431
  paddingHorizontal: tokens.spacing.none,
410
432
  paddingVertical: tokens.spacing.none
411
433
  }, inputStyle],
412
- value: inputValue,
434
+ value: inputText,
413
435
  placeholder: placeholder,
414
436
  editable: editable,
415
437
  keyboardType: keyboardType,
@@ -418,24 +440,26 @@ export const Stepper = /*#__PURE__*/React.forwardRef((p, ref) => {
418
440
  onBlur: handleBlur,
419
441
  onPressIn: handleInputPressIn
420
442
  }));
421
- }, [disabledForAll, disableInput, handleBlur, handleChangeText, handleFocus, handleInputPressIn, inputBoxStyle, inputProps, inputStyle, inputValue, integer, placeholder, showInput, theme, tokens.colors.background, tokens.colors.inputDisabledBackground, tokens.colors.inputDisabledText, tokens.colors.inputText, tokens.colors.transparent, tokens.spacing.none]);
422
- return /*#__PURE__*/React.createElement(View, _extends({}, rest, {
423
- style: [styles.container, style]
424
- }), renderMinusButton(), inputNode, renderPlusButton());
425
- });
426
- const styles = StyleSheet.create({
427
- container: {
443
+ }, [isDisabledAll, disableInput, handleBlur, handleChangeText, handleFocus, handleInputPressIn, inputSizeStyle, inputProps, inputStyle, inputText, integer, placeholder, showInput, theme, tokens.colors.background, tokens.colors.inputDisabledBackground, tokens.colors.inputDisabledText, tokens.colors.inputText, tokens.colors.transparent, tokens.spacing.none]);
444
+ return /*#__PURE__*/React.createElement(View, _extends({}, restProps, {
445
+ style: [S.cnt, style]
446
+ }), renderMinusBtn(), inputNode, renderPlusBtn());
447
+ };
448
+ const S = StyleSheet.create({
449
+ cnt: {
428
450
  flexDirection: 'row',
429
451
  alignItems: 'center'
430
452
  },
431
- button: {
453
+ btn: {
432
454
  justifyContent: 'center',
433
455
  alignItems: 'center'
434
456
  },
435
- buttonText: {},
436
- input: {
457
+ btnTxt: {},
458
+ inp: {
437
459
  textAlign: 'center'
438
460
  }
439
461
  });
440
- Stepper.displayName = 'Stepper';
462
+ const StepperForwardRef = /*#__PURE__*/React.forwardRef(StepperImpl);
463
+ StepperForwardRef.displayName = 'Stepper';
464
+ export const Stepper = /*#__PURE__*/React.memo(StepperForwardRef);
441
465
  export default Stepper;
@@ -36,6 +36,7 @@ const createStepperTokens = foundations => {
36
36
  default: radii.md
37
37
  },
38
38
  typography: {
39
+ fontFamily: typography.fontFamily,
39
40
  fontSize: fontSize.md,
40
41
  fontWeight: typography.weight.semiBold
41
42
  },