@tarojs/components-advanced 3.7.0-alpha.2 → 3.7.0-alpha.20

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 (81) hide show
  1. package/dist/components/index.d.ts +2 -1
  2. package/dist/components/index.js +1 -0
  3. package/dist/components/index.js.map +1 -1
  4. package/dist/components/virtual-list/index.d.ts +49 -30
  5. package/dist/components/virtual-list/index.js.map +1 -1
  6. package/dist/components/virtual-list/list-set.d.ts +5 -1
  7. package/dist/components/virtual-list/list-set.js +24 -59
  8. package/dist/components/virtual-list/list-set.js.map +1 -1
  9. package/dist/components/virtual-list/preset.d.ts +25 -10
  10. package/dist/components/virtual-list/preset.js +116 -60
  11. package/dist/components/virtual-list/preset.js.map +1 -1
  12. package/dist/components/virtual-list/react/index.d.ts +2 -2
  13. package/dist/components/virtual-list/react/index.js +8 -16
  14. package/dist/components/virtual-list/react/index.js.map +1 -1
  15. package/dist/components/virtual-list/react/list.d.ts +8 -7
  16. package/dist/components/virtual-list/react/list.js +141 -127
  17. package/dist/components/virtual-list/react/list.js.map +1 -1
  18. package/dist/components/virtual-list/react/validate.d.ts +3 -3
  19. package/dist/components/virtual-list/react/validate.js +8 -14
  20. package/dist/components/virtual-list/react/validate.js.map +1 -1
  21. package/dist/components/virtual-list/react/wrapper.d.ts +3 -0
  22. package/dist/components/virtual-list/react/wrapper.js +58 -0
  23. package/dist/components/virtual-list/react/wrapper.js.map +1 -0
  24. package/dist/components/virtual-list/utils.d.ts +1 -4
  25. package/dist/components/virtual-list/utils.js +1 -28
  26. package/dist/components/virtual-list/utils.js.map +1 -1
  27. package/dist/components/virtual-list/vue/index.d.ts +1 -1
  28. package/dist/components/virtual-list/vue/list.d.ts +407 -51
  29. package/dist/components/virtual-list/vue/list.js +198 -169
  30. package/dist/components/virtual-list/vue/list.js.map +1 -1
  31. package/dist/components/virtual-waterfall/constants.d.ts +2 -0
  32. package/dist/components/virtual-waterfall/constants.js +4 -0
  33. package/dist/components/virtual-waterfall/constants.js.map +1 -0
  34. package/dist/components/virtual-waterfall/index.d.ts +249 -0
  35. package/dist/components/virtual-waterfall/index.js +6 -0
  36. package/dist/components/virtual-waterfall/index.js.map +1 -0
  37. package/dist/components/virtual-waterfall/list-map.d.ts +50 -0
  38. package/dist/components/virtual-waterfall/list-map.js +280 -0
  39. package/dist/components/virtual-waterfall/list-map.js.map +1 -0
  40. package/dist/components/virtual-waterfall/preset.d.ts +60 -0
  41. package/dist/components/virtual-waterfall/preset.js +170 -0
  42. package/dist/components/virtual-waterfall/preset.js.map +1 -0
  43. package/dist/components/virtual-waterfall/react/index.d.ts +4 -0
  44. package/dist/components/virtual-waterfall/react/index.js +26 -0
  45. package/dist/components/virtual-waterfall/react/index.js.map +1 -0
  46. package/dist/components/virtual-waterfall/react/waterfall.d.ts +42 -0
  47. package/dist/components/virtual-waterfall/react/waterfall.js +316 -0
  48. package/dist/components/virtual-waterfall/react/waterfall.js.map +1 -0
  49. package/dist/components/virtual-waterfall/react/wrapper.d.ts +3 -0
  50. package/dist/components/virtual-waterfall/react/wrapper.js +50 -0
  51. package/dist/components/virtual-waterfall/react/wrapper.js.map +1 -0
  52. package/dist/components/virtual-waterfall/vue/index.d.ts +17 -0
  53. package/dist/components/virtual-waterfall/vue/index.js +12 -0
  54. package/dist/components/virtual-waterfall/vue/index.js.map +1 -0
  55. package/dist/components/virtual-waterfall/vue/waterfall.d.ts +443 -0
  56. package/dist/components/virtual-waterfall/vue/waterfall.js +410 -0
  57. package/dist/components/virtual-waterfall/vue/waterfall.js.map +1 -0
  58. package/dist/index.d.ts +2 -2
  59. package/dist/index.js +4 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/utils/convert.d.ts +2 -2
  62. package/dist/utils/convert.js.map +1 -1
  63. package/dist/utils/dom.d.ts +7 -0
  64. package/dist/utils/dom.js +45 -0
  65. package/dist/utils/dom.js.map +1 -0
  66. package/dist/utils/helper.d.ts +10 -0
  67. package/dist/utils/helper.js +51 -0
  68. package/dist/utils/helper.js.map +1 -0
  69. package/dist/utils/index.d.ts +6 -4
  70. package/dist/utils/index.js +3 -1
  71. package/dist/utils/index.js.map +1 -1
  72. package/dist/utils/lodash.d.ts +3 -1
  73. package/dist/utils/lodash.js +30 -1
  74. package/dist/utils/lodash.js.map +1 -1
  75. package/dist/utils/math.js.map +1 -1
  76. package/dist/utils/vue-render.d.ts +4 -0
  77. package/dist/{components/virtual-list/vue/render.js → utils/vue-render.js} +2 -2
  78. package/dist/utils/vue-render.js.map +1 -0
  79. package/package.json +8 -6
  80. package/dist/components/virtual-list/vue/render.d.ts +0 -4
  81. package/dist/components/virtual-list/vue/render.js.map +0 -1
