@arco-design/mobile-react 2.21.2 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.en-US.md +2 -2
  3. package/README.md +2 -2
  4. package/cjs/_helpers/index.d.ts +1 -0
  5. package/cjs/_helpers/index.js +9 -0
  6. package/cjs/_helpers/react-dom.d.ts +13 -0
  7. package/cjs/_helpers/react-dom.js +65 -0
  8. package/cjs/_helpers/render.d.ts +10 -0
  9. package/cjs/_helpers/render.js +40 -0
  10. package/cjs/action-sheet/index.d.ts +1 -1
  11. package/cjs/ellipsis/components/js-ellipsis.js +7 -1
  12. package/cjs/image-picker/index.js +0 -1
  13. package/cjs/image-picker/style/css/index.d.ts +1 -0
  14. package/cjs/image-picker/style/css/index.js +2 -0
  15. package/cjs/image-picker/style/index.d.ts +1 -0
  16. package/cjs/image-picker/style/index.js +2 -0
  17. package/cjs/image-preview/index.d.ts +2 -10
  18. package/cjs/image-preview/methods.js +4 -11
  19. package/cjs/masking/index.d.ts +10 -0
  20. package/cjs/masking/methods.js +4 -11
  21. package/cjs/notify/methods.js +6 -9
  22. package/cjs/popover/hooks/useEvent.js +6 -6
  23. package/cjs/swipe-action/index.js +21 -3
  24. package/cjs/tabs/index.d.ts +3 -463
  25. package/cjs/tabs/index.js +15 -2
  26. package/cjs/tabs/tab-cell-underline.d.ts +4 -0
  27. package/cjs/tabs/tab-cell-underline.js +234 -0
  28. package/cjs/tabs/tab-cell.d.ts +1 -85
  29. package/cjs/tabs/tab-cell.js +57 -201
  30. package/cjs/tabs/tab-pane.d.ts +2 -38
  31. package/cjs/tabs/type.d.ts +601 -0
  32. package/cjs/tabs/type.js +3 -0
  33. package/cjs/toast/methods.js +9 -12
  34. package/dist/index.js +439 -271
  35. package/dist/index.min.js +3 -3
  36. package/esm/_helpers/index.d.ts +1 -0
  37. package/esm/_helpers/index.js +1 -0
  38. package/esm/_helpers/react-dom.d.ts +13 -0
  39. package/esm/_helpers/react-dom.js +57 -0
  40. package/esm/_helpers/render.d.ts +10 -0
  41. package/esm/_helpers/render.js +29 -0
  42. package/esm/action-sheet/index.d.ts +1 -1
  43. package/esm/ellipsis/components/js-ellipsis.js +7 -1
  44. package/esm/image-picker/index.js +0 -1
  45. package/esm/image-picker/style/css/index.d.ts +1 -0
  46. package/esm/image-picker/style/css/index.js +1 -0
  47. package/esm/image-picker/style/index.d.ts +1 -0
  48. package/esm/image-picker/style/index.js +1 -0
  49. package/esm/image-preview/index.d.ts +2 -10
  50. package/esm/image-preview/methods.js +3 -9
  51. package/esm/masking/index.d.ts +10 -0
  52. package/esm/masking/methods.js +3 -9
  53. package/esm/notify/methods.js +6 -7
  54. package/esm/popover/hooks/useEvent.js +6 -6
  55. package/esm/swipe-action/index.js +21 -3
  56. package/esm/tabs/index.d.ts +3 -463
  57. package/esm/tabs/index.js +7 -3
  58. package/esm/tabs/tab-cell-underline.d.ts +4 -0
  59. package/esm/tabs/tab-cell-underline.js +218 -0
  60. package/esm/tabs/tab-cell.d.ts +1 -85
  61. package/esm/tabs/tab-cell.js +59 -204
  62. package/esm/tabs/tab-pane.d.ts +2 -38
  63. package/esm/tabs/type.d.ts +601 -0
  64. package/esm/tabs/type.js +1 -0
  65. package/esm/toast/methods.js +8 -9
  66. package/package.json +3 -3
  67. package/umd/_helpers/index.d.ts +1 -0
  68. package/umd/_helpers/index.js +10 -4
  69. package/umd/_helpers/react-dom.d.ts +13 -0
  70. package/umd/_helpers/react-dom.js +78 -0
  71. package/umd/_helpers/render.d.ts +10 -0
  72. package/umd/_helpers/render.js +51 -0
  73. package/umd/action-sheet/index.d.ts +1 -1
  74. package/umd/ellipsis/components/js-ellipsis.js +7 -1
  75. package/umd/image-picker/index.js +0 -1
  76. package/umd/image-picker/style/css/index.d.ts +1 -0
  77. package/umd/image-picker/style/css/index.js +4 -4
  78. package/umd/image-picker/style/index.d.ts +1 -0
  79. package/umd/image-picker/style/index.js +4 -4
  80. package/umd/image-preview/index.d.ts +2 -10
  81. package/umd/image-preview/methods.js +6 -13
  82. package/umd/masking/index.d.ts +10 -0
  83. package/umd/masking/methods.js +6 -13
  84. package/umd/notify/methods.js +9 -12
  85. package/umd/popover/hooks/useEvent.js +6 -6
  86. package/umd/swipe-action/index.js +21 -3
  87. package/umd/tabs/index.d.ts +3 -463
  88. package/umd/tabs/index.js +16 -6
  89. package/umd/tabs/tab-cell-underline.d.ts +4 -0
  90. package/umd/tabs/tab-cell-underline.js +242 -0
  91. package/umd/tabs/tab-cell.d.ts +1 -85
  92. package/umd/tabs/tab-cell.js +60 -205
  93. package/umd/tabs/tab-pane.d.ts +2 -38
  94. package/umd/tabs/type.d.ts +601 -0
  95. package/umd/tabs/type.js +17 -0
  96. package/umd/toast/methods.js +11 -14
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _mobileUtils = require("@arco-design/mobile-utils");
13
+
14
+ var _helpers = require("../_helpers");
15
+
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+
20
+ var TabCellUnderline = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
21
+ var prefix = props.prefix,
22
+ useCaterpillar = props.useCaterpillar,
23
+ distance = props.distance,
24
+ tabDirection = props.tabDirection,
25
+ underlineInnerStyle = props.underlineInnerStyle,
26
+ duration = props.duration,
27
+ cellTrans = props.cellTrans,
28
+ showLine = props.showLine,
29
+ activeIndex = props.activeIndex,
30
+ wrapWidth = props.wrapWidth,
31
+ wrapHeight = props.wrapHeight,
32
+ jumpingDis = props.jumpingDis,
33
+ translateZ = props.translateZ,
34
+ caterpillarMaxScale = props.caterpillarMaxScale,
35
+ caterpillarProperty = props.caterpillarProperty,
36
+ underlineSize = props.underlineSize,
37
+ underlineThick = props.underlineThick,
38
+ renderUnderline = props.renderUnderline,
39
+ getTabCenterLeft = props.getTabCenterLeft;
40
+
41
+ var _useState = (0, _react.useState)({}),
42
+ underlineStyle = _useState[0],
43
+ setUnderlineStyle = _useState[1];
44
+
45
+ var _useRefState = (0, _helpers.useRefState)(false),
46
+ caterpillar = _useRefState[0],
47
+ caterpillarRef = _useRefState[1],
48
+ setCaterpillar = _useRefState[2];
49
+
50
+ var _useState2 = (0, _react.useState)(0),
51
+ caterpillarDelay = _useState2[0],
52
+ setCaterpillarDelay = _useState2[1];
53
+
54
+ var lineRef = (0, _react.useRef)(null);
55
+ var timeRef = (0, _react.useRef)(0);
56
+ var system = (0, _helpers.useSystem)();
57
+ var isVertical = tabDirection === 'vertical';
58
+ var maxScaleWithDefault = caterpillarMaxScale || 2;
59
+ var translateZStr = translateZ ? ' translateZ(0)' : '';
60
+ (0, _react.useImperativeHandle)(ref, function () {
61
+ return {
62
+ setCaterpillarAnimate: setCaterpillarAnimate,
63
+ resetUnderlineStyle: resetUnderlineStyle
64
+ };
65
+ }, [setCaterpillarAnimate, resetUnderlineStyle]);
66
+ var animationKey = (0, _react.useMemo)(function () {
67
+ if (!useCaterpillar) {
68
+ return '';
69
+ }
70
+
71
+ if (caterpillarProperty === 'size') {
72
+ return "tabsCaterpillar" + (isVertical ? 'W' : 'H') + maxScaleWithDefault;
73
+ }
74
+
75
+ if (caterpillarMaxScale) {
76
+ return "tabsCaterpillar" + (isVertical ? 'X' : 'Y') + caterpillarMaxScale;
77
+ }
78
+
79
+ return '';
80
+ }, [useCaterpillar, isVertical, caterpillarMaxScale, caterpillarProperty]);
81
+ (0, _react.useEffect)(function () {
82
+ if (!animationKey) {
83
+ return;
84
+ }
85
+
86
+ var dir = isVertical ? 'X' : 'Y';
87
+
88
+ if (caterpillarProperty === 'size') {
89
+ var attr = isVertical ? 'width' : 'height';
90
+ (0, _mobileUtils.addCssKeyframes)(animationKey, "{\n 0% {\n " + attr + ": 100%;\n }\n 50% {\n " + attr + ": " + 100 * maxScaleWithDefault + "%;\n }\n 100% {\n " + attr + ": 100%;\n }\n }");
91
+ return;
92
+ }
93
+
94
+ (0, _mobileUtils.addCssKeyframes)(animationKey, "{\n 0% {\n transform: scale" + dir + "(1)" + translateZStr + ";\n -webkit-transform: scale" + dir + "(1)" + translateZStr + ";\n }\n 50% {\n transform: scale" + dir + "(" + caterpillarMaxScale + ")" + translateZStr + ";\n -webkit-transform: scale" + dir + "(" + caterpillarMaxScale + ")" + translateZStr + ";\n }\n 100% {\n transform: scale" + dir + "(1)" + translateZStr + ";\n -webkit-transform: scale" + dir + "(1)" + translateZStr + ";\n }\n }");
95
+ return function () {
96
+ (0, _mobileUtils.removeCssStyleDom)(animationKey);
97
+ };
98
+ }, [animationKey]);
99
+ (0, _react.useEffect)(function () {
100
+ if (jumpingDis && useCaterpillar && system !== 'ios') {
101
+ var movedRatio = wrapWidth ? jumpingDis / wrapWidth : 0;
102
+ setCaterpillarAnimate(movedRatio);
103
+ }
104
+ }, [jumpingDis]);
105
+ (0, _react.useEffect)(function () {
106
+ resetUnderlineStyle();
107
+ }, [useCaterpillar, caterpillar, cellTrans, duration, tabDirection, wrapWidth, wrapHeight, distance, animationKey, caterpillarDelay]);
108
+
109
+ function getLineLeft(index) {
110
+ var _lineRef$current, _lineRef$current2;
111
+
112
+ var offsetSize = isVertical ? (_lineRef$current = lineRef.current) == null ? void 0 : _lineRef$current.offsetWidth : (_lineRef$current2 = lineRef.current) == null ? void 0 : _lineRef$current2.offsetHeight;
113
+ var lineWidth = offsetSize || 0;
114
+ return getTabCenterLeft(index) - lineWidth / 2;
115
+ }
116
+
117
+ function getDescIndex() {
118
+ if (distance > 0) {
119
+ return activeIndex - 1;
120
+ }
121
+
122
+ if (distance < 0) {
123
+ return activeIndex + 1;
124
+ }
125
+
126
+ return activeIndex;
127
+ }
128
+
129
+ function getLineScale(ratio) {
130
+ var absRatio = Math.abs(ratio);
131
+ return absRatio > 0.5 ? (1 - absRatio) * 2 * (maxScaleWithDefault - 1) + 1 : absRatio * 2 * (maxScaleWithDefault - 1) + 1;
132
+ }
133
+
134
+ function getLineStyle() {
135
+ var _ref;
136
+
137
+ if (!lineRef.current) {
138
+ return {};
139
+ }
140
+
141
+ var currentLeft = getLineLeft(activeIndex);
142
+ var descIndex = getDescIndex();
143
+ var descLeft = getLineLeft(descIndex);
144
+ var moveRatio = wrapWidth ? distance / wrapWidth : 0;
145
+ var leftOffset = moveRatio * (currentLeft - descLeft);
146
+ var direc = isVertical ? 'X' : 'Y';
147
+ var transStyle = useCaterpillar && !jumpingDis ? caterpillarProperty === 'size' ? (_ref = {}, _ref[isVertical ? 'width' : 'height'] = 100 * getLineScale(moveRatio) + "%", _ref.willChange = 'width', _ref) : {
148
+ transform: "scale" + direc + "(" + getLineScale(moveRatio) + ")"
149
+ } : {};
150
+ var outerSize = isVertical ? {
151
+ width: underlineSize,
152
+ height: underlineThick
153
+ } : {
154
+ height: underlineSize,
155
+ width: underlineThick
156
+ };
157
+ return {
158
+ outer: (0, _extends2.default)({
159
+ transform: "translate" + direc + "(" + (distance > 0 ? currentLeft - leftOffset : currentLeft + leftOffset) + "px)" + translateZStr
160
+ }, outerSize),
161
+ inner: (0, _extends2.default)({}, transStyle)
162
+ };
163
+ }
164
+
165
+ function getUnderlineStyle() {
166
+ var transStyle = {};
167
+
168
+ if (useCaterpillar) {
169
+ transStyle.animationDuration = duration + "ms";
170
+ }
171
+
172
+ if (caterpillarRef.current && animationKey) {
173
+ transStyle.animationName = animationKey;
174
+ }
175
+
176
+ if (caterpillarDelay) {
177
+ transStyle.animationDelay = "-" + caterpillarDelay + "ms";
178
+ }
179
+
180
+ var lineStyle = getLineStyle();
181
+ return {
182
+ outer: (0, _helpers.getStyleWithVendor)((0, _extends2.default)({
183
+ transitionDuration: cellTrans ? duration + "ms" : '0ms'
184
+ }, lineStyle.outer || {})),
185
+ inner: (0, _helpers.getStyleWithVendor)((0, _extends2.default)({}, transStyle, lineStyle.inner || {}))
186
+ };
187
+ }
188
+
189
+ function resetUnderlineStyle() {
190
+ setUnderlineStyle(getUnderlineStyle());
191
+ }
192
+
193
+ function setCaterpillarAnimate(movedRatio) {
194
+ if (movedRatio === void 0) {
195
+ movedRatio = 0;
196
+ }
197
+
198
+ if (!duration) {
199
+ return;
200
+ }
201
+
202
+ var movedTime = (duration || 0) * Math.abs(movedRatio);
203
+ setCaterpillarDelay(movedTime);
204
+ (0, _mobileUtils.nextTick)(function () {
205
+ setCaterpillar(true);
206
+ });
207
+
208
+ if (timeRef.current) {
209
+ clearTimeout(timeRef.current);
210
+ }
211
+
212
+ timeRef.current = window.setTimeout(function () {
213
+ setCaterpillar(false);
214
+ setCaterpillarDelay(0);
215
+ }, (duration || 0) - movedTime + 20);
216
+ }
217
+
218
+ return renderUnderline ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, renderUnderline(underlineStyle, showLine, lineRef)) : /*#__PURE__*/_react.default.createElement("div", {
219
+ className: (0, _mobileUtils.cls)(prefix + "-underline", {
220
+ show: showLine
221
+ }),
222
+ ref: lineRef,
223
+ style: underlineStyle.outer
224
+ }, /*#__PURE__*/_react.default.createElement("div", {
225
+ className: (0, _mobileUtils.cls)(prefix + "-underline-inner", {
226
+ caterpillar: caterpillar,
227
+ 'custom-animate': animationKey,
228
+ 'caterpillar-moving': caterpillar || useCaterpillar && distance
229
+ }, tabDirection),
230
+ style: (0, _extends2.default)({}, underlineStyle.inner || {}, underlineInnerStyle || {})
231
+ }));
232
+ });
233
+ var _default = TabCellUnderline;
234
+ exports.default = _default;
@@ -1,88 +1,4 @@
1
1
  import React from 'react';
