antd-mobile 5.0.0-rc.4 → 5.0.0-rc.8

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 (257) hide show
  1. package/2x/README.md +12 -1
  2. package/2x/cjs/components/checkbox/checkbox.css +1 -1
  3. package/2x/cjs/components/collapse/collapse.d.ts +2 -2
  4. package/2x/cjs/components/collapse/collapse.js +1 -1
  5. package/2x/cjs/components/date-picker/date-picker.js +1 -1
  6. package/2x/cjs/components/dialog/dialog.d.ts +1 -0
  7. package/2x/cjs/components/dialog/dialog.js +12 -7
  8. package/2x/cjs/components/form/form-item.css +1 -1
  9. package/2x/cjs/components/form/index.css +1 -1
  10. package/2x/cjs/components/image/lazy-detector.js +4 -1
  11. package/2x/cjs/components/image-uploader/image-uploader.js +9 -3
  12. package/2x/cjs/components/image-viewer/slide.js +0 -5
  13. package/2x/cjs/components/index-bar/index-bar.css +1 -1
  14. package/2x/cjs/components/infinite-scroll/infinite-scroll.js +1 -1
  15. package/2x/cjs/components/input/input.d.ts +2 -2
  16. package/2x/cjs/components/list/list.css +5 -4
  17. package/2x/cjs/components/list/list.js +1 -3
  18. package/2x/cjs/components/mask/mask.js +3 -2
  19. package/2x/cjs/components/modal/modal.d.ts +1 -0
  20. package/2x/cjs/components/modal/modal.js +5 -3
  21. package/2x/cjs/components/notice-bar/notice-bar.css +1 -0
  22. package/2x/cjs/components/number-keyboard/number-keyboard.css +2 -2
  23. package/2x/cjs/components/number-keyboard/number-keyboard.js +1 -1
  24. package/2x/cjs/components/passcode-input/index.d.ts +4 -0
  25. package/2x/cjs/components/passcode-input/index.js +13 -0
  26. package/2x/cjs/components/passcode-input/passcode-input.css +166 -0
  27. package/2x/cjs/components/passcode-input/passcode-input.d.ts +35 -0
  28. package/2x/cjs/components/passcode-input/passcode-input.js +169 -0
  29. package/2x/cjs/components/picker/picker.js +5 -3
  30. package/2x/cjs/components/picker-view/picker-view.css +46 -5
  31. package/2x/cjs/components/picker-view/picker-view.js +32 -22
  32. package/2x/cjs/components/picker-view/wheel.d.ts +10 -0
  33. package/{cjs/components/picker-view/column.js → 2x/cjs/components/picker-view/wheel.js} +74 -14
  34. package/2x/cjs/components/progress-bar/progress-bar.css +3 -1
  35. package/2x/cjs/components/progress-bar/progress-bar.d.ts +1 -1
  36. package/2x/cjs/components/radio/radio.css +1 -1
  37. package/2x/cjs/components/rate/rate.css +1 -0
  38. package/2x/cjs/components/search-bar/search-bar.css +5 -0
  39. package/2x/cjs/components/search-bar/search-bar.d.ts +3 -1
  40. package/2x/cjs/components/search-bar/search-bar.js +6 -5
  41. package/2x/cjs/components/side-bar/side-bar.css +2 -0
  42. package/2x/cjs/components/skeleton/index.d.ts +8 -0
  43. package/2x/cjs/components/skeleton/index.js +19 -0
  44. package/2x/cjs/components/skeleton/skeleton.css +45 -0
  45. package/2x/cjs/components/skeleton/skeleton.d.ts +15 -0
  46. package/2x/cjs/components/skeleton/skeleton.js +61 -0
  47. package/2x/cjs/components/stepper/stepper.d.ts +1 -0
  48. package/2x/cjs/components/stepper/stepper.js +4 -2
  49. package/2x/cjs/components/tab-bar/tab-bar.css +1 -1
  50. package/2x/cjs/components/tab-bar/tab-bar.d.ts +1 -0
  51. package/2x/cjs/components/tab-bar/tab-bar.js +24 -11
  52. package/2x/cjs/components/toast/index.d.ts +2 -1
  53. package/2x/cjs/components/toast/index.js +2 -1
  54. package/2x/cjs/components/toast/methods.d.ts +1 -0
  55. package/2x/cjs/components/toast/methods.js +18 -1
  56. package/2x/cjs/components/tree-select/tree-select.css +1 -0
  57. package/2x/cjs/components/virtual-input/virtual-input.js +1 -3
  58. package/2x/cjs/global/global.css +0 -4
  59. package/2x/cjs/index.d.ts +2 -0
  60. package/2x/cjs/index.js +16 -0
  61. package/2x/cjs/utils/use-mutation-effect.js +1 -1
  62. package/2x/cjs/utils/use-props-value.js +1 -1
  63. package/2x/cjs/utils/use-resize-effect.js +1 -1
  64. package/2x/es/components/checkbox/checkbox.css +1 -1
  65. package/2x/es/components/collapse/collapse.d.ts +2 -2
  66. package/2x/es/components/collapse/collapse.js +1 -1
  67. package/2x/es/components/date-picker/date-picker.js +2 -2
  68. package/2x/es/components/dialog/dialog.d.ts +1 -0
  69. package/2x/es/components/dialog/dialog.js +11 -7
  70. package/2x/es/components/form/form-item.css +1 -1
  71. package/2x/es/components/form/index.css +1 -1
  72. package/2x/es/components/image/lazy-detector.js +4 -1
  73. package/2x/es/components/image-uploader/image-uploader.js +10 -4
  74. package/2x/es/components/image-viewer/slide.js +0 -5
  75. package/2x/es/components/index-bar/index-bar.css +1 -1
  76. package/2x/es/components/infinite-scroll/infinite-scroll.js +2 -2
  77. package/2x/es/components/input/input.d.ts +2 -2
  78. package/2x/es/components/list/list.css +5 -4
  79. package/2x/es/components/list/list.js +1 -3
  80. package/2x/es/components/mask/mask.js +3 -2
  81. package/2x/es/components/modal/modal.d.ts +1 -0
  82. package/2x/es/components/modal/modal.js +5 -3
  83. package/2x/es/components/notice-bar/notice-bar.css +1 -0
  84. package/2x/es/components/number-keyboard/number-keyboard.css +2 -2
  85. package/2x/es/components/number-keyboard/number-keyboard.js +2 -2
  86. package/2x/es/components/passcode-input/index.d.ts +4 -0
  87. package/2x/es/components/passcode-input/index.js +3 -0
  88. package/2x/es/components/passcode-input/passcode-input.css +166 -0
  89. package/2x/es/components/passcode-input/passcode-input.d.ts +35 -0
  90. package/2x/es/components/passcode-input/passcode-input.js +149 -0
  91. package/2x/es/components/picker/picker.js +6 -4
  92. package/2x/es/components/picker-view/picker-view.css +46 -5
  93. package/2x/es/components/picker-view/picker-view.js +33 -23
  94. package/2x/es/components/picker-view/wheel.d.ts +10 -0
  95. package/{es/components/picker-view/column.js → 2x/es/components/picker-view/wheel.js} +71 -12
  96. package/2x/es/components/progress-bar/progress-bar.css +3 -1
  97. package/2x/es/components/progress-bar/progress-bar.d.ts +1 -1
  98. package/2x/es/components/radio/radio.css +1 -1
  99. package/2x/es/components/rate/rate.css +1 -0
  100. package/2x/es/components/search-bar/search-bar.css +5 -0
  101. package/2x/es/components/search-bar/search-bar.d.ts +3 -1
  102. package/2x/es/components/search-bar/search-bar.js +6 -5
  103. package/2x/es/components/side-bar/side-bar.css +2 -0
  104. package/2x/es/components/skeleton/index.d.ts +8 -0
  105. package/2x/es/components/skeleton/index.js +7 -0
  106. package/2x/es/components/skeleton/skeleton.css +45 -0
  107. package/2x/es/components/skeleton/skeleton.d.ts +15 -0
  108. package/2x/es/components/skeleton/skeleton.js +36 -0
  109. package/2x/es/components/stepper/stepper.d.ts +1 -0
  110. package/2x/es/components/stepper/stepper.js +4 -2
  111. package/2x/es/components/tab-bar/tab-bar.css +1 -1
  112. package/2x/es/components/tab-bar/tab-bar.d.ts +1 -0
  113. package/2x/es/components/tab-bar/tab-bar.js +22 -11
  114. package/2x/es/components/toast/index.d.ts +2 -1
  115. package/2x/es/components/toast/index.js +3 -2
  116. package/2x/es/components/toast/methods.d.ts +1 -0
  117. package/2x/es/components/toast/methods.js +16 -1
  118. package/2x/es/components/tree-select/tree-select.css +1 -0
  119. package/2x/es/components/virtual-input/virtual-input.js +1 -3
  120. package/2x/es/global/global.css +0 -4
  121. package/2x/es/index.d.ts +2 -0
  122. package/2x/es/index.js +2 -0
  123. package/2x/es/utils/use-mutation-effect.js +2 -2
  124. package/2x/es/utils/use-props-value.js +2 -2
  125. package/2x/es/utils/use-resize-effect.js +2 -2
  126. package/2x/package.json +4 -4
  127. package/README.md +12 -1
  128. package/cjs/components/checkbox/checkbox.css +1 -1
  129. package/cjs/components/collapse/collapse.d.ts +2 -2
  130. package/cjs/components/collapse/collapse.js +1 -1
  131. package/cjs/components/date-picker/date-picker.js +1 -1
  132. package/cjs/components/dialog/dialog.d.ts +1 -0
  133. package/cjs/components/dialog/dialog.js +12 -7
  134. package/cjs/components/form/form-item.css +1 -1
  135. package/cjs/components/form/index.css +1 -1
  136. package/cjs/components/image/lazy-detector.js +4 -1
  137. package/cjs/components/image-uploader/image-uploader.js +9 -3
  138. package/cjs/components/image-viewer/slide.js +0 -5
  139. package/cjs/components/index-bar/index-bar.css +1 -1
  140. package/cjs/components/infinite-scroll/infinite-scroll.js +1 -1
  141. package/cjs/components/input/input.d.ts +2 -2
  142. package/cjs/components/list/list.css +4 -3
  143. package/cjs/components/list/list.js +1 -3
  144. package/cjs/components/mask/mask.js +3 -2
  145. package/cjs/components/modal/modal.d.ts +1 -0
  146. package/cjs/components/modal/modal.js +5 -3
  147. package/cjs/components/notice-bar/notice-bar.css +1 -0
  148. package/cjs/components/number-keyboard/number-keyboard.css +2 -2
  149. package/cjs/components/number-keyboard/number-keyboard.js +1 -1
  150. package/cjs/components/passcode-input/index.d.ts +4 -0
  151. package/cjs/components/passcode-input/index.js +13 -0
  152. package/cjs/components/passcode-input/passcode-input.css +136 -0
  153. package/cjs/components/passcode-input/passcode-input.d.ts +35 -0
  154. package/cjs/components/passcode-input/passcode-input.js +169 -0
  155. package/cjs/components/picker/picker.js +5 -3
  156. package/cjs/components/picker-view/picker-view.css +40 -5
  157. package/cjs/components/picker-view/picker-view.js +32 -22
  158. package/cjs/components/picker-view/wheel.d.ts +10 -0
  159. package/{2x/cjs/components/picker-view/column.js → cjs/components/picker-view/wheel.js} +74 -14
  160. package/cjs/components/progress-bar/progress-bar.css +3 -1
  161. package/cjs/components/progress-bar/progress-bar.d.ts +1 -1
  162. package/cjs/components/radio/radio.css +1 -1
  163. package/cjs/components/rate/rate.css +1 -0
  164. package/cjs/components/search-bar/search-bar.css +4 -0
  165. package/cjs/components/search-bar/search-bar.d.ts +3 -1
  166. package/cjs/components/search-bar/search-bar.js +6 -5
  167. package/cjs/components/side-bar/side-bar.css +2 -0
  168. package/cjs/components/skeleton/index.d.ts +8 -0
  169. package/cjs/components/skeleton/index.js +19 -0
  170. package/cjs/components/skeleton/skeleton.css +39 -0
  171. package/cjs/components/skeleton/skeleton.d.ts +15 -0
  172. package/cjs/components/skeleton/skeleton.js +61 -0
  173. package/cjs/components/stepper/stepper.d.ts +1 -0
  174. package/cjs/components/stepper/stepper.js +4 -2
  175. package/cjs/components/tab-bar/tab-bar.css +1 -1
  176. package/cjs/components/tab-bar/tab-bar.d.ts +1 -0
  177. package/cjs/components/tab-bar/tab-bar.js +24 -11
  178. package/cjs/components/toast/index.d.ts +2 -1
  179. package/cjs/components/toast/index.js +2 -1
  180. package/cjs/components/toast/methods.d.ts +1 -0
  181. package/cjs/components/toast/methods.js +18 -1
  182. package/cjs/components/tree-select/tree-select.css +1 -0
  183. package/cjs/components/virtual-input/virtual-input.js +1 -3
  184. package/cjs/global/global.css +0 -3
  185. package/cjs/index.d.ts +2 -0
  186. package/cjs/index.js +16 -0
  187. package/cjs/utils/use-mutation-effect.js +1 -1
  188. package/cjs/utils/use-props-value.js +1 -1
  189. package/cjs/utils/use-resize-effect.js +1 -1
  190. package/es/components/checkbox/checkbox.css +1 -1
  191. package/es/components/collapse/collapse.d.ts +2 -2
  192. package/es/components/collapse/collapse.js +1 -1
  193. package/es/components/date-picker/date-picker.js +2 -2
  194. package/es/components/dialog/dialog.d.ts +1 -0
  195. package/es/components/dialog/dialog.js +11 -7
  196. package/es/components/form/form-item.css +1 -1
  197. package/es/components/form/index.css +1 -1
  198. package/es/components/image/lazy-detector.js +4 -1
  199. package/es/components/image-uploader/image-uploader.js +10 -4
  200. package/es/components/image-viewer/slide.js +0 -5
  201. package/es/components/index-bar/index-bar.css +1 -1
  202. package/es/components/infinite-scroll/infinite-scroll.js +2 -2
  203. package/es/components/input/input.d.ts +2 -2
  204. package/es/components/list/list.css +4 -3
  205. package/es/components/list/list.js +1 -3
  206. package/es/components/mask/mask.js +3 -2
  207. package/es/components/modal/modal.d.ts +1 -0
  208. package/es/components/modal/modal.js +5 -3
  209. package/es/components/notice-bar/notice-bar.css +1 -0
  210. package/es/components/number-keyboard/number-keyboard.css +2 -2
  211. package/es/components/number-keyboard/number-keyboard.js +2 -2
  212. package/es/components/passcode-input/index.d.ts +4 -0
  213. package/es/components/passcode-input/index.js +3 -0
  214. package/es/components/passcode-input/passcode-input.css +136 -0
  215. package/es/components/passcode-input/passcode-input.d.ts +35 -0
  216. package/es/components/passcode-input/passcode-input.js +149 -0
  217. package/es/components/picker/picker.js +6 -4
  218. package/es/components/picker-view/picker-view.css +40 -5
  219. package/es/components/picker-view/picker-view.js +33 -23
  220. package/es/components/picker-view/wheel.d.ts +10 -0
  221. package/{2x/es/components/picker-view/column.js → es/components/picker-view/wheel.js} +71 -12
  222. package/es/components/progress-bar/progress-bar.css +3 -1
  223. package/es/components/progress-bar/progress-bar.d.ts +1 -1
  224. package/es/components/radio/radio.css +1 -1
  225. package/es/components/rate/rate.css +1 -0
  226. package/es/components/search-bar/search-bar.css +4 -0
  227. package/es/components/search-bar/search-bar.d.ts +3 -1
  228. package/es/components/search-bar/search-bar.js +6 -5
  229. package/es/components/side-bar/side-bar.css +2 -0
  230. package/es/components/skeleton/index.d.ts +8 -0
  231. package/es/components/skeleton/index.js +7 -0
  232. package/es/components/skeleton/skeleton.css +39 -0
  233. package/es/components/skeleton/skeleton.d.ts +15 -0
  234. package/es/components/skeleton/skeleton.js +36 -0
  235. package/es/components/stepper/stepper.d.ts +1 -0
  236. package/es/components/stepper/stepper.js +4 -2
  237. package/es/components/tab-bar/tab-bar.css +1 -1
  238. package/es/components/tab-bar/tab-bar.d.ts +1 -0
  239. package/es/components/tab-bar/tab-bar.js +22 -11
  240. package/es/components/toast/index.d.ts +2 -1
  241. package/es/components/toast/index.js +3 -2
  242. package/es/components/toast/methods.d.ts +1 -0
  243. package/es/components/toast/methods.js +16 -1
  244. package/es/components/tree-select/tree-select.css +1 -0
  245. package/es/components/virtual-input/virtual-input.js +1 -3
  246. package/es/global/global.css +0 -3
  247. package/es/index.d.ts +2 -0
  248. package/es/index.js +2 -0
  249. package/es/utils/use-mutation-effect.js +2 -2
  250. package/es/utils/use-props-value.js +2 -2
  251. package/es/utils/use-resize-effect.js +2 -2
  252. package/package.json +4 -4
  253. package/umd/antd-mobile.js +1 -1
  254. package/2x/cjs/components/picker-view/column.d.ts +0 -9
  255. package/2x/es/components/picker-view/column.d.ts +0 -9
  256. package/cjs/components/picker-view/column.d.ts +0 -9
  257. package/es/components/picker-view/column.d.ts +0 -9
