@tarojs/components-react 4.1.4-beta.20 → 4.1.4-beta.21

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 (35) hide show
  1. package/dist/components/list/ListItem.js +18 -0
  2. package/dist/components/list/ListItem.js.map +1 -0
  3. package/dist/components/list/StickyHeader.js +18 -0
  4. package/dist/components/list/StickyHeader.js.map +1 -0
  5. package/dist/components/list/StickySection.js +18 -0
  6. package/dist/components/list/StickySection.js.map +1 -0
  7. package/dist/components/list/index.js +348 -0
  8. package/dist/components/list/index.js.map +1 -0
  9. package/dist/components/list/style/index.scss.js +4 -0
  10. package/dist/components/list/style/index.scss.js.map +1 -0
  11. package/dist/components/picker/index.js +21 -21
  12. package/dist/components/picker/index.js.map +1 -1
  13. package/dist/components/scroll-view/index.js +7 -2
  14. package/dist/components/scroll-view/index.js.map +1 -1
  15. package/dist/index.css +1 -1
  16. package/dist/index.js +5 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/solid/components/list/ListItem.js +21 -0
  19. package/dist/solid/components/list/ListItem.js.map +1 -0
  20. package/dist/solid/components/list/StickyHeader.js +21 -0
  21. package/dist/solid/components/list/StickyHeader.js.map +1 -0
  22. package/dist/solid/components/list/StickySection.js +21 -0
  23. package/dist/solid/components/list/StickySection.js.map +1 -0
  24. package/dist/solid/components/list/index.js +355 -0
  25. package/dist/solid/components/list/index.js.map +1 -0
  26. package/dist/solid/components/list/style/index.scss.js +4 -0
  27. package/dist/solid/components/list/style/index.scss.js.map +1 -0
  28. package/dist/solid/components/picker/index.js +21 -21
  29. package/dist/solid/components/picker/index.js.map +1 -1
  30. package/dist/solid/components/scroll-view/index.js +7 -2
  31. package/dist/solid/components/scroll-view/index.js.map +1 -1
  32. package/dist/solid/index.css +1 -1
  33. package/dist/solid/index.js +5 -1
  34. package/dist/solid/index.js.map +1 -1
  35. package/package.json +6 -6
