@arco-design/mobile-react 2.26.0 → 2.27.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 (238) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.en-US.md +2 -2
  3. package/README.md +2 -2
  4. package/cjs/form/form-item.js +4 -2
  5. package/cjs/icon/IconHeart/index.js +1 -1
  6. package/cjs/icon/IconKeyboard/index.d.ts +7 -0
  7. package/cjs/icon/IconKeyboard/index.js +48 -0
  8. package/cjs/icon/IconKeyboardDelete/index.d.ts +7 -0
  9. package/cjs/icon/IconKeyboardDelete/index.js +44 -0
  10. package/cjs/icon/IconMinus/index.js +1 -1
  11. package/cjs/icon/IconMore/index.js +1 -1
  12. package/cjs/icon/IconNotice/index.js +1 -1
  13. package/cjs/icon/IconNoticeOff/index.js +1 -1
  14. package/cjs/icon/IconPlay/index.js +1 -1
  15. package/cjs/icon/IconSetting/index.js +2 -2
  16. package/cjs/icon/IconSound/index.js +1 -1
  17. package/cjs/icon/IconStar/index.js +1 -1
  18. package/cjs/icon/IconStarFill/index.js +1 -1
  19. package/cjs/icon/IconTriDown/index.js +1 -1
  20. package/cjs/icon/IconTriUp/index.js +1 -1
  21. package/cjs/icon/IconUpload/index.js +1 -1
  22. package/cjs/icon/IconWarnCircle/index.js +1 -1
  23. package/cjs/icon/IconWarnCircleFill/index.js +1 -1
  24. package/cjs/icon/index.d.ts +2 -0
  25. package/cjs/icon/index.js +12 -2
  26. package/cjs/image-picker/style/css/index.d.ts +1 -0
  27. package/cjs/image-picker/style/css/index.js +2 -0
  28. package/cjs/image-picker/style/index.d.ts +1 -0
  29. package/cjs/image-picker/style/index.js +2 -0
  30. package/cjs/index-bar/context.d.ts +3 -0
  31. package/cjs/index-bar/context.js +15 -0
  32. package/cjs/index-bar/demo/style/css/mobile.css +23 -0
  33. package/cjs/index-bar/demo/style/mobile.less +26 -0
  34. package/cjs/index-bar/group.d.ts +3 -0
  35. package/cjs/index-bar/group.js +101 -0
  36. package/cjs/index-bar/index.d.ts +15 -0
  37. package/cjs/index-bar/index.js +276 -0
  38. package/cjs/index-bar/side-bar.d.ts +3 -0
  39. package/cjs/index-bar/side-bar.js +102 -0
  40. package/cjs/index-bar/style/css/index.css +164 -0
  41. package/cjs/index-bar/style/css/index.d.ts +3 -0
  42. package/cjs/index-bar/style/css/index.js +7 -0
  43. package/cjs/index-bar/style/index.d.ts +3 -0
  44. package/cjs/index-bar/style/index.js +7 -0
  45. package/cjs/index-bar/style/index.less +122 -0
  46. package/cjs/index-bar/type.d.ts +195 -0
  47. package/cjs/index-bar/type.js +3 -0
  48. package/cjs/index-bar/utils.d.ts +6 -0
  49. package/cjs/index-bar/utils.js +68 -0
  50. package/cjs/index.d.ts +2 -0
  51. package/cjs/index.js +9 -1
  52. package/cjs/keyboard/demo/style/css/mobile.css +4 -0
  53. package/cjs/keyboard/demo/style/mobile.less +8 -0
  54. package/cjs/keyboard/index.d.ts +13 -0
  55. package/cjs/keyboard/index.js +270 -0
  56. package/cjs/keyboard/style/css/index.css +93 -0
  57. package/cjs/keyboard/style/css/index.d.ts +3 -0
  58. package/cjs/keyboard/style/css/index.js +7 -0
  59. package/cjs/keyboard/style/index.d.ts +3 -0
  60. package/cjs/keyboard/style/index.js +7 -0
  61. package/cjs/keyboard/style/index.less +80 -0
  62. package/cjs/keyboard/type.d.ts +102 -0
  63. package/cjs/keyboard/type.js +3 -0
  64. package/cjs/picker/index.js +3 -39
  65. package/cjs/picker/type.d.ts +1 -1
  66. package/cjs/picker-view/components/cascader.d.ts +2 -3
  67. package/cjs/picker-view/components/cascader.js +8 -6
  68. package/cjs/picker-view/components/multi-picker.d.ts +2 -3
  69. package/cjs/picker-view/components/multi-picker.js +31 -35
  70. package/cjs/picker-view/components/picker-cell.d.ts +1 -1
  71. package/cjs/picker-view/components/picker-cell.js +5 -7
  72. package/cjs/picker-view/index.d.ts +1 -1
  73. package/cjs/picker-view/index.js +9 -20
  74. package/cjs/picker-view/type.d.ts +2 -2
  75. package/cjs/slider/hooks/useSliderEvents.js +20 -20
  76. package/cjs/sticky/index.js +2 -2
  77. package/cjs/style.d.ts +2 -0
  78. package/cjs/style.js +4 -0
  79. package/dist/index.js +1793 -483
  80. package/dist/index.min.js +4 -4
  81. package/dist/style.css +215 -1
  82. package/dist/style.min.css +1 -1
  83. package/esm/form/form-item.js +4 -2
  84. package/esm/icon/IconHeart/index.js +1 -1
  85. package/esm/icon/IconKeyboard/index.d.ts +7 -0
  86. package/esm/icon/IconKeyboard/index.js +37 -0
  87. package/esm/icon/IconKeyboardDelete/index.d.ts +7 -0
  88. package/esm/icon/IconKeyboardDelete/index.js +33 -0
  89. package/esm/icon/IconMinus/index.js +1 -1
  90. package/esm/icon/IconMore/index.js +1 -1
  91. package/esm/icon/IconNotice/index.js +1 -1
  92. package/esm/icon/IconNoticeOff/index.js +1 -1
  93. package/esm/icon/IconPlay/index.js +1 -1
  94. package/esm/icon/IconSetting/index.js +2 -2
  95. package/esm/icon/IconSound/index.js +1 -1
  96. package/esm/icon/IconStar/index.js +1 -1
  97. package/esm/icon/IconStarFill/index.js +1 -1
  98. package/esm/icon/IconTriDown/index.js +1 -1
  99. package/esm/icon/IconTriUp/index.js +1 -1
  100. package/esm/icon/IconUpload/index.js +1 -1
  101. package/esm/icon/IconWarnCircle/index.js +1 -1
  102. package/esm/icon/IconWarnCircleFill/index.js +1 -1
  103. package/esm/icon/index.d.ts +2 -0
  104. package/esm/icon/index.js +2 -0
  105. package/esm/image-picker/style/css/index.d.ts +1 -0
  106. package/esm/image-picker/style/css/index.js +1 -0
  107. package/esm/image-picker/style/index.d.ts +1 -0
  108. package/esm/image-picker/style/index.js +1 -0
  109. package/esm/index-bar/context.d.ts +3 -0
  110. package/esm/index-bar/context.js +8 -0
  111. package/esm/index-bar/demo/style/css/mobile.css +23 -0
  112. package/esm/index-bar/demo/style/mobile.less +26 -0
  113. package/esm/index-bar/group.d.ts +3 -0
  114. package/esm/index-bar/group.js +83 -0
  115. package/esm/index-bar/index.d.ts +15 -0
  116. package/esm/index-bar/index.js +254 -0
  117. package/esm/index-bar/side-bar.d.ts +3 -0
  118. package/esm/index-bar/side-bar.js +90 -0
  119. package/esm/index-bar/style/css/index.css +164 -0
  120. package/esm/index-bar/style/css/index.d.ts +3 -0
  121. package/esm/index-bar/style/css/index.js +3 -0
  122. package/esm/index-bar/style/index.d.ts +3 -0
  123. package/esm/index-bar/style/index.js +3 -0
  124. package/esm/index-bar/style/index.less +122 -0
  125. package/esm/index-bar/type.d.ts +195 -0
  126. package/esm/index-bar/type.js +1 -0
  127. package/esm/index-bar/utils.d.ts +6 -0
  128. package/esm/index-bar/utils.js +53 -0
  129. package/esm/index.d.ts +2 -0
  130. package/esm/index.js +2 -0
  131. package/esm/keyboard/demo/style/css/mobile.css +4 -0
  132. package/esm/keyboard/demo/style/mobile.less +8 -0
  133. package/esm/keyboard/index.d.ts +13 -0
  134. package/esm/keyboard/index.js +243 -0
  135. package/esm/keyboard/style/css/index.css +93 -0
  136. package/esm/keyboard/style/css/index.d.ts +3 -0
  137. package/esm/keyboard/style/css/index.js +3 -0
  138. package/esm/keyboard/style/index.d.ts +3 -0
  139. package/esm/keyboard/style/index.js +3 -0
  140. package/esm/keyboard/style/index.less +80 -0
  141. package/esm/keyboard/type.d.ts +102 -0
  142. package/esm/keyboard/type.js +1 -0
  143. package/esm/picker/index.js +3 -40
  144. package/esm/picker/type.d.ts +1 -1
  145. package/esm/picker-view/components/cascader.d.ts +2 -3
  146. package/esm/picker-view/components/cascader.js +8 -6
  147. package/esm/picker-view/components/multi-picker.d.ts +2 -3
  148. package/esm/picker-view/components/multi-picker.js +31 -34
  149. package/esm/picker-view/components/picker-cell.d.ts +1 -1
  150. package/esm/picker-view/components/picker-cell.js +5 -7
  151. package/esm/picker-view/index.d.ts +1 -1
  152. package/esm/picker-view/index.js +10 -21
  153. package/esm/picker-view/type.d.ts +2 -2
  154. package/esm/slider/hooks/useSliderEvents.js +20 -20
  155. package/esm/sticky/index.js +2 -2
  156. package/esm/style.d.ts +2 -0
  157. package/esm/style.js +2 -0
  158. package/package.json +3 -3
  159. package/tokens/app/arcodesign/default/css-variables.less +43 -0
  160. package/tokens/app/arcodesign/default/index.d.ts +43 -0
  161. package/tokens/app/arcodesign/default/index.js +43 -0
  162. package/tokens/app/arcodesign/default/index.json +516 -0
  163. package/tokens/app/arcodesign/default/index.less +43 -0
  164. package/umd/form/form-item.js +4 -2
  165. package/umd/icon/IconHeart/index.js +1 -1
  166. package/umd/icon/IconKeyboard/index.d.ts +7 -0
  167. package/umd/icon/IconKeyboard/index.js +56 -0
  168. package/umd/icon/IconKeyboardDelete/index.d.ts +7 -0
  169. package/umd/icon/IconKeyboardDelete/index.js +52 -0
  170. package/umd/icon/IconMinus/index.js +1 -1
  171. package/umd/icon/IconMore/index.js +1 -1
  172. package/umd/icon/IconNotice/index.js +1 -1
  173. package/umd/icon/IconNoticeOff/index.js +1 -1
  174. package/umd/icon/IconPlay/index.js +1 -1
  175. package/umd/icon/IconSetting/index.js +2 -2
  176. package/umd/icon/IconSound/index.js +1 -1
  177. package/umd/icon/IconStar/index.js +1 -1
  178. package/umd/icon/IconStarFill/index.js +1 -1
  179. package/umd/icon/IconTriDown/index.js +1 -1
  180. package/umd/icon/IconTriUp/index.js +1 -1
  181. package/umd/icon/IconUpload/index.js +1 -1
  182. package/umd/icon/IconWarnCircle/index.js +1 -1
  183. package/umd/icon/IconWarnCircleFill/index.js +1 -1
  184. package/umd/icon/index.d.ts +2 -0
  185. package/umd/icon/index.js +12 -6
  186. package/umd/image-picker/style/css/index.d.ts +1 -0
  187. package/umd/image-picker/style/css/index.js +4 -4
  188. package/umd/image-picker/style/index.d.ts +1 -0
  189. package/umd/image-picker/style/index.js +4 -4
  190. package/umd/index-bar/context.d.ts +3 -0
  191. package/umd/index-bar/context.js +26 -0
  192. package/umd/index-bar/demo/style/css/mobile.css +23 -0
  193. package/umd/index-bar/demo/style/mobile.less +26 -0
  194. package/umd/index-bar/group.d.ts +3 -0
  195. package/umd/index-bar/group.js +107 -0
  196. package/umd/index-bar/index.d.ts +15 -0
  197. package/umd/index-bar/index.js +274 -0
  198. package/umd/index-bar/side-bar.d.ts +3 -0
  199. package/umd/index-bar/side-bar.js +113 -0
  200. package/umd/index-bar/style/css/index.css +164 -0
  201. package/umd/index-bar/style/css/index.d.ts +3 -0
  202. package/umd/index-bar/style/css/index.js +15 -0
  203. package/umd/index-bar/style/index.d.ts +3 -0
  204. package/umd/index-bar/style/index.js +15 -0
  205. package/umd/index-bar/style/index.less +122 -0
  206. package/umd/index-bar/type.d.ts +195 -0
  207. package/umd/index-bar/type.js +17 -0
  208. package/umd/index-bar/utils.d.ts +6 -0
  209. package/umd/index-bar/utils.js +78 -0
  210. package/umd/index.d.ts +2 -0
  211. package/umd/index.js +9 -5
  212. package/umd/keyboard/demo/style/css/mobile.css +4 -0
  213. package/umd/keyboard/demo/style/mobile.less +8 -0
  214. package/umd/keyboard/index.d.ts +13 -0
  215. package/umd/keyboard/index.js +271 -0
  216. package/umd/keyboard/style/css/index.css +93 -0
  217. package/umd/keyboard/style/css/index.d.ts +3 -0
  218. package/umd/keyboard/style/css/index.js +15 -0
  219. package/umd/keyboard/style/index.d.ts +3 -0
  220. package/umd/keyboard/style/index.js +15 -0
  221. package/umd/keyboard/style/index.less +80 -0
  222. package/umd/keyboard/type.d.ts +102 -0
  223. package/umd/keyboard/type.js +17 -0
  224. package/umd/picker/index.js +3 -39
  225. package/umd/picker/type.d.ts +1 -1
  226. package/umd/picker-view/components/cascader.d.ts +2 -3
  227. package/umd/picker-view/components/cascader.js +8 -6
  228. package/umd/picker-view/components/multi-picker.d.ts +2 -3
  229. package/umd/picker-view/components/multi-picker.js +31 -35
  230. package/umd/picker-view/components/picker-cell.d.ts +1 -1
  231. package/umd/picker-view/components/picker-cell.js +5 -7
  232. package/umd/picker-view/index.d.ts +1 -1
  233. package/umd/picker-view/index.js +9 -20
  234. package/umd/picker-view/type.d.ts +2 -2
  235. package/umd/slider/hooks/useSliderEvents.js +20 -20
  236. package/umd/sticky/index.js +2 -2
  237. package/umd/style.d.ts +2 -0
  238. package/umd/style.js +4 -4