@@ -0,0 +1,149 @@
1
+ import React, { useState, useEffect, useRef, forwardRef, useImperativeHandle } from 'react';
2
+ import { mergeProps } from '../../utils/with-default-props';
3
+ import { withNativeProps } from '../../utils/native-props';
4
+ import classNames from 'classnames';
5
+ import { bound } from '../../utils/bound';
6
+ import { usePropsValue } from '../../utils/use-props-value';
7
+ var classPrefix = 'adm-passcode-input';
8
+ var defaultProps = {
9
+ defaultValue: '',
10
+ length: 6,
11
+ plain: false,
12
+ error: false,
13
+ seperated: false,
14
+ caret: true
15
+ };
16
+ export var PasscodeInput = /*#__PURE__*/forwardRef(function (p, ref) {
17
+ var props = mergeProps(defaultProps, p); // 防止 length 值不合法
18
+
19
+ var cellLength = props.length > 0 && props.length < Infinity ? Math.floor(props.length) : defaultProps.length;
20
+
21
+ var _useState = useState(false),
22
+ focused = _useState[0],
23
+ setFocused = _useState[1];
24
+
25
+ var _usePropsValue = usePropsValue(props),
26
+ value = _usePropsValue[0],
27
+ setValue = _usePropsValue[1];
28
+
29
+ var rootRef = useRef(null);
30
+ var nativeInputRef = useRef(null);
31
+ useEffect(function () {
32
+ var _a;
33
+
34
+ if (value.length >= cellLength) {
35
+ (_a = props.onFill) === null || _a === void 0 ? void 0 : _a.call(props, value);
36
+ }
37
+ }, [props.onFill, value, cellLength]);
38
+
39
+ var onFocus = function onFocus() {
40
+ var _a, _b;
41
+
42
+ if (!props.keyboard) {
43
+ (_a = nativeInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
44
+ }
45
+
46
+ setFocused(true);
47
+ (_b = props.onFocus) === null || _b === void 0 ? void 0 : _b.call(props);
48
+ };
49
+
50
+ useEffect(function () {
51
+ if (!focused) return;
52
+ var timeout = window.setTimeout(function () {
53
+ var _a;
54
+
55
+ (_a = rootRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
56
+ block: 'center',
57
+ inline: 'center',
58
+ behavior: 'smooth'
59
+ });
60
+ }, 100);
61
+ return function () {
62
+ window.clearTimeout(timeout);
63
+ };
64
+ }, [focused]);
65
+
66
+ var onBlur = function onBlur() {
67
+ var _a;
68
+
69
+ setFocused(false);
70
+ (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props);
71
+ };
72
+
73
+ useImperativeHandle(ref, function () {
74
+ return {
75
+ focus: function focus() {
76
+ var _a;
77
+
78
+ return (_a = rootRef.current) === null || _a === void 0 ? void 0 : _a.focus();
79
+ },
80
+ blur: function blur() {
81
+ var _a, _b;
82
+
83
+ (_a = rootRef.current) === null || _a === void 0 ? void 0 : _a.blur();
84
+ (_b = nativeInputRef.current) === null || _b === void 0 ? void 0 : _b.blur();
85
+ }
86
+ };
87
+ });
88
+
89
+ var renderCells = function renderCells() {
90
+ var cells = [];
91
+ var chars = value.split('');
92
+ var caretIndex = chars.length; // 光标位置index等于当前文字长度
93
+
94
+ var focusedIndex = bound(chars.length, 0, cellLength - 1);
95
+
96
+ for (var i = 0; i < cellLength; i++) {
97
+ cells.push( /*#__PURE__*/React.createElement("div", {
98
+ className: classNames(classPrefix + "-cell", {
99
+ caret: props.caret && caretIndex === i && focused,
100
+ focused: focusedIndex === i && focused,
101
+ dot: !props.plain && chars[i]
102
+ }),
103
+ key: i
104
+ }, chars[i] && props.plain ? chars[i] : ''));
105
+ }
106
+
107
+ return cells;
108
+ };
109
+
110
+ var cls = classNames(classPrefix, {
111
+ focused: focused,
112
+ error: props.error,
113
+ seperated: props.seperated
114
+ });
115
+ return /*#__PURE__*/React.createElement(React.Fragment, null, withNativeProps(props, /*#__PURE__*/React.createElement("div", {
116
+ ref: rootRef,
117
+ tabIndex: 0,
118
+ className: cls,
119
+ onFocus: onFocus,
120
+ onBlur: onBlur
121
+ }, /*#__PURE__*/React.createElement("div", {
122
+ className: classPrefix + "-cell-container"
123
+ }, renderCells()), /*#__PURE__*/React.createElement("input", {
124
+ ref: nativeInputRef,
125
+ className: classPrefix + "-native-input",
126
+ value: value,
127
+ type: 'text',
128
+ pattern: '[0-9]*',
129
+ inputMode: 'numeric',
130
+ onChange: function onChange(e) {
131
+ setValue(e.target.value.slice(0, props.length));
132
+ }
133
+ }))), props.keyboard && /*#__PURE__*/React.cloneElement(props.keyboard, {
134
+ visible: focused,
135
+ onInput: function onInput(v) {
136
+ if (value.length < cellLength) {
137
+ setValue((value + v).slice(0, props.length));
138
+ }
139
+ },
140
+ onDelete: function onDelete() {
141
+ setValue(value.slice(0, -1));
142
+ },
143
+ onClose: function onClose() {
144
+ var _a;
145
+
146
+ (_a = rootRef.current) === null || _a === void 0 ? void 0 : _a.blur();
147
+ }
148
+ }));
149
+ });
@@ -7,7 +7,7 @@ import PickerView from '../picker-view';
7
7
  import { useColumns } from '../picker-view/use-columns';