2
- import { TabsProps } from '.';
3
- export interface TabCellProps extends Pick<TabsProps, 'tabs' | 'type' | 'onTabClick' | 'tabBarPosition' | 'tabBarArrange' | 'tabBarScroll' | 'tabBarFixed' | 'renderUnderline' | 'duration' | 'transitionDuration' | 'useCaterpillar' | 'tabBarExtra' | 'onTabBarOverflowChange' | 'tabBarGutter' | 'tabBarPadding' | 'underlineSize' | 'underlineThick' | 'underlineInnerStyle' | 'caterpillarMaxScale' | 'caterpillarProperty' | 'onTabBarScroll' | 'hideTabBarBeforeMounted' | 'tabBarScrollBezier' | 'tabBarScrollDuration' | 'tabBarScrollChance' | 'tabBarHasDivider' | 'tabBarStyle' | 'tabBarClass' | 'mode' | 'overflowThreshold' | 'showUnderline' | 'disabled' | 'renderTabBarItem' | 'renderTabBarInner' | 'translateZ'> {
4
- /**
5
- * 类前缀
6
- * @en prefix classname
7
- */
8
- prefixCls?: string;
9
- /**
10
- * 当前选中 Tab
11
- * @en Currently selected Tab
12
- */
13
- activeIndex: number;
14
- /**
15
- * 当前选中 Tab ref
16
- * @en Currently selected Tab ref
17
- */
18
- activeIndexRef: React.MutableRefObject<number>;
19
- /**
20
- * Tab 布局方向,横向 or 竖向
21
- * @en Tab layout direction, horizontal or vertical
22
- */
23
- tabDirection: 'horizontal' | 'vertical';
24
- /**
25
- * 修改选中 Tab
26
- * @en Modify selected Tab
27
- */
28
- changeIndex: (newIndex: number, from?: string) => void;
29
- /**
30
- * 外层容器宽度
31
- * @en Wrapper container width
32
- */
33
- wrapWidth: number;
34
- /**
35
- * 外层容器高度
36
- * @en Wrapper container height
37
- */
38
- wrapHeight: number;
39
- /**
40
- * TabBar是否启用过渡效果
41
- * @en Whether the TabBar enables transition effects
42
- */
43
- cellTrans: boolean;
44
- /**
45
- * 手指滑动距离
46
- * @en Finger sliding distance
47
- */
48
- distance: number;
49
- /**
50
- * 下划线已滑动的距离
51
- * @en The distance the underline has been swiped
52
- */
53
- jumpingDis: number;
54
- }
55
- export interface TabCellRef {
56
- /**
57
- * 外层元素 DOM
58
- * @en Outer element DOM
59
- */
60
- dom: HTMLDivElement | null;
61
- /**
62
- * 当前 TabBar 宽度是否已溢出
63
- * @en Whether the current TabBar width has overflowed
64
- */
65
- hasOverflow: boolean;
66
- /**
67
- * 滚动 bar 到指定位置,tabs 上下布局时是以 x 轴滚动,左右布局时以 y 轴滚动
68
- * @en Scroll the bar to the specified position, the tabs are scrolled on the x-axis when the tabs are laid out up and down, and the y-axis is scrolled when the tabs are laid out left and right
69
- */
70
- scrollTo: (position: number, rightNow?: boolean) => void;
71
- /**
72
- * 滚动 bar 使当前选中item到屏幕中间
73
- * @en Scroll the bar to bring the currently selected item to the middle of the screen
74
- */
75
- scrollToCenter: (rightNow?: boolean) => void;
76
- /**
77
- * 触发毛毛虫动画
78
- * @en Trigger caterpillar animation
79
- */
80
- setCaterpillarAnimate: (ratio?: number) => void;
81
- /**
82
- * 重新计算下划线样式
83
- * @en Recalculate underline style
84
- */
85
- resetUnderlineStyle: () => void;
86
- }
2
+ import { TabCellProps, TabCellRef } from './type';
87
3
  declare const TabCell: React.ForwardRefExoticComponent<TabCellProps & React.RefAttributes<TabCellRef>>;
