@fjyueke/arco-mcp 1.0.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 (191) hide show
  1. package/README.md +85 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +244 -0
  4. package/metaData/components/action-sheet/doc.md +102 -0
  5. package/metaData/components/action-sheet/example/index.tsx +199 -0
  6. package/metaData/components/action-sheet/example/methods.tsx +6 -0
  7. package/metaData/components/avatar/doc.md +57 -0
  8. package/metaData/components/avatar/example/group.tsx +69 -0
  9. package/metaData/components/avatar/example/index.tsx +196 -0
  10. package/metaData/components/badge/doc.md +28 -0
  11. package/metaData/components/badge/example/index.tsx +128 -0
  12. package/metaData/components/button/doc.md +45 -0
  13. package/metaData/components/button/example/index.tsx +264 -0
  14. package/metaData/components/carousel/doc.md +89 -0
  15. package/metaData/components/carousel/example/index.tsx +1481 -0
  16. package/metaData/components/cell/doc.md +68 -0
  17. package/metaData/components/cell/example/arrow.tsx +13 -0
  18. package/metaData/components/cell/example/cell.tsx +71 -0
  19. package/metaData/components/cell/example/group.tsx +63 -0
  20. package/metaData/components/cell/example/index.tsx +19 -0
  21. package/metaData/components/checkbox/doc.md +91 -0
  22. package/metaData/components/checkbox/example/checkbox.tsx +158 -0
  23. package/metaData/components/checkbox/example/group.tsx +103 -0
  24. package/metaData/components/checkbox/example/index.tsx +25 -0
  25. package/metaData/components/circle-progress/doc.md +40 -0
  26. package/metaData/components/circle-progress/example/index.tsx +323 -0
  27. package/metaData/components/collapse/doc.md +74 -0
  28. package/metaData/components/collapse/example/collapse.tsx +183 -0
  29. package/metaData/components/collapse/example/group.tsx +136 -0
  30. package/metaData/components/collapse/example/index.tsx +16 -0
  31. package/metaData/components/collapse/example/utils.tsx +20 -0
  32. package/metaData/components/context-provider/doc.md +44 -0
  33. package/metaData/components/context-provider/example/index.tsx +208 -0
  34. package/metaData/components/count-down/doc.md +40 -0
  35. package/metaData/components/count-down/example/hooks.tsx +118 -0
  36. package/metaData/components/count-down/example/index.tsx +63 -0
  37. package/metaData/components/date-picker/doc.md +102 -0
  38. package/metaData/components/date-picker/example/index.tsx +545 -0
  39. package/metaData/components/dialog/doc.md +200 -0
  40. package/metaData/components/dialog/example/index.tsx +328 -0
  41. package/metaData/components/dialog/example/methods.tsx +56 -0
  42. package/metaData/components/divider/doc.md +25 -0
  43. package/metaData/components/divider/example/index.tsx +87 -0
  44. package/metaData/components/dropdown/doc.md +80 -0
  45. package/metaData/components/dropdown/example/dropdown.tsx +308 -0
  46. package/metaData/components/dropdown/example/index.tsx +19 -0
  47. package/metaData/components/dropdown/example/options.tsx +103 -0
  48. package/metaData/components/dropdown-menu/doc.md +91 -0
  49. package/metaData/components/dropdown-menu/example/dropdown-menu.tsx +270 -0
  50. package/metaData/components/dropdown-menu/example/index.tsx +16 -0
  51. package/metaData/components/ellipsis/doc.md +33 -0
  52. package/metaData/components/ellipsis/example/index.tsx +93 -0
  53. package/metaData/components/ellipsis/example/js-ellipsis.tsx +229 -0
  54. package/metaData/components/ellipsis/example/native-ellipsis.tsx +48 -0
  55. package/metaData/components/form/doc.md +90 -0
  56. package/metaData/components/form/example/form-item-context.tsx +8 -0
  57. package/metaData/components/form/example/form-item.tsx +378 -0
  58. package/metaData/components/form/example/index.tsx +87 -0
  59. package/metaData/components/form/example/linked-container.tsx +66 -0
  60. package/metaData/components/grid/doc.md +39 -0
  61. package/metaData/components/grid/example/index.tsx +252 -0
  62. package/metaData/components/icon/doc.md +15 -0
  63. package/metaData/components/icon/example/index.tsx +32 -0
  64. package/metaData/components/image/doc.md +62 -0
  65. package/metaData/components/image/example/index.tsx +528 -0
  66. package/metaData/components/image-picker/doc.md +116 -0
  67. package/metaData/components/image-picker/example/add-icon.tsx +14 -0
  68. package/metaData/components/image-picker/example/index.tsx +175 -0
  69. package/metaData/components/image-preview/doc.md +119 -0
  70. package/metaData/components/image-preview/example/index.tsx +1290 -0
  71. package/metaData/components/image-preview/example/methods.tsx +72 -0
  72. package/metaData/components/index-bar/doc.md +83 -0
  73. package/metaData/components/index-bar/example/group.tsx +93 -0
  74. package/metaData/components/index-bar/example/index.tsx +271 -0
  75. package/metaData/components/index-bar/example/side-bar.tsx +82 -0
  76. package/metaData/components/input/doc.md +60 -0
  77. package/metaData/components/input/example/hooks.tsx +259 -0
  78. package/metaData/components/input/example/index.tsx +134 -0
  79. package/metaData/components/input/example/props.tsx +183 -0
  80. package/metaData/components/keyboard/doc.md +73 -0
  81. package/metaData/components/keyboard/example/index.tsx +238 -0
  82. package/metaData/components/load-more/doc.md +48 -0
  83. package/metaData/components/load-more/example/index.tsx +395 -0
  84. package/metaData/components/loading/doc.md +34 -0
  85. package/metaData/components/loading/example/index.tsx +312 -0
  86. package/metaData/components/masking/doc.md +93 -0
  87. package/metaData/components/masking/example/index.tsx +410 -0
  88. package/metaData/components/masking/example/methods.tsx +88 -0
  89. package/metaData/components/nav-bar/doc.md +40 -0
  90. package/metaData/components/nav-bar/example/back-icon.tsx +28 -0
  91. package/metaData/components/nav-bar/example/index.tsx +305 -0
  92. package/metaData/components/notice-bar/doc.md +34 -0
  93. package/metaData/components/notice-bar/example/index.tsx +294 -0
  94. package/metaData/components/notify/doc.md +81 -0
  95. package/metaData/components/notify/example/index.tsx +171 -0
  96. package/metaData/components/notify/example/methods.tsx +83 -0
  97. package/metaData/components/pagination/doc.md +41 -0
  98. package/metaData/components/pagination/example/arrow.tsx +14 -0
  99. package/metaData/components/pagination/example/index.tsx +292 -0
  100. package/metaData/components/picker/doc.md +89 -0
  101. package/metaData/components/picker/example/index.tsx +217 -0
  102. package/metaData/components/picker-view/doc.md +57 -0
  103. package/metaData/components/picker-view/example/cascader.tsx +141 -0
  104. package/metaData/components/picker-view/example/index.tsx +297 -0
  105. package/metaData/components/picker-view/example/multi-picker.tsx +66 -0
  106. package/metaData/components/picker-view/example/picker-cell.tsx +416 -0
  107. package/metaData/components/popover/doc.md +144 -0
  108. package/metaData/components/popover/example/index.tsx +23 -0
  109. package/metaData/components/popover/example/menu.tsx +145 -0
  110. package/metaData/components/popover/example/popover-inner.tsx +147 -0
  111. package/metaData/components/popover/example/popover.tsx +268 -0
  112. package/metaData/components/popup/doc.md +101 -0
  113. package/metaData/components/popup/example/index.tsx +125 -0
  114. package/metaData/components/popup/example/methods.tsx +6 -0
  115. package/metaData/components/popup-swiper/doc.md +108 -0
  116. package/metaData/components/popup-swiper/example/index.tsx +332 -0
  117. package/metaData/components/popup-swiper/example/methods.tsx +6 -0
  118. package/metaData/components/portal/doc.md +14 -0
  119. package/metaData/components/portal/example/index.tsx +35 -0
  120. package/metaData/components/progress/doc.md +42 -0
  121. package/metaData/components/progress/example/index.tsx +256 -0
  122. package/metaData/components/pull-refresh/doc.md +37 -0
  123. package/metaData/components/pull-refresh/example/android-pull-refresh.tsx +260 -0
  124. package/metaData/components/pull-refresh/example/index.tsx +44 -0
  125. package/metaData/components/pull-refresh/example/ios-pull-refresh.tsx +216 -0
  126. package/metaData/components/radio/doc.md +89 -0
  127. package/metaData/components/radio/example/group.tsx +92 -0
  128. package/metaData/components/radio/example/index.tsx +25 -0
  129. package/metaData/components/radio/example/radio.tsx +22 -0
  130. package/metaData/components/rate/doc.md +33 -0
  131. package/metaData/components/rate/example/index.tsx +281 -0
  132. package/metaData/components/search-bar/doc.md +97 -0
  133. package/metaData/components/search-bar/example/association.tsx +89 -0
  134. package/metaData/components/search-bar/example/cancel-button.tsx +34 -0
  135. package/metaData/components/search-bar/example/highlight.tsx +66 -0
  136. package/metaData/components/search-bar/example/index.tsx +251 -0
  137. package/metaData/components/show-monitor/doc.md +34 -0
  138. package/metaData/components/show-monitor/example/index.tsx +646 -0
  139. package/metaData/components/skeleton/doc.md +101 -0
  140. package/metaData/components/skeleton/example/elements.tsx +290 -0
  141. package/metaData/components/skeleton/example/index.tsx +96 -0
  142. package/metaData/components/skeleton/example/skeleton-context.tsx +7 -0
  143. package/metaData/components/slider/doc.md +42 -0
  144. package/metaData/components/slider/example/index.tsx +326 -0
  145. package/metaData/components/slider/example/marks.tsx +50 -0
  146. package/metaData/components/slider/example/popover.tsx +38 -0
  147. package/metaData/components/slider/example/thumb.tsx +48 -0
  148. package/metaData/components/slider/example/useSliderIcon.tsx +38 -0
  149. package/metaData/components/slider/example/useSliderInit.tsx +170 -0
  150. package/metaData/components/stepper/doc.md +46 -0
  151. package/metaData/components/stepper/example/index.tsx +166 -0
  152. package/metaData/components/stepper/example/useButtonClick.tsx +74 -0
  153. package/metaData/components/stepper/example/useInputEvent.tsx +65 -0
  154. package/metaData/components/stepper/example/useValue.tsx +43 -0
  155. package/metaData/components/steps/doc.md +57 -0
  156. package/metaData/components/steps/example/index.tsx +123 -0
  157. package/metaData/components/steps/example/step.tsx +126 -0
  158. package/metaData/components/sticky/doc.md +45 -0
  159. package/metaData/components/sticky/example/index.tsx +430 -0
  160. package/metaData/components/swipe-action/doc.md +44 -0
  161. package/metaData/components/swipe-action/example/index.tsx +338 -0
  162. package/metaData/components/swipe-action/example/item.tsx +40 -0
  163. package/metaData/components/swipe-load/doc.md +43 -0
  164. package/metaData/components/swipe-load/example/index.tsx +339 -0
  165. package/metaData/components/swipe-load/example/type.tsx +153 -0
  166. package/metaData/components/switch/doc.md +38 -0
  167. package/metaData/components/switch/example/index.tsx +237 -0
  168. package/metaData/components/tab-bar/doc.md +57 -0
  169. package/metaData/components/tab-bar/example/index.tsx +18 -0
  170. package/metaData/components/tab-bar/example/item.tsx +74 -0
  171. package/metaData/components/tab-bar/example/tab-bar.tsx +105 -0
  172. package/metaData/components/tabs/doc.md +187 -0
  173. package/metaData/components/tabs/example/index.tsx +514 -0
  174. package/metaData/components/tabs/example/tab-cell-underline.tsx +320 -0
  175. package/metaData/components/tabs/example/tab-cell.tsx +433 -0
  176. package/metaData/components/tabs/example/tab-pane.tsx +349 -0
  177. package/metaData/components/tag/doc.md +80 -0
  178. package/metaData/components/tag/example/index.tsx +23 -0
  179. package/metaData/components/tag/example/list.tsx +97 -0
  180. package/metaData/components/tag/example/tag.tsx +85 -0
  181. package/metaData/components/textarea/doc.md +67 -0
  182. package/metaData/components/textarea/example/index.tsx +258 -0
  183. package/metaData/components/toast/doc.md +90 -0
  184. package/metaData/components/toast/example/index.tsx +335 -0
  185. package/metaData/components/toast/example/methods.tsx +87 -0
  186. package/metaData/components/transition/doc.md +19 -0
  187. package/metaData/components/transition/example/index.tsx +113 -0
  188. package/metaData/components/uploader/doc.md +82 -0
  189. package/metaData/components/uploader/example/index.tsx +208 -0
  190. package/metaData/components-index.json +242 -0
  191. package/package.json +56 -0