8
8
  import { useConfig } from '../config-provider';
9
9
  import { usePickerValueExtend } from '../picker-view/use-picker-value-extend';
10
- import { usePersistFn } from 'ahooks';
10
+ import { useMemoizedFn } from 'ahooks';
11
11
  var classPrefix = "adm-picker";
12
12
  var defaultProps = {
13
13
  defaultValue: []
@@ -42,7 +42,7 @@ export var Picker = /*#__PURE__*/memo(function (p) {
42
42
  setInnerValue = _useState[1];
43
43
 
44
44
  useEffect(function () {
45
- if (!props.visible) {
45
+ if (innerValue !== value) {
46
46
  setInnerValue(value);
47
47
  }
48
48
  }, [props.visible]);
@@ -51,7 +51,7 @@ export var Picker = /*#__PURE__*/memo(function (p) {
51
51
  setInnerValue(value);
52
52
  }
53
53
  }, [value]);
54
- var onChange = usePersistFn(function (val, ext) {
54
+ var onChange = useMemoizedFn(function (val, ext) {
55
55
  var _a;
56
56
 
57
57
  setInnerValue(val);
@@ -103,7 +103,9 @@ export var Picker = /*#__PURE__*/memo(function (p) {
103
103
  afterShow: props.afterShow,
104
104
  afterClose: props.afterClose,
105
105
  onClick: props.onClick,
106
+ forceRender: true,
106
107
  stopPropagation: props.stopPropagation
107
108
  }, pickerElement);
108
109
  return /*#__PURE__*/React.createElement(React.Fragment, null, popupElement, (_a = props.children) === null || _a === void 0 ? void 0 : _a.call(props, generateValueExtend(value).items));
109
- });
110
+ });
111
+ Picker.displayName = 'Picker';
@@ -5,6 +5,7 @@
5
5
  display: flex;
6
6
  position: relative;
7
7
  overflow: hidden;
8
+ background: var(--adm-color-white);
8
9
  }
9
10
  .adm-picker-view-column {
10
11
  height: 100%;
@@ -12,6 +13,7 @@
12
13
  user-select: none;
13
14
  touch-action: none;
14
15
  position: relative;
16
+ z-index: 0;
15
17
  }
16
18
  .adm-picker-view-column-wheel {
17
19
  width: 100%;
@@ -49,20 +51,53 @@
49
51
  text-overflow: ellipsis;
50
52
  white-space: nowrap;
51
53
  }
54
+ .adm-picker-view-column-accessible {
55
+ width: 100%;
56
+ height: 100%;
57
+ pointer-events: none;
58
+ opacity: 0;
59
+ display: flex;
60
+ flex-direction: column;
61
+ position: relative;
62
+ }
63
+ .adm-picker-view-column-accessible > * {
64
+ flex: 1;
65
+ text-overflow: ellipsis;
66
+ }
67
+ .adm-picker-view-column-accessible-current {
68
+ position: absolute;
69
+ width: 100%;
70
+ height: 100%;
71
+ }
72
+ .adm-picker-view-column-accessible-button {
73
+ width: 100%;
74
+ height: 100%;
75
+ }
52
76
  .adm-picker-view-mask {
53
77
  position: absolute;
78
+ z-index: 100;
54
79
  left: 0;
80
+ top: 0;
55
81
  width: 100%;
56
- height: calc(50% - 12px);
82
+ height: 100%;
83
+ display: flex;
84
+ flex-direction: column;
57
85
  pointer-events: none;
58
86
  }
59
- .adm-picker-view-mask-top {
60
- top: -5px;
87
+ .adm-picker-view-mask-top,
88
+ .adm-picker-view-mask-bottom {
89
+ flex: auto;
90
+ }
91
+ .adm-picker-view-mask-middle {
92
+ height: 34px;
93
+ box-sizing: border-box;
94
+ flex: none;
95
+ border-top: solid 1px var(--adm-border-color);
61
96
  border-bottom: solid 1px var(--adm-border-color);
97
+ }
98
+ .adm-picker-view-mask-top {
62
99
  background: linear-gradient(0deg, rgba(255, 255, 255, 0.7) 50%, #ffffff);
63
100
  }
64
101
  .adm-picker-view-mask-bottom {
65
- bottom: -5px;
66
- border-top: solid 1px var(--adm-border-color);
67
102
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.7) 50%, #ffffff);
68
103
  }
@@ -1,6 +1,6 @@
1
- import React, { memo, useEffect, useState } from 'react';
1
+ import React, { memo, useCallback, useEffect, useState } from 'react';
2
2
  import { mergeProps } from '../../utils/with-default-props';
3
- import { Column } from './column';
3
+ import { Wheel } from './wheel';
4
4
  import { useColumns } from './use-columns';
5
5
  import { withNativeProps } from '../../utils/native-props';
6
6
  import { usePickerValueExtend } from './use-picker-value-extend';
@@ -32,35 +32,45 @@ export var PickerView = /*#__PURE__*/memo(function (p) {
32
32
 
33
33
  if (props.value === innerValue) return;
34
34
  setInnerValue(props.value);
35
- }, [props.value]); // Reset `innerValue` after 1s in case user does not update `value` when `onChange` is called
36
-
37
- useDebounceEffect(function () {
38
- if (props.value !== undefined && props.value !== innerValue) {
39
- setInnerValue(props.value);
40
- }
41
- }, [props.value, innerValue], {
42
- wait: 1000,
43
- leading: false,
44
- trailing: true
45
- });
35
+ }, [props.value]);
36
+ useEffect(function () {
37
+ if (props.value === innerValue) return;
38
+ var timeout = window.setTimeout(function () {
39
+ if (props.value !== undefined && props.value !== innerValue) {
40
+ setInnerValue(props.value);
41
+ }
42
+ }, 1000);
43
+ return function () {
44
+ window.clearTimeout(timeout);
45
+ };
46
+ }, [props.value, innerValue]);
46
47
  var columns = useColumns(props.columns, innerValue);
47
48
  var generateValueExtend = usePickerValueExtend(columns);
49
+ var handleSelect = useCallback(function (val, index) {
50
+ setInnerValue(function (prev) {
51
+ var next = [].concat(prev);
52
+ next[index] = val;
53
+ return next;
54
+ });
55
+ }, []);
48
56
  return withNativeProps(props, /*#__PURE__*/React.createElement("div", {
49
57
  className: "" + classPrefix
50
58
  }, columns.map(function (column, index) {
51
- return /*#__PURE__*/React.createElement(Column, {
59
+ return /*#__PURE__*/React.createElement(Wheel, {
52
60
  key: index,
61
+ index: index,
53
62
  column: column,
54
63
  value: innerValue[index],
55
- onSelect: function onSelect(val) {
56
- var nextInnerValue = [].concat(innerValue);
57
- nextInnerValue[index] = val;
58
- setInnerValue(nextInnerValue);
59
- }
64
+ onSelect: handleSelect
60
65
  });
61
66
  }), /*#__PURE__*/React.createElement("div", {
62
- className: classPrefix + "-mask " + classPrefix + "-mask-top"
67
+ className: classPrefix + "-mask"
68
+ }, /*#__PURE__*/React.createElement("div", {
69
+ className: classPrefix + "-mask-top"
70
+ }), /*#__PURE__*/React.createElement("div", {
71
+ className: classPrefix + "-mask-middle"
63
72
  }), /*#__PURE__*/React.createElement("div", {
64
- className: classPrefix + "-mask " + classPrefix + "-mask-bottom"
65
- })));
66
- });
73
+ className: classPrefix + "-mask-bottom"
74
+ }))));
75
+ });
76
+ PickerView.displayName = 'PickerView';
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { PickerColumnItem, PickerValue } from './index';
3
+ interface Props {
4
+ index: number;
5
+ column: PickerColumnItem[];
6
+ value: PickerValue;
7
+ onSelect: (value: PickerValue, index: number) => void;
8
+ }
9
+ export declare const Wheel: React.NamedExoticComponent<Props>;
10
+ export {};
@@ -1,16 +1,20 @@
1
- import React, { useLayoutEffect, useRef } from 'react';
1
+ import React, { memo, useLayoutEffect, useRef } from 'react';
2
2
  import { useSpring, animated } from '@react-spring/web';
