react-native-system-ui 1.0.6 → 1.0.8

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 (380) hide show
  1. package/README.md +13 -13
  2. package/dist/cjs/components/calendar/Calendar.js +1 -1
  3. package/dist/cjs/components/cascader/Cascader.js +1 -1
  4. package/dist/cjs/components/cascader/useCascaderExtend.js +1 -1
  5. package/dist/cjs/components/dialog/Dialog.js +1 -1
  6. package/dist/cjs/components/dialog/imperative.js +1 -1
  7. package/dist/cjs/components/field/Field.js +1 -1
  8. package/dist/cjs/components/form/Form.js +1 -1
  9. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +1 -1
  10. package/dist/cjs/components/overlay/Overlay.js +1 -1
  11. package/dist/cjs/components/picker/Picker.js +1 -1
  12. package/dist/cjs/components/popup/Popup.js +1 -1
  13. package/dist/cjs/components/portal/PortalHost.js +1 -1
  14. package/dist/cjs/components/selector/Selector.js +1 -1
  15. package/dist/cjs/components/slider/Slider.js +1 -1
  16. package/dist/cjs/components/stepper/Stepper.js +1 -1
  17. package/dist/cjs/components/swiper/Swiper.js +1 -1
  18. package/dist/cjs/components/tabs/Tabs.js +1 -1
  19. package/dist/cjs/components/toast/Toast.js +1 -1
  20. package/dist/cjs/hooks/calendar/utils.js +1 -0
  21. package/dist/cjs/hooks/cascader/utils.js +1 -0
  22. package/dist/cjs/hooks/dialog/ActionButton.js +1 -0
  23. package/dist/cjs/hooks/field/renderers.js +1 -0
  24. package/dist/cjs/hooks/form/utils.js +1 -0
  25. package/dist/cjs/hooks/number-keyboard/utils.js +1 -0
  26. package/dist/cjs/hooks/picker/normalize.js +1 -0
  27. package/dist/cjs/hooks/picker/value.js +1 -0
  28. package/dist/cjs/hooks/popup/utils.js +1 -0
  29. package/dist/cjs/hooks/slider/utils.js +1 -0
  30. package/dist/cjs/hooks/swiper/utils.js +1 -0
  31. package/dist/cjs/hooks/tabs/TabBarItem.js +1 -0
  32. package/dist/cjs/hooks/tabs/useTabsInternals.js +1 -0
  33. package/dist/cjs/utils/compare.js +1 -1
  34. package/dist/es/components/calendar/Calendar.js +1 -1
  35. package/dist/es/components/cascader/Cascader.js +1 -1
  36. package/dist/es/components/cascader/useCascaderExtend.js +1 -1
  37. package/dist/es/components/dialog/Dialog.js +1 -1
  38. package/dist/es/components/dialog/imperative.js +1 -1
  39. package/dist/es/components/field/Field.js +1 -1
  40. package/dist/es/components/form/Form.js +1 -1
  41. package/dist/es/components/number-keyboard/NumberKeyboard.js +1 -1
  42. package/dist/es/components/overlay/Overlay.js +1 -1
  43. package/dist/es/components/picker/Picker.js +1 -1
  44. package/dist/es/components/popup/Popup.js +1 -1
  45. package/dist/es/components/portal/PortalHost.js +1 -1
  46. package/dist/es/components/selector/Selector.js +1 -1
  47. package/dist/es/components/slider/Slider.js +1 -1
  48. package/dist/es/components/stepper/Stepper.js +1 -1
  49. package/dist/es/components/swiper/Swiper.js +1 -1
  50. package/dist/es/components/tabs/Tabs.js +1 -1
  51. package/dist/es/components/toast/Toast.js +1 -1
  52. package/dist/es/hooks/calendar/utils.js +1 -0
  53. package/dist/es/hooks/cascader/utils.js +1 -0
  54. package/dist/es/hooks/dialog/ActionButton.js +1 -0
  55. package/dist/es/hooks/field/renderers.js +1 -0
  56. package/dist/es/hooks/form/utils.js +1 -0
  57. package/dist/es/hooks/number-keyboard/utils.js +1 -0
  58. package/dist/es/hooks/picker/normalize.js +1 -0
  59. package/dist/es/hooks/picker/value.js +1 -0
  60. package/dist/es/hooks/popup/utils.js +1 -0
  61. package/dist/es/hooks/slider/utils.js +1 -0
  62. package/dist/es/hooks/swiper/utils.js +1 -0
  63. package/dist/es/hooks/tabs/TabBarItem.js +1 -0
  64. package/dist/es/hooks/tabs/useTabsInternals.js +1 -0
  65. package/dist/es/utils/compare.js +1 -1
  66. package/dist/types/components/action-sheet/ActionSheet.d.ts +1 -4
  67. package/dist/types/components/action-sheet/index.d.ts +1 -4
  68. package/dist/types/components/action-sheet/tokens.d.ts +1 -4
  69. package/dist/types/components/action-sheet/types.d.ts +1 -87
  70. package/dist/types/components/area/Area.d.ts +1 -4
  71. package/dist/types/components/area/index.d.ts +1 -3
  72. package/dist/types/components/area/tokens.d.ts +1 -7
  73. package/dist/types/components/area/types.d.ts +1 -20
  74. package/dist/types/components/avatar/Avatar.d.ts +1 -7
  75. package/dist/types/components/avatar/index.d.ts +1 -2
  76. package/dist/types/components/avatar/tokens.d.ts +1 -4
  77. package/dist/types/components/avatar/types.d.ts +1 -62
  78. package/dist/types/components/badge/Badge.d.ts +1 -4
  79. package/dist/types/components/badge/index.d.ts +1 -3
  80. package/dist/types/components/badge/tokens.d.ts +1 -2
  81. package/dist/types/components/badge/types.d.ts +1 -57
  82. package/dist/types/components/button/Button.d.ts +1 -5
  83. package/dist/types/components/button/ButtonContext.d.ts +1 -2
  84. package/dist/types/components/button/ButtonGroup.d.ts +1 -23
  85. package/dist/types/components/button/index.d.ts +1 -6
  86. package/dist/types/components/button/tokens.d.ts +1 -2
  87. package/dist/types/components/button/types.d.ts +1 -109
  88. package/dist/types/components/calendar/Calendar.d.ts +1 -4
  89. package/dist/types/components/calendar/index.d.ts +1 -3
  90. package/dist/types/components/calendar/tokens.d.ts +1 -4
  91. package/dist/types/components/calendar/types.d.ts +1 -111
  92. package/dist/types/components/cascader/Cascader.d.ts +1 -4
  93. package/dist/types/components/cascader/index.d.ts +1 -4
  94. package/dist/types/components/cascader/tokens.d.ts +1 -4
  95. package/dist/types/components/cascader/types.d.ts +1 -142
  96. package/dist/types/components/cascader/useCascaderExtend.d.ts +1 -12
  97. package/dist/types/components/cell/Cell.d.ts +1 -4
  98. package/dist/types/components/cell/CellContext.d.ts +1 -7
  99. package/dist/types/components/cell/CellGroup.d.ts +1 -3
  100. package/dist/types/components/cell/index.d.ts +1 -8
  101. package/dist/types/components/cell/tokens.d.ts +1 -4
  102. package/dist/types/components/cell/types.d.ts +1 -112
  103. package/dist/types/components/checkbox/Checkbox.d.ts +1 -5
  104. package/dist/types/components/checkbox/CheckboxContext.d.ts +1 -2
  105. package/dist/types/components/checkbox/CheckboxGroup.d.ts +1 -22
  106. package/dist/types/components/checkbox/index.d.ts +1 -7
  107. package/dist/types/components/checkbox/tokens.d.ts +1 -2
  108. package/dist/types/components/checkbox/types.d.ts +1 -99
  109. package/dist/types/components/circle/Circle.d.ts +1 -5
  110. package/dist/types/components/circle/index.d.ts +1 -3
  111. package/dist/types/components/circle/tokens.d.ts +1 -4
  112. package/dist/types/components/circle/types.d.ts +1 -51
  113. package/dist/types/components/collapse/Collapse.d.ts +1 -43
  114. package/dist/types/components/collapse/index.d.ts +1 -3
  115. package/dist/types/components/collapse/tokens.d.ts +1 -4
  116. package/dist/types/components/collapse/types.d.ts +1 -45
  117. package/dist/types/components/config-provider/ConfigProvider.d.ts +1 -3
  118. package/dist/types/components/config-provider/DirectionContext.d.ts +1 -3
  119. package/dist/types/components/config-provider/LocaleContext.d.ts +1 -3
  120. package/dist/types/components/config-provider/index.d.ts +1 -6
  121. package/dist/types/components/config-provider/locale/en-US.d.ts +1 -106
  122. package/dist/types/components/config-provider/locale/types.d.ts +1 -130
  123. package/dist/types/components/config-provider/locale/zh-CN.d.ts +1 -106
  124. package/dist/types/components/config-provider/tokens.d.ts +1 -3
  125. package/dist/types/components/config-provider/types.d.ts +1 -10
  126. package/dist/types/components/config-provider/useDirection.d.ts +1 -1
  127. package/dist/types/components/config-provider/useLocale.d.ts +1 -1
  128. package/dist/types/components/count-down/CountDown.d.ts +1 -4
  129. package/dist/types/components/count-down/index.d.ts +1 -4
  130. package/dist/types/components/count-down/tokens.d.ts +1 -4
  131. package/dist/types/components/count-down/types.d.ts +1 -29
  132. package/dist/types/components/datetime-picker/DatetimePicker.d.ts +1 -4
  133. package/dist/types/components/datetime-picker/index.d.ts +1 -3
  134. package/dist/types/components/datetime-picker/tokens.d.ts +1 -15
  135. package/dist/types/components/datetime-picker/types.d.ts +1 -38
  136. package/dist/types/components/dialog/Dialog.d.ts +1 -4
  137. package/dist/types/components/dialog/imperative.d.ts +1 -23
  138. package/dist/types/components/dialog/index.d.ts +1 -5
  139. package/dist/types/components/dialog/tokens.d.ts +1 -48
  140. package/dist/types/components/dialog/types.d.ts +1 -70
  141. package/dist/types/components/divider/Divider.d.ts +1 -3
  142. package/dist/types/components/divider/index.d.ts +1 -3
  143. package/dist/types/components/divider/tokens.d.ts +1 -4
  144. package/dist/types/components/divider/types.d.ts +1 -48
  145. package/dist/types/components/empty/Empty.d.ts +1 -3
  146. package/dist/types/components/empty/index.d.ts +1 -3
  147. package/dist/types/components/empty/tokens.d.ts +1 -4
  148. package/dist/types/components/empty/types.d.ts +1 -44
  149. package/dist/types/components/error-boundary/ErrorBoundary.d.ts +1 -6
  150. package/dist/types/components/error-boundary/index.d.ts +1 -2
  151. package/dist/types/components/error-boundary/types.d.ts +1 -18
  152. package/dist/types/components/field/Field.d.ts +1 -4
  153. package/dist/types/components/field/index.d.ts +1 -7
  154. package/dist/types/components/field/tokens.d.ts +1 -131
  155. package/dist/types/components/field/types.d.ts +1 -86
  156. package/dist/types/components/flex/Flex.d.ts +1 -9
  157. package/dist/types/components/flex/FlexContext.d.ts +1 -2
  158. package/dist/types/components/flex/FlexItem.d.ts +1 -3
  159. package/dist/types/components/flex/index.d.ts +1 -8
  160. package/dist/types/components/flex/tokens.d.ts +1 -2
  161. package/dist/types/components/flex/types.d.ts +1 -37
  162. package/dist/types/components/form/Form.d.ts +1 -26
  163. package/dist/types/components/form/FormItem.d.ts +1 -5
  164. package/dist/types/components/form/FormList.d.ts +1 -18
  165. package/dist/types/components/form/index.d.ts +1 -17
  166. package/dist/types/components/form/tokens.d.ts +1 -7
  167. package/dist/types/components/form/types.d.ts +1 -68
  168. package/dist/types/components/grid/Grid.d.ts +1 -19
  169. package/dist/types/components/grid/GridContext.d.ts +1 -2
  170. package/dist/types/components/grid/GridItem.d.ts +1 -3
  171. package/dist/types/components/grid/index.d.ts +1 -5
  172. package/dist/types/components/grid/tokens.d.ts +1 -4
  173. package/dist/types/components/grid/types.d.ts +1 -77
  174. package/dist/types/components/image/Image.d.ts +1 -5
  175. package/dist/types/components/image/index.d.ts +1 -4
  176. package/dist/types/components/image/tokens.d.ts +1 -2
  177. package/dist/types/components/image/types.d.ts +1 -53
  178. package/dist/types/components/image-preview/ImagePreview.d.ts +1 -4
  179. package/dist/types/components/image-preview/imperative.d.ts +1 -5
  180. package/dist/types/components/image-preview/index.d.ts +1 -6
  181. package/dist/types/components/image-preview/tokens.d.ts +1 -27
  182. package/dist/types/components/image-preview/types.d.ts +1 -55
  183. package/dist/types/components/index.d.ts +1 -213
  184. package/dist/types/components/input/Input.d.ts +1 -8
  185. package/dist/types/components/input/index.d.ts +1 -4
  186. package/dist/types/components/input/tokens.d.ts +1 -2
  187. package/dist/types/components/input/types.d.ts +1 -42
  188. package/dist/types/components/loading/Loading.d.ts +1 -3
  189. package/dist/types/components/loading/index.d.ts +1 -3
  190. package/dist/types/components/loading/tokens.d.ts +1 -4
  191. package/dist/types/components/loading/types.d.ts +1 -32
  192. package/dist/types/components/nav-bar/NavBar.d.ts +1 -4
  193. package/dist/types/components/nav-bar/index.d.ts +1 -4
  194. package/dist/types/components/nav-bar/tokens.d.ts +1 -4
  195. package/dist/types/components/nav-bar/types.d.ts +1 -67
  196. package/dist/types/components/notice-bar/NoticeBar.d.ts +1 -3
  197. package/dist/types/components/notice-bar/index.d.ts +1 -3
  198. package/dist/types/components/notice-bar/tokens.d.ts +1 -24
  199. package/dist/types/components/notice-bar/types.d.ts +1 -26
  200. package/dist/types/components/notify/Notify.d.ts +1 -6
  201. package/dist/types/components/notify/imperative.d.ts +1 -22
  202. package/dist/types/components/notify/index.d.ts +1 -15
  203. package/dist/types/components/notify/tokens.d.ts +1 -4
  204. package/dist/types/components/notify/types.d.ts +1 -64
  205. package/dist/types/components/number-keyboard/NumberKeyboard.d.ts +1 -4
  206. package/dist/types/components/number-keyboard/index.d.ts +1 -4
  207. package/dist/types/components/number-keyboard/tokens.d.ts +1 -42
  208. package/dist/types/components/number-keyboard/types.d.ts +1 -35
  209. package/dist/types/components/overlay/Overlay.d.ts +1 -5
  210. package/dist/types/components/overlay/index.d.ts +1 -5
  211. package/dist/types/components/overlay/tokens.d.ts +1 -6
  212. package/dist/types/components/overlay/types.d.ts +1 -13
  213. package/dist/types/components/password-input/PasswordInput.d.ts +1 -4
  214. package/dist/types/components/password-input/index.d.ts +1 -2
  215. package/dist/types/components/password-input/tokens.d.ts +1 -40
  216. package/dist/types/components/password-input/types.d.ts +1 -35
  217. package/dist/types/components/picker/Picker.d.ts +1 -32
  218. package/dist/types/components/picker/index.d.ts +1 -4
  219. package/dist/types/components/picker/tokens.d.ts +1 -39
  220. package/dist/types/components/picker/types.d.ts +1 -73
  221. package/dist/types/components/popup/Popup.d.ts +1 -5
  222. package/dist/types/components/popup/index.d.ts +1 -4
  223. package/dist/types/components/popup/tokens.d.ts +1 -48
  224. package/dist/types/components/popup/types.d.ts +1 -41
  225. package/dist/types/components/portal/Portal.d.ts +1 -14
  226. package/dist/types/components/portal/PortalContext.d.ts +1 -7
  227. package/dist/types/components/portal/PortalHost.d.ts +1 -11
  228. package/dist/types/components/portal/index.d.ts +1 -3
  229. package/dist/types/components/portal/tokens.d.ts +1 -3
  230. package/dist/types/components/portal/types.d.ts +1 -1
  231. package/dist/types/components/progress/Progress.d.ts +1 -8
  232. package/dist/types/components/progress/index.d.ts +1 -4
  233. package/dist/types/components/progress/tokens.d.ts +1 -4
  234. package/dist/types/components/progress/types.d.ts +1 -51
  235. package/dist/types/components/radio/Radio.d.ts +1 -3
  236. package/dist/types/components/radio/RadioContext.d.ts +1 -2
  237. package/dist/types/components/radio/RadioGroup.d.ts +1 -14
  238. package/dist/types/components/radio/index.d.ts +1 -7
  239. package/dist/types/components/radio/tokens.d.ts +1 -2
  240. package/dist/types/components/radio/types.d.ts +1 -95
  241. package/dist/types/components/safe-area-view/SafeAreaView.d.ts +1 -10
  242. package/dist/types/components/safe-area-view/index.d.ts +1 -2
  243. package/dist/types/components/safe-area-view/tokens.d.ts +1 -3
  244. package/dist/types/components/safe-area-view/types.d.ts +1 -1
  245. package/dist/types/components/search/Search.d.ts +1 -4
  246. package/dist/types/components/search/index.d.ts +1 -4
  247. package/dist/types/components/search/tokens.d.ts +1 -41
  248. package/dist/types/components/search/types.d.ts +1 -28
  249. package/dist/types/components/selector/Selector.d.ts +1 -7
  250. package/dist/types/components/selector/index.d.ts +1 -4
  251. package/dist/types/components/selector/tokens.d.ts +1 -2
  252. package/dist/types/components/selector/types.d.ts +1 -74
  253. package/dist/types/components/share-sheet/ShareSheet.d.ts +1 -4
  254. package/dist/types/components/share-sheet/index.d.ts +1 -4
  255. package/dist/types/components/share-sheet/tokens.d.ts +1 -40
  256. package/dist/types/components/share-sheet/types.d.ts +1 -26
  257. package/dist/types/components/sidebar/Sidebar.d.ts +1 -4
  258. package/dist/types/components/sidebar/SidebarContext.d.ts +1 -7
  259. package/dist/types/components/sidebar/SidebarItem.d.ts +1 -4
  260. package/dist/types/components/sidebar/index.d.ts +1 -8
  261. package/dist/types/components/sidebar/tokens.d.ts +1 -4
  262. package/dist/types/components/sidebar/types.d.ts +1 -64
  263. package/dist/types/components/skeleton/Skeleton.d.ts +1 -5
  264. package/dist/types/components/skeleton/index.d.ts +1 -5
  265. package/dist/types/components/skeleton/tokens.d.ts +1 -2
  266. package/dist/types/components/skeleton/types.d.ts +1 -45
  267. package/dist/types/components/slider/Slider.d.ts +1 -4
  268. package/dist/types/components/slider/index.d.ts +1 -3
  269. package/dist/types/components/slider/tokens.d.ts +1 -28
  270. package/dist/types/components/slider/types.d.ts +1 -38
  271. package/dist/types/components/space/Space.d.ts +1 -3
  272. package/dist/types/components/space/index.d.ts +1 -3
  273. package/dist/types/components/space/tokens.d.ts +1 -3
  274. package/dist/types/components/space/types.d.ts +1 -39
  275. package/dist/types/components/stepper/Stepper.d.ts +1 -4
  276. package/dist/types/components/stepper/index.d.ts +1 -4
  277. package/dist/types/components/stepper/tokens.d.ts +1 -46
  278. package/dist/types/components/stepper/types.d.ts +1 -46
  279. package/dist/types/components/swiper/Swiper.d.ts +1 -9
  280. package/dist/types/components/swiper/SwiperItem.d.ts +1 -1
  281. package/dist/types/components/swiper/SwiperPagIndicator.d.ts +1 -36
  282. package/dist/types/components/swiper/index.d.ts +1 -14
  283. package/dist/types/components/swiper/tokens.d.ts +1 -11
  284. package/dist/types/components/swiper/types.d.ts +1 -29
  285. package/dist/types/components/switch/Switch.d.ts +1 -7
  286. package/dist/types/components/switch/index.d.ts +1 -4
  287. package/dist/types/components/switch/tokens.d.ts +1 -2
  288. package/dist/types/components/switch/types.d.ts +1 -33
  289. package/dist/types/components/tabbar/Tabbar.d.ts +1 -4
  290. package/dist/types/components/tabbar/TabbarContext.d.ts +1 -13
  291. package/dist/types/components/tabbar/TabbarItem.d.ts +1 -4
  292. package/dist/types/components/tabbar/index.d.ts +1 -9
  293. package/dist/types/components/tabbar/tokens.d.ts +1 -28
  294. package/dist/types/components/tabbar/types.d.ts +1 -39
  295. package/dist/types/components/tabs/Tabs.d.ts +1 -8
  296. package/dist/types/components/tabs/index.d.ts +1 -10
  297. package/dist/types/components/tabs/tokens.d.ts +1 -96
  298. package/dist/types/components/tabs/types.d.ts +1 -64
  299. package/dist/types/components/tag/Tag.d.ts +1 -3
  300. package/dist/types/components/tag/index.d.ts +1 -3
  301. package/dist/types/components/tag/tokens.d.ts +1 -4
  302. package/dist/types/components/tag/types.d.ts +1 -69
  303. package/dist/types/components/theme.d.ts +1 -112
  304. package/dist/types/components/toast/Toast.d.ts +1 -33
  305. package/dist/types/components/toast/imperative.d.ts +1 -22
  306. package/dist/types/components/toast/index.d.ts +1 -15
  307. package/dist/types/components/toast/tokens.d.ts +1 -29
  308. package/dist/types/components/toast/types.d.ts +1 -1
  309. package/dist/types/components/typography/Typography.d.ts +1 -11
  310. package/dist/types/components/typography/index.d.ts +1 -3
  311. package/dist/types/components/typography/tokens.d.ts +1 -2
  312. package/dist/types/components/typography/types.d.ts +1 -66
  313. package/dist/types/components/water-mark/WaterMark.d.ts +1 -4
  314. package/dist/types/components/water-mark/index.d.ts +1 -5
  315. package/dist/types/components/water-mark/tokens.d.ts +1 -2
  316. package/dist/types/components/water-mark/types.d.ts +1 -58
  317. package/dist/types/design-system/Text.d.ts +1 -3
  318. package/dist/types/design-system/ThemeContext.d.ts +1 -14
  319. package/dist/types/design-system/ThemeProvider.d.ts +1 -14
  320. package/dist/types/design-system/createComponentTokensHook.d.ts +1 -4
  321. package/dist/types/design-system/index.d.ts +1 -11
  322. package/dist/types/design-system/mergeTokensOverride.d.ts +1 -2
  323. package/dist/types/design-system/presets.d.ts +1 -8
  324. package/dist/types/design-system/tokens.d.ts +1 -74
  325. package/dist/types/design-system/useTheme.d.ts +1 -1
  326. package/dist/types/hooks/animation/index.d.ts +1 -3
  327. package/dist/types/hooks/animation/useAnimatedTransition.d.ts +1 -13
  328. package/dist/types/hooks/animation/useReducedMotion.d.ts +1 -3
  329. package/dist/types/hooks/aria/index.d.ts +1 -4
  330. package/dist/types/hooks/aria/useAriaListBox.d.ts +1 -14
  331. package/dist/types/hooks/aria/useAriaOverlay.d.ts +1 -14
  332. package/dist/types/hooks/aria/useAriaPress.d.ts +1 -19
  333. package/dist/types/hooks/aria/useAriaToggle.d.ts +1 -12
  334. package/dist/types/hooks/calendar/utils.d.ts +1 -0
  335. package/dist/types/hooks/cascader/utils.d.ts +1 -0
  336. package/dist/types/hooks/dialog/ActionButton.d.ts +1 -0
  337. package/dist/types/hooks/field/renderers.d.ts +1 -0
  338. package/dist/types/hooks/form/utils.d.ts +1 -0
  339. package/dist/types/hooks/gesture/index.d.ts +1 -1
  340. package/dist/types/hooks/gesture/useGestureScroll.d.ts +1 -33
  341. package/dist/types/hooks/index.d.ts +1 -9
  342. package/dist/types/hooks/number-keyboard/utils.d.ts +1 -0
  343. package/dist/types/hooks/overlay/OverlayStackStore.d.ts +1 -39
  344. package/dist/types/hooks/overlay/index.d.ts +1 -2
  345. package/dist/types/hooks/overlay/useOverlayStack.d.ts +1 -10
  346. package/dist/types/hooks/picker/normalize.d.ts +1 -0
  347. package/dist/types/hooks/picker/value.d.ts +1 -0
  348. package/dist/types/hooks/popup/utils.d.ts +1 -0
  349. package/dist/types/hooks/slider/utils.d.ts +1 -0
  350. package/dist/types/hooks/swiper/utils.d.ts +1 -0
  351. package/dist/types/hooks/tabs/TabBarItem.d.ts +1 -0
  352. package/dist/types/hooks/tabs/useTabsInternals.d.ts +1 -0
  353. package/dist/types/hooks/useControllableValue.d.ts +1 -9
  354. package/dist/types/hooks/useCountDown.d.ts +1 -23
  355. package/dist/types/hooks/useHairline.d.ts +1 -10
  356. package/dist/types/hooks/useSafeAreaPadding.d.ts +1 -13
  357. package/dist/types/index.d.ts +1 -9
  358. package/dist/types/nativewind.d.ts +1 -4
  359. package/dist/types/platform/animation.d.ts +1 -9
  360. package/dist/types/platform/history.d.ts +1 -1
  361. package/dist/types/platform/index.d.ts +1 -5
  362. package/dist/types/platform/measure.d.ts +1 -7
  363. package/dist/types/platform/runtime.d.ts +1 -3
  364. package/dist/types/platform/scrollLock.d.ts +1 -2
  365. package/dist/types/types.d.ts +1 -4
  366. package/dist/types/utils/array.d.ts +1 -1
  367. package/dist/types/utils/color.d.ts +1 -3
  368. package/dist/types/utils/compare.d.ts +1 -2
  369. package/dist/types/utils/createPlatformShadow.d.ts +1 -11
  370. package/dist/types/utils/date.d.ts +1 -13
  371. package/dist/types/utils/deepMerge.d.ts +1 -3
  372. package/dist/types/utils/hairline.d.ts +1 -15
  373. package/dist/types/utils/index.d.ts +1 -13
  374. package/dist/types/utils/number.d.ts +1 -11
  375. package/dist/types/utils/promise.d.ts +1 -1
  376. package/dist/types/utils/render.d.ts +1 -5
  377. package/dist/types/utils/rtl.d.ts +1 -5
  378. package/dist/types/utils/string.d.ts +1 -3
  379. package/dist/types/utils/validate.d.ts +1 -13
  380. package/package.json +38 -45
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Pressable,Text,View}from"react-native";import{useControllableValue}from"../../hooks";import{renderTextOrNode}from"../../utils";import{isRenderable}from"../../utils/validate";import Popup from"../popup";import{useLocale}from"../config-provider/useLocale";import{useCalendarTokens}from"./tokens";const DAY_MS=864e5,isSameDay=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),startOfDay=e=>{const t=new Date(e);return t.setHours(0,0,0,0),t},daysBetween=(e,t)=>Math.round(Math.abs(startOfDay(e).getTime()-startOfDay(t).getTime())/DAY_MS),toArrayValue=e=>e?Array.isArray(e)?e.filter(Boolean).map(e=>new Date(e)):[new Date(e)]:[],DEFAULT_MIN=new Date((new Date).getFullYear()-10,0,1),DEFAULT_MAX=new Date((new Date).getFullYear()+10,11,31),CalendarImpl=e=>{const{tokensOverride:t,value:a,defaultValue:n,minDate:o=DEFAULT_MIN,maxDate:l=DEFAULT_MAX,type:r,title:s,showSubtitle:i,showHeader:u,showConfirm:c,confirmText:d,weekStartsOn:p,weekdays:g,formatMonthTitle:m,allowSameDay:f,maxRange:y,onOverRange:h,poppable:b,visible:O,defaultVisible:C,onVisibleChange:T,closeOnClickOverlay:k,closeOnConfirm:w,popupPlacement:M,popupRound:D,popupProps:S,onOpen:V,onOpened:R,onClose:v,onClosed:x,color:P,onConfirm:z,onSelect:E,style:A,...B}=e,F=useLocale(),I=F?.vanCalendar,Y=useCalendarTokens(t),$=s??I?.title??Y.defaults.title,L=i??Y.defaults.showSubtitle,N=u??Y.defaults.showHeader,_=d??I?.confirm??Y.defaults.confirmText,H=p??Y.defaults.weekStartsOn,W=f??Y.defaults.allowSameDay,U=b??Y.defaults.poppable,j=k??Y.defaults.closeOnClickOverlay,X=w??Y.defaults.closeOnConfirm,G=M??Y.defaults.popupPlacement,q=D??Y.defaults.popupRound,J=r??Y.defaults.type,K=c??Y.defaults.showConfirm[J],[Q,Z]=useControllableValue(e,{defaultValue:!1,valuePropName:"visible",defaultValuePropName:"defaultVisible",trigger:"onVisibleChange"}),{onClose:ee,onClosed:te,onOpen:ae,onOpened:ne,closeOnOverlayPress:oe,overlay:le,...re}=S??{},se=useRef({onConfirm:z,onOverRange:h,popupOnOpen:ae,onOpen:V,popupOnOpened:ne,onOpened:R,popupOnClose:ee,onClose:v,popupOnClosed:te,onClosed:x});se.current.onConfirm=z,se.current.onOverRange=h,se.current.popupOnOpen=ae,se.current.onOpen=V,se.current.popupOnOpened=ne,se.current.onOpened=R,se.current.popupOnClose=ee,se.current.onClose=v,se.current.popupOnClosed=te,se.current.onClosed=x;const ie=useCallback(()=>{U&&Z(!1)},[U,Z]),ue=useCallback(()=>{se.current.popupOnOpen?.(),se.current.onOpen?.()},[]),ce=useCallback(()=>{se.current.popupOnOpened?.(),se.current.onOpened?.()},[]),de=useCallback(()=>{ie(),se.current.popupOnClose?.(),se.current.onClose?.()},[ie]),pe=useCallback(()=>{se.current.popupOnClosed?.(),se.current.onClosed?.()},[]),ge=oe??j,me=le??!0,[fe,ye]=useControllableValue(e,{defaultValue:null,valuePropName:"value",defaultValuePropName:"defaultValue",trigger:"onSelect"}),he=normalizeValue(toArrayValue(fe),J),[be,Oe]=useState(()=>clampMonth(he.length?he[0]:new Date,o,l)),Ce=he.length?he[0].getTime():null,Te=o.getTime(),ke=l.getTime();useEffect(()=>{if(!he.length)return;const e=clampMonth(he[0],o,l);Oe(t=>isSameMonth(e,t)?t:e)},[Ce,Te,ke]);const we=useMemo(()=>buildMonth(be,H),[be,H]),Me=useMemo(()=>we.map(e=>e?{day:e,key:e.toISOString(),timeValue:startOfDay(e).getTime(),dateValue:e.getDate()}:null),[we]),De=startOfDay(o).getTime(),Se=startOfDay(l).getTime(),Ve=g??I?.weekdays??Y.defaults.weekdays,Re=useMemo(()=>reorderWeekdays(Ve,H,Y.defaults.weekdays),[Ve,Y.defaults.weekdays,H]),ve=useMemo(()=>m?m(be):I?.monthTitle?I.monthTitle(be.getFullYear(),be.getMonth()+1):formatMonth(be),[be,m,I]),xe=startOfMonth(o),Pe=startOfMonth(l),ze=be.getTime()>xe.getTime(),Ee=be.getTime()<Pe.getTime(),Ae=useCallback(e=>Oe(t=>clampMonth(new Date(t.getFullYear(),t.getMonth()+e,1),o,l)),[o,l]),Be=useCallback(()=>Ae(-1),[Ae]),Fe=useCallback(()=>Ae(1),[Ae]),Ie="range"===J?he.length<2:0===he.length,Ye=Y.spacing.column/2,$e=useCallback(e=>{K||"range"===J&&e.length<2||"multiple"===J&&0===e.length||e.length&&(se.current.onConfirm?.(mapValue(e,J)),U&&X&&ie())},[K,J,U,X,ie]),Le=useCallback(()=>{K&&Ie||(se.current.onConfirm?.(mapValue(he,J)),U&&X&&ie())},[K,Ie,he,J,U,X,ie]),Ne=useCallback(e=>{if("range"===J&&2===e.length){const[t,a]=e;if(!W&&isSameDay(t,a))return!1;if(y&&daysBetween(t,a)+1>y)return se.current.onOverRange?.(y),!1}return!("multiple"===J&&y&&e.length>y)||(se.current.onOverRange?.(y),!1)},[J,W,y]),_e=useRef(void 0),He=useCallback(e=>{const t=startOfDay(e).getTime();if(t<De||t>Se)return;let a=[];const n=he;switch(J){case"single":default:a=[e];break;case"multiple":a=n.find(t=>isSameDay(t,e))?n.filter(t=>!isSameDay(t,e)):[...n,e];break;case"range":if(n.length<1||n.length>1)a=[e];else{const t=n[0];a=isSameDay(t,e)?W?[t,e]:[e]:[t,e].sort((e,t)=>e.getTime()-t.getTime())}}const o=normalizeValue(a,J);Ne(o)&&(ye(mapValue(o,J)),K||$e(o))},[he,J,De,Se,W,Ne,ye,K,$e]);_e.current=He;const We=useCallback(e=>_e.current?.(e),[]),Ue=useMemo(()=>he.map(e=>startOfDay(e).getTime()),[he]),je=useMemo(()=>new Set(Ue),[Ue]),Xe="range"===J&&2===Ue.length?[Ue[0],Ue[1]]:null,Ge=useCallback((e,t)=>{if(!e)return React.createElement(View,{key:`p-${t}`,style:[Y.layout.dayPlaceholder,{paddingVertical:Y.spacing.dayPaddingVertical,paddingHorizontal:Ye}]});const{day:a,key:n,timeValue:o,dateValue:l}=e,r=o<De||o>Se,s=je.has(o),i="range"===J&&Xe&&o>Xe[0]&&o<Xe[1],u=[Y.layout.dayText,{borderRadius:Y.radii.day,color:Y.colors.text,minWidth:Y.sizing.dayMinWidth}];r?u.push({color:Y.colors.disabled}):i?u.push({backgroundColor:Y.colors.rangeBackground}):s&&u.push({backgroundColor:P??Y.colors.selectedBackground,color:Y.colors.selectedText});const c=`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}${s?", selected":""}${r?", disabled":""}`;return React.createElement(Pressable,{key:n,accessibilityRole:"button",accessibilityLabel:c,accessibilityState:{selected:s,disabled:r},style:[Y.layout.dayButton,{paddingVertical:Y.spacing.dayPaddingVertical,paddingHorizontal:Ye}],disabled:r,onPress:()=>We(a),testID:getCalendarDayTestId(a)},React.createElement(Text,{style:u},l))},[je,J,Xe,De,Se,Y,P,We,Ye]),qe=React.createElement(View,_extends({style:[{backgroundColor:Y.colors.background,padding:Y.spacing.containerPadding,borderRadius:Y.radii.container},A]},B),N?React.createElement(View,{style:[Y.layout.header,{marginBottom:Y.spacing.headerMarginBottom}]},React.createElement(Pressable,{testID:"calendar-nav-prev",accessibilityRole:"button",accessibilityLabel:"previous month",onPress:Be,disabled:!ze},React.createElement(Text,{style:[Y.layout.navText,{fontSize:Y.sizing.navButtonSize,paddingHorizontal:Y.spacing.navPaddingHorizontal},!ze&&{opacity:.3}]},"<")),React.createElement(View,{style:Y.layout.headerCenter},isRenderable($)?renderTextOrNode($,[Y.layout.headerTitle,{color:Y.colors.text,fontSize:Y.typography.headerTitleSize,fontWeight:Y.typography.headerTitleWeight}]):null,L?renderTextOrNode(ve,[Y.layout.headerSubtitle,{color:Y.colors.headerSubtitle,fontSize:Y.typography.headerSubtitleSize}]):null),React.createElement(Pressable,{testID:"calendar-nav-next",accessibilityRole:"button",accessibilityLabel:"next month",onPress:Fe,disabled:!Ee},React.createElement(Text,{style:[Y.layout.navText,{fontSize:Y.sizing.navButtonSize,paddingHorizontal:Y.spacing.navPaddingHorizontal},!Ee&&{opacity:.3}]},">"))):null,React.createElement(View,{style:[Y.layout.weekRow,{marginBottom:Y.spacing.weekRowMarginBottom}]},Re.map((e,t)=>React.createElement(View,{key:`w-${t}`,style:[Y.layout.weekLabelItem,{paddingHorizontal:Ye}]},renderTextOrNode(e,[Y.layout.weekLabel,{color:Y.colors.text}])))),React.createElement(View,{style:[Y.layout.days,{rowGap:Y.spacing.row}]},Me.map((e,t)=>Ge(e,t))),K?React.createElement(Pressable,{style:[Y.layout.confirmButton,{backgroundColor:P??Y.colors.selectedBackground,opacity:Ie?.5:1,marginTop:Y.spacing.confirmMarginTop,paddingVertical:Y.spacing.confirmPaddingVertical,borderRadius:Y.radii.confirmButton}],onPress:Le,disabled:Ie},renderTextOrNode(_,[Y.layout.confirmText,{color:Y.colors.confirmText,fontWeight:Y.typography.confirmTextWeight}])):null);return U?React.createElement(Popup,_extends({visible:Q,placement:G,round:q,closeOnOverlayPress:ge,overlay:me,safeAreaInsetTop:null!=re?.safeAreaInsetTop?re.safeAreaInsetTop:N,safeAreaInsetBottom:null!=re?.safeAreaInsetBottom?re.safeAreaInsetBottom:"bottom"===G,onOpen:ue,onOpened:ce,onClose:de,onClosed:pe},re),qe):qe};function mapValue(e,t){return"single"===t?e[0]??new Date:("range"===t&&e.length,e)}function normalizeValue(e,t){return"single"===t?e.slice(0,1):"range"===t?e.slice(0,2).sort((e,t)=>e.getTime()-t.getTime()):e}function formatMonth(e){return`${e.getFullYear()}/${e.getMonth()+1}`}function reorderWeekdays(e,t,a){const n=(t%7+7)%7,o=7===e.length?[...e]:a;return[...o.slice(n),...o.slice(0,n)]}function buildMonth(e,t){const a=(t%7+7)%7,n=(startOfMonth(e).getDay()-a+7)%7,o=new Date(e.getFullYear(),e.getMonth()+1,0).getDate(),l=[];for(let e=0;e<n;e+=1)l.push(null);for(let t=1;t<=o;t+=1)l.push(new Date(e.getFullYear(),e.getMonth(),t));for(;l.length<42;)l.push(null);return l}function getCalendarDayTestId(e){return`calendar-day-${e.getFullYear()}-${`${e.getMonth()+1}`.padStart(2,"0")}-${`${e.getDate()}`.padStart(2,"0")}`}function startOfMonth(e){return new Date(e.getFullYear(),e.getMonth(),1)}function clampMonth(e,t,a){const n=startOfMonth(e),o=startOfMonth(t),l=startOfMonth(a);return n.getTime()<o.getTime()?o:n.getTime()>l.getTime()?a:n}function isSameMonth(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()}const Calendar=React.memo(CalendarImpl);Calendar.displayName="Calendar";export default Calendar;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Pressable,Text,View}from"react-native";import{useControllableValue}from"../../hooks";import{renderTextOrNode}from"../../utils";import{isRenderable}from"../../utils/validate";import Popup from"../popup";import{useLocale}from"../config-provider/useLocale";import{useCalendarTokens}from"./tokens";import{buildMonth,clampMonth,daysBetween,DEFAULT_MAX,DEFAULT_MIN,formatMonth,getCalendarDayTestId,isSameDay,isSameMonth,mapValue,normalizeValue,reorderWeekdays,startOfDay,startOfMonth,toArrayValue}from"../../hooks/calendar/utils";const CalendarImpl=e=>{const{tokensOverride:t,value:a,defaultValue:n,minDate:o=DEFAULT_MIN,maxDate:l=DEFAULT_MAX,type:r,title:s,showSubtitle:i,showHeader:u,showConfirm:c,confirmText:d,weekStartsOn:p,weekdays:m,formatMonthTitle:g,allowSameDay:f,maxRange:y,onOverRange:b,poppable:h,visible:O,defaultVisible:C,onVisibleChange:k,closeOnClickOverlay:T,closeOnConfirm:V,popupPlacement:w,popupRound:R,popupProps:v,onOpen:S,onOpened:M,onClose:x,onClosed:D,color:P,onConfirm:z,onSelect:E,style:B,...I}=e,A=useLocale(),L=A?.vanCalendar,N=useCalendarTokens(t),H=s??L?.title??N.defaults.title,_=i??N.defaults.showSubtitle,W=u??N.defaults.showHeader,F=d??L?.confirm??N.defaults.confirmText,$=p??N.defaults.weekStartsOn,U=f??N.defaults.allowSameDay,Y=h??N.defaults.poppable,j=T??N.defaults.closeOnClickOverlay,X=V??N.defaults.closeOnConfirm,G=w??N.defaults.popupPlacement,q=R??N.defaults.popupRound,J=r??N.defaults.type,K=c??N.defaults.showConfirm[J],[Q,Z]=useControllableValue(e,{defaultValue:!1,valuePropName:"visible",defaultValuePropName:"defaultVisible",trigger:"onVisibleChange"}),{onClose:ee,onClosed:te,onOpen:ae,onOpened:ne,closeOnOverlayPress:oe,overlay:le,...re}=v??{},se=useRef({onConfirm:z,onOverRange:b,popupOnOpen:ae,onOpen:S,popupOnOpened:ne,onOpened:M,popupOnClose:ee,onClose:x,popupOnClosed:te,onClosed:D});se.current.onConfirm=z,se.current.onOverRange=b,se.current.popupOnOpen=ae,se.current.onOpen=S,se.current.popupOnOpened=ne,se.current.onOpened=M,se.current.popupOnClose=ee,se.current.onClose=x,se.current.popupOnClosed=te,se.current.onClosed=D;const ie=useCallback(()=>{Y&&Z(!1)},[Y,Z]),ue=useCallback(()=>{se.current.popupOnOpen?.(),se.current.onOpen?.()},[]),ce=useCallback(()=>{se.current.popupOnOpened?.(),se.current.onOpened?.()},[]),de=useCallback(()=>{ie(),se.current.popupOnClose?.(),se.current.onClose?.()},[ie]),pe=useCallback(()=>{se.current.popupOnClosed?.(),se.current.onClosed?.()},[]),me=oe??j,ge=le??!0,[fe,ye]=useControllableValue(e,{defaultValue:null,valuePropName:"value",defaultValuePropName:"defaultValue",trigger:"onSelect"}),be=normalizeValue(toArrayValue(fe),J),[he,Oe]=useState(()=>clampMonth(be.length?be[0]:new Date,o,l)),Ce=be.length?be[0].getTime():null,ke=o.getTime(),Te=l.getTime();useEffect(()=>{if(!be.length)return;const e=clampMonth(be[0],o,l);Oe(t=>isSameMonth(e,t)?t:e)},[Ce,ke,Te]);const Ve=useMemo(()=>buildMonth(he,$),[he,$]),we=useMemo(()=>Ve.map(e=>e?{day:e,key:e.toISOString(),timeValue:startOfDay(e).getTime(),dateValue:e.getDate()}:null),[Ve]),Re=startOfDay(o).getTime(),ve=startOfDay(l).getTime(),Se=m??L?.weekdays??N.defaults.weekdays,Me=useMemo(()=>reorderWeekdays(Se,$,N.defaults.weekdays),[Se,N.defaults.weekdays,$]),xe=useMemo(()=>g?g(he):L?.monthTitle?L.monthTitle(he.getFullYear(),he.getMonth()+1):formatMonth(he),[he,g,L]),De=startOfMonth(o),Pe=startOfMonth(l),ze=he.getTime()>De.getTime(),Ee=he.getTime()<Pe.getTime(),Be=useCallback(e=>Oe(t=>clampMonth(new Date(t.getFullYear(),t.getMonth()+e,1),o,l)),[o,l]),Ie=useCallback(()=>Be(-1),[Be]),Ae=useCallback(()=>Be(1),[Be]),Le="range"===J?be.length<2:0===be.length,Ne=N.spacing.column/2,He=useCallback(e=>{K||"range"===J&&e.length<2||"multiple"===J&&0===e.length||e.length&&(se.current.onConfirm?.(mapValue(e,J)),Y&&X&&ie())},[K,J,Y,X,ie]),_e=useCallback(()=>{K&&Le||(se.current.onConfirm?.(mapValue(be,J)),Y&&X&&ie())},[K,Le,be,J,Y,X,ie]),We=useCallback(e=>{if("range"===J&&2===e.length){const[t,a]=e;if(!U&&isSameDay(t,a))return!1;if(y&&daysBetween(t,a)+1>y)return se.current.onOverRange?.(y),!1}return!("multiple"===J&&y&&e.length>y)||(se.current.onOverRange?.(y),!1)},[J,U,y]),Fe=useRef(void 0),$e=useCallback(e=>{const t=startOfDay(e).getTime();if(t<Re||t>ve)return;let a=[];const n=be;switch(J){case"single":default:a=[e];break;case"multiple":a=n.find(t=>isSameDay(t,e))?n.filter(t=>!isSameDay(t,e)):[...n,e];break;case"range":if(n.length<1||n.length>1)a=[e];else{const t=n[0];a=isSameDay(t,e)?U?[t,e]:[e]:[t,e].sort((e,t)=>e.getTime()-t.getTime())}}const o=normalizeValue(a,J);We(o)&&(ye(mapValue(o,J)),K||He(o))},[be,J,Re,ve,U,We,ye,K,He]);Fe.current=$e;const Ue=useCallback(e=>Fe.current?.(e),[]),Ye=useMemo(()=>be.map(e=>startOfDay(e).getTime()),[be]),je=useMemo(()=>new Set(Ye),[Ye]),Xe="range"===J&&2===Ye.length?[Ye[0],Ye[1]]:null,Ge=useCallback((e,t)=>{if(!e)return React.createElement(View,{key:`p-${t}`,style:[N.layout.dayPlaceholder,{paddingVertical:N.spacing.dayPaddingVertical,paddingHorizontal:Ne}]});const{day:a,key:n,timeValue:o,dateValue:l}=e,r=o<Re||o>ve,s=je.has(o),i="range"===J&&Xe&&o>Xe[0]&&o<Xe[1],u=[N.layout.dayText,{borderRadius:N.radii.day,color:N.colors.text,minWidth:N.sizing.dayMinWidth}];r?u.push({color:N.colors.disabled}):i?u.push({backgroundColor:N.colors.rangeBackground}):s&&u.push({backgroundColor:P??N.colors.selectedBackground,color:N.colors.selectedText});const c=`${a.getFullYear()}-${String(a.getMonth()+1).padStart(2,"0")}-${String(a.getDate()).padStart(2,"0")}${s?", selected":""}${r?", disabled":""}`;return React.createElement(Pressable,{key:n,accessibilityRole:"button",accessibilityLabel:c,accessibilityState:{selected:s,disabled:r},style:[N.layout.dayButton,{paddingVertical:N.spacing.dayPaddingVertical,paddingHorizontal:Ne}],disabled:r,onPress:()=>Ue(a),testID:getCalendarDayTestId(a)},React.createElement(Text,{style:u},l))},[je,J,Xe,Re,ve,N,P,Ue,Ne]),qe=React.createElement(View,_extends({style:[{backgroundColor:N.colors.background,padding:N.spacing.containerPadding,borderRadius:N.radii.container},B]},I),W?React.createElement(View,{style:[N.layout.header,{marginBottom:N.spacing.headerMarginBottom}]},React.createElement(Pressable,{testID:"calendar-nav-prev",accessibilityRole:"button",accessibilityLabel:"previous month",onPress:Ie,disabled:!ze},React.createElement(Text,{style:[N.layout.navText,{fontSize:N.sizing.navButtonSize,paddingHorizontal:N.spacing.navPaddingHorizontal},!ze&&{opacity:.3}]},"<")),React.createElement(View,{style:N.layout.headerCenter},isRenderable(H)?renderTextOrNode(H,[N.layout.headerTitle,{color:N.colors.text,fontSize:N.typography.headerTitleSize,fontWeight:N.typography.headerTitleWeight}]):null,_?renderTextOrNode(xe,[N.layout.headerSubtitle,{color:N.colors.headerSubtitle,fontSize:N.typography.headerSubtitleSize}]):null),React.createElement(Pressable,{testID:"calendar-nav-next",accessibilityRole:"button",accessibilityLabel:"next month",onPress:Ae,disabled:!Ee},React.createElement(Text,{style:[N.layout.navText,{fontSize:N.sizing.navButtonSize,paddingHorizontal:N.spacing.navPaddingHorizontal},!Ee&&{opacity:.3}]},">"))):null,React.createElement(View,{style:[N.layout.weekRow,{marginBottom:N.spacing.weekRowMarginBottom}]},Me.map((e,t)=>React.createElement(View,{key:`w-${t}`,style:[N.layout.weekLabelItem,{paddingHorizontal:Ne}]},renderTextOrNode(e,[N.layout.weekLabel,{color:N.colors.text}])))),React.createElement(View,{style:[N.layout.days,{rowGap:N.spacing.row}]},we.map((e,t)=>Ge(e,t))),K?React.createElement(Pressable,{style:[N.layout.confirmButton,{backgroundColor:P??N.colors.selectedBackground,opacity:Le?.5:1,marginTop:N.spacing.confirmMarginTop,paddingVertical:N.spacing.confirmPaddingVertical,borderRadius:N.radii.confirmButton}],onPress:_e,disabled:Le},renderTextOrNode(F,[N.layout.confirmText,{color:N.colors.confirmText,fontWeight:N.typography.confirmTextWeight}])):null);return Y?React.createElement(Popup,_extends({visible:Q,placement:G,round:q,closeOnOverlayPress:me,overlay:ge,safeAreaInsetTop:null!=re?.safeAreaInsetTop?re.safeAreaInsetTop:W,safeAreaInsetBottom:null!=re?.safeAreaInsetBottom?re.safeAreaInsetBottom:"bottom"===G,onOpen:ue,onOpened:ce,onClose:de,onClosed:pe},re),qe):qe},Calendar=React.memo(CalendarImpl);Calendar.displayName="Calendar";export default Calendar;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var a in o)({}).hasOwnProperty.call(o,a)&&(e[a]=o[a])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useRef,useState}from"react";import{FlatList,Pressable,Text,View,useWindowDimensions}from"react-native";import{Checked,Cross}from"react-native-system-icon";import{useControllableValue}from"../../hooks";import{shallowEqualArray,renderTextOrNode}from"../../utils";import{isFunction,isNumber,isText}from"../../utils/validate";import Popup from"../popup";import Tabs from"../tabs";import{useLocale}from"../config-provider/useLocale";import{useCascaderTokens}from"./tokens";import{useCascaderExtend}from"./useCascaderExtend";const getFieldKeys=e=>({textKey:e?.text??"text",valueKey:e?.value??"value",childrenKey:e?.children??"children"}),resolveRows=(e=[],t,o)=>{const a=[];let n=e;return o.forEach(e=>{if(!n?.length)return;const o=n.find(o=>o[t.valueKey]===e);o&&(a.push(o),n=o[t.childrenKey]??[])}),a},CascaderImpl=e=>{const{tokensOverride:t,options:o=[],title:a,placeholder:n,activeColor:l,fieldNames:i,optionRender:r,showHeader:s,closeable:c,closeIcon:d,onChange:u,onClose:p,onFinish:g,onClickTab:y,onTabChange:h,swipeable:m,style:b,testID:f,children:C,poppable:v,visible:R,defaultVisible:x,onVisibleChange:T,closeOnClickOverlay:k,closeOnFinish:E,popupPlacement:S,popupRound:w,popupProps:P,loadingText:z,...I}=e,O=useLocale(),V=useCascaderTokens(t),L=a??O?.vanCascader?.placeholder??V.defaults.title,K=n??O?.vanCascader?.placeholder??V.defaults.placeholder,N=l??V.colors.tabActive,H=s??V.defaults.showHeader,A=m??V.defaults.swipeable,F=v??V.defaults.poppable,W=k??V.defaults.closeOnClickOverlay,B=E??V.defaults.closeOnFinish,D=S??V.defaults.popupPlacement,_=w??V.defaults.popupRound,j=z??V.defaults.loadingText,[M,q]=useControllableValue(e,{defaultValue:[],trigger:"onChange"}),$=getFieldKeys(i),G=Array.isArray(M)?M:[],[J,Q]=useState(G),U=c??V.defaults.closeable,[X,Y]=useControllableValue(e,{defaultValue:!1,valuePropName:"visible",defaultValuePropName:"defaultVisible",trigger:"onVisibleChange"}),Z=F?J:G,{tabs:ee,items:te,depth:oe}=useCascaderExtend(o,$,Z),{width:ae}=useWindowDimensions(),[ne,le]=useState(0),ie=useCallback(e=>{const t=e.nativeEvent.layout.width;t&&le(e=>e===t?e:t)},[]),re=resolveRows(o,$,G),[se,ce]=useState(0);useEffect(()=>{let e=Array.isArray(Z)?Z.length:0;e>=oe&&(e=Math.max(oe-1,0)),ce(t=>t===e?t:e)},[Z.length,oe]),useEffect(()=>{F&&X||Q(e=>shallowEqualArray(e,G)?e:G)},[G,F,X]);const de=useCallback(()=>{F&&!X&&(Q(e=>shallowEqualArray(e,G)?e:G),Y(!0))},[G,F,X,Y]),ue=useRef(p),pe=useRef(u),ge=useRef(g),ye=useRef(y),he=useRef(h);ue.current=p,pe.current=u,ge.current=g,ye.current=y,he.current=h;const me=useCallback(e=>{F&&X&&(Y(!1),e&&ue.current?.())},[F,X,Y]),be=useCallback(()=>{F&&(X?me(!0):de())},[me,de,F,X]),fe=isFunction(C),Ce=fe?C:null,ve=useCallback(e=>{const t=isNumber(e.index)?e.index:Number(e.name);if(Number.isNaN(t))return;const o=te[t]?.[$.textKey];ye.current?.(t,isText(o)?String(o):K)},[te,$.textKey,K]),Re=useCallback((e,t)=>{const o=isNumber(t)?t:Number(e);Number.isNaN(o)||(ce(o),he.current?.(o))},[]),xe=useCallback((e,t)=>{if(e.disabled)return;const a=e[$.valueKey];if(null==a)return;const n=[...(F?J:G).slice(0,t),a],l=resolveRows(o,$,n),i=e[$.childrenKey]??[],r=Object.prototype.hasOwnProperty.call(e,$.childrenKey)&&!i.length,s=n.length>=oe,c=!i.length&&!r;F?(Q(n),pe.current?.(n,l)):q(n,l),(c||s)&&(F&&(q(n,l),B&&me(!0)),ge.current?.(n,l))},[G,B,me,oe,$,o,J,F,q]),Te=useCallback(e=>{if(e<=0)return K;const t=te[e-1];if(!t)return K;if(!Object.prototype.hasOwnProperty.call(t,$.childrenKey))return K;return 0===(t[$.childrenKey]??[]).length&&Z.length===e?j:K},[Z.length,te,$.childrenKey,j,K]),ke=F||fe?null:C,Ee=React.createElement(View,_extends({testID:f,style:[V.layout.container,{backgroundColor:V.colors.background},b]},I),H?React.createElement(View,{style:[V.layout.header,{height:V.sizing.headerHeight,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},renderTextOrNode(L,[V.layout.title,{color:V.colors.headerText,fontSize:V.typography.titleSize,fontWeight:V.typography.titleWeight}]),U?React.createElement(Pressable,{hitSlop:8,onPress:()=>{F?me(!0):ue.current?.()},style:[V.layout.closeButton,{marginLeft:V.spacing.closeButtonMarginLeft}],accessibilityRole:"button",accessibilityLabel:O?.vanCascader?.close??"Close"},d??(e=>React.createElement(Cross,{size:V.sizing.closeIconSize,fill:e.pressed?V.colors.closeIconActive:V.colors.closeIcon,color:e.pressed?V.colors.closeIconActive:V.colors.closeIcon}))):null):null,(()=>{if(!ee.length)return React.createElement(CascaderOptionList,{optionList:[],tabIndex:0,selectedValue:Z[0],activeColor:N,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:Te(0)});const e=!!A,t=ne||ae||void 0,o={height:V.sizing.headerHeight,paddingHorizontal:V.spacing.tabNavPaddingHorizontal,paddingVertical:V.spacing.tabNavPaddingVertical,backgroundColor:V.colors.background};return React.createElement(View,{style:V.layout.tabsWrapper,onLayout:ie},React.createElement(Tabs,{style:t?{width:t}:void 0,active:se,onChange:Re,onClickTab:ve,align:"center",swipeable:e,swipeThreshold:0,scrollable:!0,animated:!0,duration:300,color:N,lineHeight:V.sizing.indicatorHeight,titleActiveColor:V.colors.tabText,titleInactiveColor:V.colors.tabInactive,tabBarStyle:o,tabStyle:[V.layout.tabsItem,{paddingHorizontal:V.spacing.tabPaddingHorizontal}],titleStyle:[V.layout.tabsTitle,{fontSize:V.typography.tabsTitleSize}],contentStyle:e?void 0:V.layout.tabsContentStatic},ee.map((e,t)=>{const o=te[t],a=isText(o?.[$.textKey])?String(o?.[$.textKey]):"",n=!a;return React.createElement(Tabs.TabPane,{key:t,name:t,title:e=>React.createElement(Text,{style:[V.layout.tabTitleNode,{color:n?V.colors.tabInactive:V.colors.tabText,fontWeight:n?V.typography.tabTitlePlaceholderWeight:V.typography.tabTitleWeight}]},n?K:a)},React.createElement(CascaderOptionList,{optionList:e,tabIndex:t,selectedValue:Z[t],activeColor:N,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:Te(t)}))})))})(),ke?React.createElement(View,{style:[V.layout.inlineChildren,{paddingVertical:V.spacing.inlineChildrenPaddingVertical,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},ke):null);if(!F)return Ee;const{closeOnOverlayPress:Se,overlay:we,onOpen:Pe,onOpened:ze,onClose:Ie,onClosed:Oe,...Ve}=P??{},Le=useRef(Ie);Le.current=Ie;const Ke=useCallback(()=>{Le.current?.(),me(!0)},[me]),Ne={open:de,close:()=>me(!0),toggle:be},He=useCallback(e=>{if(!React.isValidElement(e))return e;const t=e.props,o=()=>{t.onPress?.(),t.onClick?.(),de()};return React.cloneElement(e,{onPress:o,onClick:o})},[de])(Ce?Ce(G,re,Ne):fe?null:C||null);return React.createElement(React.Fragment,null,He,React.createElement(Popup,_extends({visible:X,placement:D,round:_,closeOnOverlayPress:Se??W,overlay:we??!0,safeAreaInsetTop:null!=Ve?.safeAreaInsetTop?Ve.safeAreaInsetTop:H&&U,safeAreaInsetBottom:null!=Ve?.safeAreaInsetBottom?Ve.safeAreaInsetBottom:"bottom"===D,onOpen:Pe,onOpened:ze,onClose:Ke,onClosed:Oe},Ve,{style:{paddingLeft:0,paddingRight:0}}),Ee))},CascaderOptionItem=React.memo(({option:e,tabIndex:t,selected:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r})=>{const s=e[n.valueKey],c=e[n.textKey],d=!!e.disabled,u=e.color??r.colors.optionText,p=d?r.colors.optionDisabled:o?e.color??a:u,g=[r.layout.optionText,{color:p,fontSize:r.typography.optionTextSize},o?{fontWeight:r.typography.optionTextActiveWeight}:null],y=l?l({option:e,selected:o}):renderTextOrNode(c,g),h=isText(y)?renderTextOrNode(y,g):y;return React.createElement(Pressable,{testID:`cascader-option-${t}-${String(s)}`,style:({pressed:e})=>[r.layout.option,{minHeight:r.sizing.optionMinHeight,paddingVertical:r.spacing.optionPaddingVertical,paddingHorizontal:r.spacing.optionPaddingHorizontal},e&&!d&&{backgroundColor:r.colors.optionActiveBackground}],onPress:()=>i(e,t),disabled:d},React.createElement(View,{style:r.layout.optionContent},React.createElement(View,{style:[r.layout.optionLabel,{marginRight:r.spacing.optionLabelMarginRight}]},h),o?React.createElement(Checked,{size:r.sizing.selectedIconSize,fill:a,color:a}):null))}),CascaderOptionList=React.memo(({optionList:e,tabIndex:t,selectedValue:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r,emptyText:s})=>{const c=useCallback(({item:e})=>React.createElement(CascaderOptionItem,{option:e,tabIndex:t,selected:o===e[n.valueKey],activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r}),[a,n,i,l,o,t,r]),d=useCallback(e=>String(e[n.valueKey]),[n.valueKey]);return e.length?React.createElement(FlatList,{data:e,style:[r.layout.optionList,{height:r.sizing.optionListHeight}],contentContainerStyle:{paddingTop:r.spacing.optionListPaddingTop,paddingBottom:r.spacing.optionListPaddingBottom},showsVerticalScrollIndicator:!1,renderItem:c,keyExtractor:d,removeClippedSubviews:!0,initialNumToRender:20,windowSize:5}):React.createElement(View,{style:[r.layout.optionList,{height:r.sizing.optionListHeight}]},React.createElement(Text,{style:[r.layout.empty,{color:r.colors.placeholder,paddingVertical:r.spacing.emptyPaddingVertical,fontSize:r.typography.emptyTextSize}]},s))}),Cascader=React.memo(CascaderImpl);export default Cascader;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var a in o)({}).hasOwnProperty.call(o,a)&&(e[a]=o[a])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useRef,useState}from"react";import{FlatList,Pressable,Text,View,useWindowDimensions}from"react-native";import{Checked,Cross}from"react-native-system-icon";import{useControllableValue}from"../../hooks";import{shallowEqualArray,renderTextOrNode}from"../../utils";import{isFunction,isNumber,isText}from"../../utils/validate";import Popup from"../popup";import Tabs from"../tabs";import{useLocale}from"../config-provider/useLocale";import{useCascaderTokens}from"./tokens";import{useCascaderExtend}from"./useCascaderExtend";import{getFieldKeys,resolveRows}from"../../hooks/cascader/utils";const CascaderImpl=e=>{const{tokensOverride:t,options:o=[],title:a,placeholder:n,activeColor:l,fieldNames:i,optionRender:r,showHeader:s,closeable:c,closeIcon:d,onChange:u,onClose:p,onFinish:g,onClickTab:y,onTabChange:m,swipeable:h,style:b,testID:f,children:C,poppable:v,visible:R,defaultVisible:x,onVisibleChange:k,closeOnClickOverlay:T,closeOnFinish:E,popupPlacement:S,popupRound:w,popupProps:P,loadingText:z,...I}=e,O=useLocale(),V=useCascaderTokens(t),L=a??O?.vanCascader?.placeholder??V.defaults.title,N=n??O?.vanCascader?.placeholder??V.defaults.placeholder,H=l??V.colors.tabActive,A=s??V.defaults.showHeader,K=h??V.defaults.swipeable,F=v??V.defaults.poppable,W=T??V.defaults.closeOnClickOverlay,B=E??V.defaults.closeOnFinish,D=S??V.defaults.popupPlacement,M=w??V.defaults.popupRound,_=z??V.defaults.loadingText,[j,q]=useControllableValue(e,{defaultValue:[],trigger:"onChange"}),$=getFieldKeys(i),G=Array.isArray(j)?j:[],[J,Q]=useState(G),U=c??V.defaults.closeable,[X,Y]=useControllableValue(e,{defaultValue:!1,valuePropName:"visible",defaultValuePropName:"defaultVisible",trigger:"onVisibleChange"}),Z=F?J:G,{tabs:ee,items:te,depth:oe}=useCascaderExtend(o,$,Z),{width:ae}=useWindowDimensions(),[ne,le]=useState(0),ie=useCallback(e=>{const t=e.nativeEvent.layout.width;t&&le(e=>e===t?e:t)},[]),re=resolveRows(o,$,G),[se,ce]=useState(0);useEffect(()=>{const e=ee.length;let t=Math.max(e-1,0);t>=oe&&(t=Math.max(oe-1,0)),ce(e=>e===t?e:t)},[ee.length,oe]),useEffect(()=>{F&&X||Q(e=>shallowEqualArray(e,G)?e:G)},[G,F,X]);const de=useCallback(()=>{F&&!X&&(Q(e=>shallowEqualArray(e,G)?e:G),Y(!0))},[G,F,X,Y]),ue=useRef(p),pe=useRef(u),ge=useRef(g),ye=useRef(y),me=useRef(m);ue.current=p,pe.current=u,ge.current=g,ye.current=y,me.current=m;const he=useCallback(e=>{F&&X&&(Y(!1),e&&ue.current?.())},[F,X,Y]),be=useCallback(()=>{F&&(X?he(!0):de())},[he,de,F,X]),fe=isFunction(C),Ce=fe?C:null,ve=useCallback(e=>{const t=isNumber(e.index)?e.index:Number(e.name);if(Number.isNaN(t))return;const o=te[t]?.[$.textKey];ye.current?.(t,isText(o)?String(o):N)},[te,$.textKey,N]),Re=useCallback((e,t)=>{const o=isNumber(t)?t:Number(e);Number.isNaN(o)||(ce(o),me.current?.(o))},[]),xe=useCallback((e,t)=>{if(e.disabled)return;const a=e[$.valueKey];if(null==a)return;const n=[...(F?J:G).slice(0,t),a],l=resolveRows(o,$,n),i=e[$.childrenKey]??[],r=Object.prototype.hasOwnProperty.call(e,$.childrenKey)&&!i.length,s=n.length>=oe,c=!i.length&&!r;F?(Q(n),pe.current?.(n,l)):q(n,l),(c||s)&&(F&&(q(n,l),B&&he(!0)),ge.current?.(n,l))},[G,B,he,oe,$,o,J,F,q]),ke=useCallback(e=>{if(e<=0)return N;const t=te[e-1];if(!t)return N;if(!Object.prototype.hasOwnProperty.call(t,$.childrenKey))return N;return 0===(t[$.childrenKey]??[]).length&&Z.length===e?_:N},[Z.length,te,$.childrenKey,_,N]),Te=F||fe?null:C,Ee=React.createElement(View,_extends({testID:f,style:[V.layout.container,{backgroundColor:V.colors.background},b]},I),A?React.createElement(View,{style:[V.layout.header,{height:V.sizing.headerHeight,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},renderTextOrNode(L,[V.layout.title,{color:V.colors.headerText,fontSize:V.typography.titleSize,fontWeight:V.typography.titleWeight}]),U?React.createElement(Pressable,{hitSlop:8,onPress:()=>{F?he(!0):ue.current?.()},style:[V.layout.closeButton,{marginLeft:V.spacing.closeButtonMarginLeft}],accessibilityRole:"button",accessibilityLabel:O?.vanCascader?.close??"Close"},d??(e=>React.createElement(Cross,{size:V.sizing.closeIconSize,fill:e.pressed?V.colors.closeIconActive:V.colors.closeIcon,color:e.pressed?V.colors.closeIconActive:V.colors.closeIcon}))):null):null,(()=>{if(!ee.length)return React.createElement(CascaderOptionList,{optionList:[],tabIndex:0,selectedValue:Z[0],activeColor:H,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:ke(0)});const e=!!K,t=ne||ae||void 0,o={height:V.sizing.headerHeight,paddingHorizontal:V.spacing.tabNavPaddingHorizontal,paddingVertical:V.spacing.tabNavPaddingVertical,backgroundColor:V.colors.background};return React.createElement(View,{style:V.layout.tabsWrapper,onLayout:ie},React.createElement(Tabs,{style:t?{width:t}:void 0,active:se,onChange:Re,onClickTab:ve,align:"center",swipeable:e,swipeThreshold:0,scrollable:!0,animated:!0,duration:300,color:H,lineHeight:V.sizing.indicatorHeight,titleActiveColor:V.colors.tabText,titleInactiveColor:V.colors.tabInactive,tabBarStyle:o,tabStyle:[V.layout.tabsItem,{paddingHorizontal:V.spacing.tabPaddingHorizontal}],titleStyle:[V.layout.tabsTitle,{fontSize:V.typography.tabsTitleSize}],contentStyle:e?void 0:V.layout.tabsContentStatic},ee.map((e,t)=>{const o=te[t],a=isText(o?.[$.textKey])?String(o?.[$.textKey]):"",n=!a;return React.createElement(Tabs.TabPane,{key:t,name:t,title:e=>React.createElement(Text,{style:[V.layout.tabTitleNode,{color:n?V.colors.tabInactive:V.colors.tabText,fontWeight:n?V.typography.tabTitlePlaceholderWeight:V.typography.tabTitleWeight}]},n?N:a)},React.createElement(CascaderOptionList,{optionList:e,tabIndex:t,selectedValue:Z[t],activeColor:H,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:ke(t)}))})))})(),Te?React.createElement(View,{style:[V.layout.inlineChildren,{paddingVertical:V.spacing.inlineChildrenPaddingVertical,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},Te):null);if(!F)return Ee;const{closeOnOverlayPress:Se,overlay:we,onOpen:Pe,onOpened:ze,onClose:Ie,onClosed:Oe,...Ve}=P??{},Le=useRef(Ie);Le.current=Ie;const Ne=useCallback(()=>{Le.current?.(),he(!0)},[he]),He={open:de,close:()=>he(!0),toggle:be},Ae=useCallback(e=>{if(!React.isValidElement(e))return e;const t=e.props,o=()=>{t.onPress?.(),t.onClick?.(),de()};return React.cloneElement(e,{onPress:o,onClick:o})},[de])(Ce?Ce(G,re,He):fe?null:C||null);return React.createElement(React.Fragment,null,Ae,React.createElement(Popup,_extends({visible:X,placement:D,round:M,closeOnOverlayPress:Se??W,overlay:we??!0,safeAreaInsetTop:null!=Ve?.safeAreaInsetTop?Ve.safeAreaInsetTop:A&&U,safeAreaInsetBottom:null!=Ve?.safeAreaInsetBottom?Ve.safeAreaInsetBottom:"bottom"===D,onOpen:Pe,onOpened:ze,onClose:Ne,onClosed:Oe},Ve,{style:{paddingLeft:0,paddingRight:0}}),Ee))},CascaderOptionItem=React.memo(({option:e,tabIndex:t,selected:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r})=>{const s=e[n.valueKey],c=e[n.textKey],d=!!e.disabled,u=e.color??r.colors.optionText,p=d?r.colors.optionDisabled:o?e.color??a:u,g=[r.layout.optionText,{color:p,fontSize:r.typography.optionTextSize},o?{fontWeight:r.typography.optionTextActiveWeight}:null],y=l?l({option:e,selected:o}):renderTextOrNode(c,g),m=isText(y)?renderTextOrNode(y,g):y;return React.createElement(Pressable,{testID:`cascader-option-${t}-${String(s)}`,style:({pressed:e})=>[r.layout.option,{minHeight:r.sizing.optionMinHeight,paddingVertical:r.spacing.optionPaddingVertical,paddingHorizontal:r.spacing.optionPaddingHorizontal},e&&!d&&{backgroundColor:r.colors.optionActiveBackground}],onPress:()=>i(e,t),disabled:d},React.createElement(View,{style:r.layout.optionContent},React.createElement(View,{style:[r.layout.optionLabel,{marginRight:r.spacing.optionLabelMarginRight}]},m),o?React.createElement(Checked,{size:r.sizing.selectedIconSize,fill:a,color:a}):null))}),CascaderOptionList=React.memo(({optionList:e,tabIndex:t,selectedValue:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r,emptyText:s})=>{const c=useCallback(({item:e})=>React.createElement(CascaderOptionItem,{option:e,tabIndex:t,selected:o===e[n.valueKey],activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r}),[a,n,i,l,o,t,r]),d=useCallback(e=>String(e[n.valueKey]),[n.valueKey]);return e.length?React.createElement(FlatList,{data:e,style:[r.layout.optionList,{height:r.sizing.optionListHeight}],contentContainerStyle:{paddingTop:r.spacing.optionListPaddingTop,paddingBottom:r.spacing.optionListPaddingBottom},showsVerticalScrollIndicator:!1,renderItem:c,keyExtractor:d,removeClippedSubviews:!0,initialNumToRender:20,windowSize:5}):React.createElement(View,{style:[r.layout.optionList,{height:r.sizing.optionListHeight}]},React.createElement(Text,{style:[r.layout.empty,{color:r.colors.placeholder,paddingVertical:r.spacing.emptyPaddingVertical,fontSize:r.typography.emptyTextSize}]},s))}),Cascader=React.memo(CascaderImpl);export default Cascader;
@@ -1 +1 @@
1
- const getDepth=(e,t)=>{let n=1;const r=(e,c)=>{e?.length&&(c>n&&(n=c),e.forEach(e=>{Object.prototype.hasOwnProperty.call(e,t)&&c+1>n&&(n=c+1);const l=e[t];l?.length&&r(l,c+1)}))};return r(e,1),n};export const useCascaderExtend=(e=[],t,n)=>{const r=getDepth(e,t.childrenKey),c=n?.length?n.reduce((e,r,c)=>{if(null==r)return e;const l=e[c];if(!l)return e;const s=l.find(e=>e[t.valueKey]===n[c])?.[t.childrenKey];return s&&e.push(s),e},[e]):[e],l=n?.length?n.map((e,n)=>c[n]?.find(n=>n[t.valueKey]===e)):[];return{tabs:c,items:l,depth:r}};
1
+ const getDepth=(e,t)=>{let n=1;const r=(e,l)=>{e?.length&&(l>n&&(n=l),e.forEach(e=>{Object.prototype.hasOwnProperty.call(e,t)&&l+1>n&&(n=l+1);const c=e[t];c?.length&&r(c,l+1)}))};return r(e,1),n};export const useCascaderExtend=(e=[],t,n)=>{const r=getDepth(e,t.childrenKey),l=[e],c=[];if(n?.length){let r=e;for(let e=0;e<n.length;e+=1){const o=n[e];if(null==o||!r?.length)break;const h=r.find(e=>e[t.valueKey]===o);if(!h)break;c.push(h);if(!Object.prototype.hasOwnProperty.call(h,t.childrenKey))break;const s=h[t.childrenKey]??[];l.push(s),r=s}}return{tabs:l,items:c,depth:r}};
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef}from"react";import{ActivityIndicator,Animated,Easing,Platform,Pressable,StyleSheet,View}from"react-native";import{useLocale}from"../config-provider/useLocale";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createHairlineView}from"../../utils/hairline";import{isPromiseLike}from"../../utils/promise";import{isNumber,isValidNode}from"../../utils/validate";import{renderTextOrNode}from"../../utils";import{Close}from"react-native-system-icon";import Button from"../button";import Popup from"../popup";import{useDialogTokens}from"./tokens";const ActionButton=e=>{const{text:t,color:o,tokens:n,dividerPosition:i="none",loading:r,disabled:a,onPress:s}=e,l=o??n.colors.confirm,c="none"===i?null:[S.btnDiv,{width:0},createHairlineView({position:i,color:n.colors.divider,top:0,bottom:0,[i]:0})];return React.createElement(Pressable,{accessibilityRole:"button",disabled:a||r,style:({pressed:e})=>[S.btn,{height:n.sizes.actionHeight,opacity:!e||a||r?1:.8}],onPress:a||r?void 0:s},c&&React.createElement(View,{style:c,pointerEvents:"none"}),r?React.createElement(ActivityIndicator,{size:"small",color:l}):renderTextOrNode(t??"",{color:l,fontFamily:n.typography.fontFamily,fontSize:n.typography.actionSize,fontWeight:n.typography.actionWeight}))},DialogImpl=e=>{const t=useLocale(),{visible:o,title:n,message:i,messageAlign:r="center",theme:a="default",width:s,closeable:l=!1,closeIcon:c,overlay:d=!0,overlayStyle:g,overlayTestID:p="dialog-overlay",closeOnBackPress:m=!1,closeOnPopstate:u=!0,closeOnOverlayPress:f=!1,closeOnClickOverlay:y=!1,onClickOverlay:b,onClickCloseIcon:h,beforeClose:C,showCancelButton:v=!1,showConfirmButton:P=!0,cancelButtonText:x,cancelButtonColor:w,cancelProps:E,confirmButtonText:R,confirmButtonColor:k,confirmProps:B,footer:z,contentStyle:I,titleStyle:O,messageStyle:H,tokensOverride:V,style:D,children:T,onCancel:L,onConfirm:A,onClose:F,onClosed:W,...N}=e,M=useDialogTokens(V),q=useReducedMotion(),j=isValidNode(n),G=isValidNode(T),_=isValidNode(i)||G,J=v||P,K="round-button"===a,Q=E?.loading,U=B?.loading,X=x??t.cancel,Y=R??t.confirm,Z=useRef({seq:0,beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});Object.assign(Z.current,{beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});const $=useCallback((e,t)=>{const o=Z.current;o.seq+=1;const n=o.seq,i=o.beforeClose;if(!i)return void t?.();let r;try{r=i(e)}catch{return void t?.()}!1!==r&&(isPromiseLike(r)?r.then(e=>{!1!==e&&Z.current.seq===n&&t?.()}).catch(()=>{Z.current.seq===n&&t?.()}):t?.())},[]),ee=useCallback(()=>{Z.current.onClickCloseIcon?.(),$("close",()=>Z.current.onClose?.())},[$]),te=useCallback(()=>{Z.current.cancelLoad||$("cancel",()=>Z.current.onCancel?.())},[$]),oe=useCallback(()=>{Z.current.confirmLoad||$("confirm",()=>Z.current.onConfirm?.())},[$]),ne=useRef(new Animated.Value(.7)).current,ie=useRef(null);useEffect(()=>{ie.current?.stop(),ne.setValue(o?.7:1);const e=Animated.timing(ne,{toValue:o?1:.9,duration:q?0:300,easing:o?Easing.out(Easing.cubic):Easing.in(Easing.cubic),useNativeDriver:nativeDriverEnabled,isInteraction:!1});ie.current=e,e.start()},[ne,o,q]),useEffect(()=>()=>{ie.current?.stop()},[]);const re={transform:[{scale:ne}]},ae=useMemo(()=>j?{wrap:[S.titleWrap,{paddingTop:_?M.spacing.titlePaddingTop:M.spacing.titleIsolatedPadding,paddingBottom:_?0:M.spacing.titleIsolatedPadding,paddingHorizontal:_?M.spacing.paddingHorizontal:0,marginBottom:_?M.spacing.titleGap:0}],text:[S.title,{color:M.colors.title,fontFamily:M.typography.fontFamily,fontSize:M.typography.titleSize,lineHeight:M.typography.titleLineHeight,fontWeight:M.typography.titleWeight},O]}:null,[j,_,O,M]),se=useMemo(()=>({text:[S.msg,{color:K?M.colors.title:M.colors.message,fontFamily:M.typography.fontFamily,fontSize:M.typography.messageSize,lineHeight:M.typography.messageLineHeight,textAlign:r},H],content:G?null:{alignItems:"center"===r?"center":"left"===r?"flex-start":"flex-end"},wrap:[S.msgWrap,{paddingTop:j?M.spacing.messagePaddingTop:M.spacing.messagePadding,paddingBottom:K?M.spacing.roundFooterPadding:M.spacing.messagePadding,paddingHorizontal:M.spacing.messagePaddingHorizontal}]}),[K,r,H,G,j,M]),le=useMemo(()=>({border:[S.footerBorder,createHairlineView({position:"top",color:M.colors.divider,left:0,right:0,top:0})],round:[S.roundFooter,{paddingTop:M.spacing.messagePaddingTop,paddingHorizontal:M.spacing.messagePaddingHorizontal,paddingBottom:M.spacing.roundFooterPadding}]}),[M]),ce=useMemo(()=>{const e=s?isNumber(s)?{width:s}:{width:String(s)}:{width:"90%",maxWidth:M.sizes.maxWidth};return[{backgroundColor:M.colors.background,borderRadius:M.sizes.borderRadius,padding:0},e,D]},[s,D,M]),de=useCallback(()=>{const e=Z.current.beforeClose;if(!e)return!0;try{return e("close")}catch{return!0}},[]),ge=useMemo(()=>J&&React.createElement(View,{style:le.round},v&&React.createElement(View,{style:[S.roundBtnWrap,P&&{marginRight:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"warning",text:X,color:w,loading:Q,disabled:E?.disabled,onPress:te,style:{minHeight:M.sizes.roundButtonHeight}})),P&&React.createElement(View,{style:[S.roundBtnWrap,v&&{marginLeft:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"danger",text:Y,color:k,loading:U,disabled:B?.disabled,onPress:oe,style:{minHeight:M.sizes.roundButtonHeight}}))),[w,Q,E?.disabled,X,k,U,B?.disabled,Y,te,oe,J,le.round,v,P,M.sizes.roundButtonHeight,M.spacing.roundFooterGap]),pe=useMemo(()=>J&&React.createElement(View,{style:S.footer},React.createElement(View,{style:le.border,pointerEvents:"none"}),v&&React.createElement(ActionButton,{tokens:M,text:X,color:w??M.colors.cancel,dividerPosition:"none",loading:Q,disabled:E?.disabled,onPress:te}),P&&React.createElement(ActionButton,{tokens:M,text:Y,color:k??M.colors.confirm,dividerPosition:v?"left":"none",loading:U,disabled:B?.disabled,onPress:oe})),[w,Q,E?.disabled,X,k,U,B?.disabled,Y,le.border,te,oe,J,v,P,M]),me=z??(K?ge:pe);return React.createElement(Popup,_extends({visible:o,placement:"center",round:!0,overlay:d,overlayStyle:g,overlayTestID:p,closeOnBackPress:m,closeOnPopstate:u,closeOnClickOverlay:f||y,onClickOverlay:b,beforeClose:de,onClose:F,onClosed:W,contentAnimationStyle:re,style:ce,accessibilityRole:"android"===Platform.OS?"alert":"alertdialog",accessibilityLabel:"string"==typeof n?n:void 0},N),l&&React.createElement(Pressable,{style:[S.closeIcon,{top:M.spacing.paddingTop/2,right:M.spacing.paddingHorizontal/2,padding:M.spacing.closeIconPadding}],hitSlop:{top:8,bottom:8,left:8,right:8},onPress:ee},c??React.createElement(Close,{size:M.sizes.closeSize,fill:M.colors.closeIcon,color:M.colors.closeIcon})),ae&&React.createElement(View,{style:ae.wrap},renderTextOrNode(n,ae.text)),_&&React.createElement(View,{style:[S.content,se.content,I]},G?T:React.createElement(View,{style:se.wrap},renderTextOrNode(i,se.text))),me)},S=StyleSheet.create({titleWrap:{alignItems:"center"},title:{textAlign:"center"},content:{width:"100%"},msg:{textAlign:"center"},footer:{flexDirection:"row",position:"relative"},footerBorder:{position:"absolute",top:0,left:0,right:0,height:0},btn:{flex:1,alignItems:"center",justifyContent:"center"},btnDiv:{position:"absolute",pointerEvents:"none"},msgWrap:{width:"100%"},roundFooter:{width:"100%",flexDirection:"row"},roundBtnWrap:{flex:1},closeIcon:{position:"absolute",zIndex:1}});export const Dialog=React.memo(DialogImpl);Dialog.displayName="Dialog";export default Dialog;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var o=1;o<arguments.length;o++){var t=arguments[o];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef}from"react";import{Animated,Easing,Platform,Pressable,StyleSheet,View}from"react-native";import{useLocale}from"../config-provider/useLocale";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createHairlineView}from"../../utils/hairline";import{isPromiseLike}from"../../utils/promise";import{isNumber,isValidNode}from"../../utils/validate";import{renderTextOrNode}from"../../utils";import{Close}from"react-native-system-icon";import Button from"../button";import Popup from"../popup";import{useDialogTokens}from"./tokens";import{ActionButton}from"../../hooks/dialog/ActionButton";const DialogImpl=e=>{const o=useLocale(),{visible:t,title:n,message:i,messageAlign:r="center",theme:a="default",width:l,closeable:s=!1,closeIcon:c,overlay:d=!0,overlayStyle:g,overlayTestID:p="dialog-overlay",closeOnBackPress:m=!1,closeOnPopstate:u=!0,closeOnOverlayPress:f=!1,closeOnClickOverlay:y=!1,onClickOverlay:b,onClickCloseIcon:h,beforeClose:C,showCancelButton:v=!1,showConfirmButton:P=!0,cancelButtonText:k,cancelButtonColor:x,cancelProps:w,confirmButtonText:B,confirmButtonColor:R,confirmProps:E,footer:O,contentStyle:z,titleStyle:I,messageStyle:H,tokensOverride:V,style:T,children:D,onCancel:L,onConfirm:A,onClose:F,onClosed:N,...W}=e,M=useDialogTokens(V),q=useReducedMotion(),G=isValidNode(n),_=isValidNode(D),j=isValidNode(i)||_,J=v||P,K="round-button"===a,Q=w?.loading,U=E?.loading,X=k??o.cancel,Y=B??o.confirm,Z=useRef({seq:0,beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});Object.assign(Z.current,{beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});const $=useCallback((e,o)=>{const t=Z.current;t.seq+=1;const n=t.seq,i=t.beforeClose;if(!i)return void o?.();let r;try{r=i(e)}catch{return}!1!==r&&(isPromiseLike(r)?r.then(e=>{!1!==e&&Z.current.seq===n&&o?.()}).catch(()=>{}):o?.())},[]),ee=useCallback(()=>{Z.current.onClickCloseIcon?.(),$("close",()=>Z.current.onClose?.())},[$]),oe=useCallback(()=>{Z.current.cancelLoad||$("cancel",()=>Z.current.onCancel?.())},[$]),te=useCallback(()=>{Z.current.confirmLoad||$("confirm",()=>Z.current.onConfirm?.())},[$]),ne=useRef(new Animated.Value(.7)).current,ie=useRef(null);useEffect(()=>{ie.current?.stop(),ne.setValue(t?.7:1);const e=Animated.timing(ne,{toValue:t?1:.9,duration:q?0:300,easing:t?Easing.out(Easing.cubic):Easing.in(Easing.cubic),useNativeDriver:nativeDriverEnabled,isInteraction:!1});ie.current=e,e.start()},[ne,t,q]),useEffect(()=>()=>{ie.current?.stop()},[]);const re={transform:[{scale:ne}]},ae=useMemo(()=>G?{wrap:[S.titleWrap,{paddingTop:j?M.spacing.titlePaddingTop:M.spacing.titleIsolatedPadding,paddingBottom:j?0:M.spacing.titleIsolatedPadding,paddingHorizontal:j?M.spacing.paddingHorizontal:0,marginBottom:j?M.spacing.titleGap:0}],text:[S.title,{color:M.colors.title,fontFamily:M.typography.fontFamily,fontSize:M.typography.titleSize,lineHeight:M.typography.titleLineHeight,fontWeight:M.typography.titleWeight},I]}:null,[G,j,I,M]),le=useMemo(()=>({text:[S.msg,{color:K?M.colors.title:M.colors.message,fontFamily:M.typography.fontFamily,fontSize:M.typography.messageSize,lineHeight:M.typography.messageLineHeight,textAlign:r},H],content:_?null:{alignItems:"center"===r?"center":"left"===r?"flex-start":"flex-end"},wrap:[S.msgWrap,{paddingTop:G?M.spacing.messagePaddingTop:M.spacing.messagePadding,paddingBottom:K?M.spacing.roundFooterPadding:M.spacing.messagePadding,paddingHorizontal:M.spacing.messagePaddingHorizontal}]}),[K,r,H,_,G,M]),se=useMemo(()=>({border:[S.footerBorder,createHairlineView({position:"top",color:M.colors.divider,left:0,right:0,top:0})],round:[S.roundFooter,{paddingTop:M.spacing.messagePaddingTop,paddingHorizontal:M.spacing.messagePaddingHorizontal,paddingBottom:M.spacing.roundFooterPadding}]}),[M]),ce=useMemo(()=>{const e=l?isNumber(l)?{width:l}:{width:String(l)}:{width:"90%",maxWidth:M.sizes.maxWidth};return[{backgroundColor:M.colors.background,borderRadius:M.sizes.borderRadius,padding:0},e,T]},[l,T,M]),de=useCallback(()=>{const e=Z.current.beforeClose;if(!e)return!0;try{return e("close")}catch{return!1}},[]),ge=useMemo(()=>J&&React.createElement(View,{style:se.round},v&&React.createElement(View,{style:[S.roundBtnWrap,P&&{marginRight:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"warning",text:X,color:x,loading:Q,disabled:w?.disabled,onPress:oe,style:{minHeight:M.sizes.roundButtonHeight}})),P&&React.createElement(View,{style:[S.roundBtnWrap,v&&{marginLeft:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"danger",text:Y,color:R,loading:U,disabled:E?.disabled,onPress:te,style:{minHeight:M.sizes.roundButtonHeight}}))),[x,Q,w?.disabled,X,R,U,E?.disabled,Y,oe,te,J,se.round,v,P,M.sizes.roundButtonHeight,M.spacing.roundFooterGap]),pe=useMemo(()=>J&&React.createElement(View,{style:S.footer},React.createElement(View,{style:se.border,pointerEvents:"none"}),v&&React.createElement(ActionButton,{tokens:M,text:X,color:x??M.colors.cancel,dividerPosition:"none",loading:Q,disabled:w?.disabled,onPress:oe}),P&&React.createElement(ActionButton,{tokens:M,text:Y,color:R??M.colors.confirm,dividerPosition:v?"left":"none",loading:U,disabled:E?.disabled,onPress:te})),[x,Q,w?.disabled,X,R,U,E?.disabled,Y,se.border,oe,te,J,v,P,M]),me=O??(K?ge:pe);return React.createElement(Popup,_extends({visible:t,placement:"center",round:!0,overlay:d,overlayStyle:g,overlayTestID:p,closeOnBackPress:m,closeOnPopstate:u,closeOnClickOverlay:f||y,onClickOverlay:b,beforeClose:de,onClose:F,onClosed:N,contentAnimationStyle:re,style:ce,accessibilityRole:"android"===Platform.OS?"alert":"alertdialog",accessibilityLabel:"string"==typeof n?n:void 0},W),s&&React.createElement(Pressable,{style:[S.closeIcon,{top:M.spacing.paddingTop/2,right:M.spacing.paddingHorizontal/2,padding:M.spacing.closeIconPadding}],hitSlop:{top:8,bottom:8,left:8,right:8},onPress:ee},c??React.createElement(Close,{size:M.sizes.closeSize,fill:M.colors.closeIcon,color:M.colors.closeIcon})),ae&&React.createElement(View,{style:ae.wrap},renderTextOrNode(n,ae.text)),j&&React.createElement(View,{style:[S.content,le.content,z]},_?D:React.createElement(View,{style:le.wrap},renderTextOrNode(i,le.text))),me)},S=StyleSheet.create({titleWrap:{alignItems:"center"},title:{textAlign:"center"},content:{width:"100%"},msg:{textAlign:"center"},footer:{flexDirection:"row",position:"relative"},footerBorder:{position:"absolute",top:0,left:0,right:0,height:0},msgWrap:{width:"100%"},roundFooter:{width:"100%",flexDirection:"row"},roundBtnWrap:{flex:1},closeIcon:{position:"absolute",zIndex:1}});export const Dialog=React.memo(DialogImpl);Dialog.displayName="Dialog";export default Dialog;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)({}).hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useState}from"react";import{Portal}from"../portal/Portal";import{deepMerge,isString,isUndefined}from"../../utils";import Dialog from"./Dialog";const runHook=async e=>{if(!e)return!0;try{return!1!==await e()}catch(e){return console.error(e),!0}},registry=new Map,defaults={default:{},show:{},alert:{},confirm:{}},requestClose=e=>{const t=registry.get(e);t?t.close?t.close():(Portal.remove(e),registry.delete(e)):Portal.remove(e)},DialogPortalInstance=({options:e,meta:t,portalKeyRef:r})=>{const[o,n]=useState(!0),s=useCallback(()=>{n(!1)},[]);useEffect(()=>{if(!r.current)return;const e=registry.get(r.current);return e&&(e.close=s),()=>{const e=registry.get(r.current??-1);e&&e.close===s&&(e.close=void 0)}},[s,r]),useEffect(()=>()=>{r.current&&registry.delete(r.current)},[r]);const a=useCallback(async(r,o)=>{await runHook(()=>e.beforeClose?.(r))&&await runHook(o)&&(("confirm"===r&&"alert"===t.mode||"confirm"===t.mode)&&t.resolve?.("confirm"===r),s())},[s,t,e.beforeClose]),l=useCallback(()=>{e.onClosed?.(),r.current&&(Portal.remove(r.current),registry.delete(r.current))},[e,r]);return React.createElement(Dialog,_extends({},e,{visible:o,onCancel:e.showCancelButton?()=>a("cancel",e.onCancel):e.onCancel,onConfirm:()=>a("confirm",e.onConfirm),onClose:()=>a("close",e.onClose),onClosed:l}))},mount=(e,t)=>{const r={current:0},o=React.createElement(DialogPortalInstance,{options:e,meta:t,portalKeyRef:r}),n=Portal.add(o);return r.current=n,registry.set(n,{key:n,options:e,meta:t}),()=>requestClose(n)},normalize=(e,t={})=>{const r={...deepMerge(deepMerge(defaults.default,defaults[e]),t),visible:!0};return isUndefined(r.showConfirmButton)&&(r.showConfirmButton=!0),r},setDefaultOptions=(e,t)=>{isString(e)?defaults[e]=deepMerge(defaults[e],t??{}):defaults.default=deepMerge(defaults.default,e)},resetDefaultOptions=e=>{e?defaults[e]={}:(defaults.default={},defaults.show={},defaults.alert={},defaults.confirm={})};export const DialogImperative={show:e=>mount(normalize("show",e),{mode:"show"}),alert:e=>new Promise(t=>{mount(normalize("alert",{...e,showCancelButton:!1}),{mode:"alert",resolve:t})}),confirm:e=>new Promise(t=>{mount(normalize("confirm",{showCancelButton:!0,...e}),{mode:"confirm",resolve:e=>t(void 0===e||e)})}),clear:()=>{registry.forEach((e,t)=>requestClose(t))},setDefaultOptions:setDefaultOptions,resetDefaultOptions:resetDefaultOptions};export const __DIALOG_STORE__={getItems:()=>Array.from(registry.values()).map(({key:e,options:t,meta:r})=>({key:e,options:t,meta:r})),close:requestClose};
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)({}).hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useState}from"react";import{Portal}from"../portal/Portal";import{deepMerge,isString,isUndefined}from"../../utils";import Dialog from"./Dialog";const runHook=async e=>{if(!e)return!0;try{return!1!==await e()}catch(e){return console.error(e),!1}},registry=new Map,defaults={default:{},show:{},alert:{},confirm:{}},requestClose=e=>{const t=registry.get(e);t?t.close?t.close():(Portal.remove(e),registry.delete(e)):Portal.remove(e)},DialogPortalInstance=({options:e,meta:t,portalKeyRef:r})=>{const[o,n]=useState(!0),s=useCallback(()=>{n(!1)},[]);useEffect(()=>{if(!r.current)return;const e=registry.get(r.current);return e&&(e.close=s),()=>{const e=registry.get(r.current??-1);e&&e.close===s&&(e.close=void 0)}},[s,r]),useEffect(()=>()=>{r.current&&registry.delete(r.current)},[r]);const a=useCallback(async(r,o)=>{await runHook(()=>e.beforeClose?.(r))&&await runHook(o)&&(("confirm"===r&&"alert"===t.mode||"confirm"===t.mode)&&t.resolve?.("confirm"===r),s())},[s,t,e.beforeClose]),l=useCallback(()=>{e.onClosed?.(),r.current&&(Portal.remove(r.current),registry.delete(r.current))},[e,r]);return React.createElement(Dialog,_extends({},e,{visible:o,onCancel:e.showCancelButton?()=>a("cancel",e.onCancel):e.onCancel,onConfirm:()=>a("confirm",e.onConfirm),onClose:()=>a("close",e.onClose),onClosed:l}))},mount=(e,t)=>{const r={current:0},o=React.createElement(DialogPortalInstance,{options:e,meta:t,portalKeyRef:r}),n=Portal.add(o);return r.current=n,registry.set(n,{key:n,options:e,meta:t}),()=>requestClose(n)},normalize=(e,t={})=>{const r={...deepMerge(deepMerge(defaults.default,defaults[e]),t),visible:!0};return isUndefined(r.showConfirmButton)&&(r.showConfirmButton=!0),r},setDefaultOptions=(e,t)=>{isString(e)?defaults[e]=deepMerge(defaults[e],t??{}):defaults.default=deepMerge(defaults.default,e)},resetDefaultOptions=e=>{e?defaults[e]={}:(defaults.default={},defaults.show={},defaults.alert={},defaults.confirm={})};export const DialogImperative={show:e=>mount(normalize("show",e),{mode:"show"}),alert:e=>new Promise(t=>{mount(normalize("alert",{...e,showCancelButton:!1}),{mode:"alert",resolve:t})}),confirm:e=>new Promise(t=>{mount(normalize("confirm",{showCancelButton:!0,...e}),{mode:"confirm",resolve:e=>t(void 0===e||e)})}),clear:()=>{registry.forEach((e,t)=>requestClose(t))},setDefaultOptions:setDefaultOptions,resetDefaultOptions:resetDefaultOptions};export const __DIALOG_STORE__={getItems:()=>Array.from(registry.values()).map(({key:e,options:t,meta:r})=>({key:e,options:t,meta:r})),close:requestClose};
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}import React,{useCallback,useId,useImperativeHandle,useMemo,useRef,useState}from"react";import{Platform,Pressable,Text,TextInput,View}from"react-native";import{Clear,QuestionO}from"react-native-system-icon";import Cell from"../cell";import Dialog from"../dialog";import{formatNumberInput}from"../../utils/string";import{isDef,isFiniteNumber,isFunction,isObject,isRenderable,isText}from"../../utils/validate";import{useFieldTokens}from"./tokens";const alignMap={left:"flex-start",center:"center",right:"flex-end"},mapKeyboardType=e=>{switch(e){case"number":return"decimal-pad";case"digit":return"number-pad";case"tel":return"phone-pad";default:return}},FieldSlot=({onPress:e,style:t,children:n,accessibilityRole:r="button"})=>n?e?React.createElement(Pressable,{onPress:e,accessibilityRole:r,style:t},n):React.createElement(View,{style:t},n):null,FieldClearButton=({show:e,tokens:t,clearIcon:n,onPressIn:r,onPressOut:l,onPress:i})=>{if(!e)return null;const o="web"===Platform.OS?{onMouseDown:e=>{e.preventDefault?.(),e.stopPropagation?.()}}:void 0;return React.createElement(Pressable,_extends({style:[t.layout.clearIcon,{paddingHorizontal:t.spacing.rightIconGap}]},o,{onPressIn:r,onPressOut:l,onPress:i,accessibilityRole:"button"}),React.isValidElement(n)?n:React.createElement(Clear,{size:t.sizes.clearIcon,fill:t.colors.clear,color:t.colors.clear}))},FieldInput=({inputRef:e,tokens:t,isTextarea:n,disabled:r,error:l,finalTextAlign:i,lineHeight:o,textareaHeight:a,minHeight:s,inputStyle:c,value:u,onChangeText:d,onFocus:g,onBlur:p,onPressIn:m,rows:f,placeholderTextColor:y,keyboardType:b,onContentSizeChange:h,describedBy:x,secureTextEntry:R,editable:T,restInputProps:w})=>{const I=[n?t.layout.textarea:t.layout.input,{color:r?t.colors.disabled:l?t.colors.error:t.colors.input,fontSize:t.typography.inputSize,textAlign:i,...n?{lineHeight:o,height:a,minHeight:s}:{minHeight:t.sizes.controlMinHeight}},c];return React.createElement(TextInput,_extends({ref:e,style:I,value:u,onChangeText:d,onFocus:g,onBlur:p,onPressIn:m,editable:T,secureTextEntry:R,multiline:n,numberOfLines:n?f:void 0,keyboardType:b,placeholderTextColor:y,onContentSizeChange:n?h:void 0},x?{accessibilityDescribedBy:x}:null,{clearButtonMode:"never"},w))},FieldControlRow=({tokens:e,prefixNode:t,leftIconNode:n,controlNode:r,clearNode:l,rightIconNode:i,suffixNode:o})=>React.createElement(View,{style:e.layout.body},t,n,React.createElement(View,{style:[e.layout.controlWrapper,{minHeight:e.sizes.controlMinHeight}]},r,l),i,o),FieldImpl=(e,t)=>{const{tokensOverride:n,label:r,labelWidth:l,labelAlign:i,inputAlign:o,controlAlign:a,required:s=!1,colon:c=!1,intro:u,description:d,tooltip:g,error:p=!1,errorMessage:m,errorMessageAlign:f="left",disabled:y=!1,readOnly:b=!1,clearable:h=!1,clearTrigger:x,clearIcon:R,leftIcon:T,rightIcon:w,prefix:I,suffix:S,button:C,extra:v,value:k,defaultValue:P="",type:z="text",rows:E,autoSize:M=!1,formatter:F,formatTrigger:H,showWordLimit:O=!1,onOverlimit:L,onClear:N,onClick:A,onClickInput:D,onClickLeftIcon:B,onClickRightIcon:V,border:G,center:W,clickable:_,isLink:j,arrowDirection:q,size:K,titleStyle:Q,contentStyle:$,inputStyle:J,labelStyle:U,introStyle:X,errorMessageStyle:Y,style:Z,androidRipple:ee,children:te,placeholderTextColor:ne,onFocus:re,onBlur:le,onPressIn:ie,onChangeText:oe,maxLength:ae,...se}=e,ce=useFieldTokens(n),ue=l??ce.defaults.labelWidth,de=i??ce.defaults.labelAlign,ge=o??ce.defaults.inputAlign,pe=a??ce.defaults.controlAlign,me=x??ce.defaults.clearTrigger,fe=E??ce.defaults.rows,ye=H??ce.defaults.formatTrigger,be=[{width:ue,minWidth:ue,maxWidth:ue,flexBasis:ue,marginRight:ce.spacing.labelGap,flexShrink:0,flexGrow:0},Q],he=S??C,xe=u??d,Re=ne??(y?ce.colors.disabled:ce.colors.placeholder),Te="textarea"===z,we=void 0!==k,[Ie,Se]=useState(P),Ce=we?k??"":Ie,[ve,ke]=useState(!1),[Pe,ze]=useState(!1),Ee=useRef(!1),Me=useRef(null),Fe=useId(),He=useId(),Oe=useMemo(()=>{const e=[isRenderable(m)?He:null,isRenderable(xe)?Fe:null].filter(Boolean);return e.length?e:void 0},[He,m,Fe,xe]),Le=ce.defaults.textareaLineHeight,Ne=M&&isObject(M)?M:void 0,Ae=Te?Ne&&isDef(Ne.minRows)?Math.max(1,Ne.minRows):Math.max(1,fe):1,De=Te&&Ne&&isDef(Ne.maxRows)?Math.max(1,Ne.maxRows):void 0,Be=useMemo(()=>Te?Math.max(ce.sizes.textareaMinHeight,Ae*Le):void 0,[Te,Le,Ae,ce.sizes.textareaMinHeight]),Ve=useMemo(()=>Te&&De?Math.max(ce.sizes.textareaMinHeight,De*Le):void 0,[Te,Le,De,ce.sizes.textareaMinHeight]),[Ge,We]=useState(Be),_e=useRef(oe);_e.current=oe;const je=useRef(L);je.current=L;const qe=useRef(re);qe.current=re;const Ke=useRef(le);Ke.current=le;const Qe=useRef(ie);Qe.current=ie;const $e=useRef(D);$e.current=D;const Je=useRef(N);Je.current=N;const Ue=useCallback((e,t="onChange")=>F&&t===ye?F(e):e,[ye,F]),Xe=useCallback((e,t="onChange")=>{const n=Ue(e,t);we||Se(n),_e.current?.(n)},[Ue,we]);useImperativeHandle(t,()=>({focus:()=>Me.current?.focus(),blur:()=>Me.current?.blur(),clear:()=>Xe(""),get nativeElement(){return Me.current}}));const Ye="left"!==pe?pe:ge,Ze=h&&!b&&""!==(Ce??"")&&("always"===me||"focus"===me&&(ve||Pe)),et=useCallback(e=>{let t=e??"";if("number"===z||"digit"===z){const e="number"===z;t=formatNumberInput(t,e,e)}isFiniteNumber(ae)&&ae>=0&&t.length>ae&&(je.current?.(t),t=t.slice(0,ae)),Xe(t,"onChange")},[ae,z,Xe]),tt=useCallback(e=>{ke(!0),qe.current?.(e),b&&Me.current?.blur()},[b]),nt=useCallback(e=>{if("web"!==Platform.OS&&Ee.current)return Ee.current=!1,ke(!1),void Ke.current?.(e);Xe(Ce??"","onBlur"),ke(!1),Ke.current?.(e)},[Xe,Ce]),rt=useCallback(e=>{Qe.current?.(e),$e.current?.()},[]),lt=useCallback(e=>{if(!Te)return;const t=e.nativeEvent.contentSize?.height??0;if(!t)return;let n=t;M?(n=Math.max(Be??t,t),Ve&&(n=Math.min(n,Ve))):Be&&(n=Math.max(Be,t)),We(n)},[M,Te,Ve,Be]),it=useCallback(()=>{"web"!==Platform.OS&&(Ee.current=!0),Xe(""),Me.current?.clear?.(),Me.current?.focus?.(),Je.current?.()},[Xe]),ot=useCallback(()=>{ze(!0),"web"!==Platform.OS&&it()},[it]),at=useCallback(()=>{ze(!1),Ee.current=!1},[]),st=isRenderable(te)?React.createElement(View,{style:[ce.layout.children,{minHeight:ce.sizes.controlMinHeight}]},te):React.createElement(FieldInput,{inputRef:Me,tokens:ce,isTextarea:Te,disabled:y,error:p,finalTextAlign:Ye,lineHeight:Le,textareaHeight:Ge,minHeight:Be,inputStyle:J,value:Ce??"",onChangeText:et,onFocus:tt,onBlur:nt,onPressIn:rt,rows:fe,keyboardType:se.keyboardType??mapKeyboardType(z),placeholderTextColor:Re,onContentSizeChange:lt,describedBy:Oe,secureTextEntry:"password"===z,editable:!y&&!b,restInputProps:se}),ct=[{width:"100%",justifyContent:alignMap[pe]},$],ut=e=>isText(e)?React.createElement(Text,{style:[ce.layout.affixText,{color:ce.colors.input,fontSize:ce.typography.inputSize}],numberOfLines:1},e):e,dt=isRenderable(g)?(()=>{const e=React.createElement(QuestionO,{size:ce.sizes.icon,fill:ce.colors.tooltip,color:ce.colors.tooltip});let t=e,n={message:g};if(!React.isValidElement(g)&&!isText(g)){const{icon:r,...l}=g;t=r??e,n=l}return React.createElement(Pressable,{style:[ce.layout.tooltip,{marginLeft:ce.spacing.rightIconGap}],onPress:()=>Dialog.show(n),accessibilityRole:"button"},t)})():null,gt=isRenderable(r)?(()=>{const e=isText(r)?React.createElement(Text,{style:[{color:y?ce.colors.disabled:ce.colors.label,fontSize:ce.typography.labelSize,textAlign:de},U],numberOfLines:1},r,c?":":""):r;return React.createElement(View,{style:ce.layout.labelRow},e,dt)})():null,pt=O&&null!=ae?(()=>{const e=(Ce??"").length,t=isFunction(O)?O({currentCount:e,maxLength:ae}):`${e}/${ae}`;return isRenderable(t)?isText(t)?React.createElement(Text,{style:[ce.layout.wordLimit,{color:ce.colors.wordLimit,fontSize:ce.typography.wordLimitSize??12,textAlign:"right",alignSelf:"flex-end",marginTop:ce.spacing.wordLimitMarginTop}]},t):t:null})():null,mt=isRenderable(m)?isText(m)?React.createElement(Text,{nativeID:He,style:[ce.layout.message,{color:ce.colors.error,fontSize:ce.typography.messageSize,textAlign:f,marginTop:ce.spacing.messageMarginTop},Y],accessibilityLiveRegion:"polite"},m):React.createElement(View,{nativeID:He,style:[ce.layout.message,{alignSelf:alignMap[f],marginTop:ce.spacing.messageMarginTop}],accessibilityLiveRegion:"polite"},m):null,ft=isRenderable(xe)?isText(xe)?React.createElement(Text,{nativeID:Fe,style:[ce.layout.message,{color:ce.colors.intro,fontSize:ce.typography.introSize,textAlign:pe,marginTop:ce.spacing.introMarginTop},X]},xe):React.createElement(View,{nativeID:Fe,style:{marginTop:ce.spacing.introMarginTop}},xe):null,yt=I?React.createElement(View,{style:[ce.layout.prefix,{paddingRight:ce.spacing.prefixGap}]},ut(I)):null,bt=he?React.createElement(View,{style:[ce.layout.suffix,{paddingLeft:ce.spacing.suffixGap}]},ut(he)):null,ht=T?React.createElement(FieldSlot,{onPress:B,style:[ce.layout.leftIcon,{marginRight:ce.spacing.leftIconGap,minWidth:ce.sizes.icon}]},T):null,xt=w?React.createElement(FieldSlot,{onPress:V,style:[ce.layout.rightIcon,{paddingHorizontal:ce.spacing.rightIconGap}]},w):null,Rt=Ze?React.createElement(FieldClearButton,{show:Ze,tokens:ce,clearIcon:R,onPressIn:ot,onPressOut:"web"===Platform.OS?at:void 0,onPress:"web"===Platform.OS?it:void 0}):null;return React.createElement(Cell,{title:gt,icon:void 0,required:s,border:G,center:W,size:K,clickable:_,isLink:j,arrowDirection:q,extra:v,titleStyle:be,style:Z,contentStyle:ct,accessibilityState:p?{invalid:!0}:void 0,accessibilityLabel:isText(r)?String(r):void 0,onPress:A,android_ripple:ee},React.createElement(FieldControlRow,{tokens:ce,prefixNode:yt,leftIconNode:ht,controlNode:st,clearNode:Rt,rightIconNode:xt,suffixNode:bt}),pt,mt,ft)},FieldForwardRef=React.forwardRef(FieldImpl);FieldForwardRef.displayName="Field";export const Field=React.memo(FieldForwardRef);export default Field;
1
+ import React,{useCallback,useId,useImperativeHandle,useMemo,useRef,useState}from"react";import{Platform,Pressable,Text,View}from"react-native";import{QuestionO}from"react-native-system-icon";import Cell from"../cell";import Dialog from"../dialog";import{formatNumberInput}from"../../utils/string";import{isDef,isFiniteNumber,isFunction,isObject,isRenderable,isText}from"../../utils/validate";import{useFieldTokens}from"./tokens";import{alignMap,FieldClearButton,FieldControlRow,FieldInput,FieldSlot,mapKeyboardType,resolveTooltipDialog}from"../../hooks/field/renderers";const FieldImpl=(e,t)=>{const{tokensOverride:r,label:l,labelWidth:i,labelAlign:o,inputAlign:n,controlAlign:a,required:s=!1,colon:c=!1,intro:u,description:d,tooltip:g,error:m=!1,errorMessage:p,errorMessageAlign:f="left",errorMessagePosition:b="inner",disabled:y=!1,readOnly:R=!1,clearable:h=!1,clearTrigger:x,clearIcon:T,leftIcon:w,rightIcon:S,prefix:v,suffix:C,button:I,extra:k,value:F,defaultValue:M="",type:z="text",rows:E,autoSize:P=!1,formatter:L,formatTrigger:O,showWordLimit:D=!1,onOverlimit:H,onClear:A,onClick:N,onClickInput:B,onClickLeftIcon:V,onClickRightIcon:G,border:W,center:j,clickable:q,isLink:K,arrowDirection:Q,size:$,titleStyle:_,contentStyle:J,inputStyle:U,labelStyle:X,introStyle:Y,errorMessageStyle:Z,style:ee,androidRipple:te,children:re,placeholderTextColor:le,onFocus:ie,onBlur:oe,onPressIn:ne,onChangeText:ae,maxLength:se,...ce}=e,ue=useFieldTokens(r),de=i??ue.defaults.labelWidth,ge=o??ue.defaults.labelAlign,me=n??ue.defaults.inputAlign,pe=a??ue.defaults.controlAlign,fe=x??ue.defaults.clearTrigger,be=E??ue.defaults.rows,ye=O??ue.defaults.formatTrigger,Re=[{width:de,minWidth:de,maxWidth:de,flexBasis:de,marginRight:ue.spacing.labelGap,flexShrink:0,flexGrow:0},_],he=C??I,xe=u??d,Te=le??(y?ue.colors.disabled:ue.colors.placeholder),we="textarea"===z,Se=void 0!==F,[ve,Ce]=useState(M),Ie=Se?F??"":ve,[ke,Fe]=useState(!1),[Me,ze]=useState(!1),Ee=useRef(!1),Pe=useRef(null),Le=useId(),Oe=useId(),De=useMemo(()=>{const e=[isRenderable(p)?Oe:null,isRenderable(xe)?Le:null].filter(Boolean);return e.length?e:void 0},[Oe,p,Le,xe]),He=ue.defaults.textareaLineHeight,Ae=P&&isObject(P)?P:void 0,Ne=we?Ae&&isDef(Ae.minRows)?Math.max(1,Ae.minRows):Math.max(1,be):1,Be=we&&Ae&&isDef(Ae.maxRows)?Math.max(1,Ae.maxRows):void 0,Ve=useMemo(()=>we?Math.max(ue.sizes.textareaMinHeight,Ne*He):void 0,[we,He,Ne,ue.sizes.textareaMinHeight]),Ge=useMemo(()=>we&&Be?Math.max(ue.sizes.textareaMinHeight,Be*He):void 0,[we,He,Be,ue.sizes.textareaMinHeight]),[We,je]=useState(Ve),qe=useRef(ae);qe.current=ae;const Ke=useRef(H);Ke.current=H;const Qe=useRef(ie);Qe.current=ie;const $e=useRef(oe);$e.current=oe;const _e=useRef(ne);_e.current=ne;const Je=useRef(B);Je.current=B;const Ue=useRef(A);Ue.current=A;const Xe=useCallback((e,t="onChange")=>L&&t===ye?L(e):e,[ye,L]),Ye=useCallback((e,t="onChange")=>{const r=Xe(e,t);Se||Ce(r),qe.current?.(r)},[Xe,Se]);useImperativeHandle(t,()=>({focus:()=>Pe.current?.focus(),blur:()=>Pe.current?.blur(),clear:()=>Ye(""),get nativeElement(){return Pe.current}}));const Ze="left"!==pe?pe:me,et=h&&!R&&""!==(Ie??"")&&("always"===fe||"focus"===fe&&(ke||Me)),tt=useCallback(e=>{let t=e??"";if("number"===z||"digit"===z){const e="number"===z;t=formatNumberInput(t,e,e)}isFiniteNumber(se)&&se>=0&&t.length>se&&(Ke.current?.(t),t=t.slice(0,se)),Ye(t,"onChange")},[se,z,Ye]),rt=useCallback(e=>{Fe(!0),Qe.current?.(e),R&&Pe.current?.blur()},[R]),lt=useCallback(e=>{if("web"!==Platform.OS&&Ee.current)return Ee.current=!1,Fe(!1),void $e.current?.(e);Ye(Ie??"","onBlur"),Fe(!1),$e.current?.(e)},[Ye,Ie]),it=useCallback(e=>{_e.current?.(e),Je.current?.()},[]),ot=useCallback(e=>{if(!we)return;const t=e.nativeEvent.contentSize?.height??0;if(!t)return;let r=t;P?(r=Math.max(Ve??t,t),Ge&&(r=Math.min(r,Ge))):Ve&&(r=Math.max(Ve,t)),je(r)},[P,we,Ge,Ve]),nt=useCallback(()=>{"web"!==Platform.OS&&(Ee.current=!0),Ye(""),Pe.current?.clear?.(),Pe.current?.focus?.(),Ue.current?.()},[Ye]),at=useCallback(()=>{ze(!0),"web"!==Platform.OS&&nt()},[nt]),st=useCallback(()=>{ze(!1),Ee.current=!1},[]),ct=isRenderable(re)?React.createElement(View,{style:[ue.layout.children,{minHeight:ue.sizes.controlMinHeight}]},re):React.createElement(FieldInput,{inputRef:Pe,tokens:ue,isTextarea:we,disabled:y,error:m,finalTextAlign:Ze,lineHeight:He,textareaHeight:We,minHeight:Ve,inputStyle:U,value:Ie??"",onChangeText:tt,onFocus:rt,onBlur:lt,onPressIn:it,rows:be,keyboardType:ce.keyboardType??mapKeyboardType(z),placeholderTextColor:Te,onContentSizeChange:ot,describedBy:De,secureTextEntry:"password"===z,editable:!y&&!R,restInputProps:ce}),ut=[{width:"100%",justifyContent:alignMap[pe]},J],dt=e=>isText(e)?React.createElement(Text,{style:[ue.layout.affixText,{color:ue.colors.input,fontSize:ue.typography.inputSize}],numberOfLines:1},e):e,gt=isRenderable(g)?(()=>{const e=React.createElement(QuestionO,{size:ue.sizes.icon,fill:ue.colors.tooltip,color:ue.colors.tooltip}),{icon:t,dialogProps:r}=resolveTooltipDialog(g,e);return React.createElement(Pressable,{style:[ue.layout.tooltip,{marginLeft:ue.spacing.rightIconGap}],onPress:()=>Dialog.show(r),accessibilityRole:"button"},t)})():null,mt=isRenderable(l)?(()=>{const e=isText(l)?React.createElement(Text,{style:[{color:y?ue.colors.disabled:ue.colors.label,fontSize:ue.typography.labelSize,textAlign:ge},X],numberOfLines:1},l,c?":":""):l;return React.createElement(View,{style:ue.layout.labelRow},e,gt)})():null,pt=D&&null!=se?(()=>{const e=(Ie??"").length,t=isFunction(D)?D({currentCount:e,maxLength:se}):`${e}/${se}`;return isRenderable(t)?isText(t)?React.createElement(Text,{style:[ue.layout.wordLimit,{color:ue.colors.wordLimit,fontSize:ue.typography.wordLimitSize??12,textAlign:"right",alignSelf:"flex-end",marginTop:ue.spacing.wordLimitMarginTop}]},t):t:null})():null,ft=isRenderable(p)?isText(p)?React.createElement(Text,{nativeID:Oe,style:[ue.layout.message,{color:ue.colors.error,fontSize:ue.typography.messageSize,textAlign:f,marginTop:ue.spacing.messageMarginTop},Z],accessibilityLiveRegion:"polite"},p):React.createElement(View,{nativeID:Oe,style:[ue.layout.message,{alignSelf:alignMap[f],marginTop:ue.spacing.messageMarginTop}],accessibilityLiveRegion:"polite"},p):null,bt=isRenderable(xe)?isText(xe)?React.createElement(Text,{nativeID:Le,style:[ue.layout.message,{color:ue.colors.intro,fontSize:ue.typography.introSize,textAlign:pe,marginTop:ue.spacing.introMarginTop},Y]},xe):React.createElement(View,{nativeID:Le,style:{marginTop:ue.spacing.introMarginTop}},xe):null,yt=v?React.createElement(View,{style:[ue.layout.prefix,{paddingRight:ue.spacing.prefixGap}]},dt(v)):null,Rt=he?React.createElement(View,{style:[ue.layout.suffix,{paddingLeft:ue.spacing.suffixGap}]},dt(he)):null,ht=w?React.createElement(FieldSlot,{onPress:V,style:[ue.layout.leftIcon,{marginRight:ue.spacing.leftIconGap,minWidth:ue.sizes.icon}]},w):null,xt=S?React.createElement(FieldSlot,{onPress:G,style:[ue.layout.rightIcon,{paddingHorizontal:ue.spacing.rightIconGap}]},S):null,Tt=et?React.createElement(FieldClearButton,{show:et,tokens:ue,clearIcon:T,onPressIn:at,onPressOut:"web"===Platform.OS?st:void 0,onPress:"web"===Platform.OS?nt:void 0}):null,wt="outer"===b,St=React.createElement(Cell,{title:mt,icon:void 0,required:s,border:W,center:j,size:$,clickable:q,isLink:K,arrowDirection:Q,extra:k,titleStyle:Re,style:[ee,wt&&(m||isRenderable(p))?{borderColor:ue.colors.error}:void 0],contentStyle:ut,accessibilityState:m?{invalid:!0}:void 0,accessibilityLabel:isText(l)?String(l):void 0,onPress:N,android_ripple:te},React.createElement(FieldControlRow,{tokens:ue,prefixNode:yt,leftIconNode:ht,controlNode:ct,clearNode:Tt,rightIconNode:xt,suffixNode:Rt}),pt,wt?null:ft,bt);return wt&&ft?React.createElement(React.Fragment,null,St,ft):St},FieldForwardRef=React.forwardRef(FieldImpl);FieldForwardRef.displayName="Field";export const Field=React.memo(FieldForwardRef);export default Field;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{View}from"react-native";import{shallowEqualObject,renderTextOrNode}from"../../utils";import{isPromiseLike}from"../../utils/promise";import{isNumber,isString,isText}from"../../utils/validate";import{useLocale}from"../config-provider/useLocale";export const normalizeTrigger=e=>e?Array.isArray(e)?e:[e]:[];export const FORM_ALL_FIELDS_KEY="__form_all__";export const toNamePath=e=>null==e?[]:Array.isArray(e)?e:isNumber(e)?[e]:isString(e)?e.split("."):[String(e)];export const serializeNamePath=e=>toNamePath(e).join(".");export const getValueByName=(e,r)=>toNamePath(r).reduce((e,r)=>{if(null==e)return e;const t=String(r);if(Array.isArray(e)){const r=Number(t);return Number.isFinite(r)?e[r]:e[t]}return"object"==typeof e?e[t]:void 0},e);export const setValueByName=(e,r,t)=>{const n=toNamePath(r);if(!n.length)return e;const a=Array.isArray(e)?[...e]:"object"==typeof e&&null!==e?{...e}:{};let i=a;return n.forEach((e,r)=>{const a=String(e),u=Number(a);if(r===n.length-1)return void(Array.isArray(i)&&Number.isFinite(u)?i[u]=t:i[a]=t);const s=Array.isArray(i)&&Number.isFinite(u)?i[u]:i[a],l=null==s?isNumber(n[r+1])?[]:{}:Array.isArray(s)?[...s]:"object"==typeof s?{...s}:{};Array.isArray(i)&&Number.isFinite(u)?i[u]=l:i[a]=l,i=l}),a};export const FormContext=React.createContext(null);const runRuleValidation=(e,r,t,n)=>{const a=e.message??n??"Validation failed",i=null==r||""===r||Array.isArray(r)&&0===r.length;if(e.required&&(i||e.whitespace&&isString(r)&&0===r.trim().length))return a;if(i)return null;if(e.pattern&&isString(r)&&!e.pattern.test(r))return a;if(void 0!==e.len||void 0!==e.min||void 0!==e.max){const t=isNumber(r)?r:isString(r)||Array.isArray(r)?r.length:0;if(void 0!==e.len&&t!==e.len)return a;if(void 0!==e.min&&t<e.min)return a;if(void 0!==e.max&&t>e.max)return a}if(!e.validator)return null;const u=e=>isString(e)?e:!1===e?a:null,s=e.validator(r,t);return isPromiseLike(s)?s.then(u):u(s)},InternalFormImpl=(e,r)=>{const{initialValues:t,colon:n,labelWidth:a,showValidateMessage:i=!0,onValuesChange:u,onFinish:s,style:l,footer:c,children:o,...m}=e,f=useLocale(),d=useRef({}),g=useRef({}),y=useRef(t??d.current),h=useRef({}),N=useRef(new Map),b=useRef(t??d.current),p=useRef({}),V=useRef(new Set),v=useRef(u),F=useRef(s);v.current=u,F.current=s;const x=t??d.current,[,R]=useState(0),_=useCallback((e,r)=>{V.current.forEach(t=>t(e,r))},[]);useEffect(()=>{shallowEqualObject(y.current,x)||(y.current=x,b.current=x,g.current={},R(e=>e+1),_({[FORM_ALL_FIELDS_KEY]:!0},x))},[x,_]);const A=useCallback((e,r)=>{const t=serializeNamePath(e),n=g.current[t];if(!r.length){if(!n)return;const r={...g.current};return delete r[t],g.current=r,void _({[t]:getValueByName(b.current,e)},b.current)}n?.[0]===r[0]&&n.length===r.length||(g.current={...g.current,[t]:r},_({[t]:getValueByName(b.current,e)},b.current))},[_]),E=useCallback((e,r)=>{const t=serializeNamePath(e),n=h.current[t];if(n?.dependencies?.length)for(const e of n.dependencies){const r=serializeNamePath(e),n=N.current.get(r);n&&(n.delete(t),n.size||N.current.delete(r))}if(h.current[t]={...r,name:e},r.dependencies?.length)for(const e of r.dependencies){const r=serializeNamePath(e),n=N.current.get(r);n?n.add(t):N.current.set(r,new Set([t]))}if(void 0!==r.initialValue){void 0===getValueByName(y.current,e)&&(y.current=setValueByName(y.current,e,r.initialValue));if(void 0===getValueByName(b.current,e)){const n=setValueByName(b.current,e,r.initialValue);b.current=n,_({[t]:r.initialValue},n)}}return()=>{const r=h.current[t];if(delete h.current[t],r?.dependencies?.length)for(const e of r.dependencies){const r=serializeNamePath(e),n=N.current.get(r);n&&(n.delete(t),n.size||N.current.delete(r))}A(e,[])}},[_,A]),P=useRef(f);P.current=f;const B=useCallback(async(e,r,t,n)=>{const a=serializeNamePath(e),i=(p.current[a]??0)+1;p.current[a]=i;const u=h.current[a],s=u?.rules??[];if(!s.length)return A(e,[]),!0;let l=r?s.filter(e=>{const t=e.validateTrigger??u.validateTrigger;return!t||normalizeTrigger(t).includes(r)}):s;if(!l.length){if(!g.current[a]?.length)return!0;l=s}const c=n??b.current,o=t??getValueByName(c,e),m=P.current?.vanForm?.validationFailed;for(const r of l){const t=runRuleValidation(r,o,c,m),n=isPromiseLike(t)?await t:t;if(p.current[a]!==i)return!0;if(n)return A(e,[n]),!1}return p.current[a]!==i||A(e,[]),!0},[A]),S=useCallback(async e=>{const r=e??Object.values(h.current).map(e=>e.name);if((await Promise.all(r.map(e=>B(e)))).some(e=>!e))throw g.current;return b.current},[B]),C=useCallback((e,r,t,n,a)=>{B(r,t,n,a);const i=N.current.get(e);if(i?.size)for(const e of i){const r=h.current[e];r&&B(r.name,t,getValueByName(a,r.name),a)}},[B]),z=useCallback((e,r,t)=>{const n=serializeNamePath(e),a=b.current;if(getValueByName(a,e)===r)return;const i=setValueByName(a,e,r);b.current=i,v.current?.(i,n,r),C(n,e,t,r,i),_({[n]:r},i)},[_,C]),w=useMemo(()=>({submit:async()=>{try{const e=await S();return F.current?.(e),e}catch{return}},getFieldsValue:()=>b.current,setFieldsValue:(e,r)=>{const t=r?.validate??!1,n=b.current;let a=n;const i={};Object.keys(e).forEach(r=>{const n=e[r];getValueByName(a,r)!==n&&(i[r]=n,a=setValueByName(a,r,n),v.current?.(a,r,n),t&&C(r,r,void 0,n,a))}),a!==n&&(b.current=a,_(i,a))},resetFields:()=>{let e=y.current;Object.values(h.current).forEach(r=>{void 0!==r.initialValue&&void 0===getValueByName(e,r.name)&&(e=setValueByName(e,r.name,r.initialValue))}),b.current=e,g.current={},_({[FORM_ALL_FIELDS_KEY]:!0},e)},validateFields:S,getFieldError:e=>g.current[serializeNamePath(e)]??[]}),[S,C,_]);useImperativeHandle(r,()=>w,[w]);const L=useMemo(()=>({getFieldValue:e=>getValueByName(b.current,e),setFieldValue:z,registerField:E,getFieldError:e=>g.current[serializeNamePath(e)],validateField:(e,r)=>B(e,r),getFieldsValue:()=>b.current,subscribe:e=>(V.current.add(e),()=>V.current.delete(e)),form:w,colon:n,labelWidth:a,showValidateMessage:i}),[z,E,B,w,n,a,i]);return React.createElement(FormContext.Provider,{value:L},React.createElement(View,_extends({style:l},m),o,isText(c)?renderTextOrNode(c,[]):c))},InternalFormRef=React.forwardRef(InternalFormImpl),InternalForm=React.memo(InternalFormRef);export const useWatch=(e,r)=>{const t=useContext(FormContext),n=void 0===e?void 0:Array.isArray(e)?e.length&&isText(e[0])?[e]:e:[e],a=useCallback(e=>{const a=e??t?.getFieldsValue?.()??r?.current?.getFieldsValue?.()??{};if(!n)return a;if(1===n.length)return getValueByName(a,n[0]);const i={};for(const e of n)i[serializeNamePath(e)]=getValueByName(a,e);return i},[t,r,n]),[i,u]=useState(()=>a());return useEffect(()=>{if(t?.subscribe)return t.subscribe((e,r)=>{"__form_all__"in e?u(a(r)):n&&!n.some(r=>serializeNamePath(r)in e)||u(a(r))})},[t,a,n]),useEffect(()=>{u(a())},[a]),i};export const FormSubscribe=({to:e,children:r})=>{const t=useContext(FormContext),[n,a]=useState({});return useEffect(()=>{if(t?.subscribe)return t.subscribe(r=>{(!e||"__form_all__"in r||Object.keys(r).some(r=>e.includes(r)))&&a(r)})},[t,e]),React.createElement(React.Fragment,null,r(n,t?.form||null))};export default InternalForm;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{View}from"react-native";import{deepEqualObject,renderTextOrNode}from"../../utils";import{isPromiseLike}from"../../utils/promise";import{isText}from"../../utils/validate";import{useLocale}from"../config-provider/useLocale";import{getValueByName,normalizeTrigger,runRuleValidation,serializeNamePath,setValueByName}from"../../hooks/form/utils";export{getValueByName,normalizeTrigger,serializeNamePath,setValueByName,toNamePath}from"../../hooks/form/utils";export const FORM_ALL_FIELDS_KEY="__form_all__";export const FormContext=React.createContext(null);const InternalFormImpl=(e,t)=>{const{initialValues:r,colon:n,labelWidth:a,showValidateMessage:u=!0,onValuesChange:s,onFinish:l,style:c,footer:i,children:o,...m}=e,f=useLocale(),d=useRef({}),g=useRef({}),h=useRef(r??d.current),V=useRef({}),N=useRef(new Map),F=useRef(r??d.current),b=useRef({}),p=useRef(new Set),y=useRef(s),v=useRef(l);y.current=s,v.current=l;const R=r??d.current,[,_]=useState(0),x=useCallback((e,t)=>{p.current.forEach(r=>r(e,t))},[]);useEffect(()=>{deepEqualObject(h.current,R)||(h.current=R,F.current=R,g.current={},_(e=>e+1),x({[FORM_ALL_FIELDS_KEY]:!0},R))},[R,x]);const B=useCallback((e,t)=>{const r=serializeNamePath(e),n=g.current[r];if(!t.length){if(!n)return;const t={...g.current};return delete t[r],g.current=t,void x({[r]:getValueByName(F.current,e)},F.current)}n?.[0]===t[0]&&n.length===t.length||(g.current={...g.current,[r]:t},x({[r]:getValueByName(F.current,e)},F.current))},[x]),E=useCallback((e,t)=>{const r=serializeNamePath(e),n=V.current[r];if(n?.dependencies?.length)for(const e of n.dependencies){const t=serializeNamePath(e),n=N.current.get(t);n&&(n.delete(r),n.size||N.current.delete(t))}if(V.current[r]={...t,name:e},t.dependencies?.length)for(const e of t.dependencies){const t=serializeNamePath(e),n=N.current.get(t);n?n.add(r):N.current.set(t,new Set([r]))}if(void 0!==t.initialValue){void 0===getValueByName(h.current,e)&&(h.current=setValueByName(h.current,e,t.initialValue));if(void 0===getValueByName(F.current,e)){const n=setValueByName(F.current,e,t.initialValue);F.current=n,x({[r]:t.initialValue},n)}}return()=>{const t=V.current[r];if(delete V.current[r],t?.dependencies?.length)for(const e of t.dependencies){const t=serializeNamePath(e),n=N.current.get(t);n&&(n.delete(r),n.size||N.current.delete(t))}B(e,[])}},[x,B]),z=useRef(f);z.current=f;const P=useCallback(async(e,t,r,n)=>{const a=serializeNamePath(e),u=(b.current[a]??0)+1;b.current[a]=u;const s=V.current[a],l=s?.rules??[];if(!l.length)return B(e,[]),!0;const c=t?l.filter(e=>{const r=e.validateTrigger??s.validateTrigger;return!r||normalizeTrigger(r).includes(t)}):l;if(!c.length)return g.current[a]?.length&&B(e,[]),!0;const i=n??F.current,o=r??getValueByName(i,e),m=z.current?.vanForm?.validationFailed;for(const t of c){const r=runRuleValidation(t,o,i,m),n=isPromiseLike(r)?await r:r;if(b.current[a]!==u)return!0;if(n)return B(e,[n]),!1}return b.current[a]!==u||B(e,[]),!0},[B]),C=useCallback(async e=>{const t=e??Object.values(V.current).map(e=>e.name);if((await Promise.all(t.map(e=>P(e)))).some(e=>!e))throw g.current;return F.current},[P]),k=useCallback((e,t,r,n,a)=>{P(t,r,n,a);const u=N.current.get(e);if(u?.size)for(const e of u){const t=V.current[e];t&&P(t.name,r,getValueByName(a,t.name),a)}},[P]),L=useCallback((e,t,r)=>{const n=serializeNamePath(e),a=F.current;if(getValueByName(a,e)===t)return;const u=setValueByName(a,e,t);F.current=u,y.current?.(u,n,t),k(n,e,r,t,u),x({[n]:t},u)},[x,k]),O=useMemo(()=>({submit:async()=>{try{const e=await C();return v.current?.(e),e}catch{return}},getFieldsValue:()=>F.current,setFieldsValue:(e,t)=>{const r=t?.validate??!1,n=F.current;let a=n;const u={};Object.keys(e).forEach(t=>{const n=e[t];getValueByName(a,t)!==n&&(u[t]=n,a=setValueByName(a,t,n),y.current?.(a,t,n),r&&k(t,t,void 0,n,a))}),a!==n&&(F.current=a,x(u,a))},resetFields:()=>{let e=h.current;Object.values(V.current).forEach(t=>{void 0!==t.initialValue&&void 0===getValueByName(e,t.name)&&(e=setValueByName(e,t.name,t.initialValue))}),h.current=e,F.current=e,g.current={},x({[FORM_ALL_FIELDS_KEY]:!0},e)},validateFields:C,getFieldError:e=>g.current[serializeNamePath(e)]??[]}),[C,k,x]);useImperativeHandle(t,()=>O,[O]);const w=useMemo(()=>({getFieldValue:e=>getValueByName(F.current,e),setFieldValue:L,registerField:E,getFieldError:e=>g.current[serializeNamePath(e)],validateField:(e,t)=>P(e,t),getFieldsValue:()=>F.current,subscribe:e=>(p.current.add(e),()=>p.current.delete(e)),form:O,colon:n,labelWidth:a,showValidateMessage:u}),[L,E,P,O,n,a,u]);return React.createElement(FormContext.Provider,{value:w},React.createElement(View,_extends({style:c},m),o,isText(i)?renderTextOrNode(i,[]):i))},InternalFormRef=React.forwardRef(InternalFormImpl),InternalForm=React.memo(InternalFormRef);export const useWatch=(e,t)=>{const r=useContext(FormContext),n=void 0===e?void 0:Array.isArray(e)?e.length&&isText(e[0])?[e]:e:[e],a=useCallback(e=>{const a=e??r?.getFieldsValue?.()??t?.current?.getFieldsValue?.()??{};if(!n)return a;if(1===n.length)return getValueByName(a,n[0]);const u={};for(const e of n)u[serializeNamePath(e)]=getValueByName(a,e);return u},[r,t,n]),[u,s]=useState(()=>a());return useEffect(()=>{if(r?.subscribe)return r.subscribe((e,t)=>{"__form_all__"in e?s(a(t)):n&&!n.some(t=>serializeNamePath(t)in e)||s(a(t))})},[r,a,n]),useEffect(()=>{s(a())},[a]),u};export const FormSubscribe=({to:e,children:t})=>{const r=useContext(FormContext),[n,a]=useState({});return useEffect(()=>{if(r?.subscribe)return r.subscribe(t=>{(!e||"__form_all__"in t||Object.keys(t).some(t=>e.includes(t)))&&a(t)})},[r,e]),React.createElement(React.Fragment,null,t(n,r?.form||null))};export default InternalForm;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)({}).hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View}from"react-native";import{useControllableValue}from"../../hooks";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{parseNumberLike}from"../../utils/number";import{isRenderable,renderTextOrNode}from"../../utils";import Loading from"../loading";import Portal from"../portal/Portal";import{useLocale}from"../config-provider/useLocale";import{SafeAreaView}from"../safe-area-view";import{useNumberKeyboardTokens}from"./tokens";const registry=new Set,NUM_KEYS=["1","2","3","4","5","6","7","8","9"],ZERO="0",RE_NUM_LIKE=/^\d+$|^\.$|^x$/i,shuffle=e=>{const t=[...e];for(let e=t.length-1;e>0;e--){const r=Math.floor(Math.random()*(e+1));[t[e],t[r]]=[t[r],t[e]]}return t},NumberKeyboard=React.memo(e=>{const{visible:t,title:r,tokensOverride:o,theme:n="default",extraKey:a,randomKeyOrder:i,showDeleteKey:l=!0,closeButtonText:s,deleteButtonText:c,closeButtonLoading:u,onChange:d,onInput:f,onDelete:m,onClose:y,onBlur:p,onHide:g,onShow:x,value:h,defaultValue:b,maxlength:k,blurOnClose:R=!0,safeAreaInsetBottom:w=!0,transition:v=!0,transitionDuration:E=300,numberKeyRender:z,deleteRender:N,extraKeyRender:A,style:T,...B}=e,C=useLocale(),V=useReducedMotion(),F=useNumberKeyboardTokens(o),{colors:M,radii:P,shadow:D,sizing:K,spacing:L,typography:H}=F,[I,O]=useControllableValue(e,{defaultValue:"",valuePropName:"value",defaultValuePropName:"defaultValue",trigger:"onChange"}),_=I??"",$=(()=>{const e=parseNumberLike(k,void 0);return null!=e&&Number.isFinite(e)&&e>=0?Math.floor(e):void 0})(),W=useRef(_),j=useRef($),G=useRef(y),U=useRef(p),Y=useRef(x),Z=useRef(g),q=useRef(m),J=useRef(f);W.current=_,j.current=$,G.current=y,U.current=p,Y.current=x,Z.current=g,q.current=m,J.current=f;const Q="custom"===n,X=C?.vanNumberKeyboard?.close??"Done",ee=Q?s??X:s,te=useCallback(()=>{G.current?.(),R&&U.current?.()},[R]),re=useRef(t);useEffect(()=>{t&&!re.current&&Y.current?.(),!t&&re.current&&Z.current?.(),re.current=t},[t]),useEffect(()=>(t?(registry.add(te),registry.forEach(e=>{e!==te&&e()})):registry.delete(te),()=>{registry.delete(te)}),[t,te]);const oe=useMemo(()=>{const e=(i&&t?shuffle(NUM_KEYS):NUM_KEYS).map(e=>({text:e,type:""}));if(Q){const t=Array.isArray(a)?a:a?[a]:[];return 1===t.length?e.push({text:"0",type:"",wider:!0},{text:t[0],type:"extra"}):t.length>=2?e.push({text:t[0],type:"extra"},{text:"0",type:""},{text:t[1],type:"extra"}):e.push({text:"0",type:""}),e}const r=Array.isArray(a)?a[0]??"":a??"";return e.push({text:r,type:"extra"},{text:"0",type:""},{type:l?"delete":"",text:l?void 0:""}),e},[a,Q,i,l,t]),ne=useCallback((e,t)=>{if("delete"===t){const e=W.current;if(!e)return;return q.current?.(),void O(e.slice(0,-1))}if("close"===t||"extra"===t&&!e)return void te();if(!e)return;const r=W.current,o=j.current;void 0!==o&&r.length>=o||(J.current?.(e),O(`${r}${e}`))},[te,O]),ae=useMemo(()=>createPlatformShadow(D),[D.color,D.elevation,D.offsetY,D.opacity,D.radius]),ie=useCallback((e,t,r=!1,o=!1,n)=>{const a=e.type,i=""===a&&!e.text,l=i||r&&u,s=l?void 0:()=>ne(e.text,a),d=r?M.closeBackground:M.keyBackground,f=r?M.closeActiveBackground:M.keyActiveBackground,m=r?M.closeText:M.keyText,y=r?M.closeText:M.keyTextActive,p=n??(r?K.closeHeight:K.keyHeight),g=K.auxFontSize??Math.round(.64*K.fontSize),x=K.defaultIconFontSize??K.fontSize,h=e.text??"",b="delete"===a?N?.()??c??"⌫":"extra"===a?A?A(h):h||"⌨︎":"close"===a?ee??X:z?z(h):h,k="delete"===a&&null==N&&null==c||"extra"===a&&!A&&!h,R="extra"===a&&"string"==typeof b&&RE_NUM_LIKE.test(b),w=""===a?K.fontSize:k?x:R?K.fontSize:g;return React.createElement(Pressable,{key:`${a}-${t}-${e.text??t}`,onPress:s,disabled:l,style:[{opacity:i?1:l?.6:1},o?{width:"100%",flexBasis:"auto",flexGrow:0,alignSelf:"stretch"}:{flexBasis:0,flexGrow:e.wider?2:1,flexShrink:1,minWidth:0}],accessible:!i,accessibilityRole:i?void 0:"button",accessibilityLabel:i?void 0:"delete"===a?"delete":"close"===a?ee??"close":"extra"===a?h||"collapse":h,accessibilityState:i?void 0:{disabled:!!l},accessibilityElementsHidden:i,importantForAccessibility:i?"no-hide-descendants":void 0},({pressed:e})=>{const t=e&&!l,o=l?M.keyBackground:t?f:d,n=t?y:m;return React.createElement(View,{style:[S.k,{height:p,backgroundColor:o,borderRadius:P.key}]},r&&u?React.createElement(Loading,{size:18,color:n}):isRenderable(b)?renderTextOrNode(b,[S.kTxt,{color:n,fontFamily:H.fontFamily,fontSize:w}]):null)})},[u,M.closeActiveBackground,M.closeBackground,M.closeText,M.keyActiveBackground,M.keyBackground,M.keyText,M.keyTextActive,X,c,N,A,ne,z,P.key,K.auxFontSize,K.closeHeight,K.defaultIconFontSize,K.fontSize,K.keyHeight,H.fontFamily,ee]),le=useRef(new Animated.Value(t?1:0)).current,se=useRef(null),ce=useRef(0),[ue,de]=useState(0),[fe,me]=useState(t),ye=V||!1===v?0:E;useEffect(()=>{ce.current+=1;const e=ce.current;t&&me(!0),se.current?.stop();const r=Animated.timing(le,{toValue:t?1:0,duration:ye,useNativeDriver:nativeDriverEnabled,easing:t?Easing.out(Easing.cubic):Easing.in(Easing.cubic),isInteraction:!1});return se.current=r,r.start(({finished:r})=>{r&&!t&&ce.current===e&&me(!1)}),()=>{se.current?.stop(),se.current=null}},[le,t,ye]);const pe=le.interpolate({inputRange:[0,1],outputRange:[ue||320,0]}),ge=useCallback(e=>{const{height:t}=e.nativeEvent.layout;de(e=>Math.abs(t-e)>.5?t:e)},[]),xe=!Q&&(r||s),he=2*K.keyHeight+L.keyGap,be=useMemo(()=>{const e=L.keyGap,t=L.paddingHorizontal,o={paddingHorizontal:L.titlePadding},n=[S.dRow,{flexDirection:"column",flexWrap:"nowrap",paddingHorizontal:t,paddingTop:e,paddingBottom:e,gap:e}],a={flexDirection:"row",gap:e},i=[S.cRow,{paddingHorizontal:t,paddingTop:xe?0:e,paddingBottom:e,width:"100%"}],s=[S.cMat,{flexDirection:"column",flexWrap:"nowrap",gap:e}],c=[S.cSide,{gap:e,marginLeft:e}],u=oe.map((e,t)=>({key:e,index:t})),d=[];for(let e=0;e<u.length;e+=3)d.push(u.slice(e,e+3));const f=React.createElement(View,{style:n},d.map((e,t)=>React.createElement(View,{key:`l-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),m=[];for(let e=0;e<9&&e<u.length;e+=3)m.push(u.slice(e,e+3));const y=u.slice(9);1===y.length?m.push([{key:{type:""},index:1000001},y[0],{key:{type:""},index:1000002}]):y.length&&m.push(y);const p=React.createElement(View,{style:s},m.map((e,t)=>React.createElement(View,{key:`cl-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),g=l&&ie({type:"delete"},999,!1,!0,he),x=ie({type:"close"},1e3,!0,!0,he),h={color:M.title,fontFamily:H.fontFamily,fontSize:K.titleFontSize},b={color:M.title,fontFamily:H.fontFamily,fontSize:K.auxFontSize??Math.round(.64*K.fontSize)};return{headerNode:xe?React.createElement(View,{style:[S.hdr,o]},React.createElement(Text,{style:[S.tBold,S.tCenter,h],numberOfLines:1},r),ee&&React.createElement(Pressable,{onPress:te,style:S.hdrClose,accessibilityRole:"button",accessibilityLabel:ee},React.createElement(Text,{style:b},ee))):null,bodyNode:Q?React.createElement(View,{style:i},p,React.createElement(View,{style:c},g,x)):f,safeAreaNode:w&&React.createElement(SafeAreaView,{edge:"bottom"})}},[te,M.title,he,xe,Q,oe,ie,ee,w,K.auxFontSize,K.fontSize,K.titleFontSize,L.keyGap,L.paddingHorizontal,L.titlePadding,H.fontFamily,r,l]);return fe||t?React.createElement(Portal,null,React.createElement(Animated.View,_extends({},B,{pointerEvents:t?"auto":"none",renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,onLayout:ge,style:[S.wrap,ae,T,{transform:[{translateY:pe}],backgroundColor:M.background}]}),be.headerNode,be.bodyNode,be.safeAreaNode)):null}),S=StyleSheet.create({wrap:{position:"absolute",left:0,right:0,bottom:0},hdr:{flexDirection:"row",alignItems:"center",justifyContent:"flex-end",height:44,position:"relative"},tBold:{fontWeight:"600"},tCenter:{position:"absolute",left:12,right:12,textAlign:"center"},hdrClose:{minWidth:56,alignItems:"flex-end"},k:{justifyContent:"center",alignItems:"center"},kTxt:{includeFontPadding:!1,textAlign:"center"},dRow:{flexDirection:"row",flexWrap:"wrap"},cRow:{flexDirection:"row"},cMat:{flex:3,flexDirection:"row",flexWrap:"wrap"},cSide:{flex:1,flexDirection:"column",justifyContent:"flex-start"}});export default NumberKeyboard;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)({}).hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View}from"react-native";import{useControllableValue}from"../../hooks";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{parseNumberLike}from"../../utils/number";import{isRenderable,renderTextOrNode}from"../../utils";import Loading from"../loading";import Portal from"../portal/Portal";import{useLocale}from"../config-provider/useLocale";import{SafeAreaView}from"../safe-area-view";import{useNumberKeyboardTokens}from"./tokens";import{buildKeyboardKeys,RE_NUM_LIKE}from"../../hooks/number-keyboard/utils";const registry=new Set,NumberKeyboard=React.memo(e=>{const{visible:t,title:r,tokensOverride:o,theme:n="default",extraKey:a,randomKeyOrder:i,showDeleteKey:l=!0,closeButtonText:s,deleteButtonText:c,closeButtonLoading:u,onChange:d,onInput:f,onDelete:m,onClose:y,onBlur:p,onHide:g,onShow:b,value:x,defaultValue:h,maxlength:k,blurOnClose:R=!0,safeAreaInsetBottom:w=!0,transition:v=!0,transitionDuration:E=300,numberKeyRender:z,deleteRender:T,extraKeyRender:C,style:N,...B}=e,V=useLocale(),A=useReducedMotion(),F=useNumberKeyboardTokens(o),{colors:K,radii:P,shadow:D,sizing:L,spacing:M,typography:H}=F,[I,O]=useControllableValue(e,{defaultValue:"",valuePropName:"value",defaultValuePropName:"defaultValue",trigger:"onChange"}),_=I??"",W=(()=>{const e=parseNumberLike(k,void 0);return null!=e&&Number.isFinite(e)&&e>=0?Math.floor(e):void 0})(),$=useRef(_),j=useRef(W),G=useRef(y),U=useRef(p),Y=useRef(b),q=useRef(g),J=useRef(m),Q=useRef(f);$.current=_,j.current=W,G.current=y,U.current=p,Y.current=b,q.current=g,J.current=m,Q.current=f;const X="custom"===n,Z=V?.vanNumberKeyboard?.close??"Done",ee=X?s??Z:s,te=useCallback(()=>{G.current?.(),R&&U.current?.()},[R]),re=useRef(t);useEffect(()=>{t&&!re.current&&Y.current?.(),!t&&re.current&&q.current?.(),re.current=t},[t]),useEffect(()=>(t?(registry.add(te),registry.forEach(e=>{e!==te&&e()})):registry.delete(te),()=>{registry.delete(te)}),[t,te]);const oe=useMemo(()=>buildKeyboardKeys({randomKeyOrder:i,visible:t,isCustom:X,extraKey:a,showDeleteKey:l}),[a,X,i,l,t]),ne=useCallback((e,t)=>{if("delete"===t){const e=$.current;if(!e)return;return J.current?.(),void O(e.slice(0,-1))}if("close"===t||"extra"===t&&!e)return void te();if(!e)return;const r=$.current,o=j.current;void 0!==o&&r.length>=o||(Q.current?.(e),O(`${r}${e}`))},[te,O]),ae=useMemo(()=>createPlatformShadow(D),[D.color,D.elevation,D.offsetY,D.opacity,D.radius]),ie=useCallback((e,t,r=!1,o=!1,n)=>{const a=e.type,i=""===a&&!e.text,l=i||r&&u,s=l?void 0:()=>ne(e.text,a),d=r?K.closeBackground:K.keyBackground,f=r?K.closeActiveBackground:K.keyActiveBackground,m=r?K.closeText:K.keyText,y=r?K.closeText:K.keyTextActive,p=n??(r?L.closeHeight:L.keyHeight),g=L.auxFontSize??Math.round(.64*L.fontSize),b=L.defaultIconFontSize??L.fontSize,x=e.text??"",h="delete"===a?T?.()??c??"⌫":"extra"===a?C?C(x):x||"⌨︎":"close"===a?ee??Z:z?z(x):x,k="delete"===a&&null==T&&null==c||"extra"===a&&!C&&!x,R="extra"===a&&"string"==typeof h&&RE_NUM_LIKE.test(h),w=""===a?L.fontSize:k?b:R?L.fontSize:g;return React.createElement(Pressable,{key:`${a}-${t}-${e.text??t}`,onPress:s,disabled:l,style:[{opacity:i?1:l?.6:1},o?{width:"100%",flexBasis:"auto",flexGrow:0,alignSelf:"stretch"}:{flexBasis:0,flexGrow:e.wider?2:1,flexShrink:1,minWidth:0}],accessible:!i,accessibilityRole:i?void 0:"button",accessibilityLabel:i?void 0:"delete"===a?"delete":"close"===a?ee??"close":"extra"===a?x||"collapse":x,accessibilityState:i?void 0:{disabled:!!l},accessibilityElementsHidden:i,importantForAccessibility:i?"no-hide-descendants":void 0},({pressed:e})=>{const t=e&&!l,o=l?K.keyBackground:t?f:d,n=t?y:m;return React.createElement(View,{style:[S.k,{height:p,backgroundColor:o,borderRadius:P.key}]},r&&u?React.createElement(Loading,{size:18,color:n}):isRenderable(h)?renderTextOrNode(h,[S.kTxt,{color:n,fontFamily:H.fontFamily,fontSize:w}]):null)})},[u,K.closeActiveBackground,K.closeBackground,K.closeText,K.keyActiveBackground,K.keyBackground,K.keyText,K.keyTextActive,Z,c,T,C,ne,z,P.key,L.auxFontSize,L.closeHeight,L.defaultIconFontSize,L.fontSize,L.keyHeight,H.fontFamily,ee]),le=useRef(new Animated.Value(t?1:0)).current,se=useRef(null),ce=useRef(0),[ue,de]=useState(0),[fe,me]=useState(t),ye=A||!1===v?0:E;useEffect(()=>{ce.current+=1;const e=ce.current;t&&me(!0),se.current?.stop();const r=Animated.timing(le,{toValue:t?1:0,duration:ye,useNativeDriver:nativeDriverEnabled,easing:t?Easing.out(Easing.cubic):Easing.in(Easing.cubic),isInteraction:!1});return se.current=r,r.start(({finished:r})=>{r&&!t&&ce.current===e&&me(!1)}),()=>{se.current?.stop(),se.current=null}},[le,t,ye]);const pe=le.interpolate({inputRange:[0,1],outputRange:[ue||320,0]}),ge=useCallback(e=>{const{height:t}=e.nativeEvent.layout;de(e=>Math.abs(t-e)>.5?t:e)},[]),be=!X&&(r||s),xe=2*L.keyHeight+M.keyGap,he=useMemo(()=>{const e=M.keyGap,t=M.paddingHorizontal,o={paddingHorizontal:M.titlePadding},n=[S.dRow,{flexDirection:"column",flexWrap:"nowrap",paddingHorizontal:t,paddingTop:e,paddingBottom:e,gap:e}],a={flexDirection:"row",gap:e},i=[S.cRow,{paddingHorizontal:t,paddingTop:be?0:e,paddingBottom:e,width:"100%"}],s=[S.cMat,{flexDirection:"column",flexWrap:"nowrap",gap:e}],c=[S.cSide,{gap:e,marginLeft:e}],u=oe.map((e,t)=>({key:e,index:t})),d=[];for(let e=0;e<u.length;e+=3)d.push(u.slice(e,e+3));const f=React.createElement(View,{style:n},d.map((e,t)=>React.createElement(View,{key:`l-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),m=[];for(let e=0;e<9&&e<u.length;e+=3)m.push(u.slice(e,e+3));const y=u.slice(9);1===y.length?m.push([{key:{type:""},index:1000001},y[0],{key:{type:""},index:1000002}]):y.length&&m.push(y);const p=React.createElement(View,{style:s},m.map((e,t)=>React.createElement(View,{key:`cl-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),g=l&&ie({type:"delete"},999,!1,!0,xe),b=ie({type:"close"},1e3,!0,!0,xe),x={color:K.title,fontFamily:H.fontFamily,fontSize:L.titleFontSize},h={color:K.title,fontFamily:H.fontFamily,fontSize:L.auxFontSize??Math.round(.64*L.fontSize)};return{headerNode:be?React.createElement(View,{style:[S.hdr,o]},React.createElement(Text,{style:[S.tBold,S.tCenter,x],numberOfLines:1},r),ee&&React.createElement(Pressable,{onPress:te,style:S.hdrClose,accessibilityRole:"button",accessibilityLabel:ee},React.createElement(Text,{style:h},ee))):null,bodyNode:X?React.createElement(View,{style:i},p,React.createElement(View,{style:c},g,b)):f,safeAreaNode:w&&React.createElement(SafeAreaView,{edge:"bottom"})}},[te,K.title,xe,be,X,oe,ie,ee,w,L.auxFontSize,L.fontSize,L.titleFontSize,M.keyGap,M.paddingHorizontal,M.titlePadding,H.fontFamily,r,l]);return fe||t?React.createElement(Portal,null,React.createElement(Animated.View,_extends({},B,{pointerEvents:t?"auto":"none",renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,onLayout:ge,style:[S.wrap,ae,N,{transform:[{translateY:pe}],backgroundColor:K.background}]}),he.headerNode,he.bodyNode,he.safeAreaNode)):null}),S=StyleSheet.create({wrap:{position:"absolute",left:0,right:0,bottom:0},hdr:{flexDirection:"row",alignItems:"center",justifyContent:"flex-end",height:44,position:"relative"},tBold:{fontWeight:"600"},tCenter:{position:"absolute",left:12,right:12,textAlign:"center"},hdrClose:{minWidth:56,alignItems:"flex-end"},k:{justifyContent:"center",alignItems:"center"},kTxt:{includeFontPadding:!1,textAlign:"center"},dRow:{flexDirection:"row",flexWrap:"wrap"},cRow:{flexDirection:"row"},cMat:{flex:3,flexDirection:"row",flexWrap:"wrap"},cSide:{flex:1,flexDirection:"column",justifyContent:"flex-start"}});export default NumberKeyboard;
@@ -1 +1 @@
1
- import React from"react";import{Modal,Platform}from"react-native";import{OverlayContainer}from"@react-native-aria/overlays";import{useKeyboardDismissable}from"@react-native-aria/interactions";import{useOverlayTokens}from"./tokens";const IS_WEB="web"===Platform.OS,OverlayImpl=(e,a)=>{const{children:r,isOpen:t,visible:o,useRNModal:l,useRNModalOnAndroid:s=!1,isKeyboardDismissable:i=!0,animationPreset:n="fade",onRequestClose:m,style:d}=e,y=useOverlayTokens(),c=l??!IS_WEB,v=IS_WEB?{zIndex:y.layer.zIndex,position:"fixed",top:0,left:0,right:0,bottom:0}:void 0,f=t??o??!1;return useKeyboardDismissable({enabled:!IS_WEB&&f&&i,callback:m??(()=>{})}),f?c||s&&"android"===Platform.OS?React.createElement(Modal,{statusBarTranslucent:!0,transparent:!0,visible:f,onRequestClose:m,animationType:n,ref:a},r):React.createElement(OverlayContainer,{style:[d,v]},r):null},OverlayForwardRef=React.forwardRef(OverlayImpl);OverlayForwardRef.displayName="Overlay";export const Overlay=React.memo(OverlayForwardRef);export default Overlay;
1
+ import React from"react";import{Modal,Platform}from"react-native";import{OverlayContainer}from"@react-native-aria/overlays";import{useKeyboardDismissable}from"@react-native-aria/interactions";import{useOverlayTokens}from"./tokens";const IS_WEB="web"===Platform.OS,NOOP=()=>{},OverlayImpl=(e,a)=>{const{children:r,isOpen:t,visible:o,useRNModal:l,useRNModalOnAndroid:s=!1,isKeyboardDismissable:i=!0,animationPreset:n="fade",onRequestClose:m,style:d}=e,y=useOverlayTokens(),O=l??!IS_WEB,c=IS_WEB?{zIndex:y.layer.zIndex,position:"fixed",top:0,left:0,right:0,bottom:0}:void 0,v=t??o??!1;return useKeyboardDismissable({enabled:!IS_WEB&&v&&i,callback:m??NOOP}),v?O||s&&"android"===Platform.OS?React.createElement(Modal,{statusBarTranslucent:!0,transparent:!0,visible:v,onRequestClose:m,animationType:n,ref:a},r):React.createElement(OverlayContainer,{style:[d,c]},r):null},OverlayForwardRef=React.forwardRef(OverlayImpl);OverlayForwardRef.displayName="Overlay";export const Overlay=React.memo(OverlayForwardRef);export default Overlay;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Pressable,Text,View,Platform,StyleSheet,ScrollView,PanResponder}from"react-native";import Loading from"../loading";import{useLocale}from"../config-provider/useLocale";import{withAlpha}from"../../utils/color";import{isFiniteNumber,isText}from"../../utils/validate";import{clamp,isObject,shallowEqualArray}from"../../utils";import{usePickerTokens}from"./tokens";import{createHairlineView}from"../../utils/hairline";export const toArrayValue=e=>Array.isArray(e)?e.filter(e=>null!=e):null==e?[]:[e];const isColumnWithOptions=e=>!!e&&isObject(e)&&"options"in e&&Array.isArray(e.options),hasChildren=e=>!!e&&isObject(e)&&Array.isArray(e.children)&&e.children.length>0;export const findEnabledIndex=(e,t)=>{if(!e.length)return-1;const n=Math.min(Math.max(t,0),e.length-1);if(!e[n]?.disabled)return n;for(let t=n+1;t<e.length;t+=1)if(!e[t]?.disabled)return t;for(let t=n-1;t>=0;t-=1)if(!e[t]?.disabled)return t;return-1};const normalizeMultiple=(e,t,n)=>{const r=[],o=[];return e.forEach((e,a)=>{const l=n[a],i=void 0!==t[a]?e.findIndex(e=>e.value===t[a]):-1,c=e.findIndex(e=>e.value===l),s=findEnabledIndex(e,c>=0?c:i>=0?i:0),u=s>=0?e[s]:void 0,m=c>=0&&!e[c]?.disabled;r[a]=m?l:u?.value??t[a]??e[0]?.value,o[a]=u}),{columns:e,values:r,options:o}},normalizeCascade=(e,t)=>{const n=[],r=[],o=[];let a=e,l=0;for(;a&&a.length&&l<10;){n.push(a);const e=t[l],i=a.findIndex(t=>t.value===e||String(t.value)===String(e)),c=findEnabledIndex(a,i>=0?i:0),s=c>=0?a[c]:a[0];if(r[l]=s?.value,o[l]=s,!s||!hasChildren(s))break;a=s.children,l+=1}return{columns:n,values:r,options:o}};export const prepareColumns=(e=[])=>{if(!Array.isArray(e)||0===e.length)return{type:"single",columnsList:[],defaults:[],cascadeRoot:[]};const t=e.every(e=>!Array.isArray(e)&&!isColumnWithOptions(e)),n=t&&e.some(e=>hasChildren(e));if(n)return{type:"cascade",columnsList:[],defaults:[],cascadeRoot:e};const r=e,o=[],a=[];return t&&!n?(o.push(e),a.push(void 0)):r.forEach(e=>{if(Array.isArray(e))o.push(e),a.push(void 0);else if(isColumnWithOptions(e)){const t=e;o.push(t.options??[]),a.push(t.defaultValue)}}),{type:"multiple",columnsList:o,defaults:a}};export const normalizePicker=(e,t=[])=>{const n=Array.isArray(t)?t:[];return"cascade"===e.type&&e.cascadeRoot?.length?normalizeCascade(e.cascadeRoot,n):normalizeMultiple(e.columnsList,e.defaults,n)};const W=StyleSheet.create({column:{flex:1},option:{justifyContent:"center",alignItems:"center"},grab:{cursor:"pointer",userSelect:"none",touchAction:"none"}}),WheelPickerItemInner=({item:e,index:t,itemHeight:n,active:r,disabled:o,renderItem:a})=>{const l=a(e,t,{active:r,disabled:o});return React.createElement(View,{style:[W.option,{height:n}]},l)},WheelPickerItem=React.memo(WheelPickerItemInner),getVelocityBucket=e=>{const t=Math.abs(e);return t>1.2?2:t>.6?1:0},adjustIndex=(e,t)=>{const n=t.length;if(!n)return 0;const r=clamp(e,0,n-1),o=findEnabledIndex(t,r);return o>=0?o:r},indexToOffset=(e,t)=>-e*t,offsetToIndex=(e,t,n,r)=>{const o=-Math.max(0,n-1)*t,a=clamp(e,o,0);let l=Math.round(-a/t);l=adjustIndex(l,r);return{index:l,snapOffset:indexToOffset(l,t)}},shouldMomentum=(e,t)=>t<500&&Math.abs(e)>8,momentumTarget=(e,t,n,r,o)=>{const a=Math.abs(e/t),l=clamp(n+a/.0025*(e<0?-1:1),o,0),i=Math.round(-l/r);return indexToOffset(i,r)},WheelPickerInner=({data:e,selectedIndex:t,onChange:n,onInteractStart:r,onInteractEnd:o,renderItem:a,itemHeight:l,visibleRest:i,readOnly:c,indicatorColor:s,decelerationRate:u=Platform.select({ios:.9985,android:.995,default:.995})??"normal",scrollEventThrottle:m=16,swipeDuration:d=300})=>{const f="web"===Platform.OS,p=useRef(null),h=useRef(null),b=i*l,g=e.length,y=Math.max(0,g-1),R=-y*l,E=l*(2*i+1),v=clamp(t,0,y),x=findEnabledIndex(e,v),k=x>=0?x:v,C=2*i+1,w=g>20*C?32:m,I=g>4*C,T=useCallback(()=>React.createElement(View,{style:{height:b}}),[b]),V=useMemo(()=>[S.indicator,{height:l,top:l*i}],[l,i]),P=useRef(null),A=useRef(!1),M=useRef(0),O=useCallback(()=>{P.current&&(clearTimeout(P.current),P.current=null)},[]),D=useCallback((t,r)=>{if(c)return;const{index:o,snapOffset:a}=offsetToIndex(-t,l,g,e),i=-a;Math.abs(i-t)>.5&&p.current?.scrollToOffset({offset:i,animated:r}),n(o)},[e,l,n,c,g]);useEffect(()=>{const e=k*l;f||h.current?.scrollTo({y:e,animated:!1})},[f,l,k]);const[H,z]=useState(()=>indexToOffset(k,l)),L=useRef(H),F=useRef(0),j=useRef(0),[_,q]=useState(0),[G,N]=useState(0),$=useRef(0),B=useRef(null),Y=useRef(0),J=useRef(null),K=useRef(null),Q=useRef(null),U=useRef(null),X=useRef(!1),Z=useRef(r);Z.current=r;const ee=useRef(o);ee.current=o;const te=useCallback(()=>{c||X.current||(X.current=!0,Z.current?.())},[c]),ne=useCallback(()=>{X.current&&(X.current=!1,ee.current?.())},[]),re=useCallback(()=>{null!=U.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(U.current),U.current=null),null!=J.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(J.current),J.current=null)},[]),oe=useCallback(()=>{Q.current&&(clearTimeout(Q.current),Q.current=null)},[]);useEffect(()=>()=>{O(),oe(),re()},[O,oe,re]);const ae=useCallback(e=>{const t=getVelocityBucket(e);t!==$.current&&($.current=t,N(t))},[]),le=useCallback(e=>{const t=Date.now(),n=B.current;if(null!=n){const r=Math.max(1,t-n);ae(e/r)}B.current=t},[ae]);useEffect(()=>{if(!f)return;oe(),K.current=null,q(0);const e=indexToOffset(k,l);L.current=e,z(e)},[oe,f,l,k,q]);const ie=useCallback(()=>{if(c)return;const e=K.current;null!=e&&(K.current=null,oe(),q(0),ne(),n(e))},[oe,n,c,q]),ce=useCallback(e=>{if(c)return;te();const t=clamp(e,0,y),n=indexToOffset(t,l);oe(),K.current=t,L.current=n,q(d),z(n),d<=0?ie():Q.current=setTimeout(ie,d+80)},[oe,ie,l,y,c,d]),se=useCallback(t=>{if(c)return;const n=t.nativeEvent?.deltaY??0;n&&(Y.current+=n,null==J.current&&"undefined"!=typeof requestAnimationFrame&&(J.current=requestAnimationFrame(()=>{J.current=null;const t=Y.current;if(Y.current=0,!t)return;le(t);const n=t>0?1:-1,{index:r}=offsetToIndex(L.current,l,g,e),o=clamp(r+n,0,y);ce(o)})))},[e,l,y,c,ce,g,le]),ue=clamp(Math.round(-H/l),0,y),me=useMemo(()=>{if(!f||g<=0)return{items:null,topSpacer:null,bottomSpacer:null};let t=0,n=y;if(I){const e=Math.max(2*C,8),r=2===G?4*C:1===G?2*C:0,o=Math.min(e+r,Math.max(6*C,24));t=clamp(ue-o,0,y),n=clamp(ue+o,0,y)}const r=[];for(let o=t;o<=n;o+=1){const t=e[o];t&&r.push(React.createElement(WheelPickerItem,{key:`${o}-${String(t.value??"")}`,item:t,index:o,itemHeight:l,active:o===k,disabled:!!t.disabled,renderItem:a}))}const o=t*l,i=(y-n)*l;return{items:r,topSpacer:o>0&&React.createElement(View,{style:{height:o}}),bottomSpacer:i>0&&React.createElement(View,{style:{height:i}})}},[e,f,l,y,a,k,g,C,ue,G,I]),de=useMemo(()=>({transform:[{translateY:H}]}),[H]),fe=useMemo(()=>_?{transitionProperty:"transform",transitionDuration:_+"ms",transitionTimingFunction:"cubic-bezier(0.23, 1, 0.68, 1)",willChange:"transform"}:void 0,[_]),pe=useCallback(e=>{const t=e.nativeEvent?.propertyName??e.propertyName;t&&"transform"!==t&&"webkitTransform"!==t||ie()},[ie]),he=useMemo(()=>PanResponder.create({onStartShouldSetPanResponder:()=>!c,onMoveShouldSetPanResponder:()=>!c,onPanResponderGrant:()=>{re(),K.current=null,te(),q(0),F.current=L.current,j.current=Date.now()},onPanResponderMove:(e,t)=>{if(c)return;ae(t.vy);const n=clamp(F.current+t.dy,R,0);L.current=n,"undefined"==typeof requestAnimationFrame?z(n):null!=U.current||(U.current=requestAnimationFrame(()=>{U.current=null,z(L.current)}))},onPanResponderRelease:(t,n)=>{if(c)return;ae(0);const r=Date.now()-j.current,o=n.dy;let a=clamp(F.current+o,R,0);shouldMomentum(o,r)&&(a=momentumTarget(o,r,F.current,l,R));const{index:i}=offsetToIndex(a,l,g,e);ce(i)},onPanResponderTerminationRequest:()=>!1,onPanResponderTerminate:()=>{ne(),q(0)}}),[e,l,R,ne,te,c,ae,ce,re,g]),be=!c,ge=useCallback(()=>be,[be]),ye=useMemo(()=>({paddingVertical:b}),[b]),Re=useCallback(e=>{M.current=e.nativeEvent.contentOffset.y},[]),Ee=useCallback(()=>{A.current=!1,O(),te()},[O,te]),ve=useCallback(e=>{if(c)return;const t=e.nativeEvent.contentOffset.y;M.current=t,O(),P.current=setTimeout(()=>{A.current||(D(M.current,!0),ne())},80)},[O,D,ne,c]),xe=useCallback(()=>{A.current=!0,O(),te()},[O,te]),ke=useCallback(e=>{A.current=!1,O();const t=e.nativeEvent.contentOffset.y;M.current=t,D(t,!1),ne()},[O,D,ne]);return f?React.createElement(View,_extends({style:[W.column,{height:E},W.grab],onWheel:se},he.panHandlers),React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(View,{style:[de,fe],onTransitionEnd:pe},React.createElement(T,null),me.topSpacer,me.items,me.bottomSpacer,React.createElement(T,null))):React.createElement(View,{style:[W.column,{height:E}],collapsable:!1},React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(ScrollView,{ref:h,showsVerticalScrollIndicator:!1,scrollEventThrottle:w,decelerationRate:u,snapToInterval:l,snapToAlignment:"start",bounces:!1,overScrollMode:"never",nestedScrollEnabled:!0,contentContainerStyle:ye,onStartShouldSetResponderCapture:ge,onMoveShouldSetResponderCapture:ge,onScroll:Re,onScrollBeginDrag:Ee,onScrollEndDrag:ve,onMomentumScrollBegin:xe,onMomentumScrollEnd:ke,scrollEnabled:!c},e.map((e,t)=>React.createElement(WheelPickerItem,{key:`${t}-${String(e.value??"")}`,item:e,index:t,itemHeight:l,active:t===k,disabled:!!e.disabled,renderItem:a}))))},WheelPicker=React.memo(WheelPickerInner);export function usePickerValue({columns:e,valueProp:t,defaultValue:n,emitConfirmOnAutoSelect:r=!0,onChange:o,onConfirm:a}){const l=useMemo(()=>prepareColumns(e),[e]),i=void 0!==t,c=useRef(o),s=useRef(a);c.current=o,s.current=a;const[u,m]=useState(()=>normalizePicker(l,toArrayValue(t??n)).values),d=useRef(u);d.current=u;const f=useCallback(e=>{d.current=e,m(e)},[]);useEffect(()=>{if(!i)return;const e=toArrayValue(t);shallowEqualArray(d.current,e)||f(e)},[f,i,t]);const p=useMemo(()=>normalizePicker(l,u),[l,u]);useEffect(()=>{i||shallowEqualArray(u,p.values)||(f(p.values),c.current?.(p.values,p.options),r&&s.current?.(p.values,p.options))},[f,r,u,i,p]);const h=useCallback((e,t)=>{const n=[...d.current];n[t]=e.value,"cascade"===l.type&&(n.length=t+1);const r=normalizePicker(l,n);shallowEqualArray(d.current,r.values)||(f(r.values),c.current?.(r.values,r.options))},[f,l]),b=useCallback(()=>{s.current?.(p.values,p.options)},[p]);return{preparedColumns:l,normalized:p,handleSelect:h,handleConfirm:b}}const getVisibleCount=e=>{const t=isFiniteNumber(e)?Math.max(3,Math.floor(e)):5;return t%2==0?t+1:t},GRADIENT_OVERLAY_ALPHA=.25,GRADIENT_STEPS=[.95,.75,.55,.35],GRADIENT_STEPS_REVERSED=[.35,.55,.75,.95],GradientMask=({height:e,color:t,position:n,maskType:r})=>{const o=[S.gMask,{height:e},"top"===n?{top:0}:{bottom:0}],a=withAlpha(t,.25);if("solid"===r)return React.createElement(View,{pointerEvents:"none",style:[...o,{backgroundColor:withAlpha(t,.9)}]});if("web"===Platform.OS){const e="top"===n?"180deg":"0deg";return React.createElement(View,{pointerEvents:"none",style:[...o,{backgroundColor:a,backgroundImage:`linear-gradient(${e}, ${withAlpha(t,.98)}, ${withAlpha(t,.4)})`}]})}return React.createElement(View,{pointerEvents:"none",style:[...o,{backgroundColor:a}]},("top"===n?GRADIENT_STEPS:GRADIENT_STEPS_REVERSED).map((e,n)=>React.createElement(View,{key:n,style:{flex:1,backgroundColor:withAlpha(t,e)}})))},PickerColumn=React.memo(e=>{const{columnIndex:t,options:n,value:r,itemHeight:o,visibleItemCount:a,optionRender:l,getOptionTestID:i,getOptionA11yLabel:c,onSelect:s,tokens:u,readOnly:m,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p}=e,h=Math.max(1,Math.floor((a-1)/2)),b=useMemo(()=>new Map(n.map((e,t)=>[e.value,t])),[n]),g=useMemo(()=>{if(!n.length)return 0;const e=b.get(r);return findEnabledIndex(n,"number"==typeof e&&e>=0?e:0)},[n,r,b]),y=useCallback(e=>{const r=findEnabledIndex(n,e),o=n[r];o&&!o.disabled&&s(o,t,r)},[t,s,n]),{text:R,textDisabled:E,textMuted:v}=u.colors,x={fontSize:u.typography.optionSize,fontFamily:u.typography.fontFamily,fontWeight:u.typography.optionWeight},k=useCallback((e,n,r)=>{const{active:a=!1,disabled:s=!1}=r??{},u=s?E:a?R:v,m=l?l(e,{columnIndex:t,active:a}):e.label??e.value,d=i?.(e,{columnIndex:t,active:a}),f=c?.(e,{columnIndex:t,active:a});return React.createElement(View,{style:[W.option,{opacity:s?.5:1,minHeight:o}],testID:d,accessible:!!f,accessibilityLabel:f},isText(m)?React.createElement(Text,{numberOfLines:1,style:[S.optTxt,x,{color:u}]},m):m)},[R,E,v,t,c,i,o,x,l]);return React.createElement(View,{style:[W.column,{height:o*a}]},React.createElement(WheelPicker,{data:n,itemHeight:o,visibleRest:h,selectedIndex:Math.max(0,g),onChange:y,readOnly:m,indicatorColor:u.colors.indicator,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p,renderItem:k}))}),PickerImpl=e=>{const{tokensOverride:t}=e,n=useLocale(),r=usePickerTokens(t),{columns:o=[],value:a,defaultValue:l,title:i,showToolbar:c=r.defaults.showToolbar,toolbarPosition:s=r.defaults.toolbarPosition,confirmButtonText:u=n?.confirm??"Confirm",cancelButtonText:m=n?.cancel??"Cancel",itemHeight:d=r.defaults.itemHeight,visibleItemCount:f=r.defaults.visibleItemCount,loading:p=!1,readOnly:h=!1,decelerationRate:b=Platform.select({ios:.999,android:.997,default:.989})??"normal",swipeDuration:g=r.defaults.swipeDuration,scrollEventThrottle:y=16,columnsTop:R,columnsBottom:E,optionRender:v,getOptionTestID:x,getOptionA11yLabel:k,emitConfirmOnAutoSelect:C=!0,maskColor:w,maskType:I=r.defaults.maskType,onChange:T,onConfirm:V,onCancel:P,style:A,testID:M,...O}=e,W=getVisibleCount(f??r.defaults.visibleItemCount),{normalized:D,handleSelect:H,handleConfirm:z,preparedColumns:L}=usePickerValue({columns:o,valueProp:a,defaultValue:l,emitConfirmOnAutoSelect:C,onChange:T,onConfirm:V}),F="cascade"===L.type,j={fontSize:r.typography.toolbarSize,fontFamily:r.typography.fontFamily,fontWeight:r.typography.toolbarWeight},_=(e,t)=>React.isValidElement(e)?React.createElement(View,{style:S.actW},e):isText(e)?React.createElement(Text,{numberOfLines:1,style:[S.actTxt,j,{color:t}]},e):React.createElement(View,{style:S.actW}),q=c?React.createElement(View,{style:[S.toolbar,{height:r.spacing.toolbarHeight,paddingHorizontal:r.spacing.actionPadding}]},React.createElement(Pressable,{onPress:P,accessibilityRole:"button"},_(m,r.colors.cancel)),null==(G=i)?React.createElement(View,null):React.isValidElement(G)?React.createElement(View,{style:S.ttlW},G):React.createElement(Text,{style:[S.title,j,{color:r.colors.text}],numberOfLines:1},G),React.createElement(Pressable,{onPress:z,accessibilityRole:"button"},_(u,r.colors.confirm)),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})):null;var G;const N=d*W,$=Math.max(1,Math.floor((W-1)/2)),B=d*$,Y=B,J=D.columns.length>0,K=w??r.colors.mask,Q=J?D.columns.map((e,t)=>{const n=F?`${t}-${D.values.slice(0,t).map(String).join("|")}`:String(t);return React.createElement(PickerColumn,{key:n,columnIndex:t,options:e,value:D.values[t],itemHeight:d,visibleItemCount:W,decelerationRate:b,scrollEventThrottle:y,optionRender:v,getOptionTestID:x,getOptionA11yLabel:k,readOnly:h,swipeDuration:g,onSelect:H,tokens:r})}):null;return React.createElement(View,_extends({},O,{style:[{backgroundColor:r.colors.background,borderRadius:r.radius.container},A],testID:M}),"top"===s&&q,React.createElement(View,{style:[S.body,{height:N}]},React.createElement(View,{style:S.columns,pointerEvents:p?"none":"auto"},R,Q,E,J&&React.createElement(React.Fragment,null,React.createElement(View,{pointerEvents:"none",style:[S.indicator,{top:B,height:d}]},React.createElement(View,{style:createHairlineView({position:"top",color:r.colors.indicator,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})),React.createElement(GradientMask,{position:"top",height:Y,color:K,maskType:I}),React.createElement(GradientMask,{position:"bottom",height:Y,color:K,maskType:I}))),p&&React.createElement(View,{style:[S.loading,{backgroundColor:r.colors.loadingMask}]},React.createElement(Loading,null))),"bottom"===s&&q)},S=StyleSheet.create({body:{position:"relative",overflow:"hidden"},columns:{flex:1,flexDirection:"row"},optTxt:{includeFontPadding:!1},indicator:{position:"absolute",left:0,right:0,zIndex:3},gMask:{position:"absolute",left:0,right:0,zIndex:2},toolbar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},title:{flex:1,textAlign:"center"},ttlW:{flex:1,alignItems:"center",justifyContent:"center"},actTxt:{minWidth:44,textAlign:"center"},actW:{minWidth:44,alignItems:"center",justifyContent:"center"},loading:{position:"absolute",top:0,left:0,right:0,bottom:0,alignItems:"center",justifyContent:"center"}}),Picker=React.memo(PickerImpl);export default Picker;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Pressable,Text,View,Platform,StyleSheet,ScrollView,PanResponder}from"react-native";import Loading from"../loading";import{useLocale}from"../config-provider/useLocale";import{isText}from"../../utils/validate";import{clamp}from"../../utils";import{usePickerTokens}from"./tokens";import{createHairlineView}from"../../utils/hairline";import{findEnabledIndex}from"../../hooks/picker/normalize";import{getVisibleCount,GradientMask,usePickerValue}from"../../hooks/picker/value";export{toArrayValue,findEnabledIndex,prepareColumns,normalizePicker}from"../../hooks/picker/normalize";export{usePickerValue}from"../../hooks/picker/value";const W=StyleSheet.create({column:{flex:1},option:{justifyContent:"center",alignItems:"center"},grab:{cursor:"pointer",userSelect:"none",touchAction:"none"}}),WheelPickerItemInner=({item:e,index:t,itemHeight:n,active:r,disabled:o,renderItem:l})=>{const a=l(e,t,{active:r,disabled:o});return React.createElement(View,{style:[W.option,{height:n}]},a)},WheelPickerItem=React.memo(WheelPickerItemInner),getVelocityBucket=e=>{const t=Math.abs(e);return t>1.2?2:t>.6?1:0},adjustIndex=(e,t)=>{const n=t.length;if(!n)return 0;const r=clamp(e,0,n-1),o=findEnabledIndex(t,r);return o>=0?o:r},indexToOffset=(e,t)=>-e*t,offsetToIndex=(e,t,n,r)=>{const o=-Math.max(0,n-1)*t,l=clamp(e,o,0);let a=Math.round(-l/t);a=adjustIndex(a,r);return{index:a,snapOffset:indexToOffset(a,t)}},shouldMomentum=(e,t)=>t<500&&Math.abs(e)>8,momentumTarget=(e,t,n,r,o)=>{const l=Math.abs(e/t),a=clamp(n+l/.0025*(e<0?-1:1),o,0),i=Math.round(-a/r);return indexToOffset(i,r)},WheelPickerInner=({data:e,selectedIndex:t,onChange:n,onInteractStart:r,onInteractEnd:o,renderItem:l,itemHeight:a,visibleRest:i,readOnly:c,indicatorColor:s,decelerationRate:u=Platform.select({ios:.9985,android:.995,default:.995})??"normal",scrollEventThrottle:m=16,swipeDuration:d=300})=>{const f="web"===Platform.OS,p=useRef(null),h=useRef(null),b=i*a,g=e.length,y=Math.max(0,g-1),R=-y*a,E=a*(2*i+1),k=clamp(t,0,y),x=findEnabledIndex(e,k),v=x>=0?x:k,w=2*i+1,C=g>20*w?32:m,I=g>4*w,T=useCallback(()=>React.createElement(View,{style:{height:b}}),[b]),V=useMemo(()=>[S.indicator,{height:a,top:a*i}],[a,i]),P=useRef(null),M=useRef(!1),O=useRef(0),D=useCallback(()=>{P.current&&(clearTimeout(P.current),P.current=null)},[]),H=useCallback((t,r)=>{if(c)return;const{index:o,snapOffset:l}=offsetToIndex(-t,a,g,e),i=-l;Math.abs(i-t)>.5&&p.current?.scrollToOffset({offset:i,animated:r}),n(o)},[e,a,n,c,g]);useEffect(()=>{const e=v*a;f||h.current?.scrollTo({y:e,animated:!1})},[f,a,v]);const[A,F]=useState(()=>indexToOffset(v,a)),L=useRef(A),z=useRef(0),j=useRef(0),[B,$]=useState(0),[q,_]=useState(0),G=useRef(0),N=useRef(null),Y=useRef(0),J=useRef(null),K=useRef(null),Q=useRef(null),U=useRef(null),X=useRef(!1),Z=useRef(r);Z.current=r;const ee=useRef(o);ee.current=o;const te=useCallback(()=>{c||X.current||(X.current=!0,Z.current?.())},[c]),ne=useCallback(()=>{X.current&&(X.current=!1,ee.current?.())},[]),re=useCallback(()=>{null!=U.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(U.current),U.current=null),null!=J.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(J.current),J.current=null)},[]),oe=useCallback(()=>{Q.current&&(clearTimeout(Q.current),Q.current=null)},[]);useEffect(()=>()=>{D(),oe(),re()},[D,oe,re]);const le=useCallback(e=>{const t=getVelocityBucket(e);t!==G.current&&(G.current=t,_(t))},[]),ae=useCallback(e=>{const t=Date.now(),n=N.current;if(null!=n){const r=Math.max(1,t-n);le(e/r)}N.current=t},[le]);useEffect(()=>{if(!f)return;oe(),K.current=null,$(0);const e=indexToOffset(v,a);L.current=e,F(e)},[oe,f,a,v,$]);const ie=useCallback(()=>{if(c)return;const e=K.current;null!=e&&(K.current=null,oe(),$(0),ne(),n(e))},[oe,n,c,$]),ce=useCallback(e=>{if(c)return;te();const t=clamp(e,0,y),n=indexToOffset(t,a);oe(),K.current=t,L.current=n,$(d),F(n),d<=0?ie():Q.current=setTimeout(ie,d+80)},[oe,ie,a,y,c,d]),se=useCallback(t=>{if(c)return;const n=t.nativeEvent?.deltaY??0;n&&(Y.current+=n,null==J.current&&"undefined"!=typeof requestAnimationFrame&&(J.current=requestAnimationFrame(()=>{J.current=null;const t=Y.current;if(Y.current=0,!t)return;ae(t);const n=t>0?1:-1,{index:r}=offsetToIndex(L.current,a,g,e),o=clamp(r+n,0,y);ce(o)})))},[e,a,y,c,ce,g,ae]),ue=clamp(Math.round(-A/a),0,y),me=useMemo(()=>{if(!f||g<=0)return{items:null,topSpacer:null,bottomSpacer:null};let t=0,n=y;if(I){const e=Math.max(2*w,8),r=2===q?4*w:1===q?2*w:0,o=Math.min(e+r,Math.max(6*w,24));t=clamp(ue-o,0,y),n=clamp(ue+o,0,y)}const r=[];for(let o=t;o<=n;o+=1){const t=e[o];t&&r.push(React.createElement(WheelPickerItem,{key:`${o}-${String(t.value??"")}`,item:t,index:o,itemHeight:a,active:o===v,disabled:!!t.disabled,renderItem:l}))}const o=t*a,i=(y-n)*a;return{items:r,topSpacer:o>0&&React.createElement(View,{style:{height:o}}),bottomSpacer:i>0&&React.createElement(View,{style:{height:i}})}},[e,f,a,y,l,v,g,w,ue,q,I]),de=useMemo(()=>({transform:[{translateY:A}]}),[A]),fe=useMemo(()=>B?{transitionProperty:"transform",transitionDuration:B+"ms",transitionTimingFunction:"cubic-bezier(0.23, 1, 0.68, 1)",willChange:"transform"}:void 0,[B]),pe=useCallback(e=>{const t=e.nativeEvent?.propertyName??e.propertyName;t&&"transform"!==t&&"webkitTransform"!==t||ie()},[ie]),he=useMemo(()=>PanResponder.create({onStartShouldSetPanResponder:()=>!c,onMoveShouldSetPanResponder:()=>!c,onPanResponderGrant:()=>{re(),K.current=null,te(),$(0),z.current=L.current,j.current=Date.now()},onPanResponderMove:(e,t)=>{if(c)return;le(t.vy);const n=clamp(z.current+t.dy,R,0);L.current=n,"undefined"==typeof requestAnimationFrame?F(n):null!=U.current||(U.current=requestAnimationFrame(()=>{U.current=null,F(L.current)}))},onPanResponderRelease:(t,n)=>{if(c)return;le(0);const r=Date.now()-j.current,o=n.dy;let l=clamp(z.current+o,R,0);shouldMomentum(o,r)&&(l=momentumTarget(o,r,z.current,a,R));const{index:i}=offsetToIndex(l,a,g,e);ce(i)},onPanResponderTerminationRequest:()=>!1,onPanResponderTerminate:()=>{ne(),$(0)}}),[e,a,R,ne,te,c,le,ce,re,g]),be=!c,ge=useCallback(()=>be,[be]),ye=useMemo(()=>({paddingVertical:b}),[b]),Re=useCallback(e=>{O.current=e.nativeEvent.contentOffset.y},[]),Ee=useCallback(()=>{M.current=!1,D(),te()},[D,te]),ke=useCallback(e=>{if(c)return;const t=e.nativeEvent.contentOffset.y;O.current=t,D(),P.current=setTimeout(()=>{M.current||(H(O.current,!0),ne())},80)},[D,H,ne,c]),xe=useCallback(()=>{M.current=!0,D(),te()},[D,te]),Se=useCallback(e=>{M.current=!1,D();const t=e.nativeEvent.contentOffset.y;O.current=t,H(t,!1),ne()},[D,H,ne]);return f?React.createElement(View,_extends({style:[W.column,{height:E},W.grab],onWheel:se},he.panHandlers),React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(View,{style:[de,fe],onTransitionEnd:pe},React.createElement(T,null),me.topSpacer,me.items,me.bottomSpacer,React.createElement(T,null))):React.createElement(View,{style:[W.column,{height:E}],collapsable:!1},React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(ScrollView,{ref:h,showsVerticalScrollIndicator:!1,scrollEventThrottle:C,decelerationRate:u,snapToInterval:a,snapToAlignment:"start",bounces:!1,overScrollMode:"never",nestedScrollEnabled:!0,contentContainerStyle:ye,onStartShouldSetResponderCapture:ge,onMoveShouldSetResponderCapture:ge,onScroll:Re,onScrollBeginDrag:Ee,onScrollEndDrag:ke,onMomentumScrollBegin:xe,onMomentumScrollEnd:Se,scrollEnabled:!c},e.map((e,t)=>React.createElement(WheelPickerItem,{key:`${t}-${String(e.value??"")}`,item:e,index:t,itemHeight:a,active:t===v,disabled:!!e.disabled,renderItem:l}))))},WheelPicker=React.memo(WheelPickerInner),PickerColumn=React.memo(e=>{const{columnIndex:t,options:n,value:r,itemHeight:o,visibleItemCount:l,optionRender:a,getOptionTestID:i,getOptionA11yLabel:c,onSelect:s,tokens:u,readOnly:m,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p}=e,h=Math.max(1,Math.floor((l-1)/2)),b=useMemo(()=>new Map(n.map((e,t)=>[e.value,t])),[n]),g=useMemo(()=>{if(!n.length)return 0;const e=b.get(r);return findEnabledIndex(n,"number"==typeof e&&e>=0?e:0)},[n,r,b]),y=useCallback(e=>{const r=findEnabledIndex(n,e),o=n[r];o&&!o.disabled&&s(o,t,r)},[t,s,n]),{text:R,textDisabled:E,textMuted:k}=u.colors,x={fontSize:u.typography.optionSize,fontFamily:u.typography.fontFamily,fontWeight:u.typography.optionWeight},v=useCallback((e,n,r)=>{const{active:l=!1,disabled:s=!1}=r??{},u=s?E:l?R:k,m=a?a(e,{columnIndex:t,active:l}):e.label??e.value,d=i?.(e,{columnIndex:t,active:l}),f=c?.(e,{columnIndex:t,active:l});return React.createElement(View,{style:[W.option,{opacity:s?.5:1,minHeight:o}],testID:d,accessible:!!f,accessibilityLabel:f},isText(m)?React.createElement(Text,{numberOfLines:1,style:[S.optTxt,x,{color:u}]},m):m)},[R,E,k,t,c,i,o,x,a]);return React.createElement(View,{style:[W.column,{height:o*l}]},React.createElement(WheelPicker,{data:n,itemHeight:o,visibleRest:h,selectedIndex:Math.max(0,g),onChange:y,readOnly:m,indicatorColor:u.colors.indicator,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p,renderItem:v}))}),PickerImpl=e=>{const{tokensOverride:t}=e,n=useLocale(),r=usePickerTokens(t),{columns:o=[],value:l,defaultValue:a,title:i,showToolbar:c=r.defaults.showToolbar,toolbarPosition:s=r.defaults.toolbarPosition,confirmButtonText:u=n?.confirm??"Confirm",cancelButtonText:m=n?.cancel??"Cancel",itemHeight:d=r.defaults.itemHeight,visibleItemCount:f=r.defaults.visibleItemCount,loading:p=!1,readOnly:h=!1,decelerationRate:b=Platform.select({ios:.999,android:.997,default:.989})??"normal",swipeDuration:g=r.defaults.swipeDuration,scrollEventThrottle:y=16,columnsTop:R,columnsBottom:E,optionRender:k,getOptionTestID:x,getOptionA11yLabel:v,emitConfirmOnAutoSelect:w=!0,maskColor:C,maskType:I=r.defaults.maskType,onChange:T,onConfirm:V,onCancel:P,style:M,testID:O,...W}=e,D=getVisibleCount(f??r.defaults.visibleItemCount),{normalized:H,handleSelect:A,handleConfirm:F,preparedColumns:L}=usePickerValue({columns:o,valueProp:l,defaultValue:a,emitConfirmOnAutoSelect:w,onChange:T,onConfirm:V}),z="cascade"===L.type,j={fontSize:r.typography.toolbarSize,fontFamily:r.typography.fontFamily,fontWeight:r.typography.toolbarWeight},B=(e,t)=>React.isValidElement(e)?React.createElement(View,{style:S.actW},e):isText(e)?React.createElement(Text,{numberOfLines:1,style:[S.actTxt,j,{color:t}]},e):React.createElement(View,{style:S.actW}),$=c?React.createElement(View,{style:[S.toolbar,{height:r.spacing.toolbarHeight,paddingHorizontal:r.spacing.actionPadding}]},React.createElement(Pressable,{onPress:P,accessibilityRole:"button"},B(m,r.colors.cancel)),null==(q=i)?React.createElement(View,null):React.isValidElement(q)?React.createElement(View,{style:S.ttlW},q):React.createElement(Text,{style:[S.title,j,{color:r.colors.text}],numberOfLines:1},q),React.createElement(Pressable,{onPress:F,accessibilityRole:"button"},B(u,r.colors.confirm)),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})):null;var q;const _=d*D,G=Math.max(1,Math.floor((D-1)/2)),N=d*G,Y=N,J=H.columns.length>0,K=C??r.colors.mask,Q=J?H.columns.map((e,t)=>{const n=z?`${t}-${H.values.slice(0,t).map(String).join("|")}`:String(t);return React.createElement(PickerColumn,{key:n,columnIndex:t,options:e,value:H.values[t],itemHeight:d,visibleItemCount:D,decelerationRate:b,scrollEventThrottle:y,optionRender:k,getOptionTestID:x,getOptionA11yLabel:v,readOnly:h,swipeDuration:g,onSelect:A,tokens:r})}):null;return React.createElement(View,_extends({},W,{style:[{backgroundColor:r.colors.background,borderRadius:r.radius.container},M],testID:O}),"top"===s&&$,React.createElement(View,{style:[S.body,{height:_}]},React.createElement(View,{style:S.columns,pointerEvents:p?"none":"auto"},R,Q,E,J&&React.createElement(React.Fragment,null,React.createElement(View,{pointerEvents:"none",style:[S.indicator,{top:N,height:d}]},React.createElement(View,{style:createHairlineView({position:"top",color:r.colors.indicator,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})),React.createElement(GradientMask,{position:"top",height:Y,color:K,maskType:I}),React.createElement(GradientMask,{position:"bottom",height:Y,color:K,maskType:I}))),p&&React.createElement(View,{style:[S.loading,{backgroundColor:r.colors.loadingMask}]},React.createElement(Loading,null))),"bottom"===s&&$)},S=StyleSheet.create({body:{position:"relative",overflow:"hidden"},columns:{flex:1,flexDirection:"row"},optTxt:{includeFontPadding:!1},indicator:{position:"absolute",left:0,right:0,zIndex:3},toolbar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},title:{flex:1,textAlign:"center"},ttlW:{flex:1,alignItems:"center",justifyContent:"center"},actTxt:{minWidth:44,textAlign:"center"},actW:{minWidth:44,alignItems:"center",justifyContent:"center"},loading:{position:"absolute",top:0,left:0,right:0,bottom:0,alignItems:"center",justifyContent:"center"}}),Picker=React.memo(PickerImpl);export default Picker;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Platform,Pressable,StyleSheet,Text,View,useWindowDimensions}from"react-native";import{SafeAreaView}from"../safe-area-view";import{addPopStateListener,nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{isRenderable,isText}from"../../utils/validate";import{Cross}from"react-native-system-icon";import Portal from"../portal/Portal";import{useAriaOverlay,useOverlayStack}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{usePopupTokens}from"./tokens";const AnimatedPressable=Animated.createAnimatedComponent(Pressable),EASE_OUT=Easing.bezier(.075,.82,.165,1),EASE_IN=Easing.bezier(.55,.055,.675,.19),CAPTURE=()=>!0,placementConfig={top:{container:{justifyContent:"flex-start",alignItems:"center"},axis:"y"},bottom:{container:{justifyContent:"flex-end",alignItems:"center"},axis:"y"},left:{container:{justifyContent:"center",alignItems:"flex-start"},axis:"x"},right:{container:{justifyContent:"center",alignItems:"flex-end"},axis:"x"},center:{container:{justifyContent:"center",alignItems:"center"},axis:"y"}},buildRadius=(e,t,o)=>e?"top"===t?{borderBottomLeftRadius:o,borderBottomRightRadius:o}:"bottom"===t?{borderTopLeftRadius:o,borderTopRightRadius:o}:"left"===t?{borderTopRightRadius:o,borderBottomRightRadius:o}:"right"===t?{borderTopLeftRadius:o,borderBottomLeftRadius:o}:{borderRadius:o}:void 0,hiddenStyle={opacity:0,shadowOpacity:0,shadowRadius:0,elevation:0},PopupImpl=e=>{const t=useLocale(),o=useDirection(),{visible:n,placement:i,position:r,title:a,description:s,tokensOverride:l,overlay:c=!0,overlayStyle:u,overlayAccessibilityLabel:d=t?.vanPopup?.closeOverlay??"Close overlay",closeOnOverlayPress:p,closeOnClickOverlay:m,overlayTestID:f="popup-overlay",closeable:g=!1,closeIcon:y,closeIconPosition:R="top-right",round:b,safeArea:h=!1,safeAreaInsetTop:v=!1,safeAreaInsetBottom:C,lockScroll:E=!0,destroyOnClose:I=!0,duration:P=300,zIndex:O,closeOnBackPress:x=!1,closeOnPopstate:A=!1,children:w,beforeClose:k,onClickOverlay:T,onClose:z,onOpen:W,onOpened:L,onClosed:V,stopPropagation:B=!0,style:D,contentAnimationStyle:H,...M}=e,j=i??r??"center",F=m??p??!0,_="center"===j,U=C??!1,N=usePopupTokens(l),X=useReducedMotion(),Y=useRef({onOpened:L,onClosed:V,onOpen:W,onClose:z,beforeClose:k,onClickOverlay:T});Y.current={onOpened:L,onClosed:V,onOpen:W,onClose:z,beforeClose:k,onClickOverlay:T};const q=useMemo(()=>{const e=createPlatformShadow(N.shadow),{colors:t,spacing:o,typography:n,layout:i}=N;return{popup:{backgroundColor:t.background,padding:o.padding,...e},title:{color:t.title,fontFamily:n.fontFamily,fontSize:n.titleSize,fontWeight:n.titleWeight,marginHorizontal:o.descriptionHorizontal,textAlign:"center"},titleWrap:{marginTop:o.titleTop,marginBottom:o.titleBottom,marginHorizontal:o.descriptionHorizontal,alignItems:"center"},desc:{color:t.description,fontFamily:n.fontFamily,fontSize:n.descriptionSize,lineHeight:n.descriptionLineHeight},descWrap:{marginHorizontal:o.descriptionHorizontal,marginBottom:o.descriptionBottom},closeBase:{minWidth:o.closeIconSize,minHeight:o.closeIconSize,padding:o.closeIconPadding},closeDef:{width:o.closeIconSize,height:o.closeIconSize},side:{width:i.sideWidth,maxWidth:i.maxWidth},center:{minWidth:i.minWidth,maxWidth:i.centerMaxWidth}}},[N]),[G,J]=useState(n),[K,Q]=useState(n),Z=n||K,$=F&&(z||k),ee=useRef(new Animated.Value(0)).current,te=useRef(null),oe=useRef(0),ne=useRef(n),ie=useRef(!1),re="top"===j||"bottom"===j,ae="left"===j||"right"===j,se="top"===j||"left"===j?-1:1,le=useCallback((e,t)=>{oe.current+=1;const o=oe.current;te.current?.stop();const n=t?0:P,i=Animated.timing(ee,{toValue:e?1:0,duration:n,easing:e?EASE_OUT:EASE_IN,useNativeDriver:nativeDriverEnabled,isInteraction:!1});te.current=i,i.start(({finished:t})=>{t&&o===oe.current&&(e?Y.current.onOpened?.():(Q(!1),I&&J(!1),Y.current.onClosed?.()))})},[I,P,ee]);useEffect(()=>{n?(J(!0),Q(!0),le(!0,X)):ne.current&&le(!1,X)},[le,n,X]),useEffect(()=>{n&&!ne.current&&Y.current.onOpen?.(),ne.current=n},[n]),useEffect(()=>()=>{te.current?.stop()},[]);const ce=useCallback(async e=>{if(!ie.current){ie.current=!0;try{if(Y.current.beforeClose){if(!1===await Y.current.beforeClose(e))return}Y.current.onClose?.()}finally{ie.current=!1}}},[]);useEffect(()=>{if(A)return addPopStateListener(()=>{n&&ce("close")})},[A,ce,n]);const ue=useCallback(()=>{Y.current.onClickOverlay?.(),F&&ce("overlay")},[ce,F]),de=useCallback(()=>ce("close-icon"),[ce]),pe=useCallback(()=>ce("close"),[ce]),{zIndex:me}=useOverlayStack({visible:Z,onClose:pe,closeOnBack:x,lockScroll:E,zIndex:O,type:"popup"}),{overlayRef:fe,overlayProps:ge}=useAriaOverlay({isOpen:Z,onClose:()=>ce("overlay"),isDismissable:F,overlayProps:{..."android"===Platform.OS?{}:{accessibilityRole:"dialog"},accessibilityLiveRegion:"polite"}}),{onLayout:ye,...Re}=ge,be=useMemo(()=>B?{...Re,onStartShouldSetResponder:CAPTURE}:Re,[Re,B]),he=placementConfig[j],Se=buildRadius(b,j,N.radius.round),{width:ve,height:Ce}=useWindowDimensions(),Ee=ae?ve:re?Ce:0,Ie=useMemo(()=>{if(_)return null;const e=[Ee*se,0];return"y"===he.axis?{translateY:ee.interpolate({inputRange:[0,1],outputRange:e})}:{translateX:ee.interpolate({inputRange:[0,1],outputRange:e})}},[he.axis,se,Ee,_,ee]),Pe=useMemo(()=>Ie?[Ie]:[],[Ie]),Oe=useMemo(()=>{const e=H?.transform,t=Array.isArray(e)?[...Pe,...e]:Pe,o={...H,transform:t};return _?{...o,opacity:ee}:null==H?.opacity?{...o,opacity:1}:o},[Pe,H,_,ee]),[xe,Ae]=useState(0),we=useCallback(e=>Ae(e.nativeEvent.layout.height),[]),ke=G||n,Te=!Z,ze=isRenderable(a)||isRenderable(s),We=useMemo(()=>{if(!ze)return null;const e=N.spacing.closeIconRight+N.spacing.closeIconSize,t=g&&R.startsWith("top-")?R.endsWith("right")?{paddingRight:e}:{paddingLeft:e}:void 0,o=(e,t,o)=>isRenderable(e)?isText(e)?React.createElement(Text,{style:t},e):React.createElement(View,{style:o},e):null;return React.createElement(View,{style:[S.header,t]},o(a,[S.title,q.title],q.titleWrap),o(s,[S.desc,q.desc],q.descWrap))},[g,R,s,q,ze,a,N.spacing.closeIconRight,N.spacing.closeIconSize]),Le=useMemo(()=>{if(!g)return null;const e=null!=y,t=R.includes("bottom")?{bottom:N.spacing.closeIconTop}:{top:N.spacing.closeIconTop+xe},n="rtl"===o,i=R.endsWith("left")?n?{right:N.spacing.closeIconRight}:{left:N.spacing.closeIconRight}:n?{left:N.spacing.closeIconRight}:{right:N.spacing.closeIconRight};return React.createElement(Pressable,{style:[S.closeBase,q.closeBase,t,i,!e&&q.closeDef],hitSlop:8,onPress:de},e?y:React.createElement(Cross,{size:22,fill:N.colors.closeIcon,color:N.colors.closeIcon}))},[y,R,g,q,de,xe,N.colors.closeIcon,N.spacing.closeIconRight,N.spacing.closeIconTop]),Ve=ze?React.createElement(React.Fragment,null,We,w):w;if(!ke)return null;const Be=me??O,De=h?React.createElement(SafeAreaView,null,Ve):React.createElement(React.Fragment,null,v&&React.createElement(SafeAreaView,{edge:"top",onLayout:we,pointerEvents:"none"}),Ve,U&&React.createElement(SafeAreaView,{edge:"bottom",pointerEvents:"none"}));return React.createElement(Portal,null,React.createElement(View,{style:[S.root,Be?{zIndex:Be}:void 0],pointerEvents:"box-none"},React.createElement(View,{style:[S.ctr,he.container],pointerEvents:Z?"auto":"none",accessibilityViewIsModal:Z,accessibilityLiveRegion:"polite",onAccessibilityEscape:pe},c&&Z?React.createElement(AnimatedPressable,_extends({testID:f,style:[S.ovl,{backgroundColor:N.colors.overlay,opacity:ee},u],renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,pointerEvents:Z?"auto":"none"},$?{accessibilityRole:"button",accessibilityLabel:d,accessibilityHint:t?.vanPopup?.closeHint??"Double-tap to close"}:{accessible:!1},{onPress:ue})):null,!c&&E&&Z?React.createElement(View,{style:S.lock,pointerEvents:"auto",onStartShouldSetResponder:CAPTURE,onMoveShouldSetResponder:CAPTURE}):null,React.createElement(Animated.View,_extends({ref:fe},be,{onLayout:ye,renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,style:[q.popup,_&&q.center,re&&S.popV,ae&&q.side,Se,Oe,D,Te&&hiddenStyle]},M),Le,De))))},S=StyleSheet.create({root:{...StyleSheet.absoluteFillObject,justifyContent:"center"},ctr:{flex:1},ovl:{...StyleSheet.absoluteFillObject,opacity:0},header:{width:"100%"},title:{includeFontPadding:!1},desc:{includeFontPadding:!1},popV:{alignSelf:"stretch"},closeBase:{position:"absolute",zIndex:999,alignItems:"center",justifyContent:"center"},lock:{...StyleSheet.absoluteFillObject}});export const Popup=React.memo(PopupImpl);export default Popup;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Platform,Pressable,StyleSheet,Text,View,useWindowDimensions}from"react-native";import{SafeAreaView}from"../safe-area-view";import{addPopStateListener,nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{isRenderable,isText}from"../../utils/validate";import{Cross}from"react-native-system-icon";import Portal from"../portal/Portal";import{useAriaOverlay,useOverlayStack}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{usePopupTokens}from"./tokens";import{buildRadius,CAPTURE,CONTENT_SELF,EASE_IN,EASE_OUT,hiddenStyle,placementConfig}from"../../hooks/popup/utils";const AnimatedPressable=Animated.createAnimatedComponent(Pressable),PopupImpl=e=>{const t=useLocale(),o=useDirection(),{visible:n,placement:i,position:r,title:l,description:s,tokensOverride:a,overlay:c=!0,overlayStyle:u,overlayAccessibilityLabel:p=t?.vanPopup?.closeOverlay??"Close overlay",closeOnOverlayPress:d,closeOnClickOverlay:m,overlayTestID:f="popup-overlay",closeable:y=!1,closeIcon:g,closeIconPosition:h="top-right",round:b,safeArea:R=!1,safeAreaInsetTop:v=!1,safeAreaInsetBottom:E,lockScroll:C=!0,destroyOnClose:O=!1,duration:P=300,zIndex:I,closeOnBackPress:A=!1,closeOnPopstate:k=!1,children:w,beforeClose:x,onClickOverlay:T,onClose:z,onOpen:W,onOpened:L,onClosed:V,stopPropagation:D=!0,style:F,contentAnimationStyle:H,...M}=e,B=i??r??"center",_=m??d??!0,j="center"===B,N=E??!1,U=usePopupTokens(a),X=useReducedMotion(),Y=useRef({onOpened:L,onClosed:V,onOpen:W,onClose:z,beforeClose:x,onClickOverlay:T});Y.current={onOpened:L,onClosed:V,onOpen:W,onClose:z,beforeClose:x,onClickOverlay:T};const q=useMemo(()=>{const e=createPlatformShadow(U.shadow),{colors:t,spacing:o,typography:n,layout:i}=U;return{popup:{backgroundColor:t.background,padding:o.padding,...e},title:{color:t.title,fontFamily:n.fontFamily,fontSize:n.titleSize,fontWeight:n.titleWeight,marginHorizontal:o.descriptionHorizontal,textAlign:"center"},titleWrap:{marginTop:o.titleTop,marginBottom:o.titleBottom,marginHorizontal:o.descriptionHorizontal,alignItems:"center"},desc:{color:t.description,fontFamily:n.fontFamily,fontSize:n.descriptionSize,lineHeight:n.descriptionLineHeight},descWrap:{marginHorizontal:o.descriptionHorizontal,marginBottom:o.descriptionBottom},closeBase:{minWidth:o.closeIconSize,minHeight:o.closeIconSize,padding:o.closeIconPadding},closeDef:{width:o.closeIconSize,height:o.closeIconSize},side:{width:i.sideWidth,maxWidth:i.maxWidth},center:{minWidth:i.minWidth,maxWidth:i.centerMaxWidth}}},[U]),[G,J]=useState(n),[K,Q]=useState(n),Z=n||K,$=_&&(z||x),ee=useRef(new Animated.Value(0)).current,te=useRef(null),oe=useRef(0),ne=useRef(n),ie=useRef(!1),re="top"===B||"bottom"===B,le="left"===B||"right"===B,se="top"===B||"left"===B?-1:1,ae=useCallback((e,t)=>{oe.current+=1;const o=oe.current;te.current?.stop();const n=t?0:P,i=Animated.timing(ee,{toValue:e?1:0,duration:n,easing:e?EASE_OUT:EASE_IN,useNativeDriver:nativeDriverEnabled,isInteraction:!1});te.current=i,i.start(({finished:t})=>{t&&o===oe.current&&(e?Y.current.onOpened?.():(Q(!1),O&&J(!1),Y.current.onClosed?.()))})},[O,P,ee]);useEffect(()=>{n?(J(!0),Q(!0),ae(!0,X)):ne.current&&ae(!1,X)},[ae,n,X]),useEffect(()=>{n&&!ne.current&&Y.current.onOpen?.(),ne.current=n},[n]),useEffect(()=>()=>{te.current?.stop()},[]);const ce=useCallback(async e=>{if(!ie.current){ie.current=!0;try{if(Y.current.beforeClose){if(!1===await Y.current.beforeClose(e))return}Y.current.onClose?.()}finally{ie.current=!1}}},[]);useEffect(()=>{if(k)return addPopStateListener(()=>{n&&ce("close")})},[k,ce,n]);const ue=useCallback(()=>{Y.current.onClickOverlay?.(),_&&ce("overlay")},[ce,_]),pe=useCallback(()=>ce("close-icon"),[ce]),de=useCallback(()=>ce("close"),[ce]),{zIndex:me}=useOverlayStack({visible:Z,onClose:de,closeOnBack:A,lockScroll:C,zIndex:I,type:"popup"}),{overlayRef:fe,overlayProps:ye}=useAriaOverlay({isOpen:Z,onClose:()=>ce("overlay"),isDismissable:_,overlayProps:{..."android"===Platform.OS?{}:{accessibilityRole:"dialog"},accessibilityLiveRegion:"polite"}}),{onLayout:ge,...Se}=ye,he=useMemo(()=>D?{...Se,onStartShouldSetResponder:CAPTURE}:Se,[Se,D]),be=placementConfig[B],Re=buildRadius(b,B,U.radius.round),{width:ve,height:Ee}=useWindowDimensions(),Ce=le?ve:re?Ee:0,Oe=useMemo(()=>{if(j)return null;const e=[Ce*se,0];return"y"===be.axis?{translateY:ee.interpolate({inputRange:[0,1],outputRange:e})}:{translateX:ee.interpolate({inputRange:[0,1],outputRange:e})}},[be.axis,se,Ce,j,ee]),Pe=useMemo(()=>Oe?[Oe]:[],[Oe]),Ie=useMemo(()=>{const e=H?.transform,t=Array.isArray(e)?[...Pe,...e]:Pe,o={...H,transform:t};return j?{...o,opacity:ee}:null==H?.opacity?{...o,opacity:1}:o},[Pe,H,j,ee]),[Ae,ke]=useState(0),we=useCallback(e=>ke(e.nativeEvent.layout.height),[]),xe=G||n,Te=!Z,ze=isRenderable(l)||isRenderable(s),We=useMemo(()=>{if(!ze)return null;const e=U.spacing.closeIconRight+U.spacing.closeIconSize,t=y&&h.startsWith("top-")?h.endsWith("right")?{paddingRight:e}:{paddingLeft:e}:void 0,o=(e,t,o)=>isRenderable(e)?isText(e)?React.createElement(Text,{style:t},e):React.createElement(View,{style:o},e):null;return React.createElement(View,{style:[S.header,t]},o(l,[S.title,q.title],q.titleWrap),o(s,[S.desc,q.desc],q.descWrap))},[y,h,s,q,ze,l,U.spacing.closeIconRight,U.spacing.closeIconSize]),Le=useMemo(()=>{if(!y)return null;const e=null!=g,t=h.includes("bottom")?{bottom:U.spacing.closeIconTop}:{top:U.spacing.closeIconTop+Ae},n="rtl"===o,i=h.endsWith("left")?n?{right:U.spacing.closeIconRight}:{left:U.spacing.closeIconRight}:n?{left:U.spacing.closeIconRight}:{right:U.spacing.closeIconRight};return React.createElement(Pressable,{style:[S.closeBase,q.closeBase,t,i,!e&&q.closeDef],hitSlop:8,onPress:pe},e?g:React.createElement(Cross,{size:22,fill:U.colors.closeIcon,color:U.colors.closeIcon}))},[g,h,y,q,pe,Ae,U.colors.closeIcon,U.spacing.closeIconRight,U.spacing.closeIconTop]),Ve=ze?React.createElement(React.Fragment,null,We,w):w;if(!xe)return null;const De=me??I,Fe=R?React.createElement(SafeAreaView,null,Ve):React.createElement(React.Fragment,null,v&&React.createElement(SafeAreaView,{edge:"top",onLayout:we,pointerEvents:"none"}),Ve,N&&React.createElement(SafeAreaView,{edge:"bottom",pointerEvents:"none"}));return React.createElement(Portal,null,React.createElement(View,{style:[S.root,De?{zIndex:De}:void 0],pointerEvents:"box-none"},React.createElement(View,{style:[S.ctr,be.container],pointerEvents:Z?"auto":"none",accessibilityViewIsModal:Z,accessibilityLiveRegion:"polite",onAccessibilityEscape:de},c&&Z?React.createElement(AnimatedPressable,_extends({testID:f,style:[S.ovl,{backgroundColor:U.colors.overlay,opacity:ee},u],renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,pointerEvents:Z?"auto":"none"},$?{accessibilityRole:"button",accessibilityLabel:p,accessibilityHint:t?.vanPopup?.closeHint??"Double-tap to close"}:{accessible:!1},{onPress:ue})):null,!c&&C&&Z?React.createElement(View,{style:S.lock,pointerEvents:"auto",onStartShouldSetResponder:CAPTURE,onMoveShouldSetResponder:CAPTURE}):null,React.createElement(Animated.View,_extends({ref:fe},he,{onLayout:ge,renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,style:[q.popup,j&&q.center,re&&S.popV,le&&q.side,CONTENT_SELF[B],Re,Ie,F,Te&&hiddenStyle]},M),Le,Fe))))},S=StyleSheet.create({root:{...StyleSheet.absoluteFillObject,justifyContent:"center"},ctr:{flex:1},ovl:{...StyleSheet.absoluteFillObject,opacity:0},header:{width:"100%"},title:{includeFontPadding:!1},desc:{includeFontPadding:!1},popV:{alignSelf:"stretch"},closeBase:{position:"absolute",zIndex:999,alignItems:"center",justifyContent:"center"},lock:{...StyleSheet.absoluteFillObject}});export const Popup=React.memo(PopupImpl);export default Popup;
@@ -1 +1 @@
1
- import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{DeviceEventEmitter,NativeEventEmitter,Platform,StyleSheet,View}from"react-native";import{isNumber}from"../../utils";import{PortalContext}from"./PortalContext";const AE="RNSU_PORTAL_ADD",UE="RNSU_PORTAL_UPDATE",RE="RNSU_PORTAL_REMOVE",CE="RNSU_PORTAL_CLEAR",TVE=DeviceEventEmitter||new NativeEventEmitter,IW="web"===Platform.OS,ao=(e,t)=>{"mount"===t.type?e.mount(t.children,t.key):"update"===t.type?e.update(t.key,t.children):"clear"===t.type?e.clear():e.unmount(t.key)},PortalManagerView=React.forwardRef((e,t)=>{const[r,n]=useState([]),a=useRef(0),o=useCallback(e=>{n(t=>{const r=t.findIndex(t=>t.key===e.key);return-1===r?[...t,e]:[...t.slice(0,r),e,...t.slice(r+1)]})},[]),l=useCallback((e,t)=>{const r=t??++a.current;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({key:r,children:e}),r},[o]),c=useCallback((e,t)=>{o({key:e,children:t})},[o]),u=useCallback(e=>{n(t=>t.filter(t=>t.key!==e))},[]),s=useCallback(()=>{n([])},[]);return React.useImperativeHandle(t,()=>({mount:l,update:c,unmount:u,clear:s}),[l,c,u,s]),0===r.length?null:React.createElement(View,{pointerEvents:"box-none",style:S.pl,collapsable:!1},r.map(e=>React.createElement(View,{key:e.key,pointerEvents:"box-none",collapsable:!1,style:S.pe},e.children)))});let ah=0,nh=1,ngk=1e4;const gm={mount:(e,t)=>{"undefined"!=typeof __DEV__&&__DEV__&&0===ah&&console.warn("[Portal] Please mount <PortalHost> or <ConfigProvider> at the root to enable imperative APIs.");const r=t??ngk++;return isNumber(t)&&t>=ngk&&(ngk=t+1),TVE.emit(AE,{key:r,children:e}),r},update:(e,t)=>{TVE.emit(UE,{key:e,children:t})},unmount:e=>{TVE.emit(RE,{key:e})}},PortalHostImpl=({children:e})=>{const t=useRef(nh++),r=useRef(null),n=useRef([]),a=useRef(1),o=useCallback(e=>{const t=r.current;t?ao(t,e):n.current.push(e)},[]),l=useMemo(()=>({mount:(e,t)=>{const r=t??a.current++;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({type:"mount",key:r,children:e}),r},update:(e,t)=>{o({type:"update",key:e,children:t})},unmount:e=>{o({type:"unmount",key:e})}}),[o]),c=useCallback(e=>{if(r.current=e,e){if(n.current.length>0){n.current.splice(0,n.current.length).forEach(t=>ao(e,t))}0===ah||ah===t.current?ah=t.current:"undefined"!=typeof __DEV__&&__DEV__&&console.warn("[PortalHost] Multiple PortalHost instances detected. Imperative APIs will only use the first mounted host.")}},[]);return useEffect(()=>()=>{ah===t.current&&(ah=0,n.current=[],portalStore.clear())},[]),useEffect(()=>{const e=TVE.addListener(AE,({key:e,children:r})=>{ah===t.current&&o({type:"mount",key:e,children:r})}),r=TVE.addListener(UE,({key:e,children:r})=>{ah===t.current&&o({type:"update",key:e,children:r})}),a=TVE.addListener(RE,({key:e})=>{ah===t.current&&o({type:"unmount",key:e})}),l=TVE.addListener(CE,()=>{ah===t.current&&(n.current=[],o({type:"clear"}))});return()=>{e.remove(),r.remove(),a.remove(),l.remove()}},[o]),React.createElement(PortalContext.Provider,{value:l},React.createElement(View,{style:S.h,collapsable:!1},React.createElement(View,{style:S.r,collapsable:!1,pointerEvents:"box-none"},e),React.createElement(PortalManagerView,{ref:c})))};export const PortalHost=React.memo(PortalHostImpl);PortalHost.displayName="PortalHost";const S=StyleSheet.create({h:{position:"relative",flex:1},r:{flex:1},pl:IW?{position:"fixed",top:0,left:0,right:0,bottom:0}:{...StyleSheet.absoluteFillObject},pe:{...StyleSheet.absoluteFillObject}});export const portalManager=gm;export const portalStore={clear:()=>{TVE.emit(CE)},hasHosts:()=>0!==ah};
1
+ import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{DeviceEventEmitter,NativeEventEmitter,Platform,StyleSheet,View}from"react-native";import{isNumber}from"../../utils";import{PortalContext}from"./PortalContext";const AE="RNSU_PORTAL_ADD",UE="RNSU_PORTAL_UPDATE",RE="RNSU_PORTAL_REMOVE",CE="RNSU_PORTAL_CLEAR",TVE=DeviceEventEmitter||new NativeEventEmitter,IW="web"===Platform.OS,ao=(e,t)=>{"mount"===t.type?e.mount(t.children,t.key):"update"===t.type?e.update(t.key,t.children):"clear"===t.type?e.clear():e.unmount(t.key)},PortalManagerView=React.forwardRef((e,t)=>{const[r,n]=useState([]),a=useRef(0),o=useCallback(e=>{n(t=>{const r=t.findIndex(t=>t.key===e.key);return-1===r?[...t,e]:[...t.slice(0,r),e,...t.slice(r+1)]})},[]),l=useCallback((e,t)=>{const r=t??++a.current;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({key:r,children:e}),r},[o]),c=useCallback((e,t)=>{o({key:e,children:t})},[o]),u=useCallback(e=>{n(t=>t.filter(t=>t.key!==e))},[]),s=useCallback(()=>{n([])},[]);return React.useImperativeHandle(t,()=>({mount:l,update:c,unmount:u,clear:s}),[l,c,u,s]),0===r.length?null:React.createElement(View,{pointerEvents:"box-none",style:S.pl,collapsable:!1},r.map(e=>React.createElement(View,{key:e.key,pointerEvents:"box-none",collapsable:!1,style:S.pe},e.children)))});let ah=0,nh=1,ngk=1e4;const hr=new Set,pickActiveHost=()=>{const e=hr.values().next();return e.done?0:e.value},gm={mount:(e,t)=>{"undefined"!=typeof __DEV__&&__DEV__&&0===ah&&console.warn("[Portal] Please mount <PortalHost> or <ConfigProvider> at the root to enable imperative APIs.");const r=t??ngk++;return isNumber(t)&&t>=ngk&&(ngk=t+1),TVE.emit(AE,{key:r,children:e}),r},update:(e,t)=>{TVE.emit(UE,{key:e,children:t})},unmount:e=>{TVE.emit(RE,{key:e})}},PortalHostImpl=({children:e})=>{const t=useRef(nh++),r=useRef(null),n=useRef([]),a=useRef(1),o=useCallback(e=>{const t=r.current;t?ao(t,e):n.current.push(e)},[]),l=useMemo(()=>({mount:(e,t)=>{const r=t??a.current++;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({type:"mount",key:r,children:e}),r},update:(e,t)=>{o({type:"update",key:e,children:t})},unmount:e=>{o({type:"unmount",key:e})}}),[o]),c=useCallback(e=>{if(r.current=e,e){if(n.current.length>0){n.current.splice(0,n.current.length).forEach(t=>ao(e,t))}0===ah||ah===t.current?ah=t.current:"undefined"!=typeof __DEV__&&__DEV__&&console.warn("[PortalHost] Multiple PortalHost instances detected. Imperative APIs will only use the first mounted host.")}},[]);return useEffect(()=>(hr.add(t.current),0===ah&&(ah=t.current),()=>{hr.delete(t.current),ah===t.current&&(ah=pickActiveHost(),n.current=[],0===ah&&portalStore.clear())}),[]),useEffect(()=>{const e=TVE.addListener(AE,({key:e,children:r})=>{ah===t.current&&o({type:"mount",key:e,children:r})}),r=TVE.addListener(UE,({key:e,children:r})=>{ah===t.current&&o({type:"update",key:e,children:r})}),a=TVE.addListener(RE,({key:e})=>{ah===t.current&&o({type:"unmount",key:e})}),l=TVE.addListener(CE,()=>{ah===t.current&&(n.current=[],o({type:"clear"}))});return()=>{e.remove(),r.remove(),a.remove(),l.remove()}},[o]),React.createElement(PortalContext.Provider,{value:l},React.createElement(View,{style:S.h,collapsable:!1},React.createElement(View,{style:S.r,collapsable:!1,pointerEvents:"box-none"},e),React.createElement(PortalManagerView,{ref:c})))};export const PortalHost=React.memo(PortalHostImpl);PortalHost.displayName="PortalHost";const S=StyleSheet.create({h:{position:"relative",flex:1},r:{flex:1},pl:IW?{position:"fixed",top:0,left:0,right:0,bottom:0}:{...StyleSheet.absoluteFillObject},pe:{...StyleSheet.absoluteFillObject}});export const portalManager=gm;export const portalStore={clear:()=>{TVE.emit(CE)},hasHosts:()=>0!==ah};
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var l in o)({}).hasOwnProperty.call(o,l)&&(e[l]=o[l])}return e},_extends.apply(null,arguments)}import React,{useCallback,useMemo}from"react";import{Pressable,Text,View}from"react-native";import{useSelectorTokens}from"./tokens";import{useAriaPress,useControllableValue}from"../../hooks";import{isText}from"../../utils";const CHECK_MARK="✓",CH=8,CW=10,SelectorOptionItemImpl=({option:e,active:t,disabled:o,multiple:l,showCheckMark:a,basis:i,containerWidth:r,columns:s,gap:c,tokens:n,itemStyle:d,labelStyle:p,descriptionStyle:m,onToggle:u})=>{const y=e.label,b=e.description,g=null!=b,h=isText(y)?String(y):String(e.value),S=isText(b)?String(b):void 0,{interactionProps:f,states:k}=useAriaPress({disabled:o,onPress:()=>u(e),extraProps:{accessibilityRole:l?"checkbox":"radio",accessibilityLabel:h,accessibilityHint:S,accessibilityState:l?{checked:t,disabled:o}:{selected:t,disabled:o}}}),x=r>0?{width:(r-(s-1)*c)/s,flexGrow:0,flexShrink:0}:{flexBasis:i,flexShrink:1};return React.createElement(Pressable,_extends({},f,{style:[n.layout.pressable,x]}),React.createElement(View,{style:[n.layout.item,{paddingHorizontal:n.spacing.paddingHorizontal,paddingVertical:n.spacing.paddingVertical,borderRadius:n.radii.item,borderColor:t?n.colors.borderActive:n.colors.border,backgroundColor:t?n.colors.backgroundActive:n.colors.background,opacity:o?n.states.disabledOpacity:1},k.pressed&&{opacity:.9},d]},isText(y)?React.createElement(Text,{style:[n.layout.label,{color:t?n.colors.textActive:n.colors.text,fontSize:n.typography.fontSize,lineHeight:1.4*n.typography.fontSize,fontFamily:n.typography.fontFamily,fontWeight:n.typography.fontWeight},p]},y):y,g?isText(b)?React.createElement(Text,{style:[n.layout.description,{marginTop:n.spacing.descriptionMarginTop,color:o?n.colors.disabledText:n.colors.description,fontSize:n.typography.descriptionSize,lineHeight:1.4*n.typography.descriptionSize},m]},b):React.createElement(View,{style:{marginTop:n.spacing.descriptionMarginTop}},b):null,t&&a?React.createElement(React.Fragment,null,React.createElement(View,{style:[n.layout.checkMarkTriangle,{borderTopWidth:8,borderBottomWidth:8,borderLeftWidth:10,borderRightWidth:10,borderBottomColor:n.colors.check,borderRightColor:n.colors.check}]}),React.createElement(Text,{style:[n.layout.checkMark,{color:n.colors.checkForeground}]},"✓")):null))},SelectorOptionItemMemo=React.memo(SelectorOptionItemImpl);SelectorOptionItemMemo.displayName="SelectorOptionItem";const SelectorOptionItem=SelectorOptionItemMemo,SelectorImpl=e=>{const{tokensOverride:t,options:o,columns:l,multiple:a,showCheckMark:i,disabled:r,onChange:s,itemStyle:c,labelStyle:n,descriptionStyle:d,style:p,onLayout:m,...u}=e,y=useSelectorTokens(t),[b,g]=React.useState(0),h=l??y.defaults.columns??1,S=a??y.defaults.multiple,f=i??y.defaults.showCheckMark,k=Boolean(r??y.defaults.disabled),[x=[],v]=useControllableValue(e,{defaultValue:[]}),R=useMemo(()=>{const e=new Map;for(const t of o)e.set(t.value,t);return e},[o]),T=Math.max(1,Math.floor(h)),C=100/T+"%",M=y.spacing.gap,w=useMemo(()=>new Set(x),[x]),O=useCallback(e=>{if(k||e.disabled)return;const t=w.has(e.value),o=S?t?x.filter(t=>t!==e.value):[...x,e.value]:t?[]:[e.value];v(o,{items:o.map(e=>R.get(e)).filter(Boolean)})},[k,S,R,w,v,x]),E=useCallback(e=>{g(e.nativeEvent.layout.width),m?.(e)},[m]);return React.createElement(View,_extends({},u,{onLayout:E,style:[y.layout.container,{columnGap:M,rowGap:M},p],accessibilityRole:S?void 0:"radiogroup"}),o.map(e=>React.createElement(SelectorOptionItem,{key:String(e.value),option:e,active:w.has(e.value),disabled:k||Boolean(e.disabled),multiple:S,showCheckMark:f,basis:C,containerWidth:b,columns:T,gap:M,tokens:y,itemStyle:c,labelStyle:n,descriptionStyle:d,onToggle:O})))};export const Selector=React.memo(SelectorImpl);Selector.displayName="Selector";export default Selector;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var l in o)({}).hasOwnProperty.call(o,l)&&(e[l]=o[l])}return e},_extends.apply(null,arguments)}import React,{useCallback,useMemo}from"react";import{Pressable,Text,View}from"react-native";import{useSelectorTokens}from"./tokens";import{useAriaPress,useControllableValue}from"../../hooks";import{isText}from"../../utils";const CHECK_MARK="✓",CH=8,CW=10,SelectorOptionItemImpl=({option:e,active:t,disabled:o,multiple:l,showCheckMark:a,basis:r,containerWidth:i,columns:s,gap:c,tokens:n,itemStyle:d,labelStyle:p,descriptionStyle:m,onToggle:u})=>{const y=e.label,b=e.description,g=null!=b,h=isText(y)?String(y):String(e.value),S=isText(b)?String(b):void 0,{interactionProps:f,states:k}=useAriaPress({disabled:o,onPress:()=>u(e),extraProps:{accessibilityRole:l?"checkbox":"radio",accessibilityLabel:h,accessibilityHint:S,accessibilityState:l?{checked:t,disabled:o}:{selected:t,disabled:o}}}),x=i>0?{width:(i-(s-1)*c)/s,flexGrow:0,flexShrink:0}:{flexBasis:r,flexShrink:1};return React.createElement(Pressable,_extends({},f,{style:[n.layout.pressable,x]}),React.createElement(View,{style:[n.layout.item,{paddingHorizontal:n.spacing.paddingHorizontal,paddingVertical:n.spacing.paddingVertical,borderRadius:n.radii.item,borderColor:t?n.colors.borderActive:n.colors.border,backgroundColor:t?n.colors.backgroundActive:n.colors.background,opacity:o?n.states.disabledOpacity:1},k.pressed&&{opacity:.9},d]},isText(y)?React.createElement(Text,{style:[n.layout.label,{color:t?n.colors.textActive:n.colors.text,fontSize:n.typography.fontSize,lineHeight:1.4*n.typography.fontSize,fontFamily:n.typography.fontFamily,fontWeight:n.typography.fontWeight},p]},y):y,g?isText(b)?React.createElement(Text,{style:[n.layout.description,{marginTop:n.spacing.descriptionMarginTop,color:o?n.colors.disabledText:n.colors.description,fontSize:n.typography.descriptionSize,lineHeight:1.4*n.typography.descriptionSize},m]},b):React.createElement(View,{style:{marginTop:n.spacing.descriptionMarginTop}},b):null,t&&a?React.createElement(React.Fragment,null,React.createElement(View,{style:[n.layout.checkMarkTriangle,{borderTopWidth:8,borderBottomWidth:8,borderLeftWidth:10,borderRightWidth:10,borderBottomColor:n.colors.check,borderRightColor:n.colors.check}]}),React.createElement(Text,{style:[n.layout.checkMark,{color:n.colors.checkForeground}]},"✓")):null))},SelectorOptionItemMemo=React.memo(SelectorOptionItemImpl);SelectorOptionItemMemo.displayName="SelectorOptionItem";const SelectorOptionItem=SelectorOptionItemMemo,SelectorImpl=e=>{const{tokensOverride:t,options:o,columns:l,multiple:a,showCheckMark:r,disabled:i,onChange:s,itemStyle:c,labelStyle:n,descriptionStyle:d,style:p,onLayout:m,...u}=e,y=Array.isArray(o)?o:[],b=useSelectorTokens(t),[g,h]=React.useState(0),S=l??b.defaults.columns??1,f=a??b.defaults.multiple,k=r??b.defaults.showCheckMark,x=Boolean(i??b.defaults.disabled),[v=[],R]=useControllableValue(e,{defaultValue:[]}),T=useMemo(()=>{const e=new Map;for(const t of y)e.set(t.value,t);return e},[y]),C=Math.max(1,Math.floor(S)),M=100/C+"%",w=b.spacing.gap,O=useMemo(()=>new Set(v),[v]),E=useCallback(e=>{if(x||e.disabled)return;const t=O.has(e.value),o=f?t?v.filter(t=>t!==e.value):[...v,e.value]:t?[]:[e.value];R(o,{items:o.map(e=>T.get(e)).filter(Boolean)})},[x,f,T,O,R,v]),I=useCallback(e=>{h(e.nativeEvent.layout.width),m?.(e)},[m]);return React.createElement(View,_extends({},u,{onLayout:I,style:[b.layout.container,{columnGap:w,rowGap:w},p],accessibilityRole:f?void 0:"radiogroup"}),y.map(e=>React.createElement(SelectorOptionItem,{key:String(e.value),option:e,active:O.has(e.value),disabled:x||Boolean(e.disabled),multiple:f,showCheckMark:k,basis:M,containerWidth:g,columns:C,gap:w,tokens:b,itemStyle:c,labelStyle:n,descriptionStyle:d,onToggle:E})))};export const Selector=React.memo(SelectorImpl);Selector.displayName="Selector";export default Selector;