react-native-system-ui 0.0.6 → 1.0.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 (366) hide show
  1. package/README.md +53 -30
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +97 -105
  3. package/dist/cjs/components/action-sheet/tokens.js +16 -27
  4. package/dist/cjs/components/area/Area.js +54 -67
  5. package/dist/cjs/components/area/tokens.js +6 -3
  6. package/dist/cjs/components/avatar/Avatar.js +25 -23
  7. package/dist/cjs/components/badge/Badge.js +31 -31
  8. package/dist/cjs/components/badge/tokens.js +6 -8
  9. package/dist/cjs/components/button/Button.js +115 -151
  10. package/dist/cjs/components/button/ButtonGroup.js +8 -42
  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 +177 -180
  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 +70 -83
  18. package/dist/cjs/components/cell/CellGroup.js +16 -29
  19. package/dist/cjs/components/checkbox/Checkbox.js +139 -132
  20. package/dist/cjs/components/checkbox/CheckboxGroup.js +4 -35
  21. package/dist/cjs/components/checkbox/tokens.js +7 -10
  22. package/dist/cjs/components/circle/Circle.js +25 -24
  23. package/dist/cjs/components/collapse/Collapse.js +75 -91
  24. package/dist/cjs/components/config-provider/ConfigProvider.js +16 -3
  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 +20 -15
  31. package/dist/cjs/components/datetime-picker/DatetimePicker.js +61 -84
  32. package/dist/cjs/components/datetime-picker/tokens.js +14 -3
  33. package/dist/cjs/components/dialog/Dialog.js +153 -121
  34. package/dist/cjs/components/dialog/imperative.js +17 -30
  35. package/dist/cjs/components/divider/Divider.js +26 -28
  36. package/dist/cjs/components/empty/Empty.js +35 -39
  37. package/dist/cjs/components/error-boundary/ErrorBoundary.js +73 -0
  38. package/dist/cjs/components/error-boundary/index.js +19 -0
  39. package/dist/cjs/components/field/Field.js +109 -106
  40. package/dist/cjs/components/flex/Flex.js +18 -18
  41. package/dist/cjs/components/flex/FlexItem.js +26 -27
  42. package/dist/cjs/components/form/Form.js +142 -161
  43. package/dist/cjs/components/form/FormItem.js +69 -97
  44. package/dist/cjs/components/form/FormList.js +49 -37
  45. package/dist/cjs/components/form/tokens.js +6 -3
  46. package/dist/cjs/components/form/utils.js +15 -34
  47. package/dist/cjs/components/grid/Grid.js +30 -29
  48. package/dist/cjs/components/grid/GridItem.js +84 -85
  49. package/dist/cjs/components/image/Image.js +55 -59
  50. package/dist/cjs/components/image/tokens.js +2 -2
  51. package/dist/cjs/components/image-preview/ImagePreview.js +124 -112
  52. package/dist/cjs/components/image-preview/imperative.js +4 -13
  53. package/dist/cjs/components/index.js +13 -0
  54. package/dist/cjs/components/input/Input.js +30 -22
  55. package/dist/cjs/components/loading/Loading.js +14 -15
  56. package/dist/cjs/components/nav-bar/NavBar.js +68 -83
  57. package/dist/cjs/components/nav-bar/tokens.js +1 -9
  58. package/dist/cjs/components/notice-bar/NoticeBar.js +74 -77
  59. package/dist/cjs/components/notify/Notify.js +88 -84
  60. package/dist/cjs/components/notify/imperative.js +20 -43
  61. package/dist/cjs/components/notify/tokens.js +1 -11
  62. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +187 -209
  63. package/dist/cjs/components/overlay/Overlay.js +37 -52
  64. package/dist/cjs/components/overlay/tokens.js +5 -3
  65. package/dist/cjs/components/password-input/PasswordInput.js +98 -79
  66. package/dist/cjs/components/picker/Picker.js +440 -421
  67. package/dist/cjs/components/picker/tokens.js +1 -1
  68. package/dist/cjs/components/popup/Popup.js +263 -293
  69. package/dist/cjs/components/portal/Portal.js +12 -29
  70. package/dist/cjs/components/portal/PortalHost.js +151 -234
  71. package/dist/cjs/components/progress/Progress.js +51 -48
  72. package/dist/cjs/components/radio/Radio.js +45 -42
  73. package/dist/cjs/components/radio/RadioGroup.js +8 -40
  74. package/dist/cjs/components/radio/tokens.js +7 -10
  75. package/dist/cjs/components/safe-area-view/SafeAreaView.js +22 -26
  76. package/dist/cjs/components/search/Search.js +51 -43
  77. package/dist/cjs/components/selector/Selector.js +14 -13
  78. package/dist/cjs/components/share-sheet/ShareSheet.js +160 -161
  79. package/dist/cjs/components/sidebar/Sidebar.js +39 -45
  80. package/dist/cjs/components/sidebar/SidebarContext.js +1 -2
  81. package/dist/cjs/components/sidebar/SidebarItem.js +13 -16
  82. package/dist/cjs/components/sidebar/tokens.js +1 -3
  83. package/dist/cjs/components/skeleton/Skeleton.js +30 -37
  84. package/dist/cjs/components/skeleton/tokens.js +1 -2
  85. package/dist/cjs/components/slider/Slider.js +156 -135
  86. package/dist/cjs/components/space/Space.js +46 -69
  87. package/dist/cjs/components/stepper/Stepper.js +177 -155
  88. package/dist/cjs/components/swiper/Swiper.js +251 -253
  89. package/dist/cjs/components/swiper/SwiperPagIndicator.js +25 -27
  90. package/dist/cjs/components/swiper/tokens.js +10 -3
  91. package/dist/cjs/components/switch/Switch.js +13 -15
  92. package/dist/cjs/components/tabbar/Tabbar.js +35 -27
  93. package/dist/cjs/components/tabbar/TabbarContext.js +1 -2
  94. package/dist/cjs/components/tabbar/TabbarItem.js +65 -68
  95. package/dist/cjs/components/tabs/Tabs.js +286 -313
  96. package/dist/cjs/components/tag/Tag.js +46 -37
  97. package/dist/cjs/components/toast/Toast.js +90 -90
  98. package/dist/cjs/components/toast/imperative.js +16 -41
  99. package/dist/cjs/components/typography/Typography.js +3 -5
  100. package/dist/cjs/components/water-mark/WaterMark.js +31 -29
  101. package/dist/cjs/design-system/ThemeProvider.js +5 -11
  102. package/dist/cjs/design-system/createComponentTokensHook.js +11 -13
  103. package/dist/cjs/design-system/presets.js +2 -3
  104. package/dist/cjs/design-system/tokens.js +2 -11
  105. package/dist/cjs/hooks/animation/index.js +25 -0
  106. package/dist/cjs/hooks/animation/useAnimatedTransition.js +72 -0
  107. package/dist/cjs/hooks/animation/useReducedMotion.js +75 -0
  108. package/dist/cjs/hooks/aria/useAriaListBox.js +8 -16
  109. package/dist/cjs/hooks/aria/useAriaOverlay.js +3 -3
  110. package/dist/cjs/hooks/aria/useAriaPress.js +8 -21
  111. package/dist/cjs/hooks/aria/useAriaToggle.js +3 -3
  112. package/dist/cjs/hooks/gesture/useGestureScroll.js +60 -61
  113. package/dist/cjs/hooks/index.js +12 -0
  114. package/dist/cjs/hooks/overlay/OverlayStackStore.js +49 -69
  115. package/dist/cjs/hooks/overlay/useOverlayStack.js +13 -19
  116. package/dist/cjs/hooks/useControllableValue.js +10 -21
  117. package/dist/cjs/hooks/useCountDown.js +14 -22
  118. package/dist/cjs/hooks/useHairline.js +17 -29
  119. package/dist/cjs/hooks/useSafeAreaPadding.js +1 -4
  120. package/dist/cjs/index.js +67 -1
  121. package/dist/cjs/platform/animation.js +10 -2
  122. package/dist/cjs/platform/measure.js +18 -36
  123. package/dist/cjs/utils/color.js +21 -35
  124. package/dist/cjs/utils/compare.js +7 -12
  125. package/dist/cjs/utils/createPlatformShadow.js +28 -39
  126. package/dist/cjs/utils/date.js +20 -50
  127. package/dist/cjs/utils/deepMerge.js +16 -26
  128. package/dist/cjs/utils/hairline.js +74 -71
  129. package/dist/cjs/utils/index.js +22 -0
  130. package/dist/cjs/utils/number.js +21 -29
  131. package/dist/cjs/utils/render.js +27 -0
  132. package/dist/cjs/utils/rtl.js +25 -0
  133. package/dist/cjs/utils/string.js +8 -25
  134. package/dist/es/components/action-sheet/ActionSheet.js +99 -107
  135. package/dist/es/components/action-sheet/tokens.js +16 -27
  136. package/dist/es/components/area/Area.js +55 -68
  137. package/dist/es/components/area/tokens.js +6 -3
  138. package/dist/es/components/avatar/Avatar.js +25 -23
  139. package/dist/es/components/avatar/index.js +1 -2
  140. package/dist/es/components/badge/Badge.js +33 -33
  141. package/dist/es/components/badge/tokens.js +6 -8
  142. package/dist/es/components/button/Button.js +116 -152
  143. package/dist/es/components/button/ButtonGroup.js +9 -43
  144. package/dist/es/components/button/tokens.js +2 -3
  145. package/dist/es/components/calendar/Calendar.js +214 -225
  146. package/dist/es/components/calendar/tokens.js +3 -3
  147. package/dist/es/components/cascader/Cascader.js +180 -183
  148. package/dist/es/components/cascader/tokens.js +2 -2
  149. package/dist/es/components/cascader/useCascaderExtend.js +25 -29
  150. package/dist/es/components/cell/Cell.js +71 -84
  151. package/dist/es/components/cell/CellGroup.js +16 -28
  152. package/dist/es/components/checkbox/Checkbox.js +140 -133
  153. package/dist/es/components/checkbox/CheckboxGroup.js +5 -36
  154. package/dist/es/components/checkbox/tokens.js +7 -10
  155. package/dist/es/components/circle/Circle.js +25 -23
  156. package/dist/es/components/collapse/Collapse.js +77 -92
  157. package/dist/es/components/config-provider/ConfigProvider.js +10 -3
  158. package/dist/es/components/config-provider/DirectionContext.js +2 -0
  159. package/dist/es/components/config-provider/index.js +1 -0
  160. package/dist/es/components/config-provider/locale/en-US.js +32 -0
  161. package/dist/es/components/config-provider/locale/zh-CN.js +32 -0
  162. package/dist/es/components/config-provider/useDirection.js +3 -0
  163. package/dist/es/components/count-down/CountDown.js +23 -18
  164. package/dist/es/components/datetime-picker/DatetimePicker.js +61 -84
  165. package/dist/es/components/datetime-picker/tokens.js +14 -3
  166. package/dist/es/components/dialog/Dialog.js +154 -121
  167. package/dist/es/components/dialog/imperative.js +17 -30
  168. package/dist/es/components/divider/Divider.js +28 -29
  169. package/dist/es/components/empty/Empty.js +36 -39
  170. package/dist/es/components/error-boundary/ErrorBoundary.js +61 -0
  171. package/dist/es/components/error-boundary/index.js +1 -0
  172. package/dist/es/components/field/Field.js +109 -106
  173. package/dist/es/components/flex/Flex.js +18 -17
  174. package/dist/es/components/flex/FlexItem.js +27 -27
  175. package/dist/es/components/form/Form.js +143 -162
  176. package/dist/es/components/form/FormItem.js +68 -95
  177. package/dist/es/components/form/FormList.js +49 -37
  178. package/dist/es/components/form/tokens.js +6 -3
  179. package/dist/es/components/form/utils.js +15 -34
  180. package/dist/es/components/grid/Grid.js +30 -28
  181. package/dist/es/components/grid/GridItem.js +84 -84
  182. package/dist/es/components/image/Image.js +58 -62
  183. package/dist/es/components/image/tokens.js +2 -2
  184. package/dist/es/components/image-preview/ImagePreview.js +124 -112
  185. package/dist/es/components/image-preview/imperative.js +4 -13
  186. package/dist/es/components/index.js +3 -1
  187. package/dist/es/components/input/Input.js +31 -23
  188. package/dist/es/components/loading/Loading.js +16 -16
  189. package/dist/es/components/nav-bar/NavBar.js +68 -83
  190. package/dist/es/components/nav-bar/tokens.js +1 -3
  191. package/dist/es/components/notice-bar/NoticeBar.js +74 -76
  192. package/dist/es/components/notify/Notify.js +92 -87
  193. package/dist/es/components/notify/imperative.js +21 -44
  194. package/dist/es/components/notify/tokens.js +1 -5
  195. package/dist/es/components/number-keyboard/NumberKeyboard.js +187 -209
  196. package/dist/es/components/overlay/Overlay.js +36 -51
  197. package/dist/es/components/overlay/tokens.js +5 -3
  198. package/dist/es/components/password-input/PasswordInput.js +98 -79
  199. package/dist/es/components/picker/Picker.js +440 -421
  200. package/dist/es/components/picker/tokens.js +1 -1
  201. package/dist/es/components/popup/Popup.js +263 -292
  202. package/dist/es/components/portal/Portal.js +13 -29
  203. package/dist/es/components/portal/PortalHost.js +152 -234
  204. package/dist/es/components/progress/Progress.js +51 -48
  205. package/dist/es/components/radio/Radio.js +47 -44
  206. package/dist/es/components/radio/RadioGroup.js +10 -41
  207. package/dist/es/components/radio/tokens.js +7 -10
  208. package/dist/es/components/safe-area-view/SafeAreaView.js +22 -25
  209. package/dist/es/components/search/Search.js +52 -44
  210. package/dist/es/components/selector/Selector.js +14 -13
  211. package/dist/es/components/share-sheet/ShareSheet.js +162 -163
  212. package/dist/es/components/sidebar/Sidebar.js +41 -47
  213. package/dist/es/components/sidebar/SidebarContext.js +1 -2
  214. package/dist/es/components/sidebar/SidebarItem.js +13 -15
  215. package/dist/es/components/sidebar/tokens.js +1 -3
  216. package/dist/es/components/skeleton/Skeleton.js +30 -37
  217. package/dist/es/components/skeleton/tokens.js +1 -2
  218. package/dist/es/components/slider/Slider.js +156 -134
  219. package/dist/es/components/space/Space.js +48 -71
  220. package/dist/es/components/stepper/Stepper.js +178 -156
  221. package/dist/es/components/swiper/Swiper.js +252 -254
  222. package/dist/es/components/swiper/SwiperPagIndicator.js +25 -27
  223. package/dist/es/components/swiper/tokens.js +10 -3
  224. package/dist/es/components/switch/Switch.js +13 -15
  225. package/dist/es/components/tabbar/Tabbar.js +36 -28
  226. package/dist/es/components/tabbar/TabbarContext.js +1 -2
  227. package/dist/es/components/tabbar/TabbarItem.js +66 -69
  228. package/dist/es/components/tabs/Tabs.js +286 -313
  229. package/dist/es/components/tag/Tag.js +49 -39
  230. package/dist/es/components/toast/Toast.js +93 -91
  231. package/dist/es/components/toast/imperative.js +16 -41
  232. package/dist/es/components/typography/Typography.js +3 -5
  233. package/dist/es/components/water-mark/WaterMark.js +32 -30
  234. package/dist/es/design-system/ThemeProvider.js +5 -11
  235. package/dist/es/design-system/createComponentTokensHook.js +11 -13
  236. package/dist/es/design-system/presets.js +2 -3
  237. package/dist/es/design-system/tokens.js +1 -9
  238. package/dist/es/hooks/animation/index.js +2 -0
  239. package/dist/es/hooks/animation/useAnimatedTransition.js +53 -0
  240. package/dist/es/hooks/animation/useReducedMotion.js +54 -0
  241. package/dist/es/hooks/aria/useAriaListBox.js +8 -16
  242. package/dist/es/hooks/aria/useAriaOverlay.js +3 -3
  243. package/dist/es/hooks/aria/useAriaPress.js +8 -21
  244. package/dist/es/hooks/aria/useAriaToggle.js +3 -3
  245. package/dist/es/hooks/gesture/useGestureScroll.js +60 -61
  246. package/dist/es/hooks/index.js +1 -0
  247. package/dist/es/hooks/overlay/OverlayStackStore.js +49 -69
  248. package/dist/es/hooks/overlay/useOverlayStack.js +13 -19
  249. package/dist/es/hooks/useControllableValue.js +10 -21
  250. package/dist/es/hooks/useCountDown.js +14 -22
  251. package/dist/es/hooks/useHairline.js +16 -28
  252. package/dist/es/hooks/useSafeAreaPadding.js +1 -4
  253. package/dist/es/index.js +8 -1
  254. package/dist/es/platform/animation.js +9 -1
  255. package/dist/es/platform/measure.js +18 -36
  256. package/dist/es/utils/color.js +21 -35
  257. package/dist/es/utils/compare.js +7 -12
  258. package/dist/es/utils/createPlatformShadow.js +28 -39
  259. package/dist/es/utils/date.js +20 -50
  260. package/dist/es/utils/deepMerge.js +16 -26
  261. package/dist/es/utils/hairline.js +73 -65
  262. package/dist/es/utils/index.js +2 -0
  263. package/dist/es/utils/number.js +21 -29
  264. package/dist/es/utils/render.js +7 -0
  265. package/dist/es/utils/rtl.js +17 -0
  266. package/dist/es/utils/string.js +8 -25
  267. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -1
  268. package/dist/types/components/area/Area.d.ts +1 -1
  269. package/dist/types/components/area/tokens.d.ts +4 -0
  270. package/dist/types/components/avatar/Avatar.d.ts +1 -1
  271. package/dist/types/components/avatar/index.d.ts +1 -2
  272. package/dist/types/components/badge/Badge.d.ts +1 -1
  273. package/dist/types/components/button/Button.d.ts +1 -1
  274. package/dist/types/components/button/index.d.ts +1 -1
  275. package/dist/types/components/calendar/Calendar.d.ts +1 -1
  276. package/dist/types/components/cascader/Cascader.d.ts +1 -1
  277. package/dist/types/components/cell/Cell.d.ts +1 -1
  278. package/dist/types/components/cell/CellGroup.d.ts +1 -1
  279. package/dist/types/components/cell/index.d.ts +2 -2
  280. package/dist/types/components/checkbox/Checkbox.d.ts +1 -1
  281. package/dist/types/components/circle/Circle.d.ts +1 -1
  282. package/dist/types/components/collapse/Collapse.d.ts +1 -2
  283. package/dist/types/components/config-provider/DirectionContext.d.ts +3 -0
  284. package/dist/types/components/config-provider/index.d.ts +2 -1
  285. package/dist/types/components/config-provider/locale/en-US.d.ts +32 -0
  286. package/dist/types/components/config-provider/locale/zh-CN.d.ts +32 -0
  287. package/dist/types/components/config-provider/useDirection.d.ts +1 -0
  288. package/dist/types/components/count-down/CountDown.d.ts +1 -1
  289. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -1
  290. package/dist/types/components/datetime-picker/tokens.d.ts +12 -0
  291. package/dist/types/components/dialog/Dialog.d.ts +1 -1
  292. package/dist/types/components/divider/Divider.d.ts +1 -1
  293. package/dist/types/components/empty/Empty.d.ts +1 -1
  294. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +6 -0
  295. package/dist/types/components/error-boundary/index.d.ts +2 -0
  296. package/dist/types/components/field/Field.d.ts +1 -1
  297. package/dist/types/components/flex/Flex.d.ts +1 -1
  298. package/dist/types/components/flex/FlexItem.d.ts +1 -1
  299. package/dist/types/components/flex/index.d.ts +2 -2
  300. package/dist/types/components/form/Form.d.ts +1 -1
  301. package/dist/types/components/form/FormItem.d.ts +2 -1
  302. package/dist/types/components/form/index.d.ts +2 -2
  303. package/dist/types/components/form/tokens.d.ts +4 -0
  304. package/dist/types/components/grid/Grid.d.ts +1 -1
  305. package/dist/types/components/grid/GridItem.d.ts +1 -1
  306. package/dist/types/components/grid/index.d.ts +2 -2
  307. package/dist/types/components/image/Image.d.ts +1 -1
  308. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -1
  309. package/dist/types/components/index.d.ts +4 -1
  310. package/dist/types/components/input/Input.d.ts +3 -3
  311. package/dist/types/components/loading/Loading.d.ts +1 -1
  312. package/dist/types/components/nav-bar/NavBar.d.ts +1 -1
  313. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -1
  314. package/dist/types/components/notify/Notify.d.ts +2 -2
  315. package/dist/types/components/notify/index.d.ts +1 -1
  316. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  317. package/dist/types/components/overlay/tokens.d.ts +3 -0
  318. package/dist/types/components/password-input/PasswordInput.d.ts +1 -1
  319. package/dist/types/components/picker/Picker.d.ts +5 -5
  320. package/dist/types/components/popup/Popup.d.ts +3 -42
  321. package/dist/types/components/portal/Portal.d.ts +9 -6
  322. package/dist/types/components/portal/PortalHost.d.ts +1 -1
  323. package/dist/types/components/radio/RadioGroup.d.ts +1 -1
  324. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -1
  325. package/dist/types/components/search/Search.d.ts +1 -1
  326. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -1
  327. package/dist/types/components/sidebar/Sidebar.d.ts +1 -1
  328. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -1
  329. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -1
  330. package/dist/types/components/sidebar/index.d.ts +2 -2
  331. package/dist/types/components/skeleton/Skeleton.d.ts +1 -1
  332. package/dist/types/components/slider/Slider.d.ts +1 -1
  333. package/dist/types/components/stepper/Stepper.d.ts +1 -1
  334. package/dist/types/components/swiper/Swiper.d.ts +1 -1
  335. package/dist/types/components/swiper/index.d.ts +1 -1
  336. package/dist/types/components/swiper/tokens.d.ts +8 -0
  337. package/dist/types/components/tabbar/Tabbar.d.ts +2 -2
  338. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -1
  339. package/dist/types/components/tabbar/TabbarItem.d.ts +2 -2
  340. package/dist/types/components/tabs/Tabs.d.ts +1 -1
  341. package/dist/types/components/tabs/index.d.ts +1 -1
  342. package/dist/types/components/tag/Tag.d.ts +1 -1
  343. package/dist/types/components/toast/Toast.d.ts +2 -2
  344. package/dist/types/components/toast/index.d.ts +1 -1
  345. package/dist/types/components/water-mark/WaterMark.d.ts +1 -1
  346. package/dist/types/design-system/tokens.d.ts +0 -1
  347. package/dist/types/hooks/animation/index.d.ts +3 -0
  348. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +13 -0
  349. package/dist/types/hooks/animation/useReducedMotion.d.ts +3 -0
  350. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -1
  351. package/dist/types/hooks/gesture/useGestureScroll.d.ts +11 -10
  352. package/dist/types/hooks/index.d.ts +1 -0
  353. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +8 -8
  354. package/dist/types/hooks/useHairline.d.ts +1 -1
  355. package/dist/types/index.d.ts +5 -0
  356. package/dist/types/platform/animation.d.ts +8 -0
  357. package/dist/types/platform/measure.d.ts +1 -1
  358. package/dist/types/utils/compare.d.ts +1 -1
  359. package/dist/types/utils/createPlatformShadow.d.ts +2 -2
  360. package/dist/types/utils/date.d.ts +2 -2
  361. package/dist/types/utils/hairline.d.ts +5 -10
  362. package/dist/types/utils/index.d.ts +2 -0
  363. package/dist/types/utils/number.d.ts +2 -2
  364. package/dist/types/utils/render.d.ts +5 -0
  365. package/dist/types/utils/rtl.d.ts +5 -0
  366. package/package.json +10 -3