3
3
  import { useDrag } from '@use-gesture/react';
4
4
  import { convertPx } from '../../utils/convert-px';
5
5
  import { rubberbandIfOutOfBounds } from '../../utils/rubberband';
6
6
  import { bound } from '../../utils/bound';
7
+ import isEqual from 'lodash/isEqual';
7
8
  var classPrefix = "adm-picker-view";
8
- export var Column = function Column(props) {
9
+ export var Wheel = /*#__PURE__*/memo(function (props) {
9
10
  var itemHeight = convertPx(34);
10
11
  var value = props.value,
11
- onSelect = props.onSelect,
12
12
  column = props.column;
13
13
 
14
+ function onSelect(val) {
15
+ props.onSelect(val, props.index);
16
+ }
17
+
14
18
  var _useSpring = useSpring(function () {
15
19
  return {
16
20
  from: {
@@ -36,20 +40,20 @@ export var Column = function Column(props) {
36
40
  var finalPosition = targetIndex * -itemHeight;
37
41
  api.start({
38
42
  y: finalPosition,
39
- immediate: y.idle
43
+ immediate: y.goal !== finalPosition
40
44
  });
41
45
  }, [value, column]);
42
46
  useLayoutEffect(function () {
43
47
  if (column.length === 0) {
44
48
  if (value !== null) {
45
- props.onSelect(null);
49
+ onSelect(null);
46
50
  }
47
51
  } else {
48
52
  if (!column.some(function (item) {
49
53
  return item.value === value;
50
54
  })) {
51
55
  var firstItem = column[0];
52
- props.onSelect(firstItem.value);
56
+ onSelect(firstItem.value);
53
57
  }
54
58
  }
55
59
  }, [column, value]);
@@ -59,7 +63,9 @@ export var Column = function Column(props) {
59
63
  api.start({
60
64
  y: finalPosition
61
65
  });
62
- onSelect(column[index].value);
66
+ var item = column[index];
67
+ if (!item) return;
68
+ onSelect(item.value);
63
69
  }
64
70
 
65
71
  var bind = useDrag(function (state) {
@@ -70,7 +76,7 @@ export var Column = function Column(props) {
70
76
  if (state.last) {
71
77
  draggingRef.current = false;
72
78
  var position = state.offset[1] + state.velocity[1] * state.direction[1] * 50;
73
- var targetIndex = -Math.round(bound(position, min, max) / itemHeight);
79
+ var targetIndex = min < max ? -Math.round(bound(position, min, max) / itemHeight) : 0;
74
80
  scrollSelect(targetIndex);
75
81
  } else {
76
82
  var _position = state.offset[1];
@@ -88,14 +94,53 @@ export var Column = function Column(props) {
88
94
  touch: true
89
95
  }
90
96
  });
97
+ var selectedIndex = null;
98
+
99
+ function renderAccessible() {
100
+ if (selectedIndex === null) {
101
+ return null;
102
+ }
103
+
104
+ var current = column[selectedIndex];
105
+ var previousIndex = selectedIndex - 1;
106
+ var nextIndex = selectedIndex + 1;
107
+ var previous = column[previousIndex];
108
+ var next = column[nextIndex];
109
+ return /*#__PURE__*/React.createElement("div", {
110
+ className: 'adm-picker-view-column-accessible'
111
+ }, /*#__PURE__*/React.createElement("div", {
112
+ className: 'adm-picker-view-column-accessible-current',
113
+ role: 'button',
114
+ "aria-label": current ? "\u5F53\u524D\u9009\u62E9\u7684\u662F\uFF1A" + current.label : '当前未选择'
115
+ }, "-"), /*#__PURE__*/React.createElement("div", null, previous && /*#__PURE__*/React.createElement("div", {
116
+ className: 'adm-picker-view-column-accessible-button',
117
+ onClick: function onClick() {
118
+ scrollSelect(previousIndex);
119
+ },
120
+ role: 'button',
121
+ "aria-label": "\u9009\u62E9\u4E0A\u4E00\u9879\uFF1A" + previous.label
122
+ }, "-")), /*#__PURE__*/React.createElement("div", null, next && /*#__PURE__*/React.createElement("div", {
123
+ className: 'adm-picker-view-column-accessible-button',
124
+ onClick: function onClick() {
125
+ scrollSelect(nextIndex);
126
+ },
127
+ role: 'button',
128
+ "aria-label": "\u9009\u62E9\u4E0B\u4E00\u9879\uFF1A" + next.label
129
+ }, "-")));
130
+ }
131
+
91
132
  return /*#__PURE__*/React.createElement("div", Object.assign({
92
133
  className: classPrefix + "-column"
93
134
  }, bind()), /*#__PURE__*/React.createElement(animated.div, {
94
135
  style: {
95
136
  y: y
96
137
  },
97
- className: classPrefix + "-column-wheel"
138
+ className: classPrefix + "-column-wheel",
139
+ "aria-hidden": true
98
140
  }, column.map(function (item, index) {
141
+ var selected = props.value === item.value;
142
+ if (selected) selectedIndex = index;
143
+
99
144
  function handleClick() {
100
145
  draggingRef.current = false;
101
146
  scrollSelect(index);
@@ -103,10 +148,24 @@ export var Column = function Column(props) {
103
148
 
104
149
  return /*#__PURE__*/React.createElement("div", {
105
150
  key: item.value,
151
+ "data-selected": item.value === value,
106
152
  className: classPrefix + "-column-item",
107
- onClick: handleClick
153
+ onClick: handleClick,
154
+ "aria-hidden": !selected,
155
+ "aria-label": selected ? 'active' : ''
108
156
  }, /*#__PURE__*/React.createElement("div", {
109
157
  className: classPrefix + "-column-item-label"
110
158
  }, item.label));
111
- })));
112
- };
159
+ })), renderAccessible());
160
+ }, function (prev, next) {
161
+ if (prev.index !== next.index) return false;
162
+ if (prev.value !== next.value) return false;
163
+ if (prev.onSelect !== next.onSelect) return false;
164
+
165
+ if (!isEqual(prev.column, next.column)) {
166
+ return false;
167
+ }
168
+
169
+ return true;
170
+ });
171
+ Wheel.displayName = 'Wheel';
@@ -1,9 +1,11 @@
1
1
  .adm-progress-bar {
2
2
  --track-width: var(--adm-progress-bar-track-width, 3px);
3
+ --track-color: var(--adm-progress-bar-track-color, #e5e5e5);
3
4
  --fill-color: var(--adm-progress-bar-fill-color, #1677ff);
4
5
  }
5
6
  .adm-progress-bar-trail {
6
- background: #e5e5e5;
7
+ background: var(--track-color);
8
+ overflow: hidden;
7
9
  height: var(--track-width);
8
10
  border-radius: var(--track-width);
9
11
  }
@@ -2,5 +2,5 @@ import { FC } from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
3
  export declare type ProgressBarProps = {
4
4
  percent?: number;
5
- } & NativeProps<'--track-width' | '--fill-color'>;
5
+ } & NativeProps<'--track-width' | '--track-color' | '--fill-color'>;
6
6
  export declare const ProgressBar: FC<ProgressBarProps>;
@@ -50,7 +50,7 @@
50
50
  font-size: var(--icon-size);
51
51
  }
52
52
  .adm-radio-content {
53
- flex: none;
53
+ flex: 0 1 auto;
54
54
  font-size: var(--font-size);
55
55
  padding-left: var(--gap);
56
56
  }
@@ -14,6 +14,7 @@
14
14
  text-align: center;
15
15
  overflow: hidden;
16
16
  cursor: pointer;
17
+ box-sizing: border-box;
17
18
  }
18
19
  .adm-rate-star-half {
19
20
  padding-right: 0;
@@ -26,6 +26,7 @@
26
26
  flex: auto;
27
27
  padding: 4px 8px 4px 4px;
28
28
  height: 28px;
29
+ box-sizing: border-box;
29
30
  }
30
31
  .adm-search-bar .adm-search-bar-input-box .adm-search-bar-input.adm-input-wrapper {
31
32
  --placeholder-color: var(---placeholder-color);
@@ -34,6 +35,9 @@
34
35
  font-size: 13px;
35
36
  line-height: 19px;
36
37
  }
38
+ .adm-search-bar .adm-search-bar-input-box .adm-search-bar-input.adm-search-bar-input-without-icon {
39
+ padding-left: 8px;
40
+ }
37
41
  .adm-search-bar .adm-search-bar-suffix {
38
42
  flex: none;
39
43
  margin-left: 16px;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  import { InputRef, InputProps } from '../input';
3
3
  import { NativeProps } from '../../utils/native-props';
4
4
  export declare type SearchBarRef = InputRef;
@@ -10,6 +10,7 @@ export declare type SearchBarProps = Pick<InputProps, 'onFocus' | 'onBlur' | 'on
10
10
  clearable?: boolean;
11
11
  showCancelButton?: boolean | ((focus: boolean, value: string) => boolean);
12
12
  cancelText?: string;
13
+ icon?: ReactNode;
13
14
  clearOnCancel?: boolean;
14
15
  onSearch?: (val: string) => void;
15
16
  onChange?: (val: string) => void;
@@ -23,6 +24,7 @@ export declare const SearchBar: React.ForwardRefExoticComponent<Pick<InputProps,
23
24
  clearable?: boolean | undefined;
24
25
  showCancelButton?: boolean | ((focus: boolean, value: string) => boolean) | undefined;
25
26
  cancelText?: string | undefined;
27
+ icon?: ReactNode;
26
28
  clearOnCancel?: boolean | undefined;
27
29
  onSearch?: ((val: string) => void) | undefined;
28
30
  onChange?: ((val: string) => void) | undefined;
@@ -11,10 +11,11 @@ var defaultProps = {
11
11
  clearable: true,
12
12
  showCancelButton: false,
13
13
  defaultValue: '',
14
- clearOnCancel: true
14
+ clearOnCancel: true,
15
+ icon: /*#__PURE__*/React.createElement(SearchOutline, null)
15
16
  };
16
17
  export var SearchBar = /*#__PURE__*/forwardRef(function (p, ref) {
17
- var _classNames;
18
+ var _classNames, _classNames2;
18
19
 
19
20
  var _useConfig = useConfig(),
20
21
  locale = _useConfig.locale;
@@ -87,11 +88,11 @@ export var SearchBar = /*#__PURE__*/forwardRef(function (p, ref) {
87
88
  className: classNames(classPrefix, (_classNames = {}, _classNames[classPrefix + "-active"] = hasFocus, _classNames))
88
89
  }, /*#__PURE__*/React.createElement("div", {
89
90
  className: classPrefix + "-input-box"
90
- }, /*#__PURE__*/React.createElement("div", {
91
+ }, props.icon && /*#__PURE__*/React.createElement("div", {
91
92
  className: classPrefix + "-input-box-icon"
92
- }, /*#__PURE__*/React.createElement(SearchOutline, null)), /*#__PURE__*/React.createElement(Input, {
93
+ }, props.icon), /*#__PURE__*/React.createElement(Input, {
93
94
  ref: inputRef,
94
- className: classPrefix + "-input",
95
+ className: classNames(classPrefix + "-input", (_classNames2 = {}, _classNames2[classPrefix + "-input-without-icon"] = !props.icon, _classNames2)),
95
96
  value: value,
96
97
  onChange: setValue,
97
98
  maxLength: props.maxLength,
@@ -4,6 +4,7 @@
4
4
  --item-border-radius: 8px;
5
5
  width: var(--width);
6
6
  height: var(--height);
7
+ box-sizing: border-box;
7
8
  font-size: 15px;
8
9
  overflow-y: auto;
9
10
  transform: translateZ(0);
@@ -13,6 +14,7 @@
13
14
  display: flex;
14
15
  align-items: center;
15
16
  min-height: 50px;
17
+ box-sizing: border-box;
16
18
  padding: 6px 22px;
17
19
  position: relative;
18
20
  cursor: pointer;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import './skeleton.less';
3
+ export type { SkeletonProps, SkeletonTitleProps } from './skeleton';
4
+ declare const _default: import("react").FC<import("./skeleton").SkeletonProps> & {
5
+ Title: import("react").FC<import("./skeleton").SkeletonTitleProps>;
6
+ Paragraph: import("react").FC<import("./skeleton").SkeletonParagraphProps>;
7
+ };
8
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import "./skeleton.css";
2
+ import { Skeleton, SkeletonParagraph, SkeletonTitle } from './skeleton';
3
+ import { attachPropertiesToComponent } from '../../utils/attach-properties-to-component';
4
+ export default attachPropertiesToComponent(Skeleton, {
5
+ Title: SkeletonTitle,
6
+ Paragraph: SkeletonParagraph
7
+ });
@@ -0,0 +1,39 @@
1
+ .adm-skeleton {
2
+ --width: 100%;
3
+ --height: 0;
4
+ --border-radius: 0;
5
+ background-color: rgba(190, 190, 190, 0.2);
6
+ border-radius: var(--border-radius);
7
+ width: var(--width);
8
+ height: var(--height);
9
+ display: block;
10
+ }
11
+ .adm-skeleton.adm-skeleton-animated {
12
+ background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);
13
+ background-size: 400% 100%;
14
+ animation: adm-skeleton-loading 1.4s ease infinite;
15
+ }
16
+ .adm-skeleton.adm-skeleton-title {
17
+ --width: 45%;
18
+ --height: 32px;
19
+ --border-radius: 2px;
20
+ margin-bottom: 16px;
21
+ margin-top: 16px;
22
+ }
23
+ .adm-skeleton.adm-skeleton-paragraph-line {
24
+ --height: 18px;
25
+ --border-radius: 2px;
26
+ margin-top: 12px;
27
+ margin-bottom: 12px;
28
+ }
29
+ .adm-skeleton.adm-skeleton-paragraph-line:last-child {
30
+ --width: 65%;
31
+ }
32
+ @keyframes adm-skeleton-loading {
33
+ 0% {
34
+ background-position: 100% 50%;
35
+ }
36
+ 100% {
37
+ background-position: 0 50%;
38
+ }
39
+ }