@@ -0,0 +1,18 @@
1
+ import 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ const ListItem = _ref => {
5
+ let {
6
+ children,
7
+ className,
8
+ style
9
+ } = _ref;
10
+ return /*#__PURE__*/jsx("div", {
11
+ className: className,
12
+ style: style,
13
+ children: children
14
+ });
15
+ };
16
+
17
+ export { ListItem as default };
18
+ //# sourceMappingURL=ListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.js","sources":["../../../src/components/list/ListItem.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface ListItemProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nconst ListItem: React.FC<ListItemProps> = ({ children, className, style }) => {\n return <div className={className} style={style}>{children}</div>\n}\n\nexport default ListItem\n"],"names":["ListItem","_ref","children","className","style","_jsx"],"mappings":";;;AAQMA,MAAAA,QAAQ,GAA4BC,IAAA,IAAmC;EAAA,IAAlC;IAAEC,QAAQ;IAAEC,SAAS;AAAEC,IAAAA;AAAO,GAAA,GAAAH,IAAA;AACvE,EAAA,oBAAOI,GAAA,CAAA,KAAA,EAAA;AAAKF,IAAAA,SAAS,EAAEA,SAAU;AAACC,IAAAA,KAAK,EAAEA,KAAM;AAAAF,IAAAA,QAAA,EAAEA;AAAQ,GAAM,CAAC;AAClE;;;;"}
@@ -0,0 +1,18 @@
1
+ import 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ const StickyHeader = _ref => {
5
+ let {
6
+ children,
7
+ className,
8
+ style
9
+ } = _ref;
10
+ return /*#__PURE__*/jsx("div", {
11
+ className: className,
12
+ style: style,
13
+ children: children
14
+ });
15
+ };
16
+
17
+ export { StickyHeader as default };
18
+ //# sourceMappingURL=StickyHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StickyHeader.js","sources":["../../../src/components/list/StickyHeader.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface StickyHeaderProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nconst StickyHeader: React.FC<StickyHeaderProps> = ({ children, className, style }) => {\n return <div className={className} style={style}>{children}</div>\n}\n\nexport default StickyHeader\n"],"names":["StickyHeader","_ref","children","className","style","_jsx"],"mappings":";;;AAQMA,MAAAA,YAAY,GAAgCC,IAAA,IAAmC;EAAA,IAAlC;IAAEC,QAAQ;IAAEC,SAAS;AAAEC,IAAAA;AAAO,GAAA,GAAAH,IAAA;AAC/E,EAAA,oBAAOI,GAAA,CAAA,KAAA,EAAA;AAAKF,IAAAA,SAAS,EAAEA,SAAU;AAACC,IAAAA,KAAK,EAAEA,KAAM;AAAAF,IAAAA,QAAA,EAAEA;AAAQ,GAAM,CAAC;AAClE;;;;"}
@@ -0,0 +1,18 @@
1
+ import 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ const StickySection = _ref => {
5
+ let {
6
+ children,
7
+ className,
8
+ style
9
+ } = _ref;
10
+ return /*#__PURE__*/jsx("div", {
11
+ className: className,
12
+ style: style,
13
+ children: children
14
+ });
15
+ };
16
+
17
+ export { StickySection as default };
18
+ //# sourceMappingURL=StickySection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StickySection.js","sources":["../../../src/components/list/StickySection.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface StickySectionProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nconst StickySection: React.FC<StickySectionProps> = ({ children, className, style }) => {\n return <div className={className} style={style}>{children}</div>\n}\n\nexport default StickySection\n"],"names":["StickySection","_ref","children","className","style","_jsx"],"mappings":";;;AAQMA,MAAAA,aAAa,GAAiCC,IAAA,IAAmC;EAAA,IAAlC;IAAEC,QAAQ;IAAEC,SAAS;AAAEC,IAAAA;AAAO,GAAA,GAAAH,IAAA;AACjF,EAAA,oBAAOI,GAAA,CAAA,KAAA,EAAA;AAAKF,IAAAA,SAAS,EAAEA,SAAU;AAACC,IAAAA,KAAK,EAAEA,KAAM;AAAAF,IAAAA,QAAA,EAAEA;AAAQ,GAAM,CAAC;AAClE;;;;"}
@@ -0,0 +1,348 @@
1
+ import './style/index.scss.js';
2
+ import { View, ScrollView } from '@tarojs/components';
3
+ import React__default from 'react';
4
+ import ListItem from './ListItem.js';
5
+ import StickyHeader from './StickyHeader.js';
6
+ import StickySection from './StickySection.js';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ function accumulate(arr) {
10
+ const result = [0];
11
+ for (let i = 0; i < arr.length; i++) {
12
+ result[i + 1] = result[i] + arr[i];
13
+ }
14
+ return result;
15
+ }
16
+ // 检测抖动
17
+ function isShaking(diffList) {
18
+ if (diffList.length < 3) return false;
19
+ // 检查是否有连续的正负交替
20
+ const signs = diffList.map(diff => Math.sign(diff));
21
+ let alternations = 0;
22
+ for (let i = 1; i < signs.length; i++) {
23
+ if (signs[i] !== 0 && signs[i] !== signs[i - 1]) {
24
+ alternations++;
25
+ }
26
+ }
27
+ // 如果交替次数过多,认为是抖动
28
+ return alternations >= 2;
29
+ }
30
+ const List = props => {
31
+ const isH5 = process.env.TARO_ENV === 'h5';
32
+ const {
33
+ stickyHeader = false,
34
+ space = 0,
35
+ height = 400,
36
+ width = '100%',
37
+ showScrollbar = true,
38
+ scrollTop: controlledScrollTop,
39
+ onScroll,
40
+ onScrollToUpper,
41
+ onScrollToLower,
42
+ upperThresholdCount = 0,
43
+ lowerThresholdCount = 0,
44
+ cacheCount = 2,
45
+ style,
46
+ children,
47
+ layout = 'vertical'
48
+ } = props;
49
+ const isHorizontal = layout === 'horizontal';
50
+ const DEFAULT_ITEM_WIDTH = 120;
51
+ const DEFAULT_ITEM_HEIGHT = 40;
52
+ // 滚动状态管理
53
+ const containerRef = React__default.useRef(null);
54
+ // 渲染偏移量 - 用于计算应该渲染哪些元素
55
+ const [renderOffset, setRenderOffset] = React__default.useState(controlledScrollTop !== null && controlledScrollTop !== void 0 ? controlledScrollTop : 0);
56
+ // 滚动视图偏移量 - 只在滚动结束或明确请求时更新到ScrollView
57
+ const [scrollViewOffset, setScrollViewOffset] = React__default.useState(controlledScrollTop !== null && controlledScrollTop !== void 0 ? controlledScrollTop : 0);
58
+ const [containerLength] = React__default.useState(typeof (isHorizontal ? width : height) === 'number' ? isHorizontal ? width : height : 400);
59
+ // 滚动追踪相关refs
60
+ const isScrollingRef = React__default.useRef(false);
61
+ const lastScrollTopRef = React__default.useRef(controlledScrollTop !== null && controlledScrollTop !== void 0 ? controlledScrollTop : 0);
62
+ const scrollDiffListRef = React__default.useRef([0, 0, 0]);
63
+ const scrollTimeoutRef = React__default.useRef(null);
64
+ // 解析分组结构,只支持 StickySection 和 ListItem 作为直接子组件
65
+ const sections = React__default.useMemo(() => {
66
+ const result = [];
67
+ const defaultItems = [];
68
+ React__default.Children.forEach(children, (child, idx) => {
69
+ if (/*#__PURE__*/React__default.isValidElement(child) && child.type === StickySection) {
70
+ // 分组模式
71
+ const sectionProps = child.props;
72
+ let header = null;
73
+ const items = [];
74
+ React__default.Children.forEach(sectionProps.children, subChild => {
75
+ if (/*#__PURE__*/React__default.isValidElement(subChild) && subChild.type === StickyHeader) header = subChild;else if (/*#__PURE__*/React__default.isValidElement(subChild) && subChild.type === ListItem) items.push(subChild);
76
+ });
77
+ result.push({
78
+ header,
79
+ items,
80
+ key: child.key || String(idx)
81
+ });
82
+ } else if (/*#__PURE__*/React__default.isValidElement(child) && child.type === ListItem) {
83
+ // 普通 ListItem
84
+ defaultItems.push(child);
85
+ }
86
+ });
87
+ if (defaultItems.length > 0) {
88
+ result.push({
89
+ header: null,
90
+ items: defaultItems,
91
+ key: 'default'
92
+ });
93
+ }
94
+ return result;
95
+ }, [children]);
96
+ // 工具:获取 header 尺寸,确保所有 header 相关逻辑一致
97
+ const getHeaderSize = () => {
98
+ if (isHorizontal) {
99
+ if (typeof props.headerWidth === 'number') return props.headerWidth;
100
+ if (typeof props.itemWidth === 'number') return props.itemWidth;
101
+ if (typeof props.itemSize === 'number') return props.itemSize;
102
+ if (typeof props.itemSize === 'function') return props.itemSize(0, props.itemData) || DEFAULT_ITEM_WIDTH;
103
+ return DEFAULT_ITEM_WIDTH;
104
+ } else {
105
+ if (typeof props.headerHeight === 'number') return props.headerHeight;
106
+ if (typeof props.itemHeight === 'number') return props.itemHeight;
107
+ if (typeof props.itemSize === 'number') return props.itemSize;
108
+ if (typeof props.itemSize === 'function') return props.itemSize(0, props.itemData) || DEFAULT_ITEM_HEIGHT;
109
+ return DEFAULT_ITEM_HEIGHT;
110
+ }
111
+ };
112
+ // 工具:获取 item 尺寸,支持函数/props/默认值
113
+ const getItemSize = index => {
114
+ if (isHorizontal) {
115
+ if (typeof props.itemWidth === 'number') return props.itemWidth;
116
+ if (typeof props.itemSize === 'number') return props.itemSize;
117
+ if (typeof props.itemSize === 'function') return props.itemSize(index, props.itemData) || DEFAULT_ITEM_WIDTH;
118
+ return DEFAULT_ITEM_WIDTH;
119
+ } else {
120
+ if (typeof props.itemHeight === 'number') return props.itemHeight;
121
+ if (typeof props.itemSize === 'number') return props.itemSize;
122
+ if (typeof props.itemSize === 'function') return props.itemSize(index, props.itemData) || DEFAULT_ITEM_HEIGHT;
123
+ return DEFAULT_ITEM_HEIGHT;
124
+ }
125
+ };
126
+ // 计算分组累积高度/宽度
127
+ const sectionOffsets = React__default.useMemo(() => {
128
+ const offsets = [0];
129
+ sections.forEach(section => {
130
+ const headerSize = getHeaderSize();
131
+ const itemSizes = section.items.map((_, i) => getItemSize(i));
132
+ const groupSize = (section.header ? headerSize : 0) + itemSizes.reduce((a, b) => a + b, 0) + Math.max(0, section.items.length) * space;
133
+ offsets.push(offsets[offsets.length - 1] + groupSize);
134
+ });
135
+ return offsets;
136
+ }, [sections, space, isHorizontal, props.headerHeight, props.headerWidth, props.itemHeight, props.itemWidth, props.itemSize, props.itemData]);
137
+ // 外层虚拟滚动:可见分组
138
+ const [startSection, endSection] = React__default.useMemo(() => {
139
+ let start = 0;
140
+ let end = sections.length - 1;
141
+ for (let i = 0; i < sections.length; i++) {
142
+ if (sectionOffsets[i + 1] > renderOffset) {
143
+ start = Math.max(0, i - cacheCount);
144
+ break;
145
+ }
146
+ }
147
+ for (let i = start; i < sections.length; i++) {
148
+ if (sectionOffsets[i] >= renderOffset + containerLength) {
149
+ end = Math.min(sections.length - 1, i + cacheCount);
150
+ break;
151
+ }
152
+ }
153
+ return [start, end];
154
+ }, [renderOffset, containerLength, sectionOffsets, sections.length, cacheCount]);
155
+ // 触顶/触底事件
156
+ React__default.useEffect(() => {
157
+ if (onScrollToUpper && renderOffset <= (upperThresholdCount > 0 ? sectionOffsets[upperThresholdCount] : 0)) {
158
+ onScrollToUpper();
159
+ }
160
+ if (onScrollToLower && renderOffset + containerLength >= sectionOffsets[sectionOffsets.length - 1] - (lowerThresholdCount > 0 ? sectionOffsets[sectionOffsets.length - 1] - sectionOffsets[sections.length - lowerThresholdCount] : 0)) {
161
+ onScrollToLower();
162
+ }
163
+ }, [renderOffset, containerLength, sectionOffsets, sections.length, upperThresholdCount, lowerThresholdCount, onScrollToUpper, onScrollToLower]);
164
+ // 处理渲染偏移量更新
165
+ const updateRenderOffset = React__default.useCallback(newOffset => {
166
+ lastScrollTopRef.current = newOffset;
167
+ isScrollingRef.current = true;
168
+ if (scrollTimeoutRef.current) {
169
+ clearTimeout(scrollTimeoutRef.current);
170
+ }
171
+ setRenderOffset(newOffset); // 立即更新渲染偏移量
172
+ scrollTimeoutRef.current = setTimeout(() => {
173
+ isScrollingRef.current = false;
174
+ setScrollViewOffset(newOffset); // 滚动结束后,同步滚动视图偏移量
175
+ }, 200);
176
+ }, []);
177
+ // 智能滚动处理函数
178
+ const handleScroll = React__default.useCallback(e => {
179
+ const newOffset = isHorizontal ? e.detail.scrollLeft : e.detail.scrollTop;
180
+ const diff = newOffset - lastScrollTopRef.current;
181
+ scrollDiffListRef.current.shift();
182
+ scrollDiffListRef.current.push(diff);
183
+ // 只保留抖动检测,移除方向检测
184
+ if (isScrollingRef.current && isShaking(scrollDiffListRef.current)) {
185
+ return;
186
+ }
187
+ updateRenderOffset(newOffset); // 直接更新渲染偏移量
188
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll({
189
+ scrollTop: isHorizontal ? 0 : newOffset,
190
+ scrollLeft: isHorizontal ? newOffset : 0
191
+ });
192
+ }, [isHorizontal, onScroll, updateRenderOffset, containerLength]);
193
+ // 初始化后的延迟同步 - 确保ScrollView正确设置初始位置
194
+ React__default.useEffect(() => {
195
+ if (typeof controlledScrollTop === 'number') {
196
+ setScrollViewOffset(controlledScrollTop);
197
+ lastScrollTopRef.current = controlledScrollTop;
198
+ }
199
+ }, [controlledScrollTop]);
200
+ // 清理定时器
201
+ React__default.useEffect(() => {
202
+ return () => {
203
+ if (scrollTimeoutRef.current) {
204
+ clearTimeout(scrollTimeoutRef.current);
205
+ }
206
+ };
207
+ }, []);
208
+ // 容器样式
209
+ const containerStyle = Object.assign({
210
+ height: isHorizontal ? width : height,
211
+ width: isHorizontal ? height : width
212
+ }, style);
213
+ // 修改ScrollView组件的props,添加data-testid属性
214
+ // ScrollView 属性
215
+ const scrollViewProps = {
216
+ scrollY: !isHorizontal,
217
+ scrollX: isHorizontal,
218
+ style: containerStyle,
219
+ enhanced: true,
220
+ showScrollbar: showScrollbar,
221
+ onScroll: handleScroll,
222
+ onScrollToUpper,
223
+ onScrollToLower,
224
+ 'data-testid': 'taro-list-container'
225
+ };
226
+ // 设置ScrollView的滚动位置
227
+ if (isHorizontal) {
228
+ scrollViewProps.scrollLeft = scrollViewOffset;
229
+ } else {
230
+ scrollViewProps.scrollTop = scrollViewOffset;
231
+ }
232
+ // H5上额外使用DOM直接操作确保滚动位置正确
233
+ if (isH5) {
234
+ React__default.useEffect(() => {
235
+ if (containerRef.current && typeof scrollViewOffset === 'number') {
236
+ if (isHorizontal) {
237
+ containerRef.current.scrollLeft = scrollViewOffset;
238
+ } else {
239
+ containerRef.current.scrollTop = scrollViewOffset;
240
+ }
241
+ }
242
+ }, [scrollViewOffset, isHorizontal]);
243
+ }
244
+ // 总高度/宽度
245
+ const totalLength = sectionOffsets[sectionOffsets.length - 1];
246
+ // 吸顶/吸左 header
247
+ const stickyHeaderNode = React__default.useMemo(() => {
248
+ if (!stickyHeader) return null;
249
+ for (let i = 0; i < sections.length; i++) {
250
+ if (sectionOffsets[i] <= renderOffset && renderOffset < sectionOffsets[i + 1]) {
251
+ const section = sections[i];
252
+ if (section.header) {
253
+ const headerSize = getHeaderSize();
254
+ return /*#__PURE__*/jsx(View, {
255
+ className: "taro-list-sticky-header",
256
+ style: isHorizontal ? {
257
+ width: headerSize
258
+ } : {
259
+ height: headerSize
260
+ },
261
+ children: section.header
262
+ });
263
+ }
264
+ }
265
+ }
266
+ return null;
267
+ }, [stickyHeader, renderOffset, sectionOffsets, sections, isHorizontal, props.headerHeight, props.headerWidth, props.itemHeight, props.itemWidth, props.itemSize, props.itemData]);
268
+ // 渲染分组+item双层虚拟滚动
269
+ const renderSections = () => {
270
+ const nodes = [];
271
+ let offset = sectionOffsets[startSection];
272
+ for (let s = startSection; s <= endSection; s++) {
273
+ const section = sections[s];
274
+ const headerSize = getHeaderSize();
275
+ const itemSizes = section.items.map((_, i) => getItemSize(i));
276
+ // header
277
+ if (section.header) {
278
+ nodes.push(/*#__PURE__*/React__default.createElement('div', {
279
+ key: section.key + '-header' + '-' + layout,
280
+ className: isHorizontal ? 'taro-list-section-header horizontal' : 'taro-list-section-header',
281
+ style: isHorizontal ? {
282
+ left: offset,
283
+ width: headerSize
284
+ } : {
285
+ top: offset,
286
+ height: headerSize
287
+ }
288
+ }, section.header));
289
+ offset += headerSize;
290
+ }
291
+ // item offsets
292
+ const itemOffsets = accumulate(itemSizes.map(size => size + space));
293
+ // 内层虚拟滚动:可见item区间
294
+ let startItem = 0;
295
+ let endItem = section.items.length - 1;
296
+ for (let i = 0; i < section.items.length; i++) {
297
+ if (offset + itemOffsets[i + 1] > renderOffset) {
298
+ startItem = Math.max(0, i - cacheCount);
299
+ break;
300
+ }
301
+ }
302
+ for (let i = startItem; i < section.items.length; i++) {
303
+ if (offset + itemOffsets[i] >= renderOffset + containerLength) {
304
+ endItem = Math.min(section.items.length - 1, i + cacheCount);
305
+ break;
306
+ }
307
+ }
308
+ // 渲染可见item
309
+ for (let i = startItem; i <= endItem; i++) {
310
+ nodes.push(/*#__PURE__*/React__default.createElement('div', {
311
+ key: section.key + '-item-' + i + '-' + layout,
312
+ className: isHorizontal ? 'taro-list-section-item horizontal' : 'taro-list-section-item',
313
+ style: isHorizontal ? {
314
+ left: offset + itemOffsets[i],
315
+ width: itemSizes[i],
316
+ marginRight: space
317
+ } : {
318
+ top: offset + itemOffsets[i],
319
+ height: itemSizes[i],
320
+ marginBottom: space
321
+ }
322
+ }, section.items[i]));
323
+ }
324
+ offset += itemOffsets[itemOffsets.length - 1];
325
+ }
326
+ return nodes;
327
+ };
328
+ return /*#__PURE__*/jsx(ScrollView, {
329
+ ref: containerRef,
330
+ className: "taro-list-container",
331
+ ...scrollViewProps,
332
+ children: /*#__PURE__*/jsxs(View, {
333
+ style: isHorizontal ? {
334
+ width: totalLength,
335
+ position: 'relative',
336
+ height: '100%'
337
+ } : {
338
+ height: totalLength,
339
+ position: 'relative',
340
+ width: '100%'
341
+ },
342
+ children: [stickyHeaderNode, renderSections()]
343
+ })
344
+ });
345
+ };
346
+
347
+ export { accumulate, List as default, isShaking };
348
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/list/index.tsx"],"sourcesContent":["import './style/index.scss'\n\nimport { ScrollView, View } from '@tarojs/components'\nimport React from 'react'\n\nimport ListItem from './ListItem'\nimport StickyHeader from './StickyHeader'\nimport StickySection from './StickySection'\n\nexport interface ListProps {\n showScrollbar?: boolean\n scrollTop?: number\n onScroll?: (e: { scrollTop: number, scrollLeft: number }) => void\n onScrollToUpper?: () => void\n onScrollToLower?: () => void\n upperThresholdCount?: number\n lowerThresholdCount?: number\n cacheCount?: number\n stickyHeader?: boolean\n space?: number\n item?: React.ComponentType<any>\n itemCount?: number\n itemData?: any[]\n itemSize?: number | ((index: number, data?: any[]) => number)\n height?: number | string\n width?: number | string\n layout?: 'vertical' | 'horizontal'\n style?: React.CSSProperties\n children?: React.ReactNode\n headerHeight?: number // 纵向 header 高度\n headerWidth?: number // 横向 header 宽度\n itemHeight?: number // 纵向 item 高度\n itemWidth?: number // 横向 item 宽度\n}\n\n// 工具:累加数组\nexport function accumulate(arr: number[]) {\n const result = [0]\n for (let i = 0; i < arr.length; i++) {\n result[i + 1] = result[i] + arr[i]\n }\n return result\n}\n\n// 检测抖动\nexport function isShaking(diffList: number[]): boolean {\n if (diffList.length < 3) return false\n\n // 检查是否有连续的正负交替\n const signs = diffList.map(diff => Math.sign(diff))\n let alternations = 0\n for (let i = 1; i < signs.length; i++) {\n if (signs[i] !== 0 && signs[i] !== signs[i - 1]) {\n alternations++\n }\n }\n\n // 如果交替次数过多,认为是抖动\n return alternations >= 2\n}\n\nconst List: React.FC<ListProps> = (props) => {\n const isH5 = process.env.TARO_ENV === 'h5'\n const {\n stickyHeader = false,\n space = 0,\n height = 400,\n width = '100%',\n showScrollbar = true,\n scrollTop: controlledScrollTop,\n onScroll,\n onScrollToUpper,\n onScrollToLower,\n upperThresholdCount = 0,\n lowerThresholdCount = 0,\n cacheCount = 2,\n style,\n children,\n layout = 'vertical'\n } = props\n\n const isHorizontal = layout === 'horizontal'\n const DEFAULT_ITEM_WIDTH = 120\n const DEFAULT_ITEM_HEIGHT = 40\n\n // 滚动状态管理\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n // 渲染偏移量 - 用于计算应该渲染哪些元素\n const [renderOffset, setRenderOffset] = React.useState(controlledScrollTop ?? 0)\n\n // 滚动视图偏移量 - 只在滚动结束或明确请求时更新到ScrollView\n const [scrollViewOffset, setScrollViewOffset] = React.useState(controlledScrollTop ?? 0)\n\n\n const [containerLength] = React.useState<number>(typeof (isHorizontal ? width : height) === 'number' ? (isHorizontal ? (width as number) : (height as number)) : 400)\n\n // 滚动追踪相关refs\n const isScrollingRef = React.useRef(false)\n const lastScrollTopRef = React.useRef(controlledScrollTop ?? 0)\n const scrollDiffListRef = React.useRef<number[]>([0, 0, 0])\n const scrollTimeoutRef = React.useRef<NodeJS.Timeout | null>(null)\n\n // 解析分组结构,只支持 StickySection 和 ListItem 作为直接子组件\n const sections = React.useMemo(() => {\n const result: Array<{\n header: React.ReactElement | null\n items: React.ReactElement[]\n key: string\n }> = []\n const defaultItems: React.ReactElement[] = []\n React.Children.forEach(children, (child, idx) => {\n if (React.isValidElement(child) && child.type === StickySection) {\n // 分组模式\n const sectionProps = child.props as any\n let header: React.ReactElement | null = null\n const items: React.ReactElement[] = []\n React.Children.forEach(sectionProps.children, (subChild) => {\n if (React.isValidElement(subChild) && subChild.type === StickyHeader) header = subChild\n else if (React.isValidElement(subChild) && subChild.type === ListItem) items.push(subChild)\n })\n result.push({ header, items, key: child.key || String(idx) })\n } else if (React.isValidElement(child) && child.type === ListItem) {\n // 普通 ListItem\n defaultItems.push(child)\n }\n })\n if (defaultItems.length > 0) {\n result.push({ header: null, items: defaultItems, key: 'default' })\n }\n return result\n }, [children])\n\n // 工具:获取 header 尺寸,确保所有 header 相关逻辑一致\n const getHeaderSize = () => {\n if (isHorizontal) {\n if (typeof props.headerWidth === 'number') return props.headerWidth\n if (typeof props.itemWidth === 'number') return props.itemWidth\n if (typeof props.itemSize === 'number') return props.itemSize\n if (typeof props.itemSize === 'function') return props.itemSize(0, props.itemData) || DEFAULT_ITEM_WIDTH\n return DEFAULT_ITEM_WIDTH\n } else {\n if (typeof props.headerHeight === 'number') return props.headerHeight\n if (typeof props.itemHeight === 'number') return props.itemHeight\n if (typeof props.itemSize === 'number') return props.itemSize\n if (typeof props.itemSize === 'function') return props.itemSize(0, props.itemData) || DEFAULT_ITEM_HEIGHT\n return DEFAULT_ITEM_HEIGHT\n }\n }\n\n // 工具:获取 item 尺寸,支持函数/props/默认值\n const getItemSize = (index: number) => {\n if (isHorizontal) {\n if (typeof props.itemWidth === 'number') return props.itemWidth\n if (typeof props.itemSize === 'number') return props.itemSize\n if (typeof props.itemSize === 'function') return props.itemSize(index, props.itemData) || DEFAULT_ITEM_WIDTH\n return DEFAULT_ITEM_WIDTH\n } else {\n if (typeof props.itemHeight === 'number') return props.itemHeight\n if (typeof props.itemSize === 'number') return props.itemSize\n if (typeof props.itemSize === 'function') return props.itemSize(index, props.itemData) || DEFAULT_ITEM_HEIGHT\n return DEFAULT_ITEM_HEIGHT\n }\n }\n\n // 计算分组累积高度/宽度\n const sectionOffsets = React.useMemo(() => {\n const offsets: number[] = [0]\n sections.forEach((section) => {\n const headerSize = getHeaderSize()\n const itemSizes = section.items.map((_, i) => getItemSize(i))\n const groupSize = (section.header ? headerSize : 0) +\n itemSizes.reduce((a, b) => a + b, 0) +\n Math.max(0, section.items.length) * space\n offsets.push(offsets[offsets.length - 1] + groupSize)\n })\n return offsets\n }, [sections, space, isHorizontal, props.headerHeight, props.headerWidth, props.itemHeight, props.itemWidth, props.itemSize, props.itemData])\n\n // 外层虚拟滚动:可见分组\n const [startSection, endSection] = React.useMemo(() => {\n let start = 0; let end = sections.length - 1\n for (let i = 0; i < sections.length; i++) {\n if (sectionOffsets[i + 1] > renderOffset) {\n start = Math.max(0, i - cacheCount)\n break\n }\n }\n for (let i = start; i < sections.length; i++) {\n if (sectionOffsets[i] >= renderOffset + containerLength) {\n end = Math.min(sections.length - 1, i + cacheCount)\n break\n }\n }\n return [start, end]\n }, [renderOffset, containerLength, sectionOffsets, sections.length, cacheCount])\n\n // 触顶/触底事件\n React.useEffect(() => {\n if (onScrollToUpper && renderOffset <= (upperThresholdCount > 0 ? sectionOffsets[upperThresholdCount] : 0)) {\n onScrollToUpper()\n }\n if (onScrollToLower && renderOffset + containerLength >= sectionOffsets[sectionOffsets.length - 1] - (lowerThresholdCount > 0 ? sectionOffsets[sectionOffsets.length - 1] - sectionOffsets[sections.length - lowerThresholdCount] : 0)) {\n onScrollToLower()\n }\n }, [renderOffset, containerLength, sectionOffsets, sections.length, upperThresholdCount, lowerThresholdCount, onScrollToUpper, onScrollToLower])\n\n // 处理渲染偏移量更新\n const updateRenderOffset = React.useCallback((newOffset: number) => {\n lastScrollTopRef.current = newOffset\n isScrollingRef.current = true\n\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n\n setRenderOffset(newOffset) // 立即更新渲染偏移量\n\n scrollTimeoutRef.current = setTimeout(() => {\n isScrollingRef.current = false\n setScrollViewOffset(newOffset) // 滚动结束后,同步滚动视图偏移量\n }, 200)\n }, [])\n\n\n\n // 智能滚动处理函数\n const handleScroll = React.useCallback((e: any) => {\n const newOffset = isHorizontal ? e.detail.scrollLeft : e.detail.scrollTop\n\n const diff = newOffset - lastScrollTopRef.current\n scrollDiffListRef.current.shift()\n scrollDiffListRef.current.push(diff)\n\n // 只保留抖动检测,移除方向检测\n if (isScrollingRef.current && isShaking(scrollDiffListRef.current)) {\n return\n }\n\n updateRenderOffset(newOffset) // 直接更新渲染偏移量\n\n onScroll?.({\n scrollTop: isHorizontal ? 0 : newOffset,\n scrollLeft: isHorizontal ? newOffset : 0\n })\n }, [isHorizontal, onScroll, updateRenderOffset, containerLength])\n\n // 初始化后的延迟同步 - 确保ScrollView正确设置初始位置\n React.useEffect(() => {\n if (typeof controlledScrollTop === 'number') {\n setScrollViewOffset(controlledScrollTop)\n lastScrollTopRef.current = controlledScrollTop\n }\n }, [controlledScrollTop])\n\n // 清理定时器\n React.useEffect(() => {\n return () => {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current)\n }\n }\n }, [])\n\n // 容器样式\n const containerStyle: React.CSSProperties = {\n height: isHorizontal ? width : height,\n width: isHorizontal ? height : width,\n ...style,\n }\n\n // 修改ScrollView组件的props,添加data-testid属性\n // ScrollView 属性\n const scrollViewProps: any = {\n scrollY: !isHorizontal,\n scrollX: isHorizontal,\n style: containerStyle,\n enhanced: true,\n showScrollbar: showScrollbar,\n onScroll: handleScroll,\n onScrollToUpper,\n onScrollToLower,\n 'data-testid': 'taro-list-container'\n }\n\n // 设置ScrollView的滚动位置\n if (isHorizontal) {\n scrollViewProps.scrollLeft = scrollViewOffset\n } else {\n scrollViewProps.scrollTop = scrollViewOffset\n }\n\n // H5上额外使用DOM直接操作确保滚动位置正确\n if (isH5) {\n React.useEffect(() => {\n if (containerRef.current && typeof scrollViewOffset === 'number') {\n if (isHorizontal) {\n containerRef.current.scrollLeft = scrollViewOffset\n } else {\n containerRef.current.scrollTop = scrollViewOffset\n }\n }\n }, [scrollViewOffset, isHorizontal])\n }\n\n // 总高度/宽度\n const totalLength = sectionOffsets[sectionOffsets.length - 1]\n\n // 吸顶/吸左 header\n const stickyHeaderNode = React.useMemo(() => {\n if (!stickyHeader) return null\n for (let i = 0; i < sections.length; i++) {\n if (sectionOffsets[i] <= renderOffset && renderOffset < sectionOffsets[i + 1]) {\n const section = sections[i]\n if (section.header) {\n const headerSize = getHeaderSize()\n return (\n <View className=\"taro-list-sticky-header\" style={isHorizontal ? { width: headerSize } : { height: headerSize }}>\n {section.header}\n </View>\n )\n }\n }\n }\n return null\n }, [stickyHeader, renderOffset, sectionOffsets, sections, isHorizontal, props.headerHeight, props.headerWidth, props.itemHeight, props.itemWidth, props.itemSize, props.itemData])\n\n // 渲染分组+item双层虚拟滚动\n const renderSections = () => {\n const nodes: React.ReactNode[] = []\n let offset = sectionOffsets[startSection]\n for (let s = startSection; s <= endSection; s++) {\n const section = sections[s]\n const headerSize = getHeaderSize()\n const itemSizes = section.items.map((_, i) => getItemSize(i))\n // header\n if (section.header) {\n nodes.push(\n React.createElement('div', {\n key: section.key + '-header' + '-' + layout,\n className: isHorizontal ? 'taro-list-section-header horizontal' : 'taro-list-section-header',\n style: isHorizontal ? { left: offset, width: headerSize } : { top: offset, height: headerSize },\n }, section.header)\n )\n offset += headerSize\n }\n // item offsets\n const itemOffsets = accumulate(itemSizes.map((size) => size + space))\n // 内层虚拟滚动:可见item区间\n let startItem = 0; let endItem = section.items.length - 1\n for (let i = 0; i < section.items.length; i++) {\n if (offset + itemOffsets[i + 1] > renderOffset) {\n startItem = Math.max(0, i - cacheCount)\n break\n }\n }\n for (let i = startItem; i < section.items.length; i++) {\n if (offset + itemOffsets[i] >= renderOffset + containerLength) {\n endItem = Math.min(section.items.length - 1, i + cacheCount)\n break\n }\n }\n // 渲染可见item\n for (let i = startItem; i <= endItem; i++) {\n nodes.push(\n React.createElement('div', {\n key: section.key + '-item-' + i + '-' + layout,\n className: isHorizontal ? 'taro-list-section-item horizontal' : 'taro-list-section-item',\n style: isHorizontal\n ? {\n left: offset + itemOffsets[i],\n width: itemSizes[i],\n marginRight: space,\n }\n : {\n top: offset + itemOffsets[i],\n height: itemSizes[i],\n marginBottom: space,\n },\n }, section.items[i])\n )\n }\n offset += itemOffsets[itemOffsets.length - 1]\n }\n return nodes\n }\n\n return (\n <ScrollView ref={containerRef} className=\"taro-list-container\" {...scrollViewProps}>\n <View style={isHorizontal ? { width: totalLength, position: 'relative', height: '100%' } : { height: totalLength, position: 'relative', width: '100%' }}>\n {stickyHeaderNode}\n {renderSections()}\n </View>\n </ScrollView>\n )\n}\n\nexport default List\n"],"names":["accumulate","arr","result","i","length","isShaking","diffList","signs","map","diff","Math","sign","alternations","List","props","isH5","process","env","TARO_ENV","stickyHeader","space","height","width","showScrollbar","scrollTop","controlledScrollTop","onScroll","onScrollToUpper","onScrollToLower","upperThresholdCount","lowerThresholdCount","cacheCount","style","children","layout","isHorizontal","DEFAULT_ITEM_WIDTH","DEFAULT_ITEM_HEIGHT","containerRef","React","useRef","renderOffset","setRenderOffset","useState","scrollViewOffset","setScrollViewOffset","containerLength","isScrollingRef","lastScrollTopRef","scrollDiffListRef","scrollTimeoutRef","sections","useMemo","defaultItems","Children","forEach","child","idx","isValidElement","type","StickySection","sectionProps","header","items","subChild","StickyHeader","ListItem","push","key","String","getHeaderSize","headerWidth","itemWidth","itemSize","itemData","headerHeight","itemHeight","getItemSize","index","sectionOffsets","offsets","section","headerSize","itemSizes","_","groupSize","reduce","a","b","max","startSection","endSection","start","end","min","useEffect","updateRenderOffset","useCallback","newOffset","current","clearTimeout","setTimeout","handleScroll","e","detail","scrollLeft","shift","containerStyle","Object","assign","scrollViewProps","scrollY","scrollX","enhanced","totalLength","stickyHeaderNode","_jsx","View","className","renderSections","nodes","offset","s","createElement","left","top","itemOffsets","size","startItem","endItem","marginRight","marginBottom","ScrollView","ref","_jsxs","position"],"mappings":";;;;;;;;AAoCM,SAAUA,UAAUA,CAACC,GAAa,EAAA;AACtC,EAAA,MAAMC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClB,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,GAAG,CAACG,MAAM,EAAED,CAAC,EAAE,EAAE;AACnCD,IAAAA,MAAM,CAACC,CAAC,GAAG,CAAC,CAAC,GAAGD,MAAM,CAACC,CAAC,CAAC,GAAGF,GAAG,CAACE,CAAC,CAAC;AACpC;AACA,EAAA,OAAOD,MAAM;AACf;AAEA;AACM,SAAUG,SAASA,CAACC,QAAkB,EAAA;AAC1C,EAAA,IAAIA,QAAQ,CAACF,MAAM,GAAG,CAAC,EAAE,OAAO,KAAK;AAErC;AACA,EAAA,MAAMG,KAAK,GAAGD,QAAQ,CAACE,GAAG,CAACC,IAAI,IAAIC,IAAI,CAACC,IAAI,CAACF,IAAI,CAAC,CAAC;EACnD,IAAIG,YAAY,GAAG,CAAC;AACpB,EAAA,KAAK,IAAIT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGI,KAAK,CAACH,MAAM,EAAED,CAAC,EAAE,EAAE;AACrC,IAAA,IAAII,KAAK,CAACJ,CAAC,CAAC,KAAK,CAAC,IAAII,KAAK,CAACJ,CAAC,CAAC,KAAKI,KAAK,CAACJ,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/CS,MAAAA,YAAY,EAAE;AAChB;AACF;AAEA;EACA,OAAOA,YAAY,IAAI,CAAC;AAC1B;AAEMC,MAAAA,IAAI,GAAyBC,KAAK,IAAI;EAC1C,MAAMC,IAAI,GAAGC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,IAAI;EAC1C,MAAM;AACJC,IAAAA,YAAY,GAAG,KAAK;AACpBC,IAAAA,KAAK,GAAG,CAAC;AACTC,IAAAA,MAAM,GAAG,GAAG;AACZC,IAAAA,KAAK,GAAG,MAAM;AACdC,IAAAA,aAAa,GAAG,IAAI;AACpBC,IAAAA,SAAS,EAAEC,mBAAmB;IAC9BC,QAAQ;IACRC,eAAe;IACfC,eAAe;AACfC,IAAAA,mBAAmB,GAAG,CAAC;AACvBC,IAAAA,mBAAmB,GAAG,CAAC;AACvBC,IAAAA,UAAU,GAAG,CAAC;IACdC,KAAK;IACLC,QAAQ;AACRC,IAAAA,MAAM,GAAG;AAAU,GACpB,GAAGpB,KAAK;AAET,EAAA,MAAMqB,YAAY,GAAGD,MAAM,KAAK,YAAY;EAC5C,MAAME,kBAAkB,GAAG,GAAG;EAC9B,MAAMC,mBAAmB,GAAG,EAAE;AAE9B;AACA,EAAA,MAAMC,YAAY,GAAGC,cAAK,CAACC,MAAM,CAAiB,IAAI,CAAC;AAEvD;EACA,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGH,cAAK,CAACI,QAAQ,CAAClB,mBAAmB,aAAnBA,mBAAmB,KAAA,KAAA,CAAA,GAAnBA,mBAAmB,GAAI,CAAC,CAAC;AAEhF;EACA,MAAM,CAACmB,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGN,cAAK,CAACI,QAAQ,CAAClB,mBAAmB,aAAnBA,mBAAmB,KAAA,KAAA,CAAA,GAAnBA,mBAAmB,GAAI,CAAC,CAAC;EAGxF,MAAM,CAACqB,eAAe,CAAC,GAAGP,cAAK,CAACI,QAAQ,CAAS,QAAQR,YAAY,GAAGb,KAAK,GAAGD,MAAM,CAAC,KAAK,QAAQ,GAAIc,YAAY,GAAIb,KAAgB,GAAID,MAAiB,GAAI,GAAG,CAAC;AAErK;AACA,EAAA,MAAM0B,cAAc,GAAGR,cAAK,CAACC,MAAM,CAAC,KAAK,CAAC;AAC1C,EAAA,MAAMQ,gBAAgB,GAAGT,cAAK,CAACC,MAAM,CAACf,mBAAmB,KAAnB,IAAA,IAAAA,mBAAmB,KAAnB,KAAA,CAAA,GAAAA,mBAAmB,GAAI,CAAC,CAAC;AAC/D,EAAA,MAAMwB,iBAAiB,GAAGV,cAAK,CAACC,MAAM,CAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,EAAA,MAAMU,gBAAgB,GAAGX,cAAK,CAACC,MAAM,CAAwB,IAAI,CAAC;AAElE;AACA,EAAA,MAAMW,QAAQ,GAAGZ,cAAK,CAACa,OAAO,CAAC,MAAK;IAClC,MAAMlD,MAAM,GAIP,EAAE;IACP,MAAMmD,YAAY,GAAyB,EAAE;IAC7Cd,cAAK,CAACe,QAAQ,CAACC,OAAO,CAACtB,QAAQ,EAAE,CAACuB,KAAK,EAAEC,GAAG,KAAI;AAC9C,MAAA,iBAAIlB,cAAK,CAACmB,cAAc,CAACF,KAAK,CAAC,IAAIA,KAAK,CAACG,IAAI,KAAKC,aAAa,EAAE;AAC/D;AACA,QAAA,MAAMC,YAAY,GAAGL,KAAK,CAAC1C,KAAY;QACvC,IAAIgD,MAAM,GAA8B,IAAI;QAC5C,MAAMC,KAAK,GAAyB,EAAE;QACtCxB,cAAK,CAACe,QAAQ,CAACC,OAAO,CAACM,YAAY,CAAC5B,QAAQ,EAAG+B,QAAQ,IAAI;AACzD,UAAA,iBAAIzB,cAAK,CAACmB,cAAc,CAACM,QAAQ,CAAC,IAAIA,QAAQ,CAACL,IAAI,KAAKM,YAAY,EAAEH,MAAM,GAAGE,QAAQ,CAAA,KAClF,iBAAIzB,cAAK,CAACmB,cAAc,CAACM,QAAQ,CAAC,IAAIA,QAAQ,CAACL,IAAI,KAAKO,QAAQ,EAAEH,KAAK,CAACI,IAAI,CAACH,QAAQ,CAAC;AAC7F,SAAC,CAAC;QACF9D,MAAM,CAACiE,IAAI,CAAC;UAAEL,MAAM;UAAEC,KAAK;AAAEK,UAAAA,GAAG,EAAEZ,KAAK,CAACY,GAAG,IAAIC,MAAM,CAACZ,GAAG;AAAC,SAAE,CAAC;AAC/D,OAAC,MAAM,iBAAIlB,cAAK,CAACmB,cAAc,CAACF,KAAK,CAAC,IAAIA,KAAK,CAACG,IAAI,KAAKO,QAAQ,EAAE;AACjE;AACAb,QAAAA,YAAY,CAACc,IAAI,CAACX,KAAK,CAAC;AAC1B;AACF,KAAC,CAAC;AACF,IAAA,IAAIH,YAAY,CAACjD,MAAM,GAAG,CAAC,EAAE;MAC3BF,MAAM,CAACiE,IAAI,CAAC;AAAEL,QAAAA,MAAM,EAAE,IAAI;AAAEC,QAAAA,KAAK,EAAEV,YAAY;AAAEe,QAAAA,GAAG,EAAE;AAAS,OAAE,CAAC;AACpE;AACA,IAAA,OAAOlE,MAAM;AACf,GAAC,EAAE,CAAC+B,QAAQ,CAAC,CAAC;AAEd;EACA,MAAMqC,aAAa,GAAGA,MAAK;AACzB,IAAA,IAAInC,YAAY,EAAE;MAChB,IAAI,OAAOrB,KAAK,CAACyD,WAAW,KAAK,QAAQ,EAAE,OAAOzD,KAAK,CAACyD,WAAW;MACnE,IAAI,OAAOzD,KAAK,CAAC0D,SAAS,KAAK,QAAQ,EAAE,OAAO1D,KAAK,CAAC0D,SAAS;MAC/D,IAAI,OAAO1D,KAAK,CAAC2D,QAAQ,KAAK,QAAQ,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ;AAC7D,MAAA,IAAI,OAAO3D,KAAK,CAAC2D,QAAQ,KAAK,UAAU,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ,CAAC,CAAC,EAAE3D,KAAK,CAAC4D,QAAQ,CAAC,IAAItC,kBAAkB;AACxG,MAAA,OAAOA,kBAAkB;AAC3B,KAAC,MAAM;MACL,IAAI,OAAOtB,KAAK,CAAC6D,YAAY,KAAK,QAAQ,EAAE,OAAO7D,KAAK,CAAC6D,YAAY;MACrE,IAAI,OAAO7D,KAAK,CAAC8D,UAAU,KAAK,QAAQ,EAAE,OAAO9D,KAAK,CAAC8D,UAAU;MACjE,IAAI,OAAO9D,KAAK,CAAC2D,QAAQ,KAAK,QAAQ,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ;AAC7D,MAAA,IAAI,OAAO3D,KAAK,CAAC2D,QAAQ,KAAK,UAAU,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ,CAAC,CAAC,EAAE3D,KAAK,CAAC4D,QAAQ,CAAC,IAAIrC,mBAAmB;AACzG,MAAA,OAAOA,mBAAmB;AAC5B;GACD;AAED;EACA,MAAMwC,WAAW,GAAIC,KAAa,IAAI;AACpC,IAAA,IAAI3C,YAAY,EAAE;MAChB,IAAI,OAAOrB,KAAK,CAAC0D,SAAS,KAAK,QAAQ,EAAE,OAAO1D,KAAK,CAAC0D,SAAS;MAC/D,IAAI,OAAO1D,KAAK,CAAC2D,QAAQ,KAAK,QAAQ,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ;AAC7D,MAAA,IAAI,OAAO3D,KAAK,CAAC2D,QAAQ,KAAK,UAAU,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ,CAACK,KAAK,EAAEhE,KAAK,CAAC4D,QAAQ,CAAC,IAAItC,kBAAkB;AAC5G,MAAA,OAAOA,kBAAkB;AAC3B,KAAC,MAAM;MACL,IAAI,OAAOtB,KAAK,CAAC8D,UAAU,KAAK,QAAQ,EAAE,OAAO9D,KAAK,CAAC8D,UAAU;MACjE,IAAI,OAAO9D,KAAK,CAAC2D,QAAQ,KAAK,QAAQ,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ;AAC7D,MAAA,IAAI,OAAO3D,KAAK,CAAC2D,QAAQ,KAAK,UAAU,EAAE,OAAO3D,KAAK,CAAC2D,QAAQ,CAACK,KAAK,EAAEhE,KAAK,CAAC4D,QAAQ,CAAC,IAAIrC,mBAAmB;AAC7G,MAAA,OAAOA,mBAAmB;AAC5B;GACD;AAED;AACA,EAAA,MAAM0C,cAAc,GAAGxC,cAAK,CAACa,OAAO,CAAC,MAAK;AACxC,IAAA,MAAM4B,OAAO,GAAa,CAAC,CAAC,CAAC;AAC7B7B,IAAAA,QAAQ,CAACI,OAAO,CAAE0B,OAAO,IAAI;AAC3B,MAAA,MAAMC,UAAU,GAAGZ,aAAa,EAAE;AAClC,MAAA,MAAMa,SAAS,GAAGF,OAAO,CAAClB,KAAK,CAACvD,GAAG,CAAC,CAAC4E,CAAC,EAAEjF,CAAC,KAAK0E,WAAW,CAAC1E,CAAC,CAAC,CAAC;AAC7D,MAAA,MAAMkF,SAAS,GAAG,CAACJ,OAAO,CAACnB,MAAM,GAAGoB,UAAU,GAAG,CAAC,IAChDC,SAAS,CAACG,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC,GACpC9E,IAAI,CAAC+E,GAAG,CAAC,CAAC,EAAER,OAAO,CAAClB,KAAK,CAAC3D,MAAM,CAAC,GAAGgB,KAAK;AAC3C4D,MAAAA,OAAO,CAACb,IAAI,CAACa,OAAO,CAACA,OAAO,CAAC5E,MAAM,GAAG,CAAC,CAAC,GAAGiF,SAAS,CAAC;AACvD,KAAC,CAAC;AACF,IAAA,OAAOL,OAAO;AAChB,GAAC,EAAE,CAAC7B,QAAQ,EAAE/B,KAAK,EAAEe,YAAY,EAAErB,KAAK,CAAC6D,YAAY,EAAE7D,KAAK,CAACyD,WAAW,EAAEzD,KAAK,CAAC8D,UAAU,EAAE9D,KAAK,CAAC0D,SAAS,EAAE1D,KAAK,CAAC2D,QAAQ,EAAE3D,KAAK,CAAC4D,QAAQ,CAAC,CAAC;AAE7I;EACA,MAAM,CAACgB,YAAY,EAAEC,UAAU,CAAC,GAAGpD,cAAK,CAACa,OAAO,CAAC,MAAK;IACpD,IAAIwC,KAAK,GAAG,CAAC;AAAE,IAAA,IAAIC,GAAG,GAAG1C,QAAQ,CAAC/C,MAAM,GAAG,CAAC;AAC5C,IAAA,KAAK,IAAID,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgD,QAAQ,CAAC/C,MAAM,EAAED,CAAC,EAAE,EAAE;MACxC,IAAI4E,cAAc,CAAC5E,CAAC,GAAG,CAAC,CAAC,GAAGsC,YAAY,EAAE;QACxCmD,KAAK,GAAGlF,IAAI,CAAC+E,GAAG,CAAC,CAAC,EAAEtF,CAAC,GAAG4B,UAAU,CAAC;AACnC,QAAA;AACF;AACF;AACA,IAAA,KAAK,IAAI5B,CAAC,GAAGyF,KAAK,EAAEzF,CAAC,GAAGgD,QAAQ,CAAC/C,MAAM,EAAED,CAAC,EAAE,EAAE;MAC5C,IAAI4E,cAAc,CAAC5E,CAAC,CAAC,IAAIsC,YAAY,GAAGK,eAAe,EAAE;AACvD+C,QAAAA,GAAG,GAAGnF,IAAI,CAACoF,GAAG,CAAC3C,QAAQ,CAAC/C,MAAM,GAAG,CAAC,EAAED,CAAC,GAAG4B,UAAU,CAAC;AACnD,QAAA;AACF;AACF;AACA,IAAA,OAAO,CAAC6D,KAAK,EAAEC,GAAG,CAAC;AACrB,GAAC,EAAE,CAACpD,YAAY,EAAEK,eAAe,EAAEiC,cAAc,EAAE5B,QAAQ,CAAC/C,MAAM,EAAE2B,UAAU,CAAC,CAAC;AAEhF;EACAQ,cAAK,CAACwD,SAAS,CAAC,MAAK;AACnB,IAAA,IAAIpE,eAAe,IAAIc,YAAY,KAAKZ,mBAAmB,GAAG,CAAC,GAAGkD,cAAc,CAAClD,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1GF,MAAAA,eAAe,EAAE;AACnB;AACA,IAAA,IAAIC,eAAe,IAAIa,YAAY,GAAGK,eAAe,IAAIiC,cAAc,CAACA,cAAc,CAAC3E,MAAM,GAAG,CAAC,CAAC,IAAI0B,mBAAmB,GAAG,CAAC,GAAGiD,cAAc,CAACA,cAAc,CAAC3E,MAAM,GAAG,CAAC,CAAC,GAAG2E,cAAc,CAAC5B,QAAQ,CAAC/C,MAAM,GAAG0B,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAAE;AACtOF,MAAAA,eAAe,EAAE;AACnB;GACD,EAAE,CAACa,YAAY,EAAEK,eAAe,EAAEiC,cAAc,EAAE5B,QAAQ,CAAC/C,MAAM,EAAEyB,mBAAmB,EAAEC,mBAAmB,EAAEH,eAAe,EAAEC,eAAe,CAAC,CAAC;AAEhJ;AACA,EAAA,MAAMoE,kBAAkB,GAAGzD,cAAK,CAAC0D,WAAW,CAAEC,SAAiB,IAAI;IACjElD,gBAAgB,CAACmD,OAAO,GAAGD,SAAS;IACpCnD,cAAc,CAACoD,OAAO,GAAG,IAAI;IAE7B,IAAIjD,gBAAgB,CAACiD,OAAO,EAAE;AAC5BC,MAAAA,YAAY,CAAClD,gBAAgB,CAACiD,OAAO,CAAC;AACxC;AAEAzD,IAAAA,eAAe,CAACwD,SAAS,CAAC,CAAA;AAE1BhD,IAAAA,gBAAgB,CAACiD,OAAO,GAAGE,UAAU,CAAC,MAAK;MACzCtD,cAAc,CAACoD,OAAO,GAAG,KAAK;AAC9BtD,MAAAA,mBAAmB,CAACqD,SAAS,CAAC,CAAA;KAC/B,EAAE,GAAG,CAAC;GACR,EAAE,EAAE,CAAC;AAIN;AACA,EAAA,MAAMI,YAAY,GAAG/D,cAAK,CAAC0D,WAAW,CAAEM,CAAM,IAAI;AAChD,IAAA,MAAML,SAAS,GAAG/D,YAAY,GAAGoE,CAAC,CAACC,MAAM,CAACC,UAAU,GAAGF,CAAC,CAACC,MAAM,CAAChF,SAAS;AAEzE,IAAA,MAAMf,IAAI,GAAGyF,SAAS,GAAGlD,gBAAgB,CAACmD,OAAO;AACjDlD,IAAAA,iBAAiB,CAACkD,OAAO,CAACO,KAAK,EAAE;AACjCzD,IAAAA,iBAAiB,CAACkD,OAAO,CAAChC,IAAI,CAAC1D,IAAI,CAAC;AAEpC;IACA,IAAIsC,cAAc,CAACoD,OAAO,IAAI9F,SAAS,CAAC4C,iBAAiB,CAACkD,OAAO,CAAC,EAAE;AAClE,MAAA;AACF;AAEAH,IAAAA,kBAAkB,CAACE,SAAS,CAAC,CAAA;AAE7BxE,IAAAA,QAAQ,KAAR,IAAA,IAAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,QAAQ,CAAG;AACTF,MAAAA,SAAS,EAAEW,YAAY,GAAG,CAAC,GAAG+D,SAAS;AACvCO,MAAAA,UAAU,EAAEtE,YAAY,GAAG+D,SAAS,GAAG;AACxC,KAAA,CAAC;GACH,EAAE,CAAC/D,YAAY,EAAET,QAAQ,EAAEsE,kBAAkB,EAAElD,eAAe,CAAC,CAAC;AAEjE;EACAP,cAAK,CAACwD,SAAS,CAAC,MAAK;AACnB,IAAA,IAAI,OAAOtE,mBAAmB,KAAK,QAAQ,EAAE;MAC3CoB,mBAAmB,CAACpB,mBAAmB,CAAC;MACxCuB,gBAAgB,CAACmD,OAAO,GAAG1E,mBAAmB;AAChD;AACF,GAAC,EAAE,CAACA,mBAAmB,CAAC,CAAC;AAEzB;EACAc,cAAK,CAACwD,SAAS,CAAC,MAAK;AACnB,IAAA,OAAO,MAAK;MACV,IAAI7C,gBAAgB,CAACiD,OAAO,EAAE;AAC5BC,QAAAA,YAAY,CAAClD,gBAAgB,CAACiD,OAAO,CAAC;AACxC;KACD;GACF,EAAE,EAAE,CAAC;AAEN;AACA,EAAA,MAAMQ,cAAc,GAAAC,MAAA,CAAAC,MAAA,CAAA;AAClBxF,IAAAA,MAAM,EAAEc,YAAY,GAAGb,KAAK,GAAGD,MAAM;AACrCC,IAAAA,KAAK,EAAEa,YAAY,GAAGd,MAAM,GAAGC;GAAK,EACjCU,KAAK,CACT;AAED;AACA;AACA,EAAA,MAAM8E,eAAe,GAAQ;IAC3BC,OAAO,EAAE,CAAC5E,YAAY;AACtB6E,IAAAA,OAAO,EAAE7E,YAAY;AACrBH,IAAAA,KAAK,EAAE2E,cAAc;AACrBM,IAAAA,QAAQ,EAAE,IAAI;AACd1F,IAAAA,aAAa,EAAEA,aAAa;AAC5BG,IAAAA,QAAQ,EAAE4E,YAAY;IACtB3E,eAAe;IACfC,eAAe;AACf,IAAA,aAAa,EAAE;GAChB;AAED;AACA,EAAA,IAAIO,YAAY,EAAE;IAChB2E,eAAe,CAACL,UAAU,GAAG7D,gBAAgB;AAC/C,GAAC,MAAM;IACLkE,eAAe,CAACtF,SAAS,GAAGoB,gBAAgB;AAC9C;AAEA;AACA,EAAA,IAAI7B,IAAI,EAAE;IACRwB,cAAK,CAACwD,SAAS,CAAC,MAAK;MACnB,IAAIzD,YAAY,CAAC6D,OAAO,IAAI,OAAOvD,gBAAgB,KAAK,QAAQ,EAAE;AAChE,QAAA,IAAIT,YAAY,EAAE;AAChBG,UAAAA,YAAY,CAAC6D,OAAO,CAACM,UAAU,GAAG7D,gBAAgB;AACpD,SAAC,MAAM;AACLN,UAAAA,YAAY,CAAC6D,OAAO,CAAC3E,SAAS,GAAGoB,gBAAgB;AACnD;AACF;AACF,KAAC,EAAE,CAACA,gBAAgB,EAAET,YAAY,CAAC,CAAC;AACtC;AAEA;EACA,MAAM+E,WAAW,GAAGnC,cAAc,CAACA,cAAc,CAAC3E,MAAM,GAAG,CAAC,CAAC;AAE7D;AACA,EAAA,MAAM+G,gBAAgB,GAAG5E,cAAK,CAACa,OAAO,CAAC,MAAK;AAC1C,IAAA,IAAI,CAACjC,YAAY,EAAE,OAAO,IAAI;AAC9B,IAAA,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgD,QAAQ,CAAC/C,MAAM,EAAED,CAAC,EAAE,EAAE;AACxC,MAAA,IAAI4E,cAAc,CAAC5E,CAAC,CAAC,IAAIsC,YAAY,IAAIA,YAAY,GAAGsC,cAAc,CAAC5E,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7E,QAAA,MAAM8E,OAAO,GAAG9B,QAAQ,CAAChD,CAAC,CAAC;QAC3B,IAAI8E,OAAO,CAACnB,MAAM,EAAE;AAClB,UAAA,MAAMoB,UAAU,GAAGZ,aAAa,EAAE;UAClC,oBACE8C,GAAA,CAACC,IAAI,EAAA;AAACC,YAAAA,SAAS,EAAC,yBAAyB;YAACtF,KAAK,EAAEG,YAAY,GAAG;AAAEb,cAAAA,KAAK,EAAE4D;AAAU,aAAE,GAAG;AAAE7D,cAAAA,MAAM,EAAE6D;aAAa;YAAAjD,QAAA,EAC5GgD,OAAO,CAACnB;AAAM,WACX,CAAC;AAEX;AACF;AACF;AACA,IAAA,OAAO,IAAI;AACb,GAAC,EAAE,CAAC3C,YAAY,EAAEsB,YAAY,EAAEsC,cAAc,EAAE5B,QAAQ,EAAEhB,YAAY,EAAErB,KAAK,CAAC6D,YAAY,EAAE7D,KAAK,CAACyD,WAAW,EAAEzD,KAAK,CAAC8D,UAAU,EAAE9D,KAAK,CAAC0D,SAAS,EAAE1D,KAAK,CAAC2D,QAAQ,EAAE3D,KAAK,CAAC4D,QAAQ,CAAC,CAAC;AAElL;EACA,MAAM6C,cAAc,GAAGA,MAAK;IAC1B,MAAMC,KAAK,GAAsB,EAAE;AACnC,IAAA,IAAIC,MAAM,GAAG1C,cAAc,CAACW,YAAY,CAAC;IACzC,KAAK,IAAIgC,CAAC,GAAGhC,YAAY,EAAEgC,CAAC,IAAI/B,UAAU,EAAE+B,CAAC,EAAE,EAAE;AAC/C,MAAA,MAAMzC,OAAO,GAAG9B,QAAQ,CAACuE,CAAC,CAAC;AAC3B,MAAA,MAAMxC,UAAU,GAAGZ,aAAa,EAAE;AAClC,MAAA,MAAMa,SAAS,GAAGF,OAAO,CAAClB,KAAK,CAACvD,GAAG,CAAC,CAAC4E,CAAC,EAAEjF,CAAC,KAAK0E,WAAW,CAAC1E,CAAC,CAAC,CAAC;AAC7D;MACA,IAAI8E,OAAO,CAACnB,MAAM,EAAE;QAClB0D,KAAK,CAACrD,IAAI,cACR5B,cAAK,CAACoF,aAAa,CAAC,KAAK,EAAE;UACzBvD,GAAG,EAAEa,OAAO,CAACb,GAAG,GAAG,SAAS,GAAG,GAAG,GAAGlC,MAAM;AAC3CoF,UAAAA,SAAS,EAAEnF,YAAY,GAAG,qCAAqC,GAAG,0BAA0B;UAC5FH,KAAK,EAAEG,YAAY,GAAG;AAAEyF,YAAAA,IAAI,EAAEH,MAAM;AAAEnG,YAAAA,KAAK,EAAE4D;AAAY,WAAA,GAAG;AAAE2C,YAAAA,GAAG,EAAEJ,MAAM;AAAEpG,YAAAA,MAAM,EAAE6D;AAAY;AAChG,SAAA,EAAED,OAAO,CAACnB,MAAM,CAAC,CACnB;AACD2D,QAAAA,MAAM,IAAIvC,UAAU;AACtB;AACA;AACA,MAAA,MAAM4C,WAAW,GAAG9H,UAAU,CAACmF,SAAS,CAAC3E,GAAG,CAAEuH,IAAI,IAAKA,IAAI,GAAG3G,KAAK,CAAC,CAAC;AACrE;MACA,IAAI4G,SAAS,GAAG,CAAC;MAAE,IAAIC,OAAO,GAAGhD,OAAO,CAAClB,KAAK,CAAC3D,MAAM,GAAG,CAAC;AACzD,MAAA,KAAK,IAAID,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8E,OAAO,CAAClB,KAAK,CAAC3D,MAAM,EAAED,CAAC,EAAE,EAAE;QAC7C,IAAIsH,MAAM,GAAGK,WAAW,CAAC3H,CAAC,GAAG,CAAC,CAAC,GAAGsC,YAAY,EAAE;UAC9CuF,SAAS,GAAGtH,IAAI,CAAC+E,GAAG,CAAC,CAAC,EAAEtF,CAAC,GAAG4B,UAAU,CAAC;AACvC,UAAA;AACF;AACF;AACA,MAAA,KAAK,IAAI5B,CAAC,GAAG6H,SAAS,EAAE7H,CAAC,GAAG8E,OAAO,CAAClB,KAAK,CAAC3D,MAAM,EAAED,CAAC,EAAE,EAAE;QACrD,IAAIsH,MAAM,GAAGK,WAAW,CAAC3H,CAAC,CAAC,IAAIsC,YAAY,GAAGK,eAAe,EAAE;AAC7DmF,UAAAA,OAAO,GAAGvH,IAAI,CAACoF,GAAG,CAACb,OAAO,CAAClB,KAAK,CAAC3D,MAAM,GAAG,CAAC,EAAED,CAAC,GAAG4B,UAAU,CAAC;AAC5D,UAAA;AACF;AACF;AACA;MACA,KAAK,IAAI5B,CAAC,GAAG6H,SAAS,EAAE7H,CAAC,IAAI8H,OAAO,EAAE9H,CAAC,EAAE,EAAE;QACzCqH,KAAK,CAACrD,IAAI,cACR5B,cAAK,CAACoF,aAAa,CAAC,KAAK,EAAE;UACzBvD,GAAG,EAAEa,OAAO,CAACb,GAAG,GAAG,QAAQ,GAAGjE,CAAC,GAAG,GAAG,GAAG+B,MAAM;AAC9CoF,UAAAA,SAAS,EAAEnF,YAAY,GAAG,mCAAmC,GAAG,wBAAwB;UACxFH,KAAK,EAAEG,YAAY,GACf;AACAyF,YAAAA,IAAI,EAAEH,MAAM,GAAGK,WAAW,CAAC3H,CAAC,CAAC;AAC7BmB,YAAAA,KAAK,EAAE6D,SAAS,CAAChF,CAAC,CAAC;AACnB+H,YAAAA,WAAW,EAAE9G;AACd,WAAA,GACC;AACAyG,YAAAA,GAAG,EAAEJ,MAAM,GAAGK,WAAW,CAAC3H,CAAC,CAAC;AAC5BkB,YAAAA,MAAM,EAAE8D,SAAS,CAAChF,CAAC,CAAC;AACpBgI,YAAAA,YAAY,EAAE/G;AACf;SACJ,EAAE6D,OAAO,CAAClB,KAAK,CAAC5D,CAAC,CAAC,CAAC,CACrB;AACH;MACAsH,MAAM,IAAIK,WAAW,CAACA,WAAW,CAAC1H,MAAM,GAAG,CAAC,CAAC;AAC/C;AACA,IAAA,OAAOoH,KAAK;GACb;EAED,oBACEJ,GAAA,CAACgB,UAAU,EAAA;AAACC,IAAAA,GAAG,EAAE/F,YAAa;AAACgF,IAAAA,SAAS,EAAC,qBAAqB;AAAA,IAAA,GAAKR,eAAe;IAAA7E,QAAA,eAChFqG,IAAA,CAACjB,IAAI,EAAA;MAACrF,KAAK,EAAEG,YAAY,GAAG;AAAEb,QAAAA,KAAK,EAAE4F,WAAW;AAAEqB,QAAAA,QAAQ,EAAE,UAAU;AAAElH,QAAAA,MAAM,EAAE;OAAQ,GAAG;AAAEA,QAAAA,MAAM,EAAE6F,WAAW;AAAEqB,QAAAA,QAAQ,EAAE,UAAU;AAAEjH,QAAAA,KAAK,EAAE;OAAS;AAAAW,MAAAA,QAAA,EACrJkF,CAAAA,gBAAgB,EAChBI,cAAc,EAAE;KACb;AACR,GAAY,CAAC;AAEjB;;;;"}
@@ -0,0 +1,4 @@
1
+ var undefined$1 = undefined;
2
+
3
+ export { undefined$1 as default };
4
+ //# sourceMappingURL=index.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -2,7 +2,7 @@ import { __rest } from 'tslib';
2
2
  import './style/index.scss.js';
3
3
  import { View } from '@tarojs/components';
4
4
  import classNames from 'classnames';
5
- import * as React from 'react';
5
+ import React__default from 'react';
6
6
  import { verifyValue, verifyTime, hoursRange, minutesRange, verifyDate, getYearRange, getMonthRange, getDayRange, compareTime, omit } from '../../utils/index.js';
7
7
  import { PickerGroup } from './picker-group.js';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -94,7 +94,7 @@ function getRegionColumnsCount(level) {
94
94
  // 默认显示省市区/县三列
95
95
  }
96
96
  }