@@ -1,9 +1,9 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
2
  import React, { useCallback, useMemo, useRef } from 'react';
3
- import { Pressable, Text, View } from 'react-native';
3
+ import { Pressable, View } from 'react-native';
4
4
  import { Close } from 'react-native-system-icon';
5
5
  import { useAriaPress } from '../../hooks';
6
- import { createHairlineBorderBottom, isRenderable, isText } from '../../utils';
6
+ import { createHairlineView, isRenderable, isText, renderTextOrNode } from '../../utils';
7
7
  import Loading from '../loading';
8
8
  import Popup from '../popup';
9
9
  import { useActionSheetTokens } from './tokens';
@@ -28,83 +28,74 @@ const ActionSheetHeader = /*#__PURE__*/React.memo(({
28
28
  style: tokens.layout.header
29
29
  }, /*#__PURE__*/React.createElement(View, {
30
30
  style: tokens.layout.titleContainer
31
- }, isText(title) ? /*#__PURE__*/React.createElement(Text, {
32
- style: [tokens.layout.title, {
33
- color: colors.title,
34
- fontSize: typography.title
35
- }]
36
- }, title) : /*#__PURE__*/React.createElement(View, {
31
+ }, isText(title) ? renderTextOrNode(title, [tokens.layout.title, {
32
+ color: colors.title,
33
+ fontSize: typography.title
34
+ }]) : /*#__PURE__*/React.createElement(View, {
37
35
  style: tokens.layout.titleNode
38
- }, title)), closeable ? /*#__PURE__*/React.createElement(Pressable, _extends({
36
+ }, title)), closeable && /*#__PURE__*/React.createElement(Pressable, _extends({
39
37
  style: tokens.layout.closeButton,
40
38
  accessibilityRole: "button",
41
39
  hitSlop: 8
42
40
  }, closePress.interactionProps), /*#__PURE__*/React.isValidElement(closeIcon) ? /*#__PURE__*/React.cloneElement(closeIcon, {
43
41
  fill: colors.description,
44
42
  color: colors.description
45
- }) : closeIcon) : null);
43
+ }) : closeIcon));
46
44
  });