@@ -1,15 +1,21 @@
1
+ import { isWebPlatform } from '@tarojs/shared';
2
+ import { createSelectorQuery, getCurrentInstance, createIntersectionObserver } from '@tarojs/taro';
1
3
  import memoizeOne from 'memoize-one';
2
4
  import '../../utils/index.js';
3
5
  import ListSet from './list-set.js';
4
6
  import { isHorizontalFunc, isRtlFunc } from './utils.js';
5
- import { isCosDistributing } from '../../utils/math.js';
6
7
  import { convertNumber2PX } from '../../utils/convert.js';
8
+ import { getRectSizeSync } from '../../utils/dom.js';
9
+ import { isCosDistributing } from '../../utils/math.js';
10
+ import { throttle } from '../../utils/lodash.js';
7
11
 
12
+ const isWeb = isWebPlatform();
8
13
  let INSTANCE_ID = 0;
9
14
  class Preset {
10
15
  constructor(props, refresh) {
11
16
  this.props = props;
12
17
  this.refresh = refresh;
18
+ this._observer = {};
13
19
  this.wrapperField = {
14
20
  scrollLeft: 0,
15
21
  scrollTop: 0,
@@ -20,9 +26,28 @@ class Preset {
20
26
  diffOffset: 0
21
27
  };
22
28
  this.diffList = [0, 0, 0];
23
- this.getItemStyleCache = memoizeOne((_itemSize, _layout, _direction) => {
24
- // TODO: Cache of item styles, keyed by item index.
25
- return {};
29
+ this.getItemStyleCache = memoizeOne((itemIndex, itemSize, _flag = this.itemList.refreshCounter) => {
30
+ itemSize = itemSize || this.itemList.getSize(itemIndex);
31
+ const style = this.isRelative ? {} : {
32
+ position: 'absolute',
33
+ };
34
+ const offset = convertNumber2PX(this.itemList.getOffsetSizeCache(itemIndex));
35
+ const size = convertNumber2PX(this.itemList.getSize(itemIndex));
36
+ const isHorizontal = this.isHorizontal;
37
+ const isRtl = this.isRtl;
38
+ style.height = !isHorizontal ? size : '100%';
39
+ style.width = isHorizontal ? size : '100%';
40
+ if (!this.isRelative) {
41
+ const offsetHorizontal = isHorizontal ? offset : 0;
42
+ style.top = !isHorizontal ? offset : 0;
43
+ if (isRtl) {
44
+ style.right = offsetHorizontal;
45
+ }
46
+ else {
47
+ style.left = offsetHorizontal;
48
+ }
49
+ }
50
+ return style;
26
51
  });
27
52
  this.init(this.props);
28
53
  this.itemList = new ListSet(props, refresh);
@@ -34,8 +59,33 @@ class Preset {
34
59
  this.props = props;
35
60
  this.itemList.update(props);
36
61
  }
62
+ async updateWrapper(id) {
63
+ var _a;
64
+ var _b, _c;
65
+ this.id = id;
66
+ const { width = 0, height = 0 } = this.props;
67
+ const validWidth = typeof width === 'number' && width > 0;
68
+ const validHeight = typeof height === 'number' && height > 0;
69
+ if (validWidth) {
70
+ this.itemList.wrapperWidth = width;
71
+ }
72
+ if (validHeight) {
73
+ this.itemList.wrapperHeight = height;
74
+ }
75
+ if (!validHeight || !validWidth) {
76
+ const res = await getRectSizeSync(`#${id}`, 100);
77
+ (_b = this.itemList).wrapperWidth || (_b.wrapperWidth = res.width);
78
+ (_c = this.itemList).wrapperHeight || (_c.wrapperHeight = res.height);
79
+ (_a = this.refresh) === null || _a === void 0 ? void 0 : _a.call(this);
80
+ }
81
+ this.itemList.update(this.props);
82
+ }
83
+ set id(id) {
84
+ this._id = id;
85
+ }
37
86
  get id() {
38
- return `virtual-list-${INSTANCE_ID++}`;
87
+ this._id || (this._id = `virtual-waterfall-${INSTANCE_ID++}`);
88
+ return this._id;
39
89
  }
40
90
  get isHorizontal() {
41
91
  return isHorizontalFunc(this.props);
@@ -44,18 +94,21 @@ class Preset {
44
94
  return isRtlFunc(this.props);
45
95
  }
46
96
  get isRelative() {
47
- return this.props.position === 'relative';
97
+ return this.props.position && this.props.position !== 'absolute';
98
+ }
99
+ get isBrick() {
100
+ return this.props.position === 'brick';
48
101
  }
49
102
  get placeholderCount() {
50
103
  return this.props.placeholderCount >= 0 ? this.props.placeholderCount : this.props.overscanCount;
51
104
  }
52
- get outerTagName() {
105
+ get outerElement() {
53
106
  return this.props.outerElementType || this.props.outerTagName || 'div';
54
107
  }
55
- get innerTagName() {
108
+ get innerElement() {
56
109
  return this.props.innerElementType || this.props.innerTagName || 'div';
57
110
  }
58
- get itemTagName() {
111
+ get itemElement() {
59
112
  return this.props.itemElementType || this.props.itemTagName || 'div';
60
113
  }
61
114
  get field() {
@@ -69,65 +122,68 @@ class Preset {
69
122
  // }
70
123
  // })
71
124
  }
125
+ get enhanced() {
126
+ return this.props.enhanced || true;
127
+ }
72
128
  isShaking(diff) {
129
+ if (isWeb || this.props.enhanced)
130
+ return false;
73
131
  const list = this.diffList.slice(-3);
74
132
  this.diffList.push(diff);
75
133
  return list.findIndex(e => Math.abs(e) === Math.abs(diff)) !== -1 || isCosDistributing(this.diffList.slice(-4));
76
134
  }
135
+ resetCache() {
136
+ this.itemList.refreshCounter++;
137
+ }
77
138
  getItemStyle(index) {
78
- const { direction, itemSize, layout, shouldResetStyleCacheOnItemSizeChange } = this.props;
79
- const itemStyleCache = this.getItemStyleCache(shouldResetStyleCacheOnItemSizeChange ? itemSize : false, shouldResetStyleCacheOnItemSizeChange ? layout : false, shouldResetStyleCacheOnItemSizeChange ? direction : false);
80
- let style;
81
- const offset = convertNumber2PX(this.itemList.getOffsetSize(index));
82
- const size = convertNumber2PX(this.itemList.getSize(index));
83
- const isHorizontal = this.isHorizontal;
84
- const isRtl = this.isRtl;
85
- if (itemStyleCache.hasOwnProperty(index)) {
86
- // Note: style is frozen.
87
- style = Object.assign({}, itemStyleCache[index]);
88
- if (isHorizontal) {
89
- style.width = size;
90
- if (!this.isRelative) {
91
- if (isRtl) {
92
- style.right = offset;
93
- }
94
- else {
95
- style.left = offset;
96
- }
97
- }
98
- }
99
- else {
100
- style.height = size;
101
- if (!this.isRelative) {
102
- style.top = offset;
103
- }
104
- }
105
- }
106
- else {
107
- if (this.isRelative) {
108
- itemStyleCache[index] = style = {
109
- height: !isHorizontal ? size : '100%',
110
- width: isHorizontal ? size : '100%'
111
- };
112
- }
113
- else {
114
- const offsetHorizontal = isHorizontal ? offset : 0;
115
- itemStyleCache[index] = style = {
116
- position: 'absolute',
117
- left: !isRtl ? offsetHorizontal : undefined,
118
- right: isRtl ? offsetHorizontal : undefined,
119
- top: !isHorizontal ? offset : 0,
120
- height: !isHorizontal ? size : '100%',
121
- width: isHorizontal ? size : '100%'
122
- };
139
+ const { shouldResetStyleCacheOnItemSizeChange } = this.props;
140
+ return this.getItemStyleCache(index, shouldResetStyleCacheOnItemSizeChange ? this.itemList.getSize(index) : false);
141
+ }
142
+ boundaryDetection() {
143
+ if ([typeof this.props.onScrollToUpper, typeof this.props.onScrollToLower].every(e => e !== 'function'))
144
+ return;
145
+ createSelectorQuery().select(`#${this.id}`).node().exec(() => {
146
+ const upperObserver = this.boundaryDetectionHelper({
147
+ event: typeof this.props.onScrollToUpper === 'function' ? () => {
148
+ if (this.field.diffOffset >= 0)
149
+ this.props.onScrollToUpper();
150
+ } : undefined,
151
+ id: `${this.id}-${this.isHorizontal ? this.isRtl ? 'right' : 'left' : 'top'}`,
152
+ });
153
+ if (upperObserver) {
154
+ this._observer.top = upperObserver;
123
155
  }
124
- }
125
- for (const k in style) {
126
- if (style.hasOwnProperty(k)) {
127
- style[k] = convertNumber2PX(style[k]);
156
+ const lowerObserver = this.boundaryDetectionHelper({
157
+ event: typeof this.props.onScrollToLower === 'function' ? () => {
158
+ if (this.field.diffOffset <= 0)
159
+ this.props.onScrollToLower();
160
+ } : undefined,
161
+ id: `${this.id}-${this.isHorizontal ? this.isRtl ? 'left' : 'right' : 'bottom'}`,
162
+ });
163
+ if (lowerObserver) {
164
+ this._observer.bottom = lowerObserver;
128
165
  }
129
- }
130
- return style;
166
+ });
167
+ }
168
+ boundaryDetectionHelper({ component, event, id, }) {
169
+ if (typeof event !== 'function')
170
+ return;
171
+ const eventFunc = throttle(event);
172
+ component || (component = getCurrentInstance().page);
173
+ const observer = createIntersectionObserver(component, {
174
+ thresholds: [0.4],
175
+ });
176
+ observer
177
+ .relativeTo(`#${this.id}`, {
178
+ top: typeof this.props.lowerThreshold === 'number' ? this.props.lowerThreshold : 50,
179
+ bottom: typeof this.props.upperThreshold === 'number' ? this.props.upperThreshold : 50,
180
+ })
181
+ .observe(`#${id}`, eventFunc);
182
+ return observer;
183
+ }
184
+ dispose() {
185
+ Object.values(this._observer).forEach(e => { var _a; return (_a = e.disconnect) === null || _a === void 0 ? void 0 : _a.call(e); });
186
+ this._observer = {};
131
187
  }
132
188
  }
133
189
 
@@ -1 +1 @@
1
- {"version":3,"file":"preset.js","sources":["../../../src/components/virtual-list/preset.ts"],"sourcesContent":["import memoizeOne from 'memoize-one'\n\nimport { convertNumber2PX, isCosDistributing } from '../../utils'\nimport ListSet from './list-set'\nimport { defaultItemKey, isHorizontalFunc, isRtlFunc } from './utils'\n\nimport type { VirtualListProps } from './'\n\nlet INSTANCE_ID = 0\n\nexport interface IProps extends Partial<VirtualListProps> {\n children?: VirtualListProps['item']\n direction?: 'ltr' | 'rtl' | 'horizontal' | 'vertical'\n itemKey?: typeof defaultItemKey\n itemTagName?: string\n innerTagName?: string\n outerTagName?: string\n itemElementType?: React.ComponentType | string\n outerElementType?: React.ComponentType | string\n innerRef?: React.Ref<HTMLElement> | string\n outerRef?: React.Ref<HTMLElement> | string\n onItemsRendered?: TFunc\n shouldResetStyleCacheOnItemSizeChange?: boolean\n}\n\nexport default class Preset {\n itemList: ListSet\n\n constructor (protected props: IProps, protected refresh?: TFunc) {\n this.init(this.props)\n this.itemList = new ListSet(props, refresh)\n }\n\n wrapperField = {\n scrollLeft: 0,\n scrollTop: 0,\n scrollHeight: 0,\n scrollWidth: 0,\n clientHeight: 0,\n clientWidth: 0,\n diffOffset: 0\n }\n\n diffList: number[] = [0, 0, 0]\n\n init (props: IProps) {\n this.props = props\n }\n\n update (props: IProps) {\n this.props = props\n this.itemList.update(props)\n }\n\n get id () {\n return `virtual-list-${INSTANCE_ID++}`\n }\n\n get isHorizontal () {\n return isHorizontalFunc(this.props)\n }\n\n get isRtl () {\n return isRtlFunc(this.props)\n }\n\n get isRelative () {\n return this.props.position === 'relative'\n }\n\n get placeholderCount () {\n return this.props.placeholderCount >= 0 ? this.props.placeholderCount : this.props.overscanCount\n }\n\n get outerTagName () {\n return this.props.outerElementType || this.props.outerTagName || 'div'\n }\n\n get innerTagName () {\n return this.props.innerElementType || this.props.innerTagName || 'div'\n }\n\n get itemTagName () {\n return this.props.itemElementType || this.props.itemTagName || 'div'\n }\n\n get field () {\n return this.wrapperField\n }\n\n set field (o: Record<string, number>) {\n Object.assign(this.wrapperField, o)\n // Object.keys(o).forEach(key => {\n // if (typeof o[key] === 'number' && typeof this.wrapperField[key] === 'number') {\n // this.wrapperField[key] = o[key]\n // }\n // })\n }\n\n isShaking (diff?: number) {\n const list = this.diffList.slice(-3)\n this.diffList.push(diff)\n return list.findIndex(e => Math.abs(e) === Math.abs(diff)) !== -1 || isCosDistributing(this.diffList.slice(-4))\n }\n\n getItemStyleCache = memoizeOne((\n _itemSize?: IProps['itemSize'] | false,\n _layout?: IProps['layout'] | false,\n _direction?: IProps['direction'] | false\n ) => {\n // TODO: Cache of item styles, keyed by item index.\n return {}\n })\n\n getItemStyle (index: number) {\n const {\n direction,\n itemSize,\n layout,\n shouldResetStyleCacheOnItemSizeChange\n } = this.props\n\n const itemStyleCache = this.getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange ? itemSize : false,\n shouldResetStyleCacheOnItemSizeChange ? layout : false,\n shouldResetStyleCacheOnItemSizeChange ? direction : false\n )\n\n let style\n\n const offset = convertNumber2PX(this.itemList.getOffsetSize(index))\n const size = convertNumber2PX(this.itemList.getSize(index))\n const isHorizontal = this.isHorizontal\n const isRtl = this.isRtl\n if (itemStyleCache.hasOwnProperty(index)) {\n // Note: style is frozen.\n style = { ...itemStyleCache[index] }\n if (isHorizontal) {\n style.width = size\n if (!this.isRelative) {\n if (isRtl) {\n style.right = offset\n } else {\n style.left = offset\n }\n }\n } else {\n style.height = size\n if (!this.isRelative) {\n style.top = offset\n }\n }\n } else {\n if (this.isRelative) {\n itemStyleCache[index] = style = {\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n }\n } else {\n const offsetHorizontal = isHorizontal ? offset : 0\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: !isRtl ? offsetHorizontal : undefined,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n }\n }\n }\n\n for (const k in style) {\n if (style.hasOwnProperty(k)) {\n style[k] = convertNumber2PX(style[k])\n }\n }\n\n return style\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preset.js","sources":["../../../src/components/virtual-list/preset.ts"],"sourcesContent":["import { isWebPlatform } from '@tarojs/shared'\nimport { type IntersectionObserver, createIntersectionObserver, createSelectorQuery, getCurrentInstance } from '@tarojs/taro'\nimport * as CSS from 'csstype'\nimport memoizeOne from 'memoize-one'\n\nimport { convertNumber2PX, defaultItemKey, getRectSizeSync, isCosDistributing, throttle } from '../../utils'\nimport ListSet from './list-set'\nimport { isHorizontalFunc, isRtlFunc } from './utils'\n\nimport type { VirtualListProps } from './'\n\nconst isWeb = isWebPlatform()\n\nlet INSTANCE_ID = 0\n\nexport interface IProps extends Partial<VirtualListProps> {\n children?: VirtualListProps['item']\n direction?: 'ltr' | 'rtl' | 'horizontal' | 'vertical'\n itemKey?: typeof defaultItemKey\n itemTagName?: string\n innerTagName?: string\n outerTagName?: string\n innerRef?: React.Ref<HTMLElement> | string\n outerRef?: React.Ref<HTMLElement> | string\n onItemsRendered?: TFunc\n shouldResetStyleCacheOnItemSizeChange?: boolean\n outerWrapper?: React.FC\n}\n\nexport default class Preset {\n itemList: ListSet\n _id: string\n _observer: Record<string, IntersectionObserver> = {}\n\n constructor (protected props: IProps, protected refresh?: TFunc) {\n this.init(this.props)\n this.itemList = new ListSet(props, refresh)\n }\n\n wrapperField = {\n scrollLeft: 0,\n scrollTop: 0,\n scrollHeight: 0,\n scrollWidth: 0,\n clientHeight: 0,\n clientWidth: 0,\n diffOffset: 0\n }\n\n diffList: number[] = [0, 0, 0]\n\n init (props: IProps) {\n this.props = props\n }\n\n update (props: IProps) {\n this.props = props\n this.itemList.update(props)\n }\n\n async updateWrapper (id: string) {\n this.id = id\n const { width = 0, height = 0 } = this.props\n const validWidth = typeof width === 'number' && width > 0\n const validHeight = typeof height === 'number' && height > 0\n if (validWidth) {\n this.itemList.wrapperWidth = width\n }\n if (validHeight) {\n this.itemList.wrapperHeight = height\n }\n\n if (!validHeight || !validWidth) {\n const res = await getRectSizeSync(`#${id}`, 100)\n this.itemList.wrapperWidth ||= res.width\n this.itemList.wrapperHeight ||= res.height\n this.refresh?.()\n }\n\n this.itemList.update(this.props)\n }\n\n set id (id: string) {\n this._id = id\n }\n\n get id () {\n this._id ||= `virtual-waterfall-${INSTANCE_ID++}`\n return this._id\n }\n\n get isHorizontal () {\n return isHorizontalFunc(this.props)\n }\n\n get isRtl () {\n return isRtlFunc(this.props)\n }\n\n get isRelative () {\n return this.props.position && this.props.position !== 'absolute'\n }\n\n get isBrick () {\n return this.props.position === 'brick'\n }\n\n get placeholderCount () {\n return this.props.placeholderCount >= 0 ? this.props.placeholderCount : this.props.overscanCount\n }\n\n get outerElement () {\n return this.props.outerElementType || this.props.outerTagName || 'div'\n }\n\n get innerElement () {\n return this.props.innerElementType || this.props.innerTagName || 'div'\n }\n\n get itemElement () {\n return this.props.itemElementType || this.props.itemTagName || 'div'\n }\n\n get field () {\n return this.wrapperField\n }\n\n set field (o: Record<string, number>) {\n Object.assign(this.wrapperField, o)\n // Object.keys(o).forEach(key => {\n // if (typeof o[key] === 'number' && typeof this.wrapperField[key] === 'number') {\n // this.wrapperField[key] = o[key]\n // }\n // })\n }\n\n get enhanced () {\n return this.props.enhanced || true\n }\n\n isShaking (diff?: number) {\n if (isWeb || this.props.enhanced) return false\n const list = this.diffList.slice(-3)\n this.diffList.push(diff)\n return list.findIndex(e => Math.abs(e) === Math.abs(diff)) !== -1 || isCosDistributing(this.diffList.slice(-4))\n }\n\n resetCache () {\n this.itemList.refreshCounter++\n }\n\n getItemStyleCache = memoizeOne((\n itemIndex?: number,\n itemSize?: IProps['itemSize'] | false,\n _flag = this.itemList.refreshCounter\n ) => {\n itemSize = itemSize || this.itemList.getSize(itemIndex)\n const style: CSS.Properties<string | number> = this.isRelative ? {} : {\n position: 'absolute',\n }\n const offset = convertNumber2PX(this.itemList.getOffsetSizeCache(itemIndex))\n const size = convertNumber2PX(this.itemList.getSize(itemIndex))\n const isHorizontal = this.isHorizontal\n const isRtl = this.isRtl\n style.height = !isHorizontal ? size : '100%'\n style.width = isHorizontal ? size : '100%'\n if (!this.isRelative) {\n const offsetHorizontal = isHorizontal ? offset : 0\n style.top = !isHorizontal ? offset : 0\n if (isRtl) {\n style.right = offsetHorizontal\n } else {\n style.left = offsetHorizontal\n }\n }\n\n return style\n })\n\n getItemStyle (index: number) {\n const {\n shouldResetStyleCacheOnItemSizeChange\n } = this.props\n\n return this.getItemStyleCache(\n index,\n shouldResetStyleCacheOnItemSizeChange ? this.itemList.getSize(index) : false,\n )\n }\n\n boundaryDetection () {\n if ([typeof this.props.onScrollToUpper, typeof this.props.onScrollToLower].every(e => e !== 'function')) return\n\n createSelectorQuery().select(`#${this.id}`).node().exec(() => {\n const upperObserver = this.boundaryDetectionHelper({\n event: typeof this.props.onScrollToUpper === 'function' ? () => {\n if (this.field.diffOffset >= 0) this.props.onScrollToUpper()\n } : undefined,\n id: `${this.id}-${this.isHorizontal ? this.isRtl ? 'right' : 'left' : 'top'}`,\n })\n if (upperObserver) {\n this._observer.top = upperObserver\n }\n\n const lowerObserver = this.boundaryDetectionHelper({\n event: typeof this.props.onScrollToLower === 'function' ? () => {\n if (this.field.diffOffset <= 0) this.props.onScrollToLower()\n } : undefined,\n id: `${this.id}-${this.isHorizontal ? this.isRtl ? 'left' : 'right' : 'bottom'}`,\n })\n if (lowerObserver) {\n this._observer.bottom = lowerObserver\n }\n })\n }\n\n boundaryDetectionHelper ({\n component,\n event,\n id,\n }: {\n component?: TaroGeneral.IAnyObject\n event?: () => void\n id: string\n }) {\n if (typeof event !== 'function') return\n const eventFunc = throttle(event)\n\n component ||= getCurrentInstance().page\n const observer = createIntersectionObserver(component, {\n thresholds: [0.4],\n })\n\n observer\n .relativeTo(`#${this.id}`, {\n top: typeof this.props.lowerThreshold === 'number' ? this.props.lowerThreshold : 50,\n bottom: typeof this.props.upperThreshold === 'number' ? this.props.upperThreshold : 50,\n })\n .observe(`#${id}`, eventFunc)\n\n return observer\n }\n\n dispose () {\n Object.values(this._observer).forEach(e => e.disconnect?.())\n this._observer = {}\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- import { VirtualListProps } from "../index";
3
- declare const VirtualList: React.ForwardRefExoticComponent<Pick<VirtualListProps, "id" | "className" | "style" | "key" | "hidden" | "animation" | "dangerouslySetInnerHTML" | "onTouchStart" | "onTouchMove" | "onTouchCancel" | "onTouchEnd" | "onClick" | "onLongPress" | "onLongClick" | "onTransitionEnd" | "onAnimationStart" | "onAnimationIteration" | "onAnimationEnd" | "onTouchForceChange" | "height" | "width" | "item" | "itemCount" | "itemData" | "itemSize" | "unlimitedSize" | "position" | "initialScrollOffset" | "innerElementType" | "enhanced" | "renderTop" | "renderBottom" | "layout" | "onScroll" | "onScrollNative" | "overscanCount" | "placeholderCount" | "useIsScrolling"> & React.RefAttributes<unknown>>;
2
+ import { VirtualListProps } from "../index.js";
3
+ declare const VirtualList: React.ForwardRefExoticComponent<Omit<VirtualListProps<any>, "ref"> & React.RefAttributes<unknown>>;
4
4
  export { VirtualList as default };
@@ -1,22 +1,11 @@
1
1
  import { __rest } from '../../../node_modules/.pnpm/registry.npmjs.org_tslib@2.5.0/node_modules/tslib/tslib.es6.js';
2
2
  import { ScrollView, View } from '@tarojs/components';
3
3
  import React from 'react';
4
- import { convertPX2Int } from '../../../utils/convert.js';
5
4
  import List from './list.js';
5
+ import outerWrapper from './wrapper.js';
6
6
 
7
- const OuterScrollView = React.forwardRef(function OuterScrollView(props, ref) {
8
- const _a = props, { style, onScroll, onScrollNative, layout } = _a, rest = __rest(_a, ["style", "onScroll", "onScrollNative", "layout"]);
9
- const handleScroll = (event) => {
10
- onScroll(Object.assign(Object.assign({}, event), { currentTarget: Object.assign(Object.assign({}, event.detail), { clientWidth: convertPX2Int(style.width), clientHeight: convertPX2Int(style.height) }) }));
11
- if (typeof onScrollNative === 'function') {
12
- onScrollNative(event);
13
- }
14
- };
15
- return React.createElement(ScrollView, Object.assign({ ref,
16
- style, scrollY: layout === 'vertical', scrollX: layout === 'horizontal', onScroll: handleScroll }, rest));
17
- });
18
7
  const VirtualList = React.forwardRef(function VirtualList(props, ref) {
19
- const _a = props, { direction = 'ltr', innerElementType = View, itemElementType = View, initialScrollOffset = 0, overscanCount = 1 } = _a, rest = __rest(_a, ["direction", "innerElementType", "itemElementType", "initialScrollOffset", "overscanCount"]);
8
+ const _a = props, { direction = 'ltr', outerElementType = ScrollView, innerElementType = View, itemElementType = View, initialScrollOffset = 0, overscanCount = 1 } = _a, rest = __rest(_a, ["direction", "outerElementType", "innerElementType", "itemElementType", "initialScrollOffset", "overscanCount"]);
20
9
  if ('children' in rest) {
21
10
  console.warn('Taro(VirtualList): children props have been deprecated. ' + 'Please use the item props instead.');
22
11
  rest.item = rest.children;
@@ -25,10 +14,13 @@ const VirtualList = React.forwardRef(function VirtualList(props, ref) {
25
14
  console.warn('Taro(VirtualList): item should not be an array');
26
15
  rest.item = rest.item[0];
27
16
  }
28
- return React.createElement(List, Object.assign(Object.assign({ ref }, rest), { itemElementType,
29
- innerElementType, outerElementType: OuterScrollView, direction,
17
+ return React.createElement(List, Object.assign(Object.assign({ ref }, rest), { outerElementType,
18
+ itemElementType,
19
+ innerElementType,
20
+ direction,
30
21
  initialScrollOffset,
31
- overscanCount }));
22
+ overscanCount,
23
+ outerWrapper }));
32
24
  });
33
25
 
34
26
  export { VirtualList as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/virtual-list/react/index.ts"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport React from 'react'\n\nimport { convertPX2Int } from '../../../utils/convert'\nimport List from './list'\n\nimport type { BaseEventOrig } from '@tarojs/components'\nimport type { VirtualListProps } from '../'\nimport type { IProps } from '../preset'\n\nconst OuterScrollView = React.forwardRef(\n function OuterScrollView (props, ref) {\n const { style, onScroll, onScrollNative, layout, ...rest } = props as IProps\n const handleScroll = (event: BaseEventOrig<VirtualListProps.IVirtualListEventDetail>) => {\n onScroll({\n ...event as any,\n currentTarget: {\n ...event.detail,\n clientWidth: convertPX2Int(style.width),\n clientHeight: convertPX2Int(style.height)\n } as any\n })\n\n if (typeof onScrollNative === 'function') {\n onScrollNative(event)\n }\n }\n\n return React.createElement<any>(ScrollView, {\n ref,\n style,\n scrollY: layout === 'vertical',\n scrollX: layout === 'horizontal',\n onScroll: handleScroll,\n ...rest\n })\n }\n)\n\nconst VirtualList = React.forwardRef(function VirtualList (props: VirtualListProps, ref) {\n const {\n direction = 'ltr',\n innerElementType = View,\n itemElementType = View,\n initialScrollOffset = 0,\n overscanCount = 1,\n ...rest\n } = props as IProps\n\n if ('children' in rest) {\n console.warn('Taro(VirtualList): children props have been deprecated. ' + 'Please use the item props instead.')\n rest.item = rest.children as IProps['item']\n }\n if (rest.item instanceof Array) {\n console.warn('Taro(VirtualList): item should not be an array')\n rest.item = rest.item[0]\n }\n return React.createElement(List, {\n ref,\n ...rest,\n itemElementType,\n innerElementType,\n outerElementType: OuterScrollView,\n direction,\n initialScrollOffset,\n overscanCount\n })\n})\n\nexport default VirtualList\n"],"names":[],"mappings":";;;;;;AAUA,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CACtC,SAAS,eAAe,CAAE,KAAK,EAAE,GAAG,EAAA;AAClC,IAAA,MAAM,KAAuD,KAAe,EAAtE,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAA6B,GAAA,EAAA,EAAxB,IAAI,GAAlD,MAAA,CAAA,EAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,CAAoD,CAAkB,CAAA;AAC5E,IAAA,MAAM,YAAY,GAAG,CAAC,KAA8D,KAAI;AACtF,QAAA,QAAQ,CACH,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAY,CACf,EAAA,EAAA,aAAa,EAAE,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACV,KAAK,CAAC,MAAM,CAAA,EAAA,EACf,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EACvC,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAA,CACnC,IACR,CAAA;AAEF,QAAA,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;YACxC,cAAc,CAAC,KAAK,CAAC,CAAA;AACtB,SAAA;AACH,KAAC,CAAA;AAED,IAAA,OAAO,KAAK,CAAC,aAAa,CAAM,UAAU,kBACxC,GAAG;AACH,QAAA,KAAK,EACL,OAAO,EAAE,MAAM,KAAK,UAAU,EAC9B,OAAO,EAAE,MAAM,KAAK,YAAY,EAChC,QAAQ,EAAE,YAAY,EACnB,EAAA,IAAI,EACP,CAAA;AACJ,CAAC,CACF,CAAA;AAEK,MAAA,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,WAAW,CAAE,KAAuB,EAAE,GAAG,EAAA;AACrF,IAAA,MAAM,EAOF,GAAA,KAAe,EAPb,EACJ,SAAS,GAAG,KAAK,EACjB,gBAAgB,GAAG,IAAI,EACvB,eAAe,GAAG,IAAI,EACtB,mBAAmB,GAAG,CAAC,EACvB,aAAa,GAAG,CAAC,EAAA,GAAA,EAEA,EADd,IAAI,GANH,MAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,eAAA,CAOL,CAAkB,CAAA;IAEnB,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,QAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,GAAG,oCAAoC,CAAC,CAAA;AAC/G,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAA0B,CAAA;AAC5C,KAAA;AACD,IAAA,IAAI,IAAI,CAAC,IAAI,YAAY,KAAK,EAAE;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACzB,KAAA;IACD,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,gCAC7B,GAAG,EAAA,EACA,IAAI,CAAA,EAAA,EACP,eAAe;AACf,QAAA,gBAAgB,EAChB,gBAAgB,EAAE,eAAe,EACjC,SAAS;QACT,mBAAmB;AACnB,QAAA,aAAa,IACb,CAAA;AACJ,CAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/virtual-list/react/index.ts"],"sourcesContent":["import { ScrollView, View } from '@tarojs/components'\nimport React from 'react'\n\nimport List from './list'\nimport outerWrapper from './wrapper'\n\nimport type { VirtualListProps } from '../'\nimport type { IProps } from '../preset'\n\nconst VirtualList = React.forwardRef(function VirtualList (props: VirtualListProps, ref) {\n const {\n direction = 'ltr',\n outerElementType = ScrollView,\n innerElementType = View,\n itemElementType = View,\n initialScrollOffset = 0,\n overscanCount = 1,\n ...rest\n } = props as IProps\n\n if ('children' in rest) {\n console.warn('Taro(VirtualList): children props have been deprecated. ' + 'Please use the item props instead.')\n rest.item = rest.children as IProps['item']\n }\n if (rest.item instanceof Array) {\n console.warn('Taro(VirtualList): item should not be an array')\n rest.item = rest.item[0]\n }\n return React.createElement(List, {\n ref,\n ...rest,\n outerElementType,\n itemElementType,\n innerElementType,\n direction,\n initialScrollOffset,\n overscanCount,\n outerWrapper,\n })\n})\n\nexport default VirtualList\n"],"names":[],"mappings":";;;;;;AASM,MAAA,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,WAAW,CAAE,KAAuB,EAAE,GAAG,EAAA;AACrF,IAAA,MAAM,EAQF,GAAA,KAAe,EARb,EACJ,SAAS,GAAG,KAAK,EACjB,gBAAgB,GAAG,UAAU,EAC7B,gBAAgB,GAAG,IAAI,EACvB,eAAe,GAAG,IAAI,EACtB,mBAAmB,GAAG,CAAC,EACvB,aAAa,GAAG,CAAC,OAEA,EADd,IAAI,GAPH,MAAA,CAAA,EAAA,EAAA,CAAA,WAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,eAAA,CAQL,CAAkB,CAAA;IAEnB,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,QAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,GAAG,oCAAoC,CAAC,CAAA;AAC/G,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAA0B,CAAA;AAC5C,KAAA;AACD,IAAA,IAAI,IAAI,CAAC,IAAI,YAAY,KAAK,EAAE;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACzB,KAAA;IACD,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,gCAC7B,GAAG,EAAA,EACA,IAAI,CAAA,EAAA,EACP,gBAAgB;QAChB,eAAe;QACf,gBAAgB;QAChB,SAAS;QACT,mBAAmB;QACnB,aAAa;AACb,QAAA,YAAY,IACZ,CAAA;AACJ,CAAC;;;;"}
@@ -1,9 +1,8 @@
1
1
  import React from 'react';
2
- import ListSet from "../list-set";
3
- import Preset from "../preset";
4
- import { IProps } from "../preset";
2
+ import ListSet from "../list-set.js";
3
+ import Preset from "../preset.js";
4
+ import { IProps } from "../preset.js";
5
5
  interface IState {
6
- id: string;
7
6
  instance: List;
8
7
  isScrolling: boolean;
9
8
  scrollDirection: 'forward' | 'backward';
@@ -20,7 +19,7 @@ declare class List extends React.PureComponent<IProps, IState> {
20
19
  refresh: () => void;
21
20
  _outerRef: any;
22
21
  _resetIsScrollingTimeoutId: any;
23
- _callOnItemsRendered: import("memoize-one").MemoizedFn<(this: any, overscanStartIndex: any, overscanStopIndex: any, visibleStartIndex: any, visibleStopIndex: any) => any>;
22
+ _callOnItemsRendered: import("memoize-one").MemoizedFn<(this: any, overscanStartIndex: any, overscanStopIndex: any, startIndex: any, stopIndex: any) => any>;
24
23
  _callOnScroll: import("memoize-one").MemoizedFn<(this: any, scrollDirection: any, scrollOffset: any, scrollUpdateWasRequested: any, detail: any) => void>;
25
24
  _callPropsCallbacks(prevProps?: any, prevState?: any): void;
26
25
  _getSizeUploadSync: (index: number, isHorizontal: boolean) => Promise<unknown>;
@@ -34,11 +33,13 @@ declare class List extends React.PureComponent<IProps, IState> {
34
33
  _outerRefSetter: (ref: any) => void;
35
34
  _resetIsScrollingDebounced: () => void;
36
35
  _resetIsScrolling: () => void;
37
- scrollTo(scrollOffset?: number): Promise<any>;
38
- scrollToItem(index: number, align?: string): void;
36
+ scrollTo(scrollOffset?: number, enhanced?: true): Promise<any>;
37
+ scrollToItem(index: number, align?: string, enhanced?: true): void;
39
38
  componentDidMount(): void;
40
39
  componentDidUpdate(prevProps: IProps, prevState: IState): void;
41
40
  componentWillUnmount(): void;
41
+ getRenderItemNode(index: number, type?: 'node' | 'placeholder'): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
42
+ getRenderColumnNode(): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
42
43
  render(): React.ReactElement<{}, string | React.JSXElementConstructor<any>>;
43
44
  }
44
45
  export { IState, List as default };