97
- const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
97
+ const Picker = /*#__PURE__*/React__default.forwardRef((props, ref) => {
98
98
  var _a, _b;
99
99
  const {
100
100
  mode = 'selector',
@@ -117,11 +117,11 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
117
117
  formType
118
118
  } = props,
119
119
  restProps = __rest(props, ["mode", "disabled", "range", "rangeKey", "value", "start", "end", "fields", "headerText", "level", "regionData", "textProps", "onChange", "onColumnChange", "onCancel", "children", "style", "formType"]);
120
- const indexRef = React.useRef([]);
121
- const pickerDateRef = React.useRef();
120
+ const indexRef = React__default.useRef([]);
121
+ const pickerDateRef = React__default.useRef();
122
122
  // 记录是否是用户滚动
123
- const isInitializationCompletedRef = React.useRef(false);
124
- const [state, setState] = React.useState({
123
+ const isInitializationCompletedRef = React__default.useRef(false);
124
+ const [state, setState] = React__default.useState({
125
125
  pickerValue: value || EMPTY_ARRAY,
126
126
  selectedIndices: EMPTY_ARRAY.slice(),
127
127
  // 索引数组
@@ -131,17 +131,17 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
131
131
  timestamp: 0 // 用以部分模式下强制刷新组件的的时间戳,多用于反复限位
132
132
  });
133
133
  // 在组件内部
134
- const [columnsCount, setColumnsCount] = React.useState(() => getRegionColumnsCount(level));
134
+ const [columnsCount, setColumnsCount] = React__default.useState(() => getRegionColumnsCount(level));
135
135
  // 只在level变化时更新列数
136
- React.useEffect(() => {
136
+ React__default.useEffect(() => {
137
137
  setColumnsCount(getRegionColumnsCount(level));
138
138
  }, [level]);
139
139
  // 获取当前索引数组
140
- const getIndices = React.useCallback(() => {
140
+ const getIndices = React__default.useCallback(() => {
141
141
  return indexRef.current;
142
142
  }, []);
143
143
  // 处理属性变化
144
- const handleProps = React.useCallback(() => {
144
+ const handleProps = React__default.useCallback(() => {
145
145
  var _a;
146
146
  if (mode === 'selector') {
147
147
  const val = value;
@@ -239,20 +239,20 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
239
239
  }));
240
240
  }, [mode, range, value, start, end, fields, regionData, level, columnsCount, getIndices]);
241
241
  // 组件初始化
242
- React.useEffect(() => {
242
+ React__default.useEffect(() => {
243
243
  setState(prev => Object.assign(Object.assign({}, prev), {
244
244
  isWillLoadCalled: true
245
245
  }));
246
246
  handleProps();
247
247
  }, []);
248
248
  // 属性变化监听 - 添加 value 依赖以支持联动选择器
249
- React.useEffect(() => {
249
+ React__default.useEffect(() => {
250
250
  if (state.isWillLoadCalled) {
251
251
  handleProps();
252
252
  }
253
253
  }, [handleProps, state.isWillLoadCalled, JSON.stringify(value)]);
254
254
  // 显示 Picker
255
- const showPicker = React.useCallback(() => {
255
+ const showPicker = React__default.useCallback(() => {
256
256
  if (disabled) return;
257
257
  isInitializationCompletedRef.current = false;
258
258
  const newIndices = getIndices();
@@ -262,7 +262,7 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
262
262
  }));
263
263
  }, [disabled, getIndices]);
264
264
  // 隐藏 Picker
265
- const hidePicker = React.useCallback(() => {
265
+ const hidePicker = React__default.useCallback(() => {
266
266
  isInitializationCompletedRef.current = false;
267
267
  setState(prev => Object.assign(Object.assign({}, prev), {
268
268
  fadeOut: true
@@ -275,7 +275,7 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
275
275
  }, 350);
276
276
  }, []);
277
277
  // 更新索引
278
- const updateIndex = React.useCallback(function (index, columnId) {
278
+ const updateIndex = React__default.useCallback(function (index, columnId) {
279
279
  let needRevise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
280
280
  let isUserScrollRef = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
281
281
  const columnIndex = Number(columnId);
@@ -353,7 +353,7 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
353
353
  return false; // 没有限位
354
354
  }, [start, end, mode, regionData, state.selectedIndices, columnsCount]);
355
355
  // 更新日期
356
- const updateDay = React.useCallback((value, fields) => {
356
+ const updateDay = React__default.useCallback((value, fields) => {
357
357
  if (!pickerDateRef.current) return;
358
358
  const {
359
359
  _start,
@@ -431,7 +431,7 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
431
431
  }
432
432
  }, [state.selectedIndices]);
433
433
  // 处理确认
434
- const handleChange = React.useCallback(() => {
434
+ const handleChange = React__default.useCallback(() => {
435
435
  const newIndices = [...state.selectedIndices];
436
436
  indexRef.current = newIndices;
437
437
  let newValue = newIndices.length && mode !== 'selector' ? newIndices : newIndices[0];
@@ -557,7 +557,7 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
557
557
  });
558
558
  }, [hidePicker, state.selectedIndices, mode, fields, onChange, regionData, columnsCount]);
559
559
  // 处理列变化
560
- const handleColumnChange = React.useCallback(e => {
560
+ const handleColumnChange = React__default.useCallback(e => {
561
561
  const {
562
562
  columnId,
563
563
  index
@@ -570,12 +570,12 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
570
570
  });
571
571
  }, [onColumnChange]);
572
572
  // 处理取消
573
- const handleCancel = React.useCallback(() => {
573
+ const handleCancel = React__default.useCallback(() => {
574
574
  hidePicker();
575
575
  onCancel === null || onCancel === void 0 ? void 0 : onCancel();
576
576
  }, [hidePicker, onCancel]);
577
577
  // 渲染选择器组
578
- const renderPickerGroup = React.useMemo(() => {
578
+ const renderPickerGroup = React__default.useMemo(() => {
579
579
  switch (mode) {
580
580
  case 'multiSelector':
581
581
  {
@@ -699,7 +699,7 @@ const Picker = /*#__PURE__*/React.forwardRef((props, ref) => {
699
699
  'taro-picker__animate-slide-down': state.fadeOut
700
700
  });
701
701
  // 暴露方法给外部
702
- React.useImperativeHandle(ref, () => ({
702
+ React__default.useImperativeHandle(ref, () => ({
703
703
  showPicker,
704
704
  hidePicker
705
705
  }));