88
4
  export default TabCell;
@@ -13,6 +13,8 @@ var _mobileUtils = require("@arco-design/mobile-utils");
13
13
 
14
14
  var _helpers = require("../_helpers");
15
15
 
16
+ var _tabCellUnderline = _interopRequireDefault(require("./tab-cell-underline"));
17
+
16
18
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
19
 
18
20
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -62,46 +64,33 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
62
64
  renderTabBarInner = props.renderTabBarInner,
63
65
  tabBarStyle = props.tabBarStyle,
64
66
  tabBarClass = props.tabBarClass,
65
- translateZ = props.translateZ;
67
+ translateZ = props.translateZ,
68
+ tabBarStopPropagation = props.tabBarStopPropagation;
66
69
  var prefix = prefixCls + "-tab-cell";
67
70
  var domRef = (0, _react.useRef)(null);
68
- var lineRef = (0, _react.useRef)(null);
69
- var timeRef = (0, _react.useRef)(0);
71
+ var underlineRef = (0, _react.useRef)(null);
70
72
  var allCellRectRef = (0, _react.useRef)([]);
71
73
 
72
- var _useState = (0, _react.useState)({}),
73
- underlineStyle = _useState[0],
74
- setUnderlineStyle = _useState[1];
75
-
76
- var _useRefState = (0, _helpers.useRefState)(false),
77
- caterpillar = _useRefState[0],
78
- caterpillarRef = _useRefState[1],
79
- setCaterpillar = _useRefState[2];
80
-
81
- var _useState2 = (0, _react.useState)(0),
82
- caterpillarDelay = _useState2[0],
83
- setCaterpillarDelay = _useState2[1];
74
+ var _useState = (0, _react.useState)(false),
75
+ showLine = _useState[0],
76
+ setShowLine = _useState[1];
84
77
 