@@ -0,0 +1,254 @@
1
+ import { cls, componentWrapper } from '@arco-design/mobile-utils';
2
+ import { scrollWithAnimation } from '@arco-design/mobile-utils/utils';
3
+ import lodashThrottle from 'lodash.throttle';
4
+ import React, { useRef, forwardRef, useImperativeHandle, useMemo, useState, useEffect } from 'react';
5
+ import { ContextLayout } from '../context-provider';
6
+ import { IndexBarContext } from './context';
7
+ import { IndexBarGroup as Group } from './group';
8
+ import { IndexBarSideBar } from './side-bar';
9
+ import { filterValidIndexBarChild, getGroupDomFromIndex, getFormatIndex, isValidIndex } from './utils';
10
+ var IndexBar = /*#__PURE__*/forwardRef(function (props, ref) {
11
+ var _props$className = props.className,
12
+ className = _props$className === void 0 ? '' : _props$className,
13
+ style = props.style,
14
+ children = props.children,
15
+ _props$sticky = props.sticky,
16
+ sticky = _props$sticky === void 0 ? true : _props$sticky,
17
+ _props$groups = props.groups,
18
+ groups = _props$groups === void 0 ? [] : _props$groups,
19
+ _props$tipType = props.tipType,
20
+ tipType = _props$tipType === void 0 ? 'toast' : _props$tipType,
21
+ defaultIndex = props.defaultIndex,
22
+ scrollBezier = props.scrollBezier,
23
+ _props$scrollDuration = props.scrollDuration,
24
+ scrollDuration = _props$scrollDuration === void 0 ? 0 : _props$scrollDuration,
25
+ _props$disableSidebar = props.disableSidebar,
26
+ disableSidebar = _props$disableSidebar === void 0 ? false : _props$disableSidebar,
27
+ onChange = props.onChange,
28
+ onGroupItemClick = props.onGroupItemClick,
29
+ renderSideBar = props.renderSideBar,
30
+ renderSideBarItem = props.renderSideBarItem,
31
+ renderTip = props.renderTip,
32
+ renderStickyItem = props.renderStickyItem,
33
+ renderGroupItem = props.renderGroupItem; // 最外层dom元素的ref
34
+
35
+ var domRef = useRef(null); // 所有group的容器dom,domRef的内容就是contanerRef和sidebar的内容
36
+
37
+ var containerRef = useRef(null); // 过滤掉jsx写法中,奇怪的child
38
+
39
+ var formatChildren = filterValidIndexBarChild(children); // 所有的索引内容,优先从props.groups中获取,再从formatChildren中获取
40
+
41
+ var indexes = useMemo(function () {
42
+ if (groups.length) {
43
+ return groups.map(function (group) {
44
+ return group.index;
45
+ });
46
+ }
47
+
48
+ return formatChildren.map(function (child) {
49
+ return child.props.index;
50
+ });
51
+ }, [children, groups]);
52
+ var groupRefs = useRef({}); // 当前激活的Index
53
+
54
+ var _useState = useState(function () {
55
+ return defaultIndex != null ? defaultIndex : indexes == null ? void 0 : indexes[0];
56
+ }),
57
+ activeIndex = _useState[0],
58
+ setActiveIndex = _useState[1]; // 给IndexBarGroup用的上下文,主要是为了兼容jsx的写法
59
+
60
+
61
+ var contextValue = useMemo(function () {
62
+ return {
63
+ sticky: sticky,
64
+ getScrollContainer: function getScrollContainer() {
65
+ return containerRef.current;
66
+ },
67
+ activeIndex: activeIndex,
68
+ updateRef: function updateRef(groupIndex, stickyRef) {
69
+ groupRefs.current[groupIndex] = stickyRef;
70
+ }
71
+ };
72
+ }, [sticky, activeIndex]); // 用户是否正在触碰sidebar, 如果为true的话,禁用handleScroll的处理
73
+
74
+ var isScrollHandlerDisabledRef = useRef(false);
75
+
76
+ var handleChangeActiveIndex = function handleChangeActiveIndex(index, type) {
77
+ setActiveIndex(function (oldActiveIndex) {
78
+ var newActiveIndex = getFormatIndex(index, oldActiveIndex); // 和上一次激活的acitveIndex不同,再触发onChange事件
79
+
80
+ if (newActiveIndex !== oldActiveIndex) {
81
+ onChange == null ? void 0 : onChange(newActiveIndex, type);
82
+ }
83
+
84
+ return newActiveIndex;
85
+ });
86
+ }; // 要滚动到哪个指定的index
87
+
88
+
89
+ var handleScrollIntoIndex = function handleScrollIntoIndex(params) {
90
+ var index = params.index,
91
+ type = params.type,
92
+ _params$rightNow = params.rightNow,
93
+ rightNow = _params$rightNow === void 0 ? false : _params$rightNow; // 不传index默认走第一个index
94
+
95
+ var formatIndex = index != null ? index : indexes == null ? void 0 : indexes[0];
96
+ var containerDom = containerRef.current;
97
+
98
+ if (!isValidIndex(index) || !containerDom) {
99
+ return;
100
+ } // 寻找Index对应的groupDom
101
+
102
+
103
+ var groupDom = getGroupDomFromIndex(containerDom, formatIndex);
104
+
105
+ if (groupDom) {
106
+ handleChangeActiveIndex(formatIndex, type);
107
+ var duration = rightNow ? 0 : scrollDuration;
108
+ var targetScrollTop = groupDom.offsetTop; // 将屏幕滚动到groupDom
109
+ // 手动触发需要禁用handleScroll事件
110
+
111
+ if (type === 'manual') {
112
+ isScrollHandlerDisabledRef.current = true;
113
+ setTimeout(function () {
114
+ isScrollHandlerDisabledRef.current = false;
115
+ }, duration);
116
+ }
117
+
118
+ if (duration > 0) {
119
+ scrollWithAnimation(containerDom.scrollTop, targetScrollTop, function (top) {
120
+ return containerDom.scrollTop = top;
121
+ }, duration, scrollBezier);
122
+ } else {
123
+ containerDom.scrollTop = targetScrollTop;
124
+ }
125
+ }
126
+ };
127
+
128
+ useImperativeHandle(ref, function () {
129
+ return {
130
+ dom: domRef.current,
131
+ scrollToIndex: function scrollToIndex(index, rightNow) {
132
+ if (isValidIndex(index)) {
133
+ handleScrollIntoIndex({
134
+ index: index,
135
+ rightNow: rightNow,
136
+ type: 'manual'
137
+ });
138
+ }
139
+ },
140
+ recalculatePosition: function recalculatePosition(targetIndex) {
141
+ var formatIndex = targetIndex != null ? targetIndex : activeIndex;
142
+
143
+ if (formatIndex) {
144
+ var targetStickyRef = groupRefs.current[formatIndex];
145
+
146
+ if (targetStickyRef && targetStickyRef.recalculatePosition) {
147
+ targetStickyRef.recalculatePosition();
148
+ }
149
+ }
150
+ }
151
+ };
152
+ });
153
+
154
+ var renderChildren = function renderChildren() {
155
+ if (formatChildren.length) {
156
+ return formatChildren;
157
+ }
158
+
159
+ return groups == null ? void 0 : groups.map(function (group) {
160
+ return /*#__PURE__*/React.createElement(Group, {
161
+ index: group.index,
162
+ key: group.index,
163
+ list: group.list,
164
+ onGroupItemClick: onGroupItemClick,
165
+ renderGroupItem: renderGroupItem,
166
+ renderStickyItem: renderStickyItem
167
+ });
168
+ });
169
+ };
170
+
171
+ useEffect(function () {
172
+ var _containerRef$current;
173
+
174
+ var handleScroll = lodashThrottle(function () {
175
+ // 用户正在触碰sidebar和手动触发scroll时禁用滚动事件的处理
176
+ if (!containerRef.current || isScrollHandlerDisabledRef.current) {
177
+ return;
178
+ } // 根据滚动的距离,获取处于屏幕最顶部的group是哪个
179
+
180
+
181
+ var scrollTop = containerRef.current.scrollTop;
182
+
183
+ for (var i = 0; i < containerRef.current.children.length; i++) {
184
+ var child = containerRef.current.children[i];
185
+
186
+ if (!child || !child.dataset || typeof child.dataset.index === 'undefined') {
187
+ continue;
188
+ }
189
+
190
+ if (child.offsetTop + child.clientHeight >= scrollTop) {
191
+ handleChangeActiveIndex(child.dataset.index, 'swipe');
192
+ break;
193
+ }
194
+ }
195
+ }, 100); // 页面挂载时,如果是传入了defaultIndex,则滚动到对应位置
196
+
197
+ if (activeIndex) {
198
+ handleScrollIntoIndex({
199
+ index: activeIndex,
200
+ rightNow: true,
201
+ type: 'manual'
202
+ });
203
+ }
204
+
205
+ (_containerRef$current = containerRef.current) == null ? void 0 : _containerRef$current.addEventListener('scroll', handleScroll);
206
+ return function () {
207
+ var _containerRef$current2;
208
+
209
+ (_containerRef$current2 = containerRef.current) == null ? void 0 : _containerRef$current2.removeEventListener('scroll', handleScroll);
210
+ };
211
+ }, []);
212
+ return /*#__PURE__*/React.createElement(ContextLayout, null, function (_ref) {
213
+ var prefixCls = _ref.prefixCls;
214
+ return /*#__PURE__*/React.createElement(IndexBarContext.Provider, {
215
+ value: contextValue
216
+ }, /*#__PURE__*/React.createElement("div", {
217
+ className: cls(prefixCls + "-index-bar", className),
218
+ style: style,
219
+ ref: domRef
220
+ }, /*#__PURE__*/React.createElement("div", {
221
+ className: prefixCls + "-index-bar-container",
222
+ ref: containerRef
223
+ }, renderChildren()), !disableSidebar && /*#__PURE__*/React.createElement(IndexBarSideBar, {
224
+ tipType: tipType,
225
+ activeIndex: activeIndex,
226
+ prefixCls: prefixCls,
227
+ indexes: indexes,
228
+ onTouching: function onTouching(isTouching) {
229
+ return isScrollHandlerDisabledRef.current = isTouching;
230
+ },
231
+ onClick: function onClick(newIndex) {
232
+ return handleScrollIntoIndex({
233
+ index: newIndex,
234
+ type: 'sidebar'
235
+ });
236
+ },
237
+ renderSideBar: renderSideBar,
238
+ renderSideBarItem: renderSideBarItem,
239
+ renderTip: renderTip
240
+ })));
241
+ });
242
+ });
243
+ /**
244
+ * 索引栏组件
245
+ * @en IndexBar component
246
+ * @type 导航
247
+ * @type_en Navigation
248
+ * @name 索引栏
249
+ * @name_en SearchBar
250
+ */
251
+
252
+ export default componentWrapper(IndexBar, {
253
+ Group: Group
254
+ });
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { IndexBarSideBarProps } from './type';
3
+ export declare function IndexBarSideBar(props: IndexBarSideBarProps): JSX.Element;
@@ -0,0 +1,90 @@
1
+ import React, { useState } from 'react';
2
+ import { cls } from '@arco-design/mobile-utils';
3
+ export function IndexBarSideBar(props) {
4
+ var _cls;
5
+
6
+ var indexes = props.indexes,
7
+ prefixCls = props.prefixCls,
8
+ onTouching = props.onTouching,
9
+ onClick = props.onClick,
10
+ activeIndex = props.activeIndex,
11
+ tipType = props.tipType,
12
+ renderSideBar = props.renderSideBar,
13
+ _props$renderSideBarI = props.renderSideBarItem,
14
+ renderSideBarItem = _props$renderSideBarI === void 0 ? function (index) {
15
+ return index;
16
+ } : _props$renderSideBarI,
17
+ propsRenderTip = props.renderTip;
18
+
19
+ var _useState = useState(false),
20
+ isTouching = _useState[0],
21
+ originSetIsTouching = _useState[1];
22
+
23
+ var setIsTouching = function setIsTouching(touching) {
24
+ originSetIsTouching(touching);
25
+ onTouching(touching);
26
+ };
27
+
28
+ var handleTouchingStart = function handleTouchingStart() {
29
+ return setIsTouching(true);
30
+ };
31
+
32
+ var handleTouchingStop = function handleTouchingStop() {
33
+ return setIsTouching(false);
34
+ };
35
+
36
+ var handleTouchMove = function handleTouchMove(e) {
37
+ var _e$touches, _target$dataset;
38
+
39
+ if (!isTouching || !((_e$touches = e.touches) != null && _e$touches.length)) {
40
+ return;
41
+ }
42
+
43
+ var _e$touches$ = e.touches[0],
44
+ clientX = _e$touches$.clientX,
45
+ clientY = _e$touches$.clientY;
46
+ var target = document.elementFromPoint(clientX, clientY);
47
+
48
+ if (target && (_target$dataset = target.dataset) != null && _target$dataset.index) {
49
+ onClick(target.dataset.index);
50
+ }
51
+ };
52
+
53
+ var renderSideBarTip = function renderSideBarTip(index, type) {
54
+ if (propsRenderTip) {
55
+ return propsRenderTip(index);
56
+ }
57
+
58
+ return /*#__PURE__*/React.createElement("div", {
59
+ className: prefixCls + "-index-bar-sidebar-" + type
60
+ }, index);
61
+ };
62
+
63
+ var node = /*#__PURE__*/React.createElement("div", {
64
+ className: cls(prefixCls + "-index-bar-sidebar", (_cls = {}, _cls[prefixCls + "-index-bar-sidebar-touching"] = isTouching, _cls)),
65
+ onTouchStart: function onTouchStart() {
66
+ return handleTouchingStart();
67
+ },
68
+ onTouchEnd: function onTouchEnd() {
69
+ return handleTouchingStop();
70
+ },
71
+ onTouchCancel: function onTouchCancel() {
72
+ return handleTouchingStop();
73
+ },
74
+ onTouchMove: handleTouchMove
75
+ }, tipType === 'toast' && isTouching && activeIndex && renderSideBarTip(activeIndex, 'toast'), indexes.map(function (index) {
76
+ var _cls2;
77
+
78
+ return /*#__PURE__*/React.createElement("div", {
79
+ className: cls(prefixCls + "-index-bar-sidebar-item", (_cls2 = {}, _cls2[prefixCls + "-index-bar-sidebar-active"] = activeIndex === index, _cls2)),
80
+ key: index,
81
+ onTouchStart: function onTouchStart() {
82
+ return onClick(index);
83
+ },
84
+ "data-index": index
85
+ }, tipType === 'sweat' && isTouching && activeIndex === index && renderSideBarTip(index, 'sweat'), /*#__PURE__*/React.createElement("div", {
86
+ className: prefixCls + "-index-bar-sidebar-item-wrapper"
87
+ }, renderSideBarItem(index)));
88
+ }));
89
+ return renderSideBar ? renderSideBar(node) : node;
90
+ }
@@ -0,0 +1,164 @@
1
+ .arco-index-bar {
2
+ position: relative;
3
+ background: white ;
4
+ overflow: hidden;
5
+ }
6
+ .arco-index-bar-container {
7
+ height: 100%;
8
+ overflow-y: auto;
9
+ }
10
+ .arco-index-bar-container::-webkit-scrollbar {
11
+ display: none;
12
+ }
13
+ .arco-index-bar-group-active {
14
+ color: #165dff ;
15
+ }
16
+ .arco-index-bar-group-title {
17
+ padding-left: 0.32rem ;
18
+ height: 0.48rem ;
19
+ background: #f7f8fa ;
20
+ font-size: 0.28rem ;
21
+ color: #86909c ;
22
+ display: -webkit-box;
23
+ display: -webkit-flex;
24
+ display: flex;
25
+ -webkit-box-align: center;
26
+ -webkit-align-items: center;
27
+ align-items: center;
28
+ }
29
+ .arco-index-bar-group-item {
30
+ height: 1.08rem ;
31
+ display: -webkit-box;
32
+ display: -webkit-flex;
33
+ display: flex;
34
+ -webkit-box-align: center;
35
+ -webkit-align-items: center;
36
+ align-items: center;
37
+ margin-left: 0.32rem ;
38
+ font-size: 0.32rem ;
39
+ }
40
+ .arco-index-bar-group-item:not(:last-child) {
41
+ position: relative;
42
+ border-width: 0;
43
+ }
44
+ .arco-index-bar-group-item:not(:last-child)::after {
45
+ content: '';
46
+ width: 100%;
47
+ height: 1PX;
48
+ position: absolute;
49
+ left: 0;
50
+ bottom: 0;
51
+ z-index: 1;
52
+ border-bottom-style: solid;
53
+ border-bottom-width: 1PX;
54
+ border-bottom-color: #e5e6eb;
55
+ box-sizing: border-box;
56
+ transform-origin: left bottom;
57
+ -webkit-transform-origin: left bottom;
58
+ pointer-events: none;
59
+ border-radius: 0;
60
+ }
61
+ @media (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2) {
62
+ .arco-index-bar-group-item:not(:last-child)::after {
63
+ transform: scaleY(0.5);
64
+ -webkit-transform: scaleY(0.5);
65
+ border-radius: 0;
66
+ }
67
+ }
68
+ @media (-webkit-min-device-pixel-ratio: 3), (min-device-pixel-ratio: 3) {
69
+ .arco-index-bar-group-item:not(:last-child)::after {
70
+ transform: scaleY(0.33333333);
71
+ -webkit-transform: scaleY(0.33333333);
72
+ border-radius: 0;
73
+ }
74
+ }
75
+ .arco-index-bar-sidebar {
76
+ position: absolute;
77
+ z-index: 2;
78
+ right: 0;
79
+ top: 50%;
80
+ -webkit-transform: translateY(-50%) translateZ(0);
81
+ transform: translateY(-50%) translateZ(0);
82
+ -webkit-user-select: none;
83
+ user-select: none;
84
+ }
85
+ .arco-index-bar-sidebar-touching {
86
+ left: 0;
87
+ }
88
+ .arco-index-bar-sidebar-item {
89
+ display: -webkit-box;
90
+ display: -webkit-flex;
91
+ display: flex;
92
+ -webkit-box-pack: end;
93
+ -webkit-justify-content: flex-end;
94
+ justify-content: flex-end;
95
+ -webkit-box-align: center;
96
+ -webkit-align-items: center;
97
+ align-items: center;
98
+ position: relative;
99
+ padding: 0.04rem 0.16rem ;
100
+ cursor: pointer;
101
+ }
102
+ .arco-index-bar-sidebar-item-wrapper {
103
+ display: -webkit-inline-box;
104
+ display: -webkit-inline-flex;
105
+ display: inline-flex;
106
+ -webkit-box-align: center;
107
+ -webkit-align-items: center;
108
+ align-items: center;
109
+ -webkit-box-pack: center;
110
+ -webkit-justify-content: center;
111
+ justify-content: center;
112
+ width: 0.2rem ;
113
+ font-size: 0.2rem ;
114
+ line-height: 0.28rem ;
115
+ }
116
+ .arco-index-bar-sidebar-item:last-child {
117
+ padding-bottom: 0px;
118
+ }
119
+ .arco-index-bar-sidebar-active {
120
+ color: #165dff ;
121
+ }
122
+ .arco-index-bar-sidebar-sweat {
123
+ position: absolute;
124
+ height: 1rem ;
125
+ min-width: 1rem ;
126
+ line-height: 1rem ;
127
+ border-radius: 9999px;
128
+ text-align: center;
129
+ padding: 0 0.16rem ;
130
+ background: #323232 ;
131
+ right: 0.72rem ;
132
+ font-size: 0.48rem ;
133
+ color: white ;
134
+ }
135
+ .arco-index-bar-sidebar-sweat::before {
136
+ content: '';
137
+ position: absolute;
138
+ top: 0;
139
+ bottom: 0;
140
+ margin: auto;
141
+ right: -0.54rem ;
142
+ width: 0;
143
+ height: 0;
144
+ border: 0.36rem solid transparent ;
145
+ border: 18px solid transparent;
146
+ border-left-color: #323232 ;
147
+ border-radius: 4px;
148
+ }
149
+ .arco-index-bar-sidebar-toast {
150
+ position: absolute;
151
+ background: #323232 ;
152
+ color: white ;
153
+ left: 50%;
154
+ top: 50%;
155
+ min-width: 0.96rem ;
156
+ height: 0.96rem ;
157
+ line-height: 0.96rem ;
158
+ -webkit-transform: translate(-50%, -50%);
159
+ transform: translate(-50%, -50%);
160
+ text-align: center;
161
+ padding: 0 0.16rem ;
162
+ font-size: 0.48rem ;
163
+ border-radius: 0.08rem ;
164
+ }
@@ -0,0 +1,3 @@
1
+ import '../../../../style/css/public.css';
2
+ import '../../../sticky/style/css';
3
+ import './index.css';
@@ -0,0 +1,3 @@
1
+ import '../../../../style/css/public.css';
2
+ import '../../../sticky/style/css';
3
+ import './index.css';
@@ -0,0 +1,3 @@
1
+ import '../../../style/public.less';
2
+ import '../../sticky/style';
3
+ import './index.less';
@@ -0,0 +1,3 @@
1
+ import '../../../style/public.less';
2
+ import '../../sticky/style';
3
+ import './index.less';
@@ -0,0 +1,122 @@
1
+ @import '../../../style/mixin.less';
2
+
3
+ .@{prefix}-index-bar {
4
+ position: relative;
5
+ .use-var(background, index-bar-background);
6
+ overflow: hidden;
7
+ &-container {
8
+ height: 100%;
9
+ overflow-y: auto;
10
+
11
+ &::-webkit-scrollbar {
12
+ display: none;
13
+ }
14
+ }
15
+
16
+ &-group {
17
+ &-active {
18
+ .use-var(color, index-bar-group-active-color);
19
+ }
20
+ &-title {
21
+ .use-var(padding-left, index-bar-group-left-spacing);
22
+ .use-var(height, index-bar-group-title-height);
23
+ .use-var(background, index-bar-group-title-background);
24
+ .use-var(font-size, index-bar-group-title-font-size);
25
+ .use-var(color, index-bar-group-title-font-color);
26
+ display: flex;
27
+ align-items: center;
28
+ }
29
+ &-item {
30
+ .use-var(height, index-bar-group-item-height);
31
+ display: flex;
32
+ align-items: center;
33
+ .use-var(margin-left, index-bar-group-left-spacing);
34
+ .use-var(font-size, index-bar-group-item-font-size);
35
+
36
+ &:not(:last-child) {
37
+ .onepx-border-var(bottom, line-color);
38
+ }
39
+ }
40
+ }
41
+
42
+ &-sidebar {
43
+ &-touching {
44
+ left: 0;
45
+ }
46
+ position: absolute;
47
+ z-index: 2;
48
+ right: 0;
49
+ top: 50%;
50
+ transform: translateY(-50%) translateZ(0);
51
+ user-select: none;
52
+
53
+ &-item {
54
+ display: flex;
55
+ justify-content: flex-end;
56
+ align-items: center;
57
+ position: relative;
58
+ .use-var(padding, index-bar-sidebar-item-padding);
59
+ cursor: pointer;
60
+
61
+ &-wrapper {
62
+ display: inline-flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ .use-var(width, index-bar-sidebar-item-width);
66
+ .use-var(font-size, index-bar-sidebar-item-font-size);
67
+ .use-var(line-height, index-bar-sidebar-item-line-height);
68
+ }
69
+
70
+ &:last-child {
71
+ padding-bottom: 0px;
72
+ }
73
+ }
74
+ &-active {
75
+ .use-var(color, index-bar-sidebar-active-color);
76
+ }
77
+
78
+ &-sweat {
79
+ position: absolute;
80
+ .use-var(height, index-bar-sidebar-sweat-radius);
81
+ .use-var(min-width, index-bar-sidebar-sweat-radius);
82
+ .use-var(line-height, index-bar-sidebar-sweat-radius);
83
+ border-radius: 9999px;
84
+ text-align: center;
85
+ .use-var(padding, index-bar-sidebar-sweat-padding);
86
+ .use-var(background, index-bar-sidebar-sweat-background);
87
+ .use-var(right, index-bar-sidebar-sweat-right);
88
+ .use-var(font-size, index-bar-sidebar-sweat-font-size);
89
+ .use-var(color, index-bar-sidebar-sweat-color);
90
+ &::before {
91
+ content: '';
92
+ position: absolute;
93
+ top: 0;
94
+ bottom: 0;
95
+ margin: auto;
96
+ .use-var(right, index-bar-sidebar-sweat-triangle-position);
97
+ width: 0;
98
+ height: 0;
99
+ .use-var(border, index-bar-sidebar-sweat-triangle-border);
100
+ border: 18px solid transparent;
101
+ .use-var(border-left-color, index-bar-sidebar-sweat-background);
102
+ border-radius: 4px;
103
+ }
104
+ }
105
+
106
+ &-toast {
107
+ position: absolute;
108
+ .use-var(background, index-bar-sidebar-toast-background);
109
+ .use-var(color, index-bar-sidebar-toast-color);
110
+ left: 50%;
111
+ top: 50%;
112
+ .use-var(min-width, index-bar-sidebar-toast-height);
113
+ .use-var(height, index-bar-sidebar-toast-height);
114
+ .use-var(line-height, index-bar-sidebar-toast-height);
115
+ transform: translate(-50%, -50%);
116
+ text-align: center;
117
+ .use-var(padding, index-bar-sidebar-toast-padding);
118
+ .use-var(font-size, index-bar-sidebar-toast-font-size);
119
+ .use-var(border-radius, index-bar-sidebar-toast-radius);
120
+ }
121
+ }
122
+ }