@@ -0,0 +1,237 @@
1
+ import React, {
2
+ useState,
3
+ useEffect,
4
+ forwardRef,
5
+ Ref,
6
+ useImperativeHandle,
7
+ useRef,
8
+ useContext,
9
+ } from 'react';
10
+ import { cls, componentWrapper } from '@arco-design/mobile-utils';
11
+ import { ContextLayout, GlobalContext } from '../context-provider';
12
+ import { useSystem } from '../_helpers';
13
+
14
+ interface SwitchText {
15
+ /**
16
+ * 打开时的展示文案
17
+ * @en Text when opened
18
+ */
19
+ on: string;
20
+ /**
21
+ * 关闭时的展示文案
22
+ * @en Text when closed
23
+ */
24
+ off: string;
25
+ }
26
+
27
+ export interface SwitchProps {
28
+ /**
29
+ * 自定义类名
30
+ * @en Custom classname
31
+ */
32
+ className?: string;
33
+ /**
34
+ * 自定义样式
35
+ * @en Custom stylesheet
36
+ */
37
+ style?: React.CSSProperties;
38
+ /**
39
+ * 组件的平台特有样式, 可选值为 android, ios
40
+ * @en The platform-specific style of the component, the optional values are android, ios
41
+ * @default 跟随当前所在系统
42
+ * @default_en Follow the current system
43
+ */
44
+ platform?: string;
45
+ /**
46
+ * 是否设置为打开状态 有checked时defaultChecked不会使用
47
+ * @en Whether it is set to open, defaultChecked will not be used when there is checked
48
+ */
49
+ checked?: boolean;
50
+ /**
51
+ * 默认的初始状态
52
+ * @en Default initial state
53
+ * @default false
54
+ */
55
+ defaultChecked?: boolean;
56
+ /**
57
+ * 开关文案
58
+ * @en Switch text
59
+ */
60
+ text?: SwitchText;
61
+ /**
62
+ * 圆角样式, fully - 全圆角,semi - 直角
63
+ * @en Rounded style, fully - full rounded, semi - right angle
64
+ * @default "fully"
65
+ */
66
+ shape?: 'fully' | 'semi';
67
+ /**
68
+ * 内部区域元素
69
+ * @en Inner area element
70
+ */
71
+ innerArea?: React.ReactNode;
72
+ /**
73
+ * 是否设置为禁用状态
74
+ * @en Whether it is set to disabled state
75
+ * @default false
76
+ */
77
+ disabled?: boolean;
78
+ /**
79
+ * 状态改变时触发的回调函数
80
+ * @en Callback when the status changes
81
+ */
82
+ onChange?: (checked: boolean) => void;
83
+ /**
84
+ * touchStart事件回调
85
+ * @en TouchStart event
86
+ */
87
+ onTouchStart?: (e: React.TouchEvent<HTMLDivElement>) => void;
88
+ /**
89
+ * touchEnd事件回调
90
+ * @en TouchEnd event
91
+ */
92
+ onTouchEnd?: (e: React.TouchEvent<HTMLDivElement>) => void;
93
+ /**
94
+ * click事件回调
95
+ * @en Click event
96
+ */
97
+ onClick?: (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
98
+ }
99
+
100
+ export interface SwitchRef {
101
+ /**
102
+ * 最外层元素 DOM
103
+ * @en The outermost element DOM
104
+ */
105
+ dom: HTMLDivElement | null;
106
+ }
107
+
108
+ const Switch = forwardRef((props: SwitchProps, ref: Ref<SwitchRef>) => {
109
+ const { useRtl } = useContext(GlobalContext);
110
+ const system = useSystem();
111
+ const {
112
+ className,
113
+ style,
114
+ platform = system,
115
+ checked,
116
+ disabled = false,
117
+ defaultChecked = false,
118
+ text,
119
+ shape = 'fully',
120
+ innerArea,
121
+ onChange,
122
+ onTouchStart,
123
+ onTouchEnd,
124
+ onClick,
125
+ } = props;
126
+
127
+ const [touchStartX, setTouchStartX] = useState(0);
128
+ let initChecked = false;
129
+
130
+ if ('checked' in props) {
131
+ initChecked = Boolean(checked);
132
+ } else {
133
+ initChecked = defaultChecked;
134
+ }
135
+ const [switchChecked, setSwitchChecked] = useState(initChecked);
136
+ const domRef = useRef<HTMLDivElement | null>(null);
137
+
138
+ useImperativeHandle(ref, () => ({
139
+ dom: domRef.current,
140
+ }));
141
+
142
+ useEffect(() => {
143
+ if ('checked' in props) {
144
+ setSwitchChecked(Boolean(checked));
145
+ }
146
+ }, [checked]);
147
+
148
+ function handleTouchStart(e: React.TouchEvent<HTMLDivElement>) {
149
+ onTouchStart && onTouchStart(e);
150
+ if (disabled) {
151
+ return;
152
+ }
153
+
154
+ const startX = e.touches && e.touches[0] ? e.touches[0].clientX : 0;
155
+ setTouchStartX(startX);
156
+ }
157
+
158
+ function handleTouchEnd(e: React.TouchEvent<HTMLDivElement>) {
159
+ onTouchEnd && onTouchEnd(e);
160
+ if (disabled) {
161
+ return;
162
+ }
163
+ const touchEndX = e.changedTouches && e.changedTouches[0] ? e.changedTouches[0].clientX : 0;
164
+ const distance = touchEndX - touchStartX;
165
+ const swipeRight = useRtl ? distance < 0 : distance > 0;
166
+ const swipeLeft = useRtl ? distance > 0 : distance < 0;
167
+
168
+ let newChecked = false;
169
+ // 右滑打开
170
+ // @en Swipe right to open
171
+ if (swipeRight) {
172
+ newChecked = true;
173
+ // 左滑关闭
174
+ // @en Swipe left to close
175
+ } else if (swipeLeft) {
176
+ newChecked = false;
177
+ // 点击时取反
178
+ // @en Invert on clicking
179
+ } else {
180
+ newChecked = !switchChecked;
181
+ }
182
+
183
+ if (!('checked' in props)) {
184
+ setSwitchChecked(newChecked);
185
+ }
186
+ if (onChange) {
187
+ onChange(newChecked);
188
+ }
189
+ }
190
+
191
+ return (
192
+ <ContextLayout>
193
+ {({ prefixCls }) => (
194
+ <div
195
+ role="switch"
196
+ aria-checked={switchChecked}
197
+ aria-disabled={disabled}
198
+ tabIndex={0}
199
+ ref={domRef}
200
+ className={cls(
201
+ `${prefixCls}-switch all-border-box`,
202
+ className,
203
+ `type-${platform}`,
204
+ `system-${system}`,
205
+ shape,
206
+ {
207
+ checked: switchChecked,
208
+ disabled,
209
+ },
210
+ )}
211
+ style={style}
212
+ onTouchStart={handleTouchStart}
213
+ onTouchEnd={handleTouchEnd}
214
+ onClick={onClick}
215
+ >
216
+ {text ? (
217
+ <span className={`${prefixCls}-switch-text`}>
218
+ {switchChecked ? text.off || '' : text.on || ''}
219
+ </span>
220
+ ) : null}
221
+ <div className={`${prefixCls}-switch-inner`}>{innerArea || null}</div>
222
+ </div>
223
+ )}
224
+ </ContextLayout>
225
+ );
226
+ });
227
+
228
+ /**
229
+ * 开关组件,支持点击和滑动触发开关动作。
230
+ * @en A switch component that supports click and slide trigger switch actions.
231
+ * @type 数据录入
232
+ * @type_en Data Entry
233
+ * @name 开关
234
+ * @name_en Switch
235
+ * @displayName Switch
236
+ */
237
+ export default componentWrapper(Switch, 'Switch');
@@ -0,0 +1,57 @@
1
+ ### 导航
2
+
3
+ # 标签栏 TabBar
4
+
5
+ 标签栏组件,Tabs 的简化版,仅支持标签切换
6
+
7
+ ======
8
+
9
+ > 属性/Props
10
+
11
+ |参数|描述|类型|默认值|
12
+ |----------|-------------|------|------|
13
+ |className|自定义类名|string|""|
14
+ |style|自定义样式|CSSProperties|{}|
15
+ |children|内部标签内容|ReactNode|null|
16
+ |activeIndex|选中标签的索引值|number|-|
17
+ |defaultActiveIndex|默认选中的索引值|number|0|
18
+ |onChange|切换标签时的回调函数|(index: number) =\> void|-|
19
+ |dataSource|数据源,传了 dataSource 则 TabBar\.TabBarItem 失效|(TabBarItemProps & RefAttributes\<TabBarItemRef\>)\[\]|-|
20
+ |activeCustomStyle|当前选中标签的样式|CSSProperties|-|
21
+ |fixed|是否固定在底部|boolean|true|
22
+
23
+ > 引用/Refs
24
+
25
+ |参数|描述|类型|
26
+ |----------|-------------|------|
27
+ |dom|最外层元素 DOM|HTMLDivElement|
28
+
29
+ > TabBar.Item
30
+
31
+ |参数|描述|类型|默认值|
32
+ |----------|-------------|------|------|
33
+ |title|标题|ReactNode \| ((active: boolean) =\> ReactNode)|-|
34
+ |extra|附加元素 (如徽标)|ReactNode \| ((active: boolean) =\> ReactNode)|-|
35
+ |icon|图标|ReactNode \| ((active: boolean) =\> ReactNode)|-|
36
+ |child|自定义内容|ReactNode \| ((active: boolean) =\> ReactNode)|-|
37
+ |onClick|点击事件|(e: MouseEvent\<Element, MouseEvent\>) =\> void|-|
38
+ |className|自定义类名|string|""|
39
+ |style|自定义样式|CSSProperties|{}|
40
+
41
+ > TabBarItemProps
42
+
43
+ |参数|描述|类型|默认值|
44
+ |----------|-------------|------|------|
45
+ |title|标题|ReactNode \| ((active: boolean) =\> ReactNode)|-|
46
+ |extra|附加元素 (如徽标)|ReactNode \| ((active: boolean) =\> ReactNode)|-|
47
+ |icon|图标|ReactNode \| ((active: boolean) =\> ReactNode)|-|
48
+ |child|自定义内容|ReactNode \| ((active: boolean) =\> ReactNode)|-|
49
+ |onClick|点击事件|(e: MouseEvent\<Element, MouseEvent\>) =\> void|-|
50
+ |className|自定义类名|string|""|
51
+ |style|自定义样式|CSSProperties|{}|
52
+
53
+ > TabBarItemRef
54
+
55
+ |参数|描述|类型|
56
+ |----------|-------------|------|
57
+ |dom|最外层元素 DOM|HTMLDivElement|
@@ -0,0 +1,18 @@
1
+ import { componentWrapper } from '@arco-design/mobile-utils';
2
+ import { Item } from './item';
3
+ import { componentGenerator } from './tab-bar';
4
+
5
+ export * from './type';
6
+
7
+ const TabBar = componentGenerator(Item);
8
+ /**
9
+ * 标签栏组件,Tabs 的简化版,仅支持标签切换
10
+ * @en TabBar component, a simplified version of Tabs, only supports tab switching.
11
+ * @type 导航
12
+ * @type_en Navigation
13
+ * @name 标签栏
14
+ * @name_en TabBar
15
+ */
16
+ export default componentWrapper(TabBar, {
17
+ Item,
18
+ });
@@ -0,0 +1,74 @@
1
+ import React, { forwardRef, Ref, useContext, useImperativeHandle, useRef } from 'react';
2
+ import { cls } from '@arco-design/mobile-utils';
3
+ import { TabBarItemProps, TabBarItemRef } from './type';
4
+ import { ContextLayout } from '../context-provider';
5
+ import { TabBarContext } from './tab-bar';
6
+
7
+ export const Item = forwardRef((props: TabBarItemProps, ref: Ref<TabBarItemRef>) => {
8
+ const { active, changeIndex, index, activeCustomStyle } = useContext(TabBarContext);
9
+ const { onClick, className, style } = props;
10
+ const domRef = useRef<HTMLDivElement | null>(null);
11
+ function renderContent(prefixCls: string | undefined) {
12
+ const iconElm = props.icon ? (
13
+ <div className={cls(`${prefixCls}-tab-bar-item-icon`)}>
14
+ {typeof props.icon === 'function' ? props.icon(active) : props.icon}
15
+ </div>
16
+ ) : null;
17
+ const titleElm = props.title ? (
18
+ <div
19
+ className={cls(`${prefixCls}-tab-bar-item-title`, {
20
+ [`${prefixCls}-tab-bar-item-only-title`]: !iconElm,
21
+ })}
22
+ >
23
+ {typeof props.title === 'function' ? props.title(active) : props.title}
24
+ </div>
25
+ ) : null;
26
+ const extraElm =
27
+ props.extra && typeof props.extra === 'function' ? props.extra(active) : props.extra;
28
+ const childElm = props.child && (
29
+ <div className={cls(`${prefixCls}-tab-bar-item-children`)}>
30
+ {typeof props.child === 'function' ? props.child(active) : props.child}
31
+ </div>
32
+ );
33
+ const extraWrap =
34
+ iconElm || extraElm ? (
35
+ <div className={cls(`${prefixCls}-extra-wrap`)}>
36
+ {iconElm}
37
+ {extraElm}
38
+ </div>
39
+ ) : null;
40
+ return (
41
+ childElm || (
42
+ <>
43
+ {extraWrap}
44
+ {titleElm}
45
+ </>
46
+ )
47
+ );
48
+ }
49
+ useImperativeHandle(ref, () => ({
50
+ dom: domRef.current,
51
+ }));
52
+ const handleClick = e => {
53
+ onClick?.(e);
54
+ changeIndex(index);
55
+ };
56
+ return (
57
+ <ContextLayout>
58
+ {({ prefixCls }) => (
59
+ <div
60
+ className={cls(
61
+ `${prefixCls}-tab-bar-item`,
62
+ { [`${prefixCls}-tab-bar-item-active`]: active },
63
+ className,
64
+ )}
65
+ style={{ ...style, ...(active ? activeCustomStyle : {}) }}
66
+ ref={domRef}
67
+ onClick={e => handleClick(e)}
68
+ >
69
+ {renderContent(prefixCls)}
70
+ </div>
71
+ )}
72
+ </ContextLayout>
73
+ );
74
+ });
@@ -0,0 +1,105 @@
1
+ import React, {
2
+ Children,
3
+ createContext,
4
+ forwardRef,
5
+ Ref,
6
+ useCallback,
7
+ useEffect,
8
+ useImperativeHandle,
9
+ useRef,
10
+ useState,
11
+ } from 'react';
12
+ import { cls } from '@arco-design/mobile-utils';
13
+ import { ContextLayout } from '../context-provider';
14
+ import { useRefState } from '../_helpers';
15
+ import { TabBarItemProps, TabBarItemRef, TabBarRef, TabBarProps } from './type';
16
+
17
+ export const TabBarContext = createContext<TabBarContextParams>({
18
+ changeIndex: () => {},
19
+ active: false,
20
+ index: 0,
21
+ activeCustomStyle: {},
22
+ });
23
+ interface TabBarContextParams {
24
+ changeIndex: (index: number) => void;
25
+ active: boolean;
26
+ index: number;
27
+ activeCustomStyle?: React.CSSProperties;
28
+ }
29
+
30
+ export function componentGenerator<
31
+ P extends TabBarItemProps = TabBarItemProps,
32
+ R extends TabBarItemRef = TabBarItemRef,
33
+ >(Comp: React.ForwardRefExoticComponent<P & React.RefAttributes<R>>) {
34
+ return forwardRef((props: TabBarProps<P>, ref: Ref<TabBarRef>) => {
35
+ const {
36
+ defaultActiveIndex = 0,
37
+ activeIndex: activeIndexProps,
38
+ className,
39
+ fixed = true,
40
+ style,
41
+ dataSource,
42
+ children,
43
+ onChange,
44
+ activeCustomStyle,
45
+ } = props;
46
+ const [innerIndex, setInnerIndex] = useState(defaultActiveIndex);
47
+ const [activeIndex, activeRefIndex, setActiveIndex] = useRefState(
48
+ activeIndexProps === void 0 ? innerIndex : activeIndexProps,
49
+ );
50
+ useEffect(() => {
51
+ setActiveIndex(activeIndexProps === void 0 ? innerIndex : activeIndexProps);
52
+ }, [activeIndexProps, innerIndex]);
53
+
54
+ const domRef = useRef<HTMLDivElement | null>(null);
55
+
56
+ useImperativeHandle(ref, () => ({
57
+ dom: domRef.current,
58
+ changeIndex,
59
+ }));
60
+
61
+ const renderItem = useCallback(
62
+ (child: React.ReactNode, index: number) => (
63
+ <TabBarContext.Provider
64
+ value={{
65
+ active: index === activeIndex,
66
+ changeIndex,
67
+ index,
68
+ activeCustomStyle,
69
+ }}
70
+ key={index}
71
+ >
72
+ {child}
73
+ </TabBarContext.Provider>
74
+ ),
75
+ [activeIndex],
76
+ );
77
+
78
+ function changeIndex(index: number) {
79
+ setInnerIndex(index);
80
+ index !== activeRefIndex.current && onChange?.(index);
81
+ }
82
+
83
+ return (
84
+ <ContextLayout>
85
+ {({ prefixCls }) => (
86
+ <div
87
+ className={cls(`${prefixCls}-tab-bar`, className, {
88
+ [`${prefixCls}-tab-bar-fixed`]: fixed,
89
+ })}
90
+ style={style}
91
+ ref={domRef}
92
+ >
93
+ {dataSource
94
+ ? dataSource.map((data, index) =>
95
+ renderItem(<Comp key={index} {...data} />, index),
96
+ )
97
+ : Children.toArray(children).map((child, index) =>
98
+ renderItem(child, index),
99
+ )}
100
+ </div>
101
+ )}
102
+ </ContextLayout>
103
+ );
104
+ });
105
+ }
@@ -0,0 +1,187 @@
1
+ ### 导航
2
+
3
+ # 选项卡 Tabs
4
+
5
+ 用于让用户在不同的视图中进行切换。为优化移动端渲染性能,如有替换DOM、发请求更新数据等操作,请在`onAfterChange`而非`onChange`回调中进行。
6
+
7
+ ======
8
+
9
+ > 属性/Props
10
+
11
+ |参数|描述|类型|默认值|
12
+ |----------|-------------|------|------|
13
+ |className|自定义类名|string|-|
14
+ |style|自定义样式|CSSProperties|-|
15
+ |tabs|TabBar内容数组,除必填项外也可附加其他数据,建议用 useMemo 包裹|TabData\[\]|必填|
16
+ |children|TabPane内容|ReactNode|-|
17
+ |activeTab|当前活动tab index,传入则为受控|number|-|
18
+ |defaultActiveTab|初始tab index值|number|0|
19
+ |disabled|是否禁用切换,包括点击TabBar切换和滑动切换|boolean|-|
20
+ |tabBarPosition|TabBar位置|"top" \| "bottom" \| "left" \| "right"|"top"|
21
+ |tabBarArrange|TabBar排列方式,tabBar在top或bottom位置时有效,start为靠左,center为居中,end为靠右|"start" \| "center" \| "end"|"center"|
22
+ |tabBarScroll|是否TabBar超出屏幕时靠左滚动排列|boolean|true|
23
+ |tabBarFixed|TabBar是否顶部/底部固定(含 placeholder),可传入具体固定的值|boolean \| Pick\<CSSProperties, "top" \| "bottom"\>|-|
24
+ |tabBarExtra|tabBar额外渲染内容|ReactNode|-|
25
+ |tabBarScrollBezier|tabBar滚动时变化的bezier曲线值|\[number, number, number, number\]|[0.34, 0.69, 0.1, 1]|
26
+ |tabBarScrollDuration|tabBar滚动过渡时长,单位ms|number|300|
27
+ |tabBarScrollChance|tabBar滚动时机,\`jump\`表示在跳转tab时,\`after\-jump\`表示跳转动画执行后,\`none\`表示切换tab后不自动滚动|"jump" \| "after\-jump" \| "none"|"jump"|
28
+ |tabBarHasDivider|tabBar是否有分割线|boolean|-|
29
+ |tabBarResetWhenScroll|在竖向滚动tabPane时,自动重设tabBar滚动位置的时机|"none" \| "touchmove" \| "touchend"|"touchmove"|
30
+ |type|页签的样式,line为顺次排布,line\-divide为等分间距排布,card为分段器式排布|"line" \| "line\-divide" \| "card" \| "tag" \| "tag\-divide"|line|
31
+ |swipeable|是否允许滑动|boolean|true|
32
+ |duration|TabBar下划线滑动动画切换时间,单位ms|number|240|
33
+ |fullScreen|是否为全屏(100%)布局|boolean|false|
34
+ |autoHeight|容器高度自适应,仅在mode=swipe且是垂直布局时生效|boolean|false|
35
+ |transitionDuration|swipe模式下表示手指抬起后到动画结束时间,scroll模式下表示点击tab后滚动过渡时间,单位ms|number|300|
36
+ |useCaterpillar|是否使用毛毛虫效果|boolean|false|
37
+ |caterpillarProperty|使用毛毛虫效果时,执行动画更改的属性,\`scale\`表示更改 transform: scale 值,\`size\`表示更改宽高值。一般在避免border\-radius被scale拉伸的情况会使用\`size\`,但需注意其性能不如\`scale\`|"scale" \| "size"|"scale"|
38
+ |caterpillarMaxScale|毛毛虫效果开启时,TabBar下划线最长延展倍数(相对于自身长度)|number|2|
39
+ |percentToChangeTab|滑动切换距离阈值(宽度比例),范围为\[0, 1\],如果该属性和\`distanceToChangeTab\`属性均设置,则实际计算结果更大的生效|number|0.3|
40
+ |distanceToChangeTab|滑动切换距离阈值(固定px宽度),如果该属性和\`percentToChangeTab\`属性均设置,则实际计算结果更大的生效|number|10|
41
+ |speedToChangeTab|滑动切换速度阈值(手指从按下到抬起之间的滑动速度,单位为px/s),与滑动切换距离阈值同时设置时,满足其中一个即生效|number|200|
42
+ |disableClickTransition|点击tab切换时禁用动画|boolean|true|
43
+ |lazyloadCount|只加载当前页相邻的n个内容,为0时会隐藏/销毁所有相邻内容,不传则加载所有内容,在mode=swipe时生效|number|-|
44
+ |hideContentStyle|当开启懒加载时,针对不在懒加载范围内的内容设置样式,传入null则销毁内容|CSSProperties|null|
45
+ |renderHideContent|自行渲染不在懒加载范围内的pane,其中参数pane代表第index个tab原本要渲染的内容|(index: number, pane: ReactNode) =\> ReactNode|-|
46
+ |hideTabBarBeforeMounted|在组件加载完成前是否隐藏TabBar,防止溢出时多余的滚动效果|boolean|-|
47
+ |overflowThreshold|TabBar个数大于等于多少时认为会溢出,用于dom加载完成之前的ssr首屏渲染优化|number|5|
48
+ |showUnderline|是否展示下划线|boolean|true|
49
+ |underlineAdaptive|下划线是否根据 tab cell 长度自适应|boolean|false|
50
+ |stopTouchThreshold|触发onTouchStopped的最小阈值|number|0|
51
+ |touchSideDisableThreshold|距离屏幕边缘多远开始向右滑动时禁用tabs滑动事件|number|0|
52
+ |stopPropagation|swipe 模式下,触摸事件是否需要 stopPropagation|boolean|true|
53
+ |getInnerScrollContainer|swipe 模式下,组件内部的滚动容器,用于豁免滑动事件响应|() =\> HTMLElement \| HTMLElement\[\]|-|
54
+ |mode|tabs切换模式,swipe为滑动模式,scroll为滚动监听模式|"swipe" \| "scroll"|"swipe"|
55
+ |getScrollContainer|滚动模式下的滚动容器,用于监听滚动事件,mode=scroll 时有效|() =\> HTMLElement \| Window|-|
56
+ |scrollThrottle|滚动模式下的节流粒度,mode=scroll 时有效|number|300|
57
+ |scrollOffset|滚动模式下判断tab切换的偏移量,正数为向下偏移,负数为向上偏移,mode=scroll 时有效|number|0|
58
+ |scrollWhenMounted|滚动模式下,在组件初始加载时是否需要自动滚动到当前所选位置,mode=scroll 时有效|boolean|当初始index不为0时会自动滚动,为0时则不会自动滚动|
59
+ |goLastWhenScrollBottom|当滚动到最底部时,如果最后一个pane尚未到达底部,是否强行选中,mode=scroll 时有效|boolean|true|
60
+ |scrollVertical|是否监听垂直方向的滚动,否则监听水平方向滚动|boolean|true|
61
+ |tabBarClass|TabBar外层容器自定义类名|string|-|
62
+ |tabPaneClass|TabPane外层容器自定义类名|string|-|
63
+ |tabBarStyle|TabBar外层容器自定义样式|CSSProperties|-|
64
+ |tabPaneStyle|TabPane外层容器自定义样式|CSSProperties|-|
65
+ |tabPaneExtra|TabPane额外渲染元素,需绝对定位|ReactNode|-|
66
+ |translateZ|TabPane和TabBar开启translateZ|boolean|true|
67
+ |swipeEnergySaving|是否启用滑动节能模式,开启后TabPane外层容器不会随panes数量撑开并提升为合成层,仅滑动当前选中的pane,其他pane在选中前将被隐藏|boolean|false|
68
+ |onTouchStopped|当滑到第一页或最后一页,还想再滑动时触发|(direction: 1 \| \-1) =\> void|-|
69
+ |onChange|tab变化回调|(tab: TabData, index: number, from?: string) =\> void|-|
70
+ |onAfterChange|tab变化且动画执行完毕后回调|(tab: TabData, index: number, from?: string) =\> void|-|
71
+ |onTabClick|TabBar点击的事件|(tab: TabData, index: number, e: MouseEvent\<HTMLDivElement, MouseEvent\>) =\> void|-|
72
+ |onTabBarOverflowChange|TabBar超出屏幕状态切换回调|(overflow: boolean) =\> void|-|
73
+ |onTouchStart|TabPane touchstart事件|(e: TouchEvent, index: number) =\> boolean \| void|-|
74
+ |onTouchMove|TabPane touchmove事件|(e: TouchEvent, index: number) =\> boolean \| void|-|
75
+ |onTouchEnd|TabPane touchend / touchcancel事件|(e: TouchEvent, index: number) =\> boolean \| void|-|
76
+ |onTabBarScroll|TabBar在溢出滚动时回调|(e: UIEvent\<HTMLDivElement, UIEvent\>) =\> void|-|
77
+ |onDistanceChange|tabs 左右滑动时回调,用于监听滑动距离以做滑动同步交互|(distance: number, wrapWidth: number, activeIndex: number) =\> void|-|
78
+ |onScroll|mode=scroll 时,触发滚动容器滚动回调|() =\> void|-|
79
+ |renderUnderline|自行渲染TabBar的下划线|(underlineStyle: UnderlineStyle, showLine: boolean, lineRef: MutableRefObject\<HTMLElement\>) =\> ReactNode|-|
80
+ |renderTabBar|自行渲染TabBar,常用于与Sticky配合使用|(TabBar: ReactNode, TabBarProps: TabCellProps) =\> ReactNode|-|
81
+ |renderTabBarItem|自行渲染TabBar的每一个item|(tab: TabData, index: number, extra: \{ active: boolean; \}) =\> ReactNode|-|
82
+ |renderTabBarInner|自行渲染TabBar内部内容,当需要给 \.@\{prefix\}\-tab\-cell 外层再嵌套一层dom时使用|(Inner: ReactNode) =\> ReactNode|-|
83
+ |tabBarGutter|tabBar间隙,type=line时有效|ReactText|-|
84
+ |tabBarPadding|TabBar两侧留白宽度,type=line时有效|string \| number \| \{ left?: ReactText; right?: ReactText; \}|-|
85
+ |underlineSize|TabBar下划线长度|ReactText|-|
86
+ |underlineThick|TabBar下划线厚度|ReactText|-|
87
+ |underlineInnerStyle|TabBar下划线内部样式,作用于 tab\-cell\-underline\-inner|CSSProperties|-|
88
+ |tabBarStopPropagation|当前 TabBar 的触摸事件是否需要 stopPropagation|boolean|true|
89
+
90
+ > 引用/Refs
91
+
92
+ |参数|描述|类型|
93
+ |----------|-------------|------|
94
+ |dom|最外层元素 DOM|HTMLDivElement|
95
+ |bar|TabBar 内部子组件 Ref|TabCellRef|
96
+ |pane|Tab Pane 内部子组件 Ref|TabPaneRef|
97
+ |barOverflow|当前 TabBar 宽度是否已溢出|boolean|
98
+ |updateLayout|手动更新 Tabs 布局|() =\> void|
99
+ |changeIndex|非受控模式下手动切换 tab|(index: number, rightNow?: boolean) =\> void|
100
+ |scrollToIndex|滚动到指定 Tab,仅滚动监听模式下可用|(index: number, rightNow?: boolean) =\> void|
101
+
102
+ > TabData
103
+
104
+ ```
105
+ string | { [x: string]: any; title: ReactNode; }
106
+ ```
107
+
108
+ > UnderlineStyle
109
+
110
+ |参数|描述|类型|
111
+ |----------|-------------|------|
112
+ |outer|下划线外层样式,控制线的相对位置|CSSProperties|
113
+ |inner|下划线内层样式,控制线本身的宽高及缩放效果|CSSProperties|
114
+
115
+ > TabCellProps
116
+
117
+ |参数|描述|类型|默认值|
118
+ |----------|-------------|------|------|
119
+ |prefixCls|类前缀|string|-|
120
+ |activeIndex|当前选中 Tab|number|必填|
121
+ |activeIndexRef|当前选中 Tab ref|MutableRefObject\<number\>|必填|
122
+ |tabDirection|Tab 布局方向,横向 or 竖向|"horizontal" \| "vertical"|必填|
123
+ |changeIndex|修改选中 Tab|(newIndex: number, from?: string) =\> void|必填|
124
+ |wrapWidth|外层容器宽度|number|必填|
125
+ |wrapHeight|外层容器高度|number|必填|
126
+ |cellTrans|TabBar是否启用过渡效果|boolean|必填|
127
+ |distance|手指滑动距离|number|必填|
128
+ |jumpingDis|下划线已滑动的距离|number|必填|
129
+ |tabBarStopPropagation|当前 TabBar 的触摸事件是否需要 stopPropagation|boolean|必填|
130
+ |onUnderlineFirstShow|underline 首次展示时的回调|() =\> void|-|
131
+ |tabs|TabBar内容数组,除必填项外也可附加其他数据,建议用 useMemo 包裹|TabData\[\]|必填|
132
+ |disabled|是否禁用切换,包括点击TabBar切换和滑动切换|boolean|-|
133
+ |tabBarPosition|TabBar位置|"top" \| "bottom" \| "left" \| "right"|"top"|
134
+ |tabBarArrange|TabBar排列方式,tabBar在top或bottom位置时有效,start为靠左,center为居中,end为靠右|"start" \| "center" \| "end"|"center"|
135
+ |tabBarScroll|是否TabBar超出屏幕时靠左滚动排列|boolean|true|
136
+ |tabBarFixed|TabBar是否顶部/底部固定(含 placeholder),可传入具体固定的值|boolean \| Pick\<CSSProperties, "top" \| "bottom"\>|-|
137
+ |tabBarExtra|tabBar额外渲染内容|ReactNode|-|
138
+ |tabBarScrollBezier|tabBar滚动时变化的bezier曲线值|\[number, number, number, number\]|[0.34, 0.69, 0.1, 1]|
139
+ |tabBarScrollDuration|tabBar滚动过渡时长,单位ms|number|300|
140
+ |tabBarScrollChance|tabBar滚动时机,\`jump\`表示在跳转tab时,\`after\-jump\`表示跳转动画执行后,\`none\`表示切换tab后不自动滚动|"jump" \| "after\-jump" \| "none"|"jump"|
141
+ |tabBarHasDivider|tabBar是否有分割线|boolean|-|
142
+ |type|页签的样式,line为顺次排布,line\-divide为等分间距排布,card为分段器式排布|"line" \| "line\-divide" \| "card" \| "tag" \| "tag\-divide"|line|
143
+ |duration|TabBar下划线滑动动画切换时间,单位ms|number|240|
144
+ |transitionDuration|swipe模式下表示手指抬起后到动画结束时间,scroll模式下表示点击tab后滚动过渡时间,单位ms|number|300|
145
+ |useCaterpillar|是否使用毛毛虫效果|boolean|false|
146
+ |caterpillarProperty|使用毛毛虫效果时,执行动画更改的属性,\`scale\`表示更改 transform: scale 值,\`size\`表示更改宽高值。一般在避免border\-radius被scale拉伸的情况会使用\`size\`,但需注意其性能不如\`scale\`|"scale" \| "size"|"scale"|
147
+ |caterpillarMaxScale|毛毛虫效果开启时,TabBar下划线最长延展倍数(相对于自身长度)|number|2|
148
+ |hideTabBarBeforeMounted|在组件加载完成前是否隐藏TabBar,防止溢出时多余的滚动效果|boolean|-|
149
+ |overflowThreshold|TabBar个数大于等于多少时认为会溢出,用于dom加载完成之前的ssr首屏渲染优化|number|5|
150
+ |showUnderline|是否展示下划线|boolean|true|
151
+ |underlineAdaptive|下划线是否根据 tab cell 长度自适应|boolean|false|
152
+ |mode|tabs切换模式,swipe为滑动模式,scroll为滚动监听模式|"swipe" \| "scroll"|"swipe"|
153
+ |tabBarClass|TabBar外层容器自定义类名|string|-|
154
+ |tabBarStyle|TabBar外层容器自定义样式|CSSProperties|-|
155
+ |translateZ|TabPane和TabBar开启translateZ|boolean|true|
156
+ |onTabClick|TabBar点击的事件|(tab: TabData, index: number, e: MouseEvent\<HTMLDivElement, MouseEvent\>) =\> void|-|
157
+ |onTabBarOverflowChange|TabBar超出屏幕状态切换回调|(overflow: boolean) =\> void|-|
158
+ |onTabBarScroll|TabBar在溢出滚动时回调|(e: UIEvent\<HTMLDivElement, UIEvent\>) =\> void|-|
159
+ |renderUnderline|自行渲染TabBar的下划线|(underlineStyle: UnderlineStyle, showLine: boolean, lineRef: MutableRefObject\<HTMLElement\>) =\> ReactNode|-|
160
+ |renderTabBarItem|自行渲染TabBar的每一个item|(tab: TabData, index: number, extra: \{ active: boolean; \}) =\> ReactNode|-|
161
+ |renderTabBarInner|自行渲染TabBar内部内容,当需要给 \.@\{prefix\}\-tab\-cell 外层再嵌套一层dom时使用|(Inner: ReactNode) =\> ReactNode|-|
162
+ |tabBarGutter|tabBar间隙,type=line时有效|ReactText|-|
163
+ |tabBarPadding|TabBar两侧留白宽度,type=line时有效|string \| number \| \{ left?: ReactText; right?: ReactText; \}|-|
164
+ |underlineSize|TabBar下划线长度|ReactText|-|
165
+ |underlineThick|TabBar下划线厚度|ReactText|-|
166
+ |underlineInnerStyle|TabBar下划线内部样式,作用于 tab\-cell\-underline\-inner|CSSProperties|-|
167
+
168
+ > TabCellRef
169
+
170
+ |参数|描述|类型|
171
+ |----------|-------------|------|
172
+ |dom|外层元素 DOM|HTMLDivElement|
173
+ |hasOverflow|当前 TabBar 宽度是否已溢出|boolean|
174
+ |scrollTo|滚动 bar 到指定位置,tabs 上下布局时是以 x 轴滚动,左右布局时以 y 轴滚动|(position: number, rightNow?: boolean) =\> void|
175
+ |scrollToCenter|滚动 bar 使当前选中item到屏幕中间|(rightNow?: boolean) =\> void|
176
+ |setCaterpillarAnimate|触发毛毛虫动画|(ratio?: number) =\> void|
177
+ |resetUnderlineStyle|重新计算下划线样式(仅重算位置,如果 tab cell DOM 被人为改变,请调用 updateLayout)|() =\> void|
178
+ |updateLayout|强制更新 tab\-cell|() =\> void|
179
+
180
+ > TabPaneRef
181
+
182
+ |参数|描述|类型|
183
+ |----------|-------------|------|
184
+ |dom|外层元素 DOM|HTMLDivElement|
185
+ |getTransition|获取当前 transitionDuration|() =\> number|
186
+ |scrollToIndex|滚动到指定 Tab,仅滚动监听模式下可用|(index: number, rightNow?: boolean) =\> void|
187
+ |setCurrentHeight|autoHeight=true时,更新当前tabpane高度|() =\> void|