@nutui/nutui-react-taro 1.4.4 → 1.4.5

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 (219) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/esm/Address.js +5 -5
  3. package/dist/esm/Audio.js +5 -5
  4. package/dist/esm/AvatarContext-7153ad2b.js +3 -1
  5. package/dist/esm/AvatarGroup.js +4 -4
  6. package/dist/esm/Calendar.js +5 -5
  7. package/dist/esm/CalendarItem.js +4 -4
  8. package/dist/esm/Card.js +4 -3
  9. package/dist/esm/Cell.js +2 -2
  10. package/dist/esm/ConfigProvider.js +3 -3
  11. package/dist/esm/CountDown.js +4 -4
  12. package/dist/esm/DatePicker.js +5 -5
  13. package/dist/esm/Dialog.js +4 -4
  14. package/dist/esm/Ellipsis.js +4 -4
  15. package/dist/esm/Empty.js +4 -4
  16. package/dist/esm/FixedNav.js +4 -4
  17. package/dist/esm/Form.js +4 -4
  18. package/dist/esm/FormItem.js +3 -3
  19. package/dist/esm/Grid.js +4 -4
  20. package/dist/esm/GridItem.js +4 -4
  21. package/dist/esm/Image.js +4 -4
  22. package/dist/esm/Infiniteloading.js +4 -4
  23. package/dist/esm/Input.js +4 -4
  24. package/dist/esm/MenuItem.js +4 -4
  25. package/dist/esm/NoticeBar.js +2 -2
  26. package/dist/esm/NumberKeyboard.js +4 -4
  27. package/dist/esm/Pagination.js +4 -4
  28. package/dist/esm/Picker.js +4 -4
  29. package/dist/esm/PullToRefresh.js +4 -4
  30. package/dist/esm/Range.js +4 -4
  31. package/dist/esm/SearchBar.js +4 -4
  32. package/dist/esm/ShortPassword.js +4 -4
  33. package/dist/esm/SideNavBar.js +4 -4
  34. package/dist/esm/Signature.js +4 -4
  35. package/dist/esm/Sticky.js +4 -4
  36. package/dist/esm/Table.js +4 -4
  37. package/dist/esm/Tag.js +3 -2
  38. package/dist/esm/TextArea.js +4 -4
  39. package/dist/esm/TimeDetail.js +4 -4
  40. package/dist/esm/TimePannel.js +4 -4
  41. package/dist/esm/TimeSelect.js +6 -6
  42. package/dist/esm/Uploader.js +4 -4
  43. package/dist/esm/UserContext-68f62e66.js +3 -1
  44. package/dist/esm/UserContext-b4181162.js +3 -1
  45. package/dist/esm/UserContext-be8097d2.js +3 -1
  46. package/dist/esm/VirtualList.js +6 -4
  47. package/dist/esm/WaterMark.js +4 -4
  48. package/dist/esm/actionsheet.taro-a58d3d12.js +45 -83
  49. package/dist/esm/address.taro-79cc7c96.js +461 -0
  50. package/dist/esm/animate.taro-b0e83dd5.js +32 -46
  51. package/dist/esm/animatingnumbers.taro-6f40a2e9.js +93 -134
  52. package/dist/esm/audio.taro-4fadc583.js +161 -0
  53. package/dist/esm/avatar.taro-85ced995.js +93 -119
  54. package/dist/esm/avatargroup-1d900174.js +34 -0
  55. package/dist/esm/backtop.taro-99107c30.js +39 -62
  56. package/dist/esm/badge.taro-fe9171ec.js +40 -58
  57. package/dist/esm/barrage.taro-0e157b5e.js +61 -91
  58. package/dist/esm/bem-893ad28d.js +3 -6
  59. package/dist/esm/button.taro-4ce133b9.js +87 -98
  60. package/dist/esm/calendar.taro-4ed72058.js +38 -0
  61. package/dist/esm/calendaritem.taro-1ebe428d.js +571 -0
  62. package/dist/esm/card.taro-39055e82.js +32 -0
  63. package/dist/esm/cascader.taro-d8cb1c3e.js +397 -636
  64. package/dist/esm/cell.taro-9a04a92e.js +64 -0
  65. package/dist/esm/cellgroup.taro-e094471c.js +18 -27
  66. package/dist/esm/checkbox.taro-0bda9796.js +160 -232
  67. package/dist/esm/circleprogress.taro-47db537c.js +99 -120
  68. package/dist/esm/col.taro-b61c7cba.js +33 -50
  69. package/dist/esm/collapse.taro-af58206c.js +73 -86
  70. package/dist/esm/collapseitem-ce1849d2.js +75 -139
  71. package/dist/esm/configprovider-5eea4f5d.js +19 -0
  72. package/dist/esm/configprovider.taro-26882dd2.js +42 -0
  73. package/dist/esm/countdown.taro-9e40de9c.js +225 -0
  74. package/dist/esm/datepicker.taro-7220e495.js +270 -0
  75. package/dist/esm/dialog.taro-1c03960e.js +123 -0
  76. package/dist/esm/divider.taro-5236fe6a.js +27 -27
  77. package/dist/esm/drag.taro-82b6b27a.js +99 -138
  78. package/dist/esm/elevator.taro-d7d65470.js +185 -259
  79. package/dist/esm/ellipsis.taro-49b6db0c.js +232 -0
  80. package/dist/esm/empty.taro-7bd813f9.js +62 -0
  81. package/dist/esm/fixednav.taro-5ad15202.js +53 -0
  82. package/dist/esm/form.taro-71d32671.js +179 -0
  83. package/dist/esm/formitem.taro-3089489b.js +89 -0
  84. package/dist/esm/grid.taro-e6decfce.js +58 -0
  85. package/dist/esm/grid.taro.context-39636af9.js +4 -2
  86. package/dist/esm/griditem.taro-4cade72e.js +90 -0
  87. package/dist/esm/icon-8dc4de10.js +43 -51
  88. package/dist/esm/icon.taro-1d0d4fb7.js +43 -51
  89. package/dist/esm/image.taro-e6dc5867.js +64 -0
  90. package/dist/esm/imagepreview.taro-3400ea03.js +158 -205
  91. package/dist/esm/index.taro-a36f96fb.js +149 -210
  92. package/dist/esm/indicator.taro-183ea169.js +29 -43
  93. package/dist/esm/infiniteloading.taro-6c2a2e95.js +142 -0
  94. package/dist/esm/input.taro-fd566407.js +243 -0
  95. package/dist/esm/inputnumber.taro-dc39b853.js +129 -177
  96. package/dist/esm/layout.taro-358f014f.js +6 -9
  97. package/dist/esm/menu.taro-4abed328.js +89 -132
  98. package/dist/esm/menuitem.taro-6e8b27c3.js +130 -0
  99. package/dist/esm/navbar.taro-c931c078.js +69 -105
  100. package/dist/esm/noticebar.taro-69ea7673.js +450 -0
  101. package/dist/esm/notify.taro-308e5892.js +66 -97
  102. package/dist/esm/numberkeyboard.taro-194519e4.js +158 -0
  103. package/dist/esm/nutui-react.es.js +44 -44
  104. package/dist/esm/offsetContext-bfb02c25.js +3 -1
  105. package/dist/esm/overlay.taro-98367bc1.js +59 -74
  106. package/dist/esm/pagination.taro-bb490de9.js +124 -0
  107. package/dist/esm/picker.taro-2a8ded7c.js +420 -0
  108. package/dist/esm/popover.taro-46d813e8.js +132 -222
  109. package/dist/esm/popup.taro-cb777e09.js +125 -178
  110. package/dist/esm/price.taro-8801462e.js +75 -86
  111. package/dist/esm/progress.taro-623bc807.js +84 -118
  112. package/dist/esm/pulltorefresh.taro-cab7b51c.js +221 -0
  113. package/dist/esm/range.taro-5d6ff217.js +332 -0
  114. package/dist/esm/rate.taro-10197384.js +64 -111
  115. package/dist/esm/row.taro-37a895de.js +38 -42
  116. package/dist/esm/searchbar.taro-839dd622.js +148 -0
  117. package/dist/esm/shortpassword.taro-182d46f7.js +111 -0
  118. package/dist/esm/sidenavbar.taro-006cf38b.js +35 -0
  119. package/dist/esm/sidenavbaritem.taro-fee11d26.js +9 -22
  120. package/dist/esm/signature.taro-33632585.js +143 -0
  121. package/dist/esm/skeleton.taro-853ce460.js +51 -88
  122. package/dist/esm/step.taro-1c94e067.js +49 -78
  123. package/dist/esm/steps.taro-acf205a0.js +21 -30
  124. package/dist/esm/sticky.taro-d0553f48.js +13 -0
  125. package/dist/esm/subsidenavbar.taro-f46b4c73.js +58 -75
  126. package/dist/esm/swipe.taro-83bc248f.js +164 -254
  127. package/dist/esm/swiper.taro-852f6615.js +424 -505
  128. package/dist/esm/swiperitem-86a3578a.js +20 -28
  129. package/dist/esm/switch.taro-bae2dca0.js +43 -64
  130. package/dist/esm/tabbar.taro-86cece39.js +47 -57
  131. package/dist/esm/tabbaritem.taro-8dfb8055.js +51 -79
  132. package/dist/esm/table.taro-cb4dd2c3.js +92 -0
  133. package/dist/esm/tabpane.taro-91cd6cf4.js +17 -22
  134. package/dist/esm/tabs.taro-e71875fa.js +121 -165
  135. package/dist/esm/tag.taro-00fe554d.js +89 -0
  136. package/dist/esm/textarea.taro-42600f8c.js +74 -0
  137. package/dist/esm/timedetail.taro-c5f564fd.js +44 -0
  138. package/dist/esm/timepannel.taro-29f9dd86.js +22 -0
  139. package/dist/esm/timeselect.taro-3ecce65d.js +133 -0
  140. package/dist/esm/toast.taro-0804b6b4.js +99 -137
  141. package/dist/esm/trendarrow.taro-5a7153e4.js +63 -90
  142. package/dist/esm/types/src/packages/cell/cell.taro.d.ts +0 -1
  143. package/dist/esm/types/src/packages/noticebar/noticebar.d.ts +5 -4
  144. package/dist/esm/types/src/packages/noticebar/noticebar.taro.d.ts +5 -4
  145. package/dist/esm/types/src/packages/uploader/uploader.d.ts +1 -1
  146. package/dist/esm/types/src/packages/virtuallist/virtuallist.taro.d.ts +13 -2
  147. package/dist/esm/typings-1c5f2628.js +7 -6
  148. package/dist/esm/uploader.taro-f80d76d9.js +392 -0
  149. package/dist/esm/useClientRect-bf69d7b3.js +5 -25
  150. package/dist/esm/useTouch-a2ea68c6.js +63 -93
  151. package/dist/esm/video-8a3518c5.js +59 -83
  152. package/dist/esm/virtuallist.taro-e3345ced.js +215 -0
  153. package/dist/esm/watermark.taro-cd9db98a.js +114 -0
  154. package/dist/esm/zh-CN-dfc384d0.js +128 -133
  155. package/dist/locales/base.js +1 -1
  156. package/dist/locales/en-US.js +1 -1
  157. package/dist/locales/id-ID.js +1 -1
  158. package/dist/locales/zh-CN.js +1 -1
  159. package/dist/locales/zh-TW.js +1 -1
  160. package/dist/locales/zh-UG.js +1 -1
  161. package/dist/nutui.react.es.js +634 -5664
  162. package/dist/nutui.react.umd.js +634 -5664
  163. package/dist/packages/noticebar/noticebar.scss +17 -0
  164. package/dist/packages/radio/radio.scss +3 -1
  165. package/dist/packages/row/row.scss +2 -0
  166. package/dist/packages/searchbar/searchbar.scss +1 -1
  167. package/dist/packages/tag/tag.scss +13 -5
  168. package/dist/packages/virtuallist/virtuallist.scss +24 -0
  169. package/dist/style.css +1 -1
  170. package/dist/style.es.js +1 -1
  171. package/dist/styles/temp.scss +2340 -0
  172. package/dist/styles/theme-dark.scss +7 -0
  173. package/dist/styles/theme-default.scss +11 -0
  174. package/dist/styles/variables.scss +1945 -710
  175. package/dist/types/index.d.ts +16 -23
  176. package/package.json +9 -4
  177. package/dist/esm/address.taro-1e2aea24.js +0 -615
  178. package/dist/esm/audio.taro-fddcdfc0.js +0 -228
  179. package/dist/esm/avatargroup-f7f600ff.js +0 -42
  180. package/dist/esm/calendar.taro-72974415.js +0 -83
  181. package/dist/esm/calendaritem.taro-84e889eb.js +0 -580
  182. package/dist/esm/card.taro-a530dfb3.js +0 -61
  183. package/dist/esm/cell.taro-cf50c4f2.js +0 -109
  184. package/dist/esm/configprovider-c7d60e20.js +0 -18
  185. package/dist/esm/configprovider.taro-8bdb3a28.js +0 -50
  186. package/dist/esm/countdown.taro-d7dc8681.js +0 -246
  187. package/dist/esm/datepicker.taro-7199f521.js +0 -304
  188. package/dist/esm/dialog.taro-f54cfbf0.js +0 -187
  189. package/dist/esm/ellipsis.taro-c0de6ff4.js +0 -309
  190. package/dist/esm/empty.taro-dbc66496.js +0 -81
  191. package/dist/esm/fixednav.taro-9e759320.js +0 -97
  192. package/dist/esm/form.taro-880014b1.js +0 -181
  193. package/dist/esm/formitem.taro-3695f4a7.js +0 -136
  194. package/dist/esm/grid.taro-c2cc12d6.js +0 -81
  195. package/dist/esm/griditem.taro-892153cd.js +0 -122
  196. package/dist/esm/image.taro-c30973d5.js +0 -105
  197. package/dist/esm/infiniteloading.taro-b5ddf3cc.js +0 -188
  198. package/dist/esm/input.taro-104130c1.js +0 -361
  199. package/dist/esm/menuitem.taro-216e9f7d.js +0 -193
  200. package/dist/esm/noticebar.taro-94002898.js +0 -368
  201. package/dist/esm/numberkeyboard.taro-5e8f0ddf.js +0 -245
  202. package/dist/esm/pagination.taro-9925ffab.js +0 -169
  203. package/dist/esm/picker.taro-3b5cc054.js +0 -540
  204. package/dist/esm/pulltorefresh.taro-f26a20dd.js +0 -302
  205. package/dist/esm/range.taro-c41e9b90.js +0 -469
  206. package/dist/esm/searchbar.taro-01ed4ea4.js +0 -236
  207. package/dist/esm/shortpassword.taro-3a3bf412.js +0 -190
  208. package/dist/esm/sidenavbar.taro-06026f31.js +0 -66
  209. package/dist/esm/signature.taro-17648cac.js +0 -192
  210. package/dist/esm/sticky.taro-36013e97.js +0 -16
  211. package/dist/esm/table.taro-adda6622.js +0 -139
  212. package/dist/esm/tag.taro-bd900990.js +0 -104
  213. package/dist/esm/textarea.taro-83d5fe73.js +0 -102
  214. package/dist/esm/timedetail.taro-105f5380.js +0 -68
  215. package/dist/esm/timepannel.taro-c66c63dd.js +0 -30
  216. package/dist/esm/timeselect.taro-fc7ec6ee.js +0 -172
  217. package/dist/esm/uploader.taro-a1edf38f.js +0 -529
  218. package/dist/esm/virtuallist.taro-4add61c3.js +0 -315
  219. package/dist/esm/watermark.taro-323d1cf3.js +0 -132