47
- ActionSheetHeader.displayName = 'ActionSheetHeader';
48
45
  const ActionSheetItem = /*#__PURE__*/React.memo(({
49
46
  action,
50
47
  index,
51
48
  tokens,
52
49
  onActionPress
53
50
  }) => {
54
- const disabled = !!action.disabled;
55
- const loading = !!action.loading;
51
+ const {
52
+ disabled,
53
+ loading,
54
+ name,
55
+ subname,
56
+ icon
57
+ } = action;
56
58
  const {
57
59
  colors,
58
60
  spacing,
59
61
  typography
60
62
  } = tokens;
61
- const handlePress = useCallback(() => onActionPress(action, index), [action, index, onActionPress]);
62
63
  const actionPress = useAriaPress({
63
- disabled: disabled || loading,
64
- onPress: handlePress,
64
+ disabled: !!disabled || !!loading,
65
+ onPress: useCallback(() => onActionPress(action, index), [action, index, onActionPress]),
65
66
  extraProps: {
66
- accessibilityRole: 'button',
67
+ accessibilityRole: 'menuitem',
68
+ accessibilityLabel: isText(name) ? String(name) : undefined,
67
69
  accessibilityState: {
68
- disabled,
69
- busy: loading
70
+ disabled: !!disabled,
71
+ busy: !!loading
70
72
  },
71
73
  testID: `rv-action-sheet-item-${index}`
72
74
  }
73
75
  });
74
- const color = action.color ?? colors.item;
75
- const name = action.name;
76
- const subname = action.subname;
77
- const hasIcon = !!action.icon;
78
- const hasName = isRenderable(name);
79
- const hasSubname = isRenderable(subname);
80
76
  return /*#__PURE__*/React.createElement(Pressable, _extends({
81
77
  style: ({
82
78
  pressed
83
- }) => [tokens.layout.item, hasIcon && tokens.layout.itemWithIcon, {
79
+ }) => [tokens.layout.item, !!icon && tokens.layout.itemWithIcon, {
84
80
  paddingVertical: spacing.vertical,
85
81
  paddingHorizontal: spacing.horizontal,
86
- backgroundColor: pressed && !disabled && !loading ? colors.itemPressedBackground : colors.itemBackground
82
+ backgroundColor: pressed && !action.disabled && !action.loading ? colors.itemPressedBackground : colors.itemBackground
87
83
  }, action.style]
88
- }, actionPress.interactionProps), hasIcon && /*#__PURE__*/React.createElement(View, {
84
+ }, actionPress.interactionProps), !!icon && /*#__PURE__*/React.createElement(View, {
89
85
  style: tokens.layout.icon
90
- }, action.icon), loading ? /*#__PURE__*/React.createElement(Loading, {
86
+ }, icon), loading ? /*#__PURE__*/React.createElement(Loading, {
91
87
  size: 20
92
- }) : hasName ? /*#__PURE__*/React.createElement(View, {
88
+ }) : isRenderable(name) ? /*#__PURE__*/React.createElement(View, {
93
89
  style: tokens.layout.itemTextWrapper
94
- }, isText(name) ? /*#__PURE__*/React.createElement(Text, {
95
- style: [tokens.layout.itemText, {
96
- color: disabled ? colors.disabled : color,
97
- fontSize: typography.item
98
- }]
99
- }, name) : name, hasSubname ? isText(subname) ? /*#__PURE__*/React.createElement(Text, {
100
- style: [tokens.layout.subname, {
101
- color: colors.subitem
102
- }]
103
- }, subname) : /*#__PURE__*/React.createElement(View, {
90
+ }, renderTextOrNode(name, [tokens.layout.itemText, {
91
+ color: action.disabled ? colors.disabled : action.color ?? colors.item,
92
+ fontSize: typography.item
93
+ }]), isRenderable(subname) && (isText(subname) ? renderTextOrNode(subname, [tokens.layout.subname, {
94
+ color: colors.subitem
95
+ }]) : /*#__PURE__*/React.createElement(View, {
104
96
  style: tokens.layout.subnameNode
105
- }, subname) : null) : null);
97
+ }, subname))) : null);
106
98
  });