85
- var _useState3 = (0, _react.useState)(false),
86
- hasOverflow = _useState3[0],
87
- setHasOverflow = _useState3[1];
78
+ var _useState2 = (0, _react.useState)(false),
79
+ hasOverflow = _useState2[0],
80
+ setHasOverflow = _useState2[1];
88
81
 
89
- var _useState4 = (0, _react.useState)(function () {
82
+ var _useState3 = (0, _react.useState)(function () {
90
83
  return tabs.length < overflowThreshold ? tabBarArrange : 'start';
91
84
  }),
92
- originArrange = _useState4[0],
93
- setOriginArrange = _useState4[1]; // 默认tab小于overflowThreshold个时不开启加载前隐藏,大于overflowThreshold个时开启
85
+ originArrange = _useState3[0],
86
+ setOriginArrange = _useState3[1]; // 默认tab小于overflowThreshold个时不开启加载前隐藏,大于overflowThreshold个时开启
94
87
 
95
88
 
96
- var _useState5 = (0, _react.useState)(function () {
89
+ var _useState4 = (0, _react.useState)(function () {
97
90
  return hideTabBarBeforeMounted === void 0 ? tabs.length < overflowThreshold || activeIndex === 0 : !hideTabBarBeforeMounted;
98
91
  }),
99
- showTab = _useState5[0],
100
- setShowTab = _useState5[1];
101
-
102
- var _useState6 = (0, _react.useState)(false),
103
- showLine = _useState6[0],
104
- setShowLine = _useState6[1];
92
+ showTab = _useState4[0],
93
+ setShowTab = _useState4[1];
105
94
 
106
95
  var isVertical = tabDirection === 'vertical';
107
96
  var isLine = (type || '').indexOf('line') !== -1;
@@ -115,42 +104,7 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
115
104
  var cellGutter = isCard ? void 0 : tabBarGutter;
116
105
  var hasDivider = tabBarHasDivider === void 0 ? isLine : tabBarHasDivider;
117
106
  var wrapSize = isVertical ? wrapWidth : wrapHeight;
118
- var translateZStr = translateZ ? ' translateZ(0)' : '';
119
107
  var system = (0, _helpers.useSystem)();
120
- var maxScaleWithDefault = caterpillarMaxScale || 2;
121
- var animationKey = (0, _react.useMemo)(function () {
122
- if (!showUnderline || !useCaterpillar) {
123
- return '';
124
- }
125
-
126
- if (caterpillarProperty === 'size') {
127
- return "tabsCaterpillar" + (isVertical ? 'W' : 'H') + maxScaleWithDefault;
128
- }
129
-
130
- if (caterpillarMaxScale) {
131
- return "tabsCaterpillar" + (isVertical ? 'X' : 'Y') + caterpillarMaxScale;
132
- }
133
-
134
- return '';
135
- }, [showUnderline, useCaterpillar, isVertical, caterpillarMaxScale, caterpillarProperty]);
136
- (0, _react.useEffect)(function () {
137
- if (!animationKey) {
138
- return;
139
- }
140
-
141
- var dir = isVertical ? 'X' : 'Y';
142
-
143
- if (caterpillarProperty === 'size') {
144
- var attr = isVertical ? 'width' : 'height';
145
- (0, _mobileUtils.addCssKeyframes)(animationKey, "{\n 0% {\n " + attr + ": 100%;\n }\n 50% {\n " + attr + ": " + 100 * maxScaleWithDefault + "%;\n }\n 100% {\n " + attr + ": 100%;\n }\n }");
146
- return;
147
- }
148
-
149
- (0, _mobileUtils.addCssKeyframes)(animationKey, "{\n 0% {\n transform: scale" + dir + "(1)" + translateZStr + ";\n -webkit-transform: scale" + dir + "(1)" + translateZStr + ";\n }\n 50% {\n transform: scale" + dir + "(" + caterpillarMaxScale + ")" + translateZStr + ";\n -webkit-transform: scale" + dir + "(" + caterpillarMaxScale + ")" + translateZStr + ";\n }\n 100% {\n transform: scale" + dir + "(1)" + translateZStr + ";\n -webkit-transform: scale" + dir + "(1)" + translateZStr + ";\n }\n }");
150
- return function () {
151
- (0, _mobileUtils.removeCssStyleDom)(animationKey);
152
- };
153
- }, [animationKey]);
154
108
  (0, _react.useEffect)(function () {
155
109
  (0, _mobileUtils.nextTick)(function () {
156
110
  setCellOverflow(); // dom出来之后originArrange置空,交由tabBarArrange控制
@@ -163,12 +117,11 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
163
117
  setShowLine(true);
164
118
  });
165
119
  }, [domRef.current, wrapSize, tabs]);
166
- (0, _react.useEffect)(function () {
167
- resetUnderlineStyle();
168
- }, [useCaterpillar, caterpillar, cellTrans, duration, tabDirection, wrapWidth, wrapHeight, distance, animationKey, caterpillarDelay]);
169
120
  (0, _react.useEffect)(function () {
170
121
  (0, _mobileUtils.nextTick)(function () {
171
- resetUnderlineStyle();
122
+ var _underlineRef$current;
123
+
124
+ (_underlineRef$current = underlineRef.current) == null ? void 0 : _underlineRef$current.resetUnderlineStyle();
172
125
  });
173
126
  }, [activeIndex, tabs, getCellPadding('left'), getCellPadding('right'), tabBarGutter, tabDirection]);
174
127
  (0, _react.useImperativeHandle)(ref, function () {
@@ -177,10 +130,18 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
177
130
  scrollTo: scrollTo,
178
131
  scrollToCenter: scrollToCenter,
179
132
  hasOverflow: hasOverflow,
180
- setCaterpillarAnimate: setCaterpillarAnimate,
181
- resetUnderlineStyle: resetUnderlineStyle
133
+ setCaterpillarAnimate: function setCaterpillarAnimate(ratio) {
134
+ var _underlineRef$current2;
135
+
136
+ return (_underlineRef$current2 = underlineRef.current) == null ? void 0 : _underlineRef$current2.setCaterpillarAnimate(ratio);
137
+ },
138
+ resetUnderlineStyle: function resetUnderlineStyle() {
139
+ var _underlineRef$current3;
140
+
141
+ return (_underlineRef$current3 = underlineRef.current) == null ? void 0 : _underlineRef$current3.resetUnderlineStyle();
142
+ }
182
143
  };
183
- }, [scrollToCenter, scrollTo, hasOverflow, setCaterpillarAnimate, resetUnderlineStyle]);
144
+ }, [scrollToCenter, scrollTo, hasOverflow]);
184
145
  (0, _react.useEffect)(function () {
185
146
  if (wrapSize && tabBarScrollChance !== 'none') {
186
147
  setTimeout(function () {
@@ -196,28 +157,18 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
196
157
  return e.stopPropagation();
197
158
  };
198
159
 
199
- if (isVertical && hasOverflow && domRef.current) {
160
+ if (isVertical && hasOverflow && domRef.current && tabBarStopPropagation) {
200
161
  domRef.current.addEventListener('touchstart', stopFunc);
201
162
  domRef.current.addEventListener('touchmove', stopFunc);
202
163
  }
203
164
 
204
165
  return function () {
205
- if (isVertical && hasOverflow && domRef.current) {
166
+ if (isVertical && hasOverflow && domRef.current && tabBarStopPropagation) {
206
167
  domRef.current.removeEventListener('touchstart', stopFunc);
207
168
  domRef.current.removeEventListener('touchmove', stopFunc);
208
169
  }
209
170
  };
210
171
  }, [hasOverflow]);
211
- (0, _react.useEffect)(function () {
212
- if (jumpingDis && useCaterpillar && system !== 'ios') {
213
- var movedRatio = wrapWidth ? jumpingDis / wrapWidth : 0;
214
- setCaterpillarAnimate(movedRatio);
215
- }
216
- }, [jumpingDis]);
217
-
218
- function resetUnderlineStyle() {
219
- setUnderlineStyle(getUnderlineStyle());
220
- }
221
172
 
222
173
  function setCellOverflow() {
223
174
  var overflow = false;
@@ -285,69 +236,6 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
285
236
  }
286
237
  }
287
238
 
288
- function getUnderlineStyle() {
289
- var transStyle = {};
290
-
291
- if (useCaterpillar) {
292
- transStyle.animationDuration = duration + "ms";
293
- }
294
-
295
- if (caterpillarRef.current && animationKey) {
296
- transStyle.animationName = animationKey;
297
- }
298
-
299
- if (caterpillarDelay) {
300
- transStyle.animationDelay = "-" + caterpillarDelay + "ms";
301
- }
302
-
303
- var lineStyle = getLineStyle();
304
- return {
305
- outer: (0, _helpers.getStyleWithVendor)((0, _extends2.default)({
306
- transitionDuration: cellTrans ? duration + "ms" : '0ms'
307
- }, lineStyle.outer || {})),
308
- inner: (0, _helpers.getStyleWithVendor)((0, _extends2.default)({}, transStyle, lineStyle.inner || {}))
309
- };
310
- }
311
-
312
- function getLineStyle() {
313
- var _ref;
314
-
315
- if (!lineRef.current || !domRef.current) {
316
- return {};
317
- }
318
-
319
- var currentLeft = getLineLeft(activeIndex);
320
- var descIndex = getDescIndex();
321
- var descLeft = getLineLeft(descIndex);
322
- var moveRatio = wrapWidth ? distance / wrapWidth : 0;
323
- var leftOffset = moveRatio * (currentLeft - descLeft);
324
- var direc = isVertical ? 'X' : 'Y';
325
- var transStyle = useCaterpillar && !jumpingDis ? caterpillarProperty === 'size' ? (_ref = {}, _ref[isVertical ? 'width' : 'height'] = 100 * getLineScale(moveRatio) + "%", _ref.willChange = 'width', _ref) : {
326
- transform: "scale" + direc + "(" + getLineScale(moveRatio) + ")"
327
- } : {};
328
- var outerSize = isVertical ? {
329
- width: underlineSize,
330
- height: underlineThick
331
- } : {
332
- height: underlineSize,
333
- width: underlineThick
334
- };
335
- return {
336
- outer: (0, _extends2.default)({
337
- transform: "translate" + direc + "(" + (distance > 0 ? currentLeft - leftOffset : currentLeft + leftOffset) + "px)" + translateZStr
338
- }, outerSize),
339
- inner: (0, _extends2.default)({}, transStyle)
340
- };
341
- }
342
-
343
- function getLineLeft(index) {
344
- var _lineRef$current, _lineRef$current2;
345
-
346
- var offsetSize = isVertical ? (_lineRef$current = lineRef.current) == null ? void 0 : _lineRef$current.offsetWidth : (_lineRef$current2 = lineRef.current) == null ? void 0 : _lineRef$current2.offsetHeight;
347
- var lineWidth = offsetSize || 0;
348
- return getTabCenterLeft(index) - lineWidth / 2;
349
- }
350
-
351
239
  function getTabCenterLeft(index) {
352
240
  var currentTab = allCellRectRef.current[index] || {};
353
241
  var currentTabWidth = (isVertical ? currentTab.width : currentTab.height) || 0;
@@ -355,48 +243,6 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
355
243
  return currentTabLeft + currentTabWidth / 2;
356
244
  }
357
245
 
358
- function getLineScale(ratio) {
359
- var absRatio = Math.abs(ratio);
360
- return absRatio > 0.5 ? (1 - absRatio) * 2 * (maxScaleWithDefault - 1) + 1 : absRatio * 2 * (maxScaleWithDefault - 1) + 1;
361
- }
362
-
363
- function getDescIndex() {
364
- if (distance > 0) {
365
- return activeIndex - 1;
366
- }
367
-
368
- if (distance < 0) {
369
- return activeIndex + 1;
370
- }
371
-
372
- return activeIndex;
373
- }
374
-
375
- function setCaterpillarAnimate(movedRatio) {
376
- if (movedRatio === void 0) {
377
- movedRatio = 0;
378
- }
379
-
380
- if (!duration) {
381
- return;
382
- }
383
-
384
- var movedTime = (duration || 0) * Math.abs(movedRatio);
385
- setCaterpillarDelay(movedTime);
386
- (0, _mobileUtils.nextTick)(function () {
387
- setCaterpillar(true);
388
- });
389
-
390
- if (timeRef.current) {
391
- clearTimeout(timeRef.current);
392
- }
393
-
394
- timeRef.current = window.setTimeout(function () {
395
- setCaterpillar(false);
396
- setCaterpillarDelay(0);
397
- }, (duration || 0) - movedTime + 20);
398
- }
399
-
400
246
  function getCellPadding(pType) {
401
247
  if (typeof cellPadding === 'object') {
402
248
  return cellPadding[pType];
@@ -437,20 +283,30 @@ var TabCell = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
437
283
  return null;
438
284
  }
439
285
 
440
- return renderUnderline ? renderUnderline(underlineStyle, showLine, lineRef) : /*#__PURE__*/_react.default.createElement("div", {
441
- className: (0, _mobileUtils.cls)(prefix + "-underline", {
442
- show: showLine
443
- }),
444
- ref: lineRef,
445
- style: underlineStyle.outer
446
- }, /*#__PURE__*/_react.default.createElement("div", {
447
- className: (0, _mobileUtils.cls)(prefix + "-underline-inner", {
448
- caterpillar: caterpillar,
449
- 'custom-animate': animationKey,
450
- 'caterpillar-moving': caterpillar || useCaterpillar && distance
451
- }, tabDirection),
452
- style: (0, _extends2.default)({}, underlineStyle.inner || {}, underlineInnerStyle || {})
453
- }));
286
+ var lineProps = {
287
+ prefix: prefix,
288
+ showLine: showLine,
289
+ useCaterpillar: useCaterpillar,
290
+ distance: distance,
291
+ tabDirection: tabDirection,
292
+ underlineInnerStyle: underlineInnerStyle,
293
+ cellTrans: cellTrans,
294
+ duration: duration,
295
+ activeIndex: activeIndex,
296
+ wrapWidth: wrapWidth,
297
+ wrapHeight: wrapHeight,
298
+ jumpingDis: jumpingDis,
299
+ caterpillarMaxScale: caterpillarMaxScale,
300
+ caterpillarProperty: caterpillarProperty,
301
+ translateZ: translateZ,
302
+ underlineSize: underlineSize,
303
+ underlineThick: underlineThick,
304
+ renderUnderline: renderUnderline
305
+ };
306
+ return /*#__PURE__*/_react.default.createElement(_tabCellUnderline.default, (0, _extends2.default)({
307
+ ref: underlineRef,
308
+ getTabCenterLeft: getTabCenterLeft
309
+ }, lineProps));
454
310
  }
455
311
 
456
312
  var cellInner = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, tabs.map(function (tab, index) {