@@ -0,0 +1,420 @@
1
+ import React__default, { useState, useRef, useEffect, useImperativeHandle } from 'react';
2
+ import { P as Popup } from './popup.taro-cb777e09.js';
3
+ import { u as useTouch } from './useTouch-a2ea68c6.js';
4
+ import { g as getRectByTaro } from './useClientRect-bf69d7b3.js';
5
+ import { u as useConfig } from './configprovider.taro-26882dd2.js';
6
+ import { c as cn } from './bem-893ad28d.js';
7
+
8
+ const InternalPickerSlot = (props, ref) => {
9
+ const { keyIndex = 0, defaultValue, listData = [], threeDimensional = true, swipeDuration = 1000, itemShow = false, chooseItem, } = props;
10
+ const touch = useTouch();
11
+ const DEFAULT_DURATION = 200;
12
+ // 触发惯性滑动条件:
13
+ // 在手指离开屏幕时,如果和上一次 move 时的间隔小于 `MOMENTUM_TIME` 且 move
14
+ // 距离大于 `MOMENTUM_DISTANCE` 时,执行惯性滑动
15
+ const INERTIA_TIME = 300;
16
+ const INERTIA_DISTANCE = 15;
17
+ const [currIndex, setCurrIndex] = useState(1);
18
+ // let lineSpacing = 36
19
+ const lineSpacing = useRef(36);
20
+ const [touchTime, setTouchTime] = useState(0);
21
+ const [touchDeg, setTouchDeg] = useState('0deg');
22
+ const rotation = 20;
23
+ const moving = useRef(false);
24
+ let timer;
25
+ const listbox = useRef(null);
26
+ const rollerRef = useRef(null);
27
+ const pickerSlotRef = useRef(null);
28
+ const [startTime, setStartTime] = useState(0);
29
+ const [startY, setStartY] = useState(0);
30
+ const transformY = useRef(0);
31
+ const [scrollDistance, setScrollDistance] = useState(0);
32
+ const isHidden = (index) => {
33
+ if (index >= currIndex + 8 || index <= currIndex - 8) {
34
+ return true;
35
+ }
36
+ return false;
37
+ };
38
+ const setTransform = (translateY = 0, type, time = DEFAULT_DURATION, deg) => {
39
+ let nTime = time;
40
+ if (type !== 'end') {
41
+ nTime = 0;
42
+ }
43
+ setTouchTime(nTime);
44
+ setTouchDeg(deg);
45
+ setScrollDistance(translateY);
46
+ };
47
+ const setMove = (move, type, time) => {
48
+ let updateMove = move + transformY.current;
49
+ if (type === 'end') {
50
+ // 限定滚动距离
51
+ if (updateMove > 0) {
52
+ updateMove = 0;
53
+ }
54
+ if (updateMove < -(listData.length - 1) * lineSpacing.current) {
55
+ updateMove = -(listData.length - 1) * lineSpacing.current;
56
+ }
57
+ // 设置滚动距离为lineSpacing的倍数值
58
+ const endMove = Math.round(updateMove / lineSpacing.current) * lineSpacing.current;
59
+ const deg = `${(Math.abs(Math.round(endMove / lineSpacing.current)) + 1) * rotation}deg`;
60
+ setTransform(endMove, type, time, deg);
61
+ setCurrIndex(Math.abs(Math.round(endMove / lineSpacing.current)) + 1);
62
+ }
63
+ else {
64
+ let deg = 0;
65
+ const currentDeg = (-updateMove / lineSpacing.current + 1) * rotation;
66
+ // picker 滚动的最大角度
67
+ const maxDeg = (listData.length + 1) * rotation;
68
+ const minDeg = 0;
69
+ deg = Math.min(Math.max(currentDeg, minDeg), maxDeg);
70
+ if (minDeg < deg && deg < maxDeg) {
71
+ setTransform(updateMove, '', undefined, `${deg}deg`);
72
+ setCurrIndex(Math.abs(Math.round(updateMove / lineSpacing.current)) + 1);
73
+ }
74
+ }
75
+ };
76
+ const setChooseValue = (move) => {
77
+ chooseItem &&
78
+ chooseItem(listData?.[Math.round(-move / lineSpacing.current)], keyIndex);
79
+ };
80
+ // 开始滚动
81
+ const touchStart = (event) => {
82
+ touch.start(event);
83
+ setStartY(touch.deltaY);
84
+ setStartTime(Date.now());
85
+ transformY.current = scrollDistance;
86
+ };
87
+ const touchMove = (event) => {
88
+ touch.move(event);
89
+ if (touch.isVertical) {
90
+ moving.current = true;
91
+ preventDefault(event, true);
92
+ }
93
+ const move = touch.deltaY - startY;
94
+ setMove(move);
95
+ };
96
+ const touchEnd = (event) => {
97
+ if (!moving.current)
98
+ return;
99
+ const move = touch.deltaY - startY;
100
+ const moveTime = Date.now() - startTime;
101
+ // 区分是否为惯性滚动
102
+ if (moveTime <= INERTIA_TIME && Math.abs(move) > INERTIA_DISTANCE) {
103
+ // 惯性滚动
104
+ const distance = momentum(move, moveTime);
105
+ setMove(distance, 'end', +swipeDuration);
106
+ }
107
+ else {
108
+ setMove(move, 'end');
109
+ }
110
+ setTimeout(() => {
111
+ touch.reset();
112
+ }, 0);
113
+ };
114
+ // 惯性滚动 距离
115
+ const momentum = (distance, duration) => {
116
+ let nDistance = distance;
117
+ // 惯性滚动的速度
118
+ const speed = Math.abs(nDistance / duration);
119
+ // 惯性滚动的距离
120
+ nDistance = (speed / 0.003) * (nDistance < 0 ? -1 : 1);
121
+ return nDistance;
122
+ };
123
+ const modifyStatus = (type, val) => {
124
+ const value = val || defaultValue;
125
+ let index = -1;
126
+ if (value) {
127
+ listData.some((item, idx) => {
128
+ if (item.value === value) {
129
+ index = idx;
130
+ return true;
131
+ }
132
+ return false;
133
+ });
134
+ }
135
+ else {
136
+ listData.forEach((item, i) => {
137
+ if (item.value === defaultValue) {
138
+ index = i;
139
+ }
140
+ });
141
+ }
142
+ setCurrIndex(index === -1 ? 1 : index + 1);
143
+ const move = index === -1 ? 0 : index * lineSpacing.current;
144
+ type && setChooseValue(-move);
145
+ setMove(-move);
146
+ };
147
+ // 惯性滚动结束
148
+ const stopMomentum = () => {
149
+ moving.current = false;
150
+ setTouchTime(0);
151
+ setChooseValue(scrollDistance);
152
+ };
153
+ // 阻止默认事件
154
+ const preventDefault = (event, isStopPropagation) => {
155
+ /* istanbul ignore else */
156
+ if (typeof event.cancelable !== 'boolean' || event.cancelable) {
157
+ event.preventDefault();
158
+ }
159
+ if (isStopPropagation) {
160
+ event.stopPropagation();
161
+ }
162
+ };
163
+ const getReference = async () => {
164
+ const refe = await getRectByTaro(listbox?.current);
165
+ lineSpacing.current = refe.height ? refe.height : 36;
166
+ modifyStatus(true);
167
+ };
168
+ const touchRollerStyle = () => {
169
+ return {
170
+ transition: `transform ${touchTime}ms cubic-bezier(0.17, 0.89, 0.45, 1)`,
171
+ transform: `rotate3d(1, 0, 0, ${touchDeg})`,
172
+ };
173
+ };
174
+ const touchTileStyle = () => {
175
+ return {
176
+ transition: `transform ${touchTime}ms cubic-bezier(0.17, 0.89, 0.45, 1)`,
177
+ transform: `translate3d(0, ${scrollDistance}px, 0)`,
178
+ };
179
+ };
180
+ useEffect(() => {
181
+ setScrollDistance(0);
182
+ transformY.current = 0;
183
+ modifyStatus(false);
184
+ return () => {
185
+ clearTimeout(timer);
186
+ };
187
+ }, [listData]);
188
+ useEffect(() => {
189
+ if (itemShow) {
190
+ setTimeout(() => {
191
+ getReference();
192
+ }, 200);
193
+ }
194
+ }, [itemShow]);
195
+ useImperativeHandle(ref, () => ({
196
+ stopMomentum,
197
+ moving: moving.current,
198
+ }));
199
+ return (React__default.createElement("div", { className: "nut-picker-list", ref: pickerSlotRef, onTouchStart: touchStart, onTouchMove: touchMove, onTouchEnd: touchEnd },
200
+ React__default.createElement("div", { className: "nut-picker-roller", ref: rollerRef, style: threeDimensional ? touchRollerStyle() : touchTileStyle(), onTransitionEnd: stopMomentum },
201
+ threeDimensional &&
202
+ listData.map((item, index) => {
203
+ return (React__default.createElement("div", { className: `nut-picker-roller-item ${isHidden(index + 1) && 'nut-picker-roller-item-hidden'}`, style: {
204
+ transform: `rotate3d(1, 0, 0, ${-rotation * (index + 1)}deg) translate3d(0px, 0px, 104px)`,
205
+ height: `${lineSpacing.current}px`,
206
+ lineHeight: `${lineSpacing.current}px`,
207
+ }, key: item.value ? item.value : index },
208
+ React__default.createElement(React__default.Fragment, null, item.text ? item.text : item)));
209
+ }),
210
+ !threeDimensional &&
211
+ listData.map((item, index) => {
212
+ return (React__default.createElement("div", { className: "nut-picker-roller-item-tile", key: item.value ? item.value : index, style: {
213
+ height: `${lineSpacing.current}px`,
214
+ lineHeight: `${lineSpacing.current}px`,
215
+ } },
216
+ React__default.createElement(React__default.Fragment, null, item.text ? item.text : item)));
217
+ })),
218
+ React__default.createElement("div", { className: "nut-picker-mask" }),
219
+ React__default.createElement("div", { className: "nut-picker-indicator", ref: listbox })));
220
+ };
221
+ const PickerSlot = React__default.forwardRef(InternalPickerSlot);
222
+
223
+ function useRefs() {
224
+ const refs = React__default.useRef([]);
225
+ const setRefs = React__default.useCallback((index) => (el) => {
226
+ if (el)
227
+ refs.current[index] = el;
228
+ }, []);
229
+ const reset = React__default.useCallback(() => {
230
+ refs.current = [];
231
+ }, []);
232
+ return [refs.current, setRefs, reset];
233
+ }
234
+
235
+ const InternalPicker = (props, ref) => {
236
+ const { locale } = useConfig();
237
+ const { isVisible, title, listData = [], defaultValueData, onConfirm, onClose, onCloseUpdate, onChange, className, style, threeDimensional, swipeDuration, ...rest } = props;
238
+ const [chooseValueData, setchooseValueData] = useState([]); // 选择的数据的 value 值, 每一条数据的 value 值
239
+ const [columnIndex, setcolumnIndex] = useState(0); // 选中列
240
+ const pickerRef = useRef(null);
241
+ const [refs, setRefs] = useRefs();
242
+ const [columnsList, setColumnsList] = useState([]); // 格式化后每一列的数据
243
+ const b = cn('picker');
244
+ const isConfirmEvent = useRef(false);
245
+ // 默认值修改
246
+ useEffect(() => {
247
+ if (defaultValueData &&
248
+ defaultValueData.length !== 0 &&
249
+ defaultValueData.toString() !== chooseValueData.toString()) {
250
+ const data = [...defaultValueData];
251
+ setchooseValueData(data);
252
+ setColumnsList(normalListData());
253
+ }
254
+ }, [defaultValueData]);
255
+ // 选中值进行修改
256
+ useEffect(() => {
257
+ onChange && onChange(columnIndex, chooseValueData, selectedOptions());
258
+ if (isConfirmEvent.current) {
259
+ isConfirmEvent.current = false;
260
+ onConfirm && onConfirm(chooseValueData, selectedOptions());
261
+ }
262
+ }, [chooseValueData]);
263
+ // 列表格式修改
264
+ useEffect(() => {
265
+ init();
266
+ }, [listData]);
267
+ const closeActionSheet = () => {
268
+ onClose && onClose(chooseValueData, selectedOptions());
269
+ onCloseUpdate &&
270
+ onCloseUpdate(chooseValueData, selectedOptions(), pickerRef);
271
+ };
272
+ // 点击确定
273
+ const confirm = () => {
274
+ let movings = false;
275
+ refs.forEach((_ref) => {
276
+ if (_ref.moving)
277
+ movings = true;
278
+ _ref.stopMomentum();
279
+ });
280
+ if (movings) {
281
+ isConfirmEvent.current = true;
282
+ }
283
+ else {
284
+ onConfirm && onConfirm(chooseValueData, selectedOptions());
285
+ }
286
+ onClose && onClose(chooseValueData, selectedOptions());
287
+ setTimeout(() => {
288
+ isConfirmEvent.current = false;
289
+ }, 0);
290
+ };
291
+ const selectedOptions = () => {
292
+ const optins = [];
293
+ columnsList.map((column, index) => {
294
+ let currOptions = [];
295
+ currOptions = column.filter((item) => item.value === chooseValueData[index]);
296
+ if (currOptions[0]) {
297
+ optins.push(currOptions[0]);
298
+ }
299
+ else {
300
+ column[0] && optins.push(column[0]);
301
+ }
302
+ return column;
303
+ });
304
+ return optins;
305
+ };
306
+ // 选择每一列的数据
307
+ const chooseItem = (option, columnIndex) => {
308
+ if (option && Object.keys(option).length) {
309
+ // 是否移动后是否与之前有差异
310
+ if (chooseValueData[columnIndex] !== option.value) {
311
+ if (columnsType() === 'cascade') {
312
+ chooseValueData[columnIndex] = option.value ? option.value : '';
313
+ setchooseValueData([...chooseValueData]);
314
+ let index = columnIndex;
315
+ let cursor = option;
316
+ while (cursor && cursor.children && cursor.children[0]) {
317
+ chooseValueData[index + 1] = cursor.children[0].value;
318
+ setchooseValueData([...chooseValueData]);
319
+ index++;
320
+ const cc = cursor.children[0];
321
+ cursor = cc;
322
+ }
323
+ // 当前改变列的下一列 children 值为空
324
+ if (cursor && cursor.children) {
325
+ chooseValueData[index + 1] = '';
326
+ setchooseValueData([...chooseValueData]);
327
+ }
328
+ setColumnsList(normalListData());
329
+ }
330
+ else {
331
+ setchooseValueData((data) => {
332
+ const cdata = [...data];
333
+ cdata[columnIndex] = Object.prototype.hasOwnProperty.call(option, 'value')
334
+ ? option.value
335
+ : '';
336
+ return cdata;
337
+ });
338
+ }
339
+ setcolumnIndex(columnIndex);
340
+ }
341
+ }
342
+ };
343
+ // 传入的数据格式化
344
+ const normalListData = () => {
345
+ const type = columnsType();
346
+ switch (type) {
347
+ case 'multiple':
348
+ return listData;
349
+ case 'cascade':
350
+ // 级联数据处理
351
+ return formatCascade(listData, chooseValueData);
352
+ default:
353
+ return [listData];
354
+ }
355
+ };
356
+ // 每一列的类型
357
+ const columnsType = () => {
358
+ const firstColumn = listData[0];
359
+ if (firstColumn) {
360
+ if (Array.isArray(firstColumn)) {
361
+ return 'multiple';
362
+ }
363
+ if ('children' in firstColumn) {
364
+ return 'cascade';
365
+ }
366
+ }
367
+ return 'single';
368
+ };
369
+ // 级联数据格式化
370
+ const formatCascade = (columns, defaultValues) => {
371
+ const formatted = [];
372
+ let cursor = {
373
+ text: '',
374
+ value: '',
375
+ children: columns,
376
+ };
377
+ let columnIndex = 0;
378
+ while (cursor && cursor.children) {
379
+ const options = cursor.children;
380
+ const value = defaultValues[columnIndex];
381
+ let index = options.findIndex((columnItem) => columnItem.value === value);
382
+ if (index === -1)
383
+ index = 0;
384
+ cursor = cursor.children[index];
385
+ columnIndex++;
386
+ formatted.push(options);
387
+ }
388
+ return formatted;
389
+ };
390
+ const init = () => {
391
+ const data = [];
392
+ const normalData = normalListData();
393
+ setColumnsList(normalData);
394
+ normalData.length > 0 &&
395
+ normalData.map((item) => {
396
+ item[0] && data.push(item[0].value);
397
+ return item;
398
+ });
399
+ if (!defaultValueData && chooseValueData.length === 0) {
400
+ setchooseValueData([...data]);
401
+ }
402
+ };
403
+ const renderToolbar = () => {
404
+ return (React__default.createElement("div", { className: b('control') },
405
+ React__default.createElement("span", { className: b('cancel-btn'), onClick: () => closeActionSheet() }, locale.cancel),
406
+ React__default.createElement("div", { className: b('title') }, title || ''),
407
+ React__default.createElement("span", { className: b('confirm-btn'), onClick: confirm }, locale.confirm)));
408
+ };
409
+ return (React__default.createElement(Popup, { visible: isVisible, position: "bottom", onClose: () => {
410
+ closeActionSheet();
411
+ } },
412
+ React__default.createElement("div", { className: `${b()} ${className || ''}`, style: style, ...rest },
413
+ renderToolbar(),
414
+ React__default.createElement("div", { className: b('panel'), ref: pickerRef }, columnsList?.map((item, index) => {
415
+ return (React__default.createElement(PickerSlot, { ref: setRefs(index), defaultValue: chooseValueData?.[index], listData: item, threeDimensional: threeDimensional, chooseItem: (value, index) => chooseItem(value, index), swipeDuration: swipeDuration, key: index, keyIndex: index, itemShow: isVisible }));
416
+ })))));
417
+ };
418
+ const Picker = React__default.forwardRef(InternalPicker);
419
+
420
+ export { Picker as P };