107
- ActionSheetItem.displayName = 'ActionSheetItem';
108
99
  const ActionSheetCancel = /*#__PURE__*/React.memo(({
109
100
  cancelText,
110
101
  tokens,
@@ -133,15 +124,12 @@ const ActionSheetCancel = /*#__PURE__*/React.memo(({
133
124
  paddingHorizontal: spacing.horizontal,
134
125
  backgroundColor: colors.cancelBackground
135
126
  }]
136
- }, cancelPress.interactionProps), isText(cancelText) ? /*#__PURE__*/React.createElement(Text, {
137
- style: [tokens.layout.cancelText, {
138
- color: colors.cancel,
139
- fontSize: typography.item
140
- }]
141
- }, cancelText) : cancelText));
127
+ }, cancelPress.interactionProps), renderTextOrNode(cancelText, [tokens.layout.cancelText, {
128
+ color: colors.cancel,
129
+ fontSize: typography.item
130
+ }])));
142
131
  });
143
- ActionSheetCancel.displayName = 'ActionSheetCancel';
144
- const ActionSheet = props => {
132
+ const ActionSheetImpl = props => {
145
133
  const {
146
134
  tokensOverride,
147
135
  visible,
@@ -177,24 +165,31 @@ const ActionSheet = props => {
177
165
  const hasCancelText = isRenderable(cancelText);
178
166
  const lastPopupCloseReasonRef = useRef('close');
179
167
  const closingRef = useRef(false);
168
+ const beforeCloseRef = useRef(beforeClose);
169
+ beforeCloseRef.current = beforeClose;
170
+ const onCloseRef = useRef(onClose);
171
+ onCloseRef.current = onClose;
172
+ const onCancelRef = useRef(onCancel);
173
+ onCancelRef.current = onCancel;
174
+ const onSelectRef = useRef(onSelect);
175
+ onSelectRef.current = onSelect;
180
176
  const runBeforeClose = useCallback(async action => {
181
- if (!beforeClose) return true;
177
+ if (!beforeCloseRef.current) return true;
182
178
  try {
183
- return (await beforeClose(action)) !== false;
184
- } catch (error) {
179
+ return (await beforeCloseRef.current(action)) !== false;
180
+ } catch {
185
181
  return true;
186
182
  }
187
- }, [beforeClose]);
183
+ }, []);
188
184
  const emitClose = useCallback(reason => {
189
- if (onClose) {
190
- if (reason === 'cancel') {
191
- onCancel?.();
192
- }
193
- onClose();
185
+ if (onCloseRef.current) {
186
+ if (reason === 'cancel') onCancelRef.current?.();
187
+ onCloseRef.current();
194
188
  return;
195
189
  }
196
- onCancel?.();
197
- }, [onCancel, onClose]);
190
+ ;
191
+ onCancelRef.current?.();
192
+ }, []);
198
193
  const requestClose = useCallback(async action => {
199
194
  if (closingRef.current) return;
200
195
  closingRef.current = true;
@@ -207,9 +202,8 @@ const ActionSheet = props => {
207
202
  }
208
203
  }, [emitClose, runBeforeClose]);
209
204
  const handlePopupBeforeClose = useCallback(reason => {
210
- const action = reason === 'close-icon' ? 'close-icon' : reason === 'overlay' ? 'overlay' : 'close';
211
- lastPopupCloseReasonRef.current = action;
212
- return runBeforeClose(action);
205
+ lastPopupCloseReasonRef.current = reason;
206
+ return runBeforeClose(reason);
213
207
  }, [runBeforeClose]);
214
208
  const handlePopupClose = useCallback(() => {
215
209
  emitClose(lastPopupCloseReasonRef.current);
@@ -221,65 +215,63 @@ const ActionSheet = props => {
221
215
  void requestClose('close-icon');
222
216
  }, [requestClose]);
223
217
  const handleActionPress = useCallback((action, index) => {
224
- if (action.disabled || action.loading) {
225
- return;
226
- }
218
+ if (action.disabled || action.loading) return;
227
219
  action.onPress?.(action);
228
220
  action.callback?.(action);
229
- onSelect?.(action, index);
230
- if (shouldCloseOnClickAction) {
231
- void requestClose('action');
232
- }
233
- }, [onSelect, requestClose, shouldCloseOnClickAction]);
234
- const popupStyleMemo = useMemo(() => [tokens.layout.popup, popupStyle], [popupStyle, tokens.layout.popup]);
235
- const panelStyle = useMemo(() => [tokens.layout.panel, {
236
- backgroundColor: tokens.colors.background
237
- }], [tokens.colors.background, tokens.layout.panel]);
238
- const headerNode = useMemo(() => hasTitle ? /*#__PURE__*/React.createElement(ActionSheetHeader, {
221
+ onSelectRef.current?.(action, index);
222
+ if (shouldCloseOnClickAction) void requestClose('action');
223
+ }, [requestClose, shouldCloseOnClickAction]);
224
+ const popupStyleMemo = useMemo(() => [tokens.layout.popup, popupStyle], [tokens.layout.popup, popupStyle]);
225
+ return /*#__PURE__*/React.createElement(Popup, _extends({
226
+ visible: visible,
227
+ placement: "bottom",
228
+ round: round,
229
+ safeAreaInsetTop: hasTitle && closeable,
230
+ safeAreaInsetBottom: safeAreaInsetBottom,
231
+ overlay: overlay,
232
+ lockScroll: lockScroll,
233
+ beforeClose: handlePopupBeforeClose,
234
+ onClose: handlePopupClose,
235
+ style: popupStyleMemo
236
+ }, popupProps), /*#__PURE__*/React.createElement(View, {
237
+ accessibilityRole: "menu",
238
+ style: [tokens.layout.panel, {
239
+ backgroundColor: tokens.colors.background
240
+ }]
241
+ }, hasTitle && /*#__PURE__*/React.createElement(ActionSheetHeader, {
239
242
  title: title,
240
243
  closeable: closeable,
241
244
  closeIcon: closeIcon,
242
245
  tokens: tokens,
243
246
  onClose: handleCloseIcon
244
- }) : null, [closeIcon, closeable, handleCloseIcon, hasTitle, title, tokens]);
245
- const descriptionNode = useMemo(() => hasDescription ? /*#__PURE__*/React.createElement(View, {
246
- style: [tokens.layout.descriptionContainer, createHairlineBorderBottom(tokens.colors.border)]
247
- }, isText(description) ? /*#__PURE__*/React.createElement(Text, {
248
- style: [tokens.layout.description, {
249
- color: tokens.colors.description,
250
- fontSize: tokens.typography.description
251
- }]
252
- }, description) : /*#__PURE__*/React.createElement(View, {
247
+ }), hasDescription && /*#__PURE__*/React.createElement(View, {
248
+ style: tokens.layout.descriptionContainer
249
+ }, isText(description) ? renderTextOrNode(description, [tokens.layout.description, {
250
+ color: tokens.colors.description,
251
+ fontSize: tokens.typography.description
252
+ }]) : /*#__PURE__*/React.createElement(View, {
253
253
  style: tokens.layout.descriptionNode
254
- }, description)) : null, [description, hasDescription, tokens.colors.border, tokens.colors.description, tokens.layout.description, tokens.layout.descriptionContainer, tokens.layout.descriptionNode, tokens.typography.description]);
255
- const actionNodes = useMemo(() => actions.map((action, index) => /*#__PURE__*/React.createElement(ActionSheetItem, {
254
+ }, description), /*#__PURE__*/React.createElement(View, {
255
+ style: createHairlineView({
256
+ position: 'bottom',
257
+ color: tokens.colors.border,
258
+ left: 0,
259
+ right: 0
260
+ })
261
+ })), /*#__PURE__*/React.createElement(View, {
262
+ style: tokens.layout.actions
263
+ }, actions.map((action, index) => /*#__PURE__*/React.createElement(ActionSheetItem, {
256
264
  key: action.key ?? index,
257
265
  action: action,
258
266
  index: index,
259
267
  tokens: tokens,
260
268
  onActionPress: handleActionPress
261
- })), [actions, handleActionPress, tokens]);
262
- const cancelNode = useMemo(() => hasCancelText ? /*#__PURE__*/React.createElement(ActionSheetCancel, {
269
+ }))), children, hasCancelText && /*#__PURE__*/React.createElement(ActionSheetCancel, {
263
270
  cancelText: cancelText,
264
271
  tokens: tokens,
265
272
  onPress: handleCancel
266
- }) : null, [cancelText, handleCancel, hasCancelText, tokens]);
267
- return /*#__PURE__*/React.createElement(Popup, _extends({
268
- visible: visible,
269
- placement: "bottom",
270
- round: round,
271
- safeAreaInsetTop: hasTitle && closeable,
272
- safeAreaInsetBottom: safeAreaInsetBottom,
273
- overlay: overlay,
274
- lockScroll: lockScroll,
275
- beforeClose: handlePopupBeforeClose,
276
- onClose: handlePopupClose,
277
- style: popupStyleMemo
278
- }, popupProps), /*#__PURE__*/React.createElement(View, {
279
- style: panelStyle
280
- }, headerNode, descriptionNode, /*#__PURE__*/React.createElement(View, {
281
- style: tokens.layout.actions
282
- }, actionNodes), children, cancelNode));
273
+ })));
283
274
  };
275
+ const ActionSheet = /*#__PURE__*/React.memo(ActionSheetImpl);
284
276
  ActionSheet.displayName = 'ActionSheet';
285
277
  export default ActionSheet;
@@ -1,10 +1,15 @@
1
1
  import { createComponentTokensHook } from '../../design-system';
2
+ const centered = {
3
+ alignItems: 'center',
4
+ justifyContent: 'center'
5
+ };
2
6
  export const createActionSheetTokens = foundations => {
3
7
  const {
4
8
  palette,
5
9
  spacing,
6
10
  fontSize
7
11
  } = foundations;
12
+ const white = '#ffffff';
8
13
  return {
9
14
  defaults: {
10
15
  closeOnClickAction: false,
@@ -27,31 +32,25 @@ export const createActionSheetTokens = foundations => {
27
32
  header: {
28
33
  position: 'relative',
29
34
  flexDirection: 'row',
30
- alignItems: 'center',
31
- justifyContent: 'center',
35
+ ...centered,
32
36
  paddingHorizontal: 16
33
37
  },
34
38
  titleContainer: {
35
39
  flex: 1,
36
- alignItems: 'center',
37
- justifyContent: 'center'
40
+ ...centered
38
41
  },
39
42
  title: {
40
43
  fontWeight: '600',
41
44
  textAlign: 'center'
42
45
  },
43
- titleNode: {
44
- alignItems: 'center',
45
- justifyContent: 'center'
46
- },
46
+ titleNode: centered,
47
47
  closeButton: {
48
48
  position: 'absolute',
49
49
  top: 0,
50
50
  right: 0,
51
51
  width: 48,
52
52
  height: 48,
53
- alignItems: 'center',
54
- justifyContent: 'center'
53
+ ...centered
55
54
  },
56
55
  descriptionContainer: {
57
56
  paddingTop: 12,
@@ -62,26 +61,19 @@ export const createActionSheetTokens = foundations => {
62
61
  textAlign: 'center',
63
62
  lineHeight: 20
64
63
  },
65
- descriptionNode: {
66
- alignItems: 'center',
67
- justifyContent: 'center'
68
- },
64
+ descriptionNode: centered,
69
65
  actions: {
70
66
  width: '100%'
71
67
  },
72
68
  item: {
73
- alignItems: 'center',
74
- justifyContent: 'center',
69
+ ...centered,
75
70
  width: '100%'
76
71
  },
77
72
  itemWithIcon: {
78
73
  flexDirection: 'row',
79
74
  justifyContent: 'center'
80
75
  },
81
- itemTextWrapper: {
82
- alignItems: 'center',
83
- justifyContent: 'center'
84
- },
76
+ itemTextWrapper: centered,
85
77
  itemText: {
86
78
  lineHeight: 24
87
79
  },
@@ -100,16 +92,13 @@ export const createActionSheetTokens = foundations => {
100
92
  width: '100%',
101
93
  marginBottom: 0
102
94
  },
103
- cancel: {
104
- alignItems: 'center',
105
- justifyContent: 'center'
106
- },
95
+ cancel: centered,
107
96
  cancelText: {
108
97
  lineHeight: 24
109
98
  }
110
99
  },
111
100
  colors: {
112
- background: '#ffffff',
101
+ background: white,
113
102
  title: palette.default[900],
114
103
  description: palette.default[500],
115
104
  item: palette.default[900],
@@ -117,9 +106,9 @@ export const createActionSheetTokens = foundations => {
117
106
  cancel: palette.default[900],
118
107
  disabled: palette.default[400],
119
108
  border: palette.default[200],
120
- itemBackground: '#ffffff',
109
+ itemBackground: white,
121
110
  itemPressedBackground: palette.default[100],
122
- cancelBackground: '#ffffff',
111
+ cancelBackground: white,
123
112
  cancelGapBackground: palette.default[100] ?? '#f1f2f5'
124
113
  },
125
114
  typography: {
@@ -1,57 +1,39 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
- import React, { useCallback, useMemo } from 'react';
2
+ import React, { useCallback, useMemo, useRef } from 'react';
3
3
  import Picker from '../picker';
4
- const compareCode = (a, b) => a < b ? -1 : a > b ? 1 : 0;
5
- const sortEntries = records => {
6
- if (!records) return [];
7
- return Object.entries(records).sort(([a], [b]) => compareCode(a, b));
8
- };
4
+ import { useAreaTokens } from './tokens';
5
+ const sortEntries = record => record ? Object.entries(record).sort(([a], [b]) => a.localeCompare(b)) : [];
9
6
  const getProvinceCode = code => code.slice(0, 2);
10
7
  const getCityCode = code => code.slice(0, 4);
11
- const buildAreaColumns = (areaList, columnsNum = 3) => {
12
- const provinces = sortEntries(areaList.province_list);
13
- if (columnsNum === 1) {
14
- return provinces.map(([code, name]) => ({
8
+ const groupBy = (list, getKey) => {
9
+ const map = new Map();
10
+ sortEntries(list).forEach(([code, name]) => {
11
+ const key = getKey(code);
12
+ const array = map.get(key);
13
+ if (array) array.push({
15
14
  label: name,
16
15
  value: code
17
- }));
18
- }
19
- const citiesByProvince = new Map();
20
- sortEntries(areaList.city_list).forEach(([code, name]) => {
21
- const provinceKey = getProvinceCode(code);
22
- const option = {
16
+ });else map.set(key, [{
23
17
  label: name,
24
18
  value: code
25
- };
26
- const existing = citiesByProvince.get(provinceKey);
27
- if (existing) {
28
- existing.push(option);
29
- } else {
30
- citiesByProvince.set(provinceKey, [option]);
31
- }
19
+ }]);
32
20
  });
21
+ return map;
22
+ };
23
+ const buildAreaColumns = (areaList, columnsNum = 3) => {
24
+ const provinces = sortEntries(areaList.province_list);
25
+ if (columnsNum === 1) return provinces.map(([code, name]) => ({
26
+ label: name,
27
+ value: code
28
+ }));
29
+ const citiesByProvince = groupBy(areaList.city_list, getProvinceCode);
33
30
  if (columnsNum === 3) {
34
- const countiesByCity = new Map();
35
- sortEntries(areaList.county_list).forEach(([code, name]) => {
36
- const cityKey = getCityCode(code);
37
- const option = {
38
- label: name,
39
- value: code
40
- };
41
- const existing = countiesByCity.get(cityKey);
42
- if (existing) {
43
- existing.push(option);
44
- } else {
45
- countiesByCity.set(cityKey, [option]);
46
- }
47
- });
48
- citiesByProvince.forEach(cityOptions => {
49
- cityOptions.forEach(cityOption => {
50
- const cityKey = getCityCode(cityOption.value);
31
+ const countiesByCity = groupBy(areaList.county_list, getCityCode);
32
+ citiesByProvince.forEach(cityOption => {
33
+ cityOption.forEach(cityOption2 => {
34
+ const cityKey = getCityCode(cityOption2.value);
51
35
  const counties = countiesByCity.get(cityKey);
52
- if (counties && counties.length) {
53
- cityOption.children = counties;
54
- }
36
+ if (counties && counties.length) cityOption2.children = counties;
55
37
  });
56
38
  });
57
39
  }
@@ -62,39 +44,38 @@ const buildAreaColumns = (areaList, columnsNum = 3) => {
62
44
  };
63
45
  const provinceKey = getProvinceCode(code);
64
46
  const cities = citiesByProvince.get(provinceKey);
65
- if (cities && cities.length) {
66
- provinceOption.children = cities;
67
- }
47
+ if (cities && cities.length) provinceOption.children = cities;
68
48
  return provinceOption;
69
49
  });
70
50
  };
71
- const normalizeCascadeValue = (root, raw, depth) => {
72
- if (!raw) return raw;
73
- const input = Array.isArray(raw) ? raw.map(String) : [String(raw)];
51
+ const normalizeCascadeValue = (root, rawValue, depth) => {
52
+ if (!rawValue) return rawValue;
53
+ const inputArray = Array.isArray(rawValue) ? rawValue.map(String) : [String(rawValue)];
74
54
  const result = [];
75
55
  let options = root;
76
56
  for (let i = 0; i < depth; i += 1) {
77
57
  if (!options?.length) break;
78
- const wanted = input[i];
79
- const nextOption = options.find(o => String(o.value) === wanted) ?? options[0];
58
+ const wantedValue = inputArray[i];
59
+ const nextOption = options.find(option => String(option.value) === wantedValue) ?? options[0];
80
60
  if (!nextOption) break;
81
61
  result.push(String(nextOption.value));
82
62
  options = nextOption.children;
83
63
  }
84
64
  return result;
85
65
  };
86
- const Area = props => {
66
+ const AreaImpl = props => {
67
+ const tokens = useAreaTokens();
87
68
  const {
88
69
  areaList,
89
- columnsNum = 3,
70
+ columnsNum: columnsNumProp = tokens.defaults.columnsNum,
90
71
  value,
91
72
  defaultValue,
92
73
  onChange,
93
74
  onConfirm,
94
- interactionMode = 'sync',
95
- ...pickerProps
75
+ interactionMode: interactionModeProp = tokens.defaults.interactionMode,
76
+ ...rest
96
77
  } = props;
97
- const resolvedColumnsNum = useMemo(() => columnsNum === 1 || columnsNum === 2 || columnsNum === 3 ? columnsNum : 3, [columnsNum]);
78
+ const resolvedColumnsNum = useMemo(() => columnsNumProp >= 1 && columnsNumProp <= 3 ? columnsNumProp : tokens.defaults.columnsNum, [columnsNumProp]);
98
79
  const {
99
80
  province_list,
100
81
  city_list,
@@ -105,22 +86,28 @@ const Area = props => {
105
86
  city_list,
106
87
  county_list
107
88
  }, resolvedColumnsNum), [city_list, county_list, province_list, resolvedColumnsNum]);
108
- const normalizedValue = useMemo(() => value === undefined ? undefined : normalizeCascadeValue(columns, value, resolvedColumnsNum), [columns, resolvedColumnsNum, value]);
109
- const normalizedDefaultValue = useMemo(() => defaultValue === undefined ? undefined : normalizeCascadeValue(columns, defaultValue, resolvedColumnsNum), [columns, defaultValue, resolvedColumnsNum]);
110
- const handleChange = useCallback((values, options) => {
111
- onChange?.(values.map(String), options);
112
- }, [onChange]);
113
- const handleConfirm = useCallback((values, options) => {
114
- onConfirm?.(values.map(String), options);
115
- }, [onConfirm]);
116
- return /*#__PURE__*/React.createElement(Picker, _extends({}, pickerProps, {
89
+ const normalize = useCallback(val => val === undefined ? undefined : normalizeCascadeValue(columns, val, resolvedColumnsNum), [columns, resolvedColumnsNum]);
90
+ const normalizedValue = useMemo(() => normalize(value), [normalize, value]);
91
+ const normalizedDefaultValue = useMemo(() => normalize(defaultValue), [normalize, defaultValue]);
92
+ const onChangeRef = useRef(onChange);
93
+ onChangeRef.current = onChange;
94
+ const onConfirmRef = useRef(onConfirm);
95
+ onConfirmRef.current = onConfirm;
96
+ const wrappedOnChange = useCallback((values, options) => {
97
+ onChangeRef.current?.(values.map(String), options);
98
+ }, []);
99
+ const wrappedOnConfirm = useCallback((values, options) => {
100
+ onConfirmRef.current?.(values.map(String), options);
101
+ }, []);
102
+ return /*#__PURE__*/React.createElement(Picker, _extends({}, rest, {
117
103
  columns: columns,
118
- interactionMode: interactionMode,
104
+ interactionMode: interactionModeProp,
119
105
  value: normalizedValue,
120
106
  defaultValue: normalizedDefaultValue,
121
- onChange: onChange ? handleChange : undefined,
122
- onConfirm: onConfirm ? handleConfirm : undefined
107
+ onChange: onChange ? wrappedOnChange : undefined,
108
+ onConfirm: onConfirm ? wrappedOnConfirm : undefined
123
109
  }));
124
110
  };
111
+ const Area = /*#__PURE__*/React.memo(AreaImpl);
125
112
  Area.displayName = 'Area';
126
113
  export default Area;
@@ -1,5 +1,8 @@
1
1
  import { createComponentTokensHook } from '../../design-system';
2
- const createAreaTokens = _foundations => {
3
- return {};
4
- };
2
+ const createAreaTokens = _foundations => ({
3
+ defaults: {
4
+ columnsNum: 3,
5
+ interactionMode: 'sync'
6
+ }
7
+ });
5
8
  export const useAreaTokens = createComponentTokensHook('area', createAreaTokens);