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

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 (97) hide show
  1. package/2x/README.md +2 -0
  2. package/2x/cjs/components/collapse/collapse.d.ts +2 -2
  3. package/2x/cjs/components/collapse/collapse.js +1 -1
  4. package/2x/cjs/components/dialog/dialog.js +7 -4
  5. package/2x/cjs/components/list/list.css +5 -4
  6. package/2x/cjs/components/list/list.js +1 -3
  7. package/2x/cjs/components/number-keyboard/number-keyboard.css +2 -2
  8. package/2x/cjs/components/passcode-input/index.d.ts +4 -0
  9. package/2x/cjs/components/passcode-input/index.js +13 -0
  10. package/2x/cjs/components/passcode-input/passcode-input.css +166 -0
  11. package/2x/cjs/components/passcode-input/passcode-input.d.ts +35 -0
  12. package/2x/cjs/components/passcode-input/passcode-input.js +169 -0
  13. package/2x/cjs/components/picker/picker.js +1 -0
  14. package/2x/cjs/components/picker-view/column.js +47 -3
  15. package/2x/cjs/components/picker-view/picker-view.css +45 -5
  16. package/2x/cjs/components/picker-view/picker-view.js +7 -3
  17. package/2x/cjs/components/toast/index.d.ts +2 -1
  18. package/2x/cjs/components/toast/index.js +2 -1
  19. package/2x/cjs/components/toast/methods.d.ts +1 -0
  20. package/2x/cjs/components/toast/methods.js +18 -1
  21. package/2x/cjs/index.d.ts +1 -0
  22. package/2x/cjs/index.js +8 -0
  23. package/2x/cjs/utils/memo-with-event-marks.d.ts +2 -0
  24. package/2x/cjs/utils/memo-with-event-marks.js +23 -0
  25. package/2x/es/components/collapse/collapse.d.ts +2 -2
  26. package/2x/es/components/collapse/collapse.js +1 -1
  27. package/2x/es/components/dialog/dialog.js +6 -4
  28. package/2x/es/components/list/list.css +5 -4
  29. package/2x/es/components/list/list.js +1 -3
  30. package/2x/es/components/number-keyboard/number-keyboard.css +2 -2
  31. package/2x/es/components/passcode-input/index.d.ts +4 -0
  32. package/2x/es/components/passcode-input/index.js +3 -0
  33. package/2x/es/components/passcode-input/passcode-input.css +166 -0
  34. package/2x/es/components/passcode-input/passcode-input.d.ts +35 -0
  35. package/2x/es/components/passcode-input/passcode-input.js +149 -0
  36. package/2x/es/components/picker/picker.js +1 -0
  37. package/2x/es/components/picker-view/column.js +47 -3
  38. package/2x/es/components/picker-view/picker-view.css +45 -5
  39. package/2x/es/components/picker-view/picker-view.js +7 -3
  40. package/2x/es/components/toast/index.d.ts +2 -1
  41. package/2x/es/components/toast/index.js +3 -2
  42. package/2x/es/components/toast/methods.d.ts +1 -0
  43. package/2x/es/components/toast/methods.js +16 -1
  44. package/2x/es/index.d.ts +1 -0
  45. package/2x/es/index.js +2 -1
  46. package/2x/es/utils/memo-with-event-marks.d.ts +2 -0
  47. package/2x/es/utils/memo-with-event-marks.js +15 -0
  48. package/2x/package.json +1 -1
  49. package/README.md +2 -0
  50. package/cjs/components/collapse/collapse.d.ts +2 -2
  51. package/cjs/components/collapse/collapse.js +1 -1
  52. package/cjs/components/dialog/dialog.js +7 -4
  53. package/cjs/components/list/list.css +4 -3
  54. package/cjs/components/list/list.js +1 -3
  55. package/cjs/components/number-keyboard/number-keyboard.css +2 -2
  56. package/cjs/components/passcode-input/index.d.ts +4 -0
  57. package/cjs/components/passcode-input/index.js +13 -0
  58. package/cjs/components/passcode-input/passcode-input.css +136 -0
  59. package/cjs/components/passcode-input/passcode-input.d.ts +35 -0
  60. package/cjs/components/passcode-input/passcode-input.js +169 -0
  61. package/cjs/components/picker/picker.js +1 -0
  62. package/cjs/components/picker-view/column.js +47 -3
  63. package/cjs/components/picker-view/picker-view.css +39 -5
  64. package/cjs/components/picker-view/picker-view.js +7 -3
  65. package/cjs/components/toast/index.d.ts +2 -1
  66. package/cjs/components/toast/index.js +2 -1
  67. package/cjs/components/toast/methods.d.ts +1 -0
  68. package/cjs/components/toast/methods.js +18 -1
  69. package/cjs/index.d.ts +1 -0
  70. package/cjs/index.js +8 -0
  71. package/cjs/utils/memo-with-event-marks.d.ts +2 -0
  72. package/cjs/utils/memo-with-event-marks.js +23 -0
  73. package/es/components/collapse/collapse.d.ts +2 -2
  74. package/es/components/collapse/collapse.js +1 -1
  75. package/es/components/dialog/dialog.js +6 -4
  76. package/es/components/list/list.css +4 -3
  77. package/es/components/list/list.js +1 -3
  78. package/es/components/number-keyboard/number-keyboard.css +2 -2
  79. package/es/components/passcode-input/index.d.ts +4 -0
  80. package/es/components/passcode-input/index.js +3 -0
  81. package/es/components/passcode-input/passcode-input.css +136 -0
  82. package/es/components/passcode-input/passcode-input.d.ts +35 -0
  83. package/es/components/passcode-input/passcode-input.js +149 -0
  84. package/es/components/picker/picker.js +1 -0
  85. package/es/components/picker-view/column.js +47 -3
  86. package/es/components/picker-view/picker-view.css +39 -5
  87. package/es/components/picker-view/picker-view.js +7 -3
  88. package/es/components/toast/index.d.ts +2 -1
  89. package/es/components/toast/index.js +3 -2
  90. package/es/components/toast/methods.d.ts +1 -0
  91. package/es/components/toast/methods.js +16 -1
  92. package/es/index.d.ts +1 -0
  93. package/es/index.js +2 -1
  94. package/es/utils/memo-with-event-marks.d.ts +2 -0
  95. package/es/utils/memo-with-event-marks.js +15 -0
  96. package/package.json +1 -1
  97. package/umd/antd-mobile.js +1 -1
@@ -88,14 +88,55 @@ export var Column = function Column(props) {
88
88
  touch: true
89
89
  }
90
90
  });
91
+ var selectedIndex = null;
92
+
93
+ function renderAccessible() {
94
+ console.log('selectedIndex', selectedIndex);
95
+
96
+ if (selectedIndex === null) {
97
+ return null;
98
+ }
99
+
100
+ var current = column[selectedIndex];
101
+ var previousIndex = selectedIndex - 1;
102
+ var nextIndex = selectedIndex + 1;
103
+ var previous = column[previousIndex];
104
+ var next = column[nextIndex];
105
+ return /*#__PURE__*/React.createElement("div", {
106
+ className: 'adm-picker-view-column-accessible'
107
+ }, /*#__PURE__*/React.createElement("div", {
108
+ className: 'adm-picker-view-column-accessible-current',
109
+ role: 'button',
110
+ "aria-label": current ? "\u5F53\u524D\u9009\u62E9\u7684\u662F\uFF1A" + current.label : '当前未选择'
111
+ }, "-"), /*#__PURE__*/React.createElement("div", null, previous && /*#__PURE__*/React.createElement("div", {
112
+ className: 'adm-picker-view-column-accessible-button',
113
+ onClick: function onClick() {
114
+ scrollSelect(previousIndex);
115
+ },
116
+ role: 'button',
117
+ "aria-label": "\u9009\u62E9\u4E0A\u4E00\u9879\uFF1A" + previous.label
118
+ }, "-")), /*#__PURE__*/React.createElement("div", null, next && /*#__PURE__*/React.createElement("div", {
119
+ className: 'adm-picker-view-column-accessible-button',
120
+ onClick: function onClick() {
121
+ scrollSelect(nextIndex);
122
+ },
123
+ role: 'button',
124
+ "aria-label": "\u9009\u62E9\u4E0B\u4E00\u9879\uFF1A" + next.label
125
+ }, "-")));
126
+ }
127
+
91
128
  return /*#__PURE__*/React.createElement("div", Object.assign({
92
129
  className: classPrefix + "-column"
93
130
  }, bind()), /*#__PURE__*/React.createElement(animated.div, {
94
131
  style: {
95
132
  y: y
96
133
  },
97
- className: classPrefix + "-column-wheel"
134
+ className: classPrefix + "-column-wheel",
135
+ "aria-hidden": true
98
136
  }, column.map(function (item, index) {
137
+ var selected = props.value === item.value;
138
+ if (selected) selectedIndex = index;
139
+
99
140
  function handleClick() {
100
141
  draggingRef.current = false;
101
142
  scrollSelect(index);
@@ -103,10 +144,13 @@ export var Column = function Column(props) {
103
144
 
104
145
  return /*#__PURE__*/React.createElement("div", {
105
146
  key: item.value,
147
+ "data-selected": item.value === value,
106
148
  className: classPrefix + "-column-item",
107
- onClick: handleClick
149
+ onClick: handleClick,
150
+ "aria-hidden": !selected,
151
+ "aria-label": selected ? 'active' : ''
108
152
  }, /*#__PURE__*/React.createElement("div", {
109
153
  className: classPrefix + "-column-item-label"
110
154
  }, item.label));
111
- })));
155
+ })), renderAccessible());
112
156
  };
@@ -13,6 +13,7 @@
13
13
  user-select: none;
14
14
  touch-action: none;
15
15
  position: relative;
16
+ z-index: 0;
16
17
  }
17
18
 
18
19
  .adm-picker-view-column-wheel {
@@ -56,22 +57,61 @@
56
57
  white-space: nowrap;
57
58
  }
58
59
 
60
+ .adm-picker-view-column-accessible {
61
+ width: 100%;
62
+ height: 100%;
63
+ pointer-events: none;
64
+ opacity: 0;
65
+ display: flex;
66
+ flex-direction: column;
67
+ position: relative;
68
+ }
69
+
70
+ .adm-picker-view-column-accessible > * {
71
+ flex: 1;
72
+ text-overflow: ellipsis;
73
+ }
74
+
75
+ .adm-picker-view-column-accessible-current {
76
+ position: absolute;
77
+ width: 100%;
78
+ height: 100%;
79
+ }
80
+
81
+ .adm-picker-view-column-accessible-button {
82
+ width: 100%;
83
+ height: 100%;
84
+ }
85
+
59
86
  .adm-picker-view-mask {
60
87
  position: absolute;
88
+ z-index: 100;
61
89
  left: 0;
90
+ top: 0;
62
91
  width: 100%;
63
- height: calc(50% - 24px);
92
+ height: 100%;
93
+ display: flex;
94
+ flex-direction: column;
64
95
  pointer-events: none;
65
96
  }
66
97
 
67
- .adm-picker-view-mask-top {
68
- top: -10px;
98
+ .adm-picker-view-mask-top,
99
+ .adm-picker-view-mask-bottom {
100
+ flex: auto;
101
+ }
102
+
103
+ .adm-picker-view-mask-middle {
104
+ height: 68px;
105
+ box-sizing: border-box;
106
+ flex: none;
107
+ border-top: solid 2px var(--adm-border-color);
69
108
  border-bottom: solid 2px var(--adm-border-color);
109
+ }
110
+
111
+ .adm-picker-view-mask-top {
70
112
  background: linear-gradient(0deg, rgba(255, 255, 255, 0.7) 50%, #ffffff);
71
113
  }
72
114
 
73
115
  .adm-picker-view-mask-bottom {
74
- bottom: -10px;
75
- border-top: solid 2px var(--adm-border-color);
76
116
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.7) 50%, #ffffff);
77
117
  }
@@ -59,8 +59,12 @@ export var PickerView = /*#__PURE__*/memo(function (p) {
59
59
  }
60
60
  });
61
61
  }), /*#__PURE__*/React.createElement("div", {
62
- className: classPrefix + "-mask " + classPrefix + "-mask-top"
62
+ className: classPrefix + "-mask"
63
+ }, /*#__PURE__*/React.createElement("div", {
64
+ className: classPrefix + "-mask-top"
63
65
  }), /*#__PURE__*/React.createElement("div", {
64
- className: classPrefix + "-mask " + classPrefix + "-mask-bottom"
65
- })));
66
+ className: classPrefix + "-mask-middle"
67
+ }), /*#__PURE__*/React.createElement("div", {
68
+ className: classPrefix + "-mask-bottom"
69
+ }))));
66
70
  });
@@ -1,8 +1,9 @@
1
1
  import './toast.less';
2
- import { clear, show } from './methods';
2
+ import { clear, show, config } from './methods';
3
3
  export type { ToastShowProps } from './methods';
4
4
  declare const Toast: {
5
5
  show: typeof show;
6
6
  clear: typeof clear;
7
+ config: typeof config;
7
8
  };
8
9
  export default Toast;
@@ -1,7 +1,8 @@
1
1
  import "./toast.css";
2
- import { clear, show } from './methods';
2
+ import { clear, show, config } from './methods';
3
3
  var Toast = {
4
4
  show: show,
5
- clear: clear
5
+ clear: clear,
6
+ config: config
6
7
  };
7
8
  export default Toast;
@@ -2,3 +2,4 @@ import { ToastProps } from './toast';
2
2
  export declare type ToastShowProps = Omit<ToastProps, 'visible'>;
3
3
  export declare function show(p: ToastShowProps | string): void;
4
4
  export declare function clear(): void;
5
+ export declare function config(val: Pick<ToastProps, 'duration' | 'position' | 'maskClickable'>): void;
@@ -14,7 +14,9 @@ function unmount(container) {
14
14
  }
15
15
 
16
16
  var defaultProps = {
17
- duration: 2000
17
+ duration: 2000,
18
+ position: 'center',
19
+ maskClickable: true
18
20
  };
19
21
  export function show(p) {
20
22
  var props = mergeProps(defaultProps, typeof p === 'string' ? {
@@ -74,4 +76,17 @@ export function clear() {
74
76
  if (!container) break;
75
77
  unmount(container);
76
78
  }
79
+ }
80
+ export function config(val) {
81
+ if (val.duration !== undefined) {
82
+ defaultProps.duration = val.duration;
83
+ }
84
+
85
+ if (val.position !== undefined) {
86
+ defaultProps.position = val.position;
87
+ }
88
+
89
+ if (val.maskClickable !== undefined) {
90
+ defaultProps.maskClickable = val.maskClickable;
91
+ }
77
92
  }
package/2x/es/index.d.ts CHANGED
@@ -72,3 +72,4 @@ export { default as Toast } from './components/toast';
72
72
  export { default as TreeSelect } from './components/tree-select';
73
73
  export { default as VirtualInput } from './components/virtual-input';
74
74
  export { default as WaterMark } from './components/water-mark';
75
+ export { default as PasscodeInput } from './components/passcode-input';
package/2x/es/index.js CHANGED
@@ -72,4 +72,5 @@ export { default as TextArea } from './components/text-area';
72
72
  export { default as Toast } from './components/toast';
73
73
  export { default as TreeSelect } from './components/tree-select';
74
74
  export { default as VirtualInput } from './components/virtual-input';
75
- export { default as WaterMark } from './components/water-mark';
75
+ export { default as WaterMark } from './components/water-mark';
76
+ export { default as PasscodeInput } from './components/passcode-input';
@@ -0,0 +1,2 @@
1
+ import { FunctionComponent } from 'react';
2
+ export declare function memoWithEventMarks<P extends object>(Component: FunctionComponent<P>, eventProps: (keyof P)[]): import("react").NamedExoticComponent<P>;
@@ -0,0 +1,15 @@
1
+ import { memo } from 'react';
2
+ export function memoWithEventMarks(Component, eventProps) {
3
+ return /*#__PURE__*/memo(Component, function (prevProps, nextProps) {
4
+ for (var k in nextProps) {
5
+ var key = k;
6
+ if (eventProps.includes(key)) continue;
7
+
8
+ if (prevProps[key] !== nextProps[key]) {
9
+ return false;
10
+ }
11
+ }
12
+
13
+ return true;
14
+ });
15
+ }
package/2x/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "antd-mobile",
3
- "version": "5.0.0-rc.4",
3
+ "version": "5.0.0-rc.5",
4
4
  "dependencies": {
5
5
  "@react-spring/web": "^9.3.1",
6
6
  "@types/resize-observer-browser": "^0.1.6",
package/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
  ![GitHub (Pre-)Release Date](https://img.shields.io/github/release-date-pre/ant-design/ant-design-mobile)
5
5
  ![npm](https://img.shields.io/npm/dw/antd-mobile-v5-count)
6
6
  ![gzip size](https://img.badgesize.io/https:/unpkg.com/antd-mobile@next/umd/antd-mobile.js?label=gzip%20size&compression=gzip)
7
+ [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/ant-design/ant-design-mobile.svg)](http://isitmaintained.com/project/ant-design/ant-design-mobile 'Average time to resolve an issue')
8
+ [![Percentage of issues still open](http://isitmaintained.com/badge/open/ant-design/ant-design-mobile.svg)](http://isitmaintained.com/project/ant-design/ant-design-mobile 'Percentage of issues still open')
7
9
  ![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/ant-design/ant-design-mobile/Check/v5)
8
10
  ![GitHub](https://img.shields.io/github/license/ant-design/ant-design-mobile)
9
11
 
@@ -7,14 +7,14 @@ export declare type CollapsePanelProps = {
7
7
  forceRender?: boolean;
8
8
  destroyOnClose?: boolean;
9
9
  onClick?: (event: React.MouseEvent<Element, MouseEvent>) => void;
10
- arrow?: React.ReactNode;
10
+ arrow?: React.ReactNode | ((active: boolean) => React.ReactNode);
11
11
  } & NativeProps;
12
12
  export declare const CollapsePanel: FC<CollapsePanelProps>;
13
13
  declare type ValueProps<T> = {
14
14
  activeKey?: T;
15
15
  defaultActiveKey?: T;
16
16
  onChange?: (activeKey: T) => void;
17
- arrow?: React.ReactNode;
17
+ arrow?: React.ReactNode | ((active: boolean) => React.ReactNode);
18
18
  };
19
19
  export declare type CollapseProps = (({
20
20
  accordion?: false;
@@ -168,7 +168,7 @@ var Collapse = function Collapse(props) {
168
168
  arrow = panel.props.arrow;
169
169
  }
170
170
 
171
- return /*#__PURE__*/_react["default"].createElement("div", {
171
+ return typeof arrow === 'function' ? arrow(active) : /*#__PURE__*/_react["default"].createElement("div", {
172
172
  className: (0, _classnames["default"])(classPrefix + "-arrow", (_classNames = {}, _classNames[classPrefix + "-arrow-active"] = active, _classNames))
173
173
  }, arrow);
174
174
  };
@@ -21,6 +21,8 @@ var _image = _interopRequireDefault(require("../image"));
21
21
 
22
22
  var _space = _interopRequireDefault(require("../space"));
23
23
 
24
+ var _renderToContainer = require("../../utils/render-to-container");
25
+
24
26
  var _withStopPropagation = require("../../utils/with-stop-propagation");
25
27
 
26
28
  var _autoCenter = _interopRequireDefault(require("../auto-center"));
@@ -73,7 +75,8 @@ var defaultProps = {
73
75
  actions: [],
74
76
  closeOnAction: false,
75
77
  closeOnMaskClick: false,
76
- stopPropagation: ['click']
78
+ stopPropagation: ['click'],
79
+ getContainer: null
77
80
  };
78
81
 
79
82
  var Dialog = function Dialog(p) {
@@ -107,14 +110,13 @@ var Dialog = function Dialog(p) {
107
110
  active = _useState[0],
108
111
  setActive = _useState[1];
109
112
 
110
- return (0, _withStopPropagation.withStopPropagation)(props.stopPropagation, (0, _nativeProps.withNativeProps)(props, /*#__PURE__*/_react["default"].createElement("div", {
113
+ var node = (0, _nativeProps.withNativeProps)(props, /*#__PURE__*/_react["default"].createElement("div", {
111
114
  className: classPrefix,
112
115
  style: {
113
116
  display: active ? 'unset' : 'none'
114
117
  }
115
118
  }, /*#__PURE__*/_react["default"].createElement(_mask["default"], {
116
119
  visible: props.visible,
117
- getContainer: props.getContainer,
118
120
  onMaskClick: props.closeOnMaskClick ? props.onClose : undefined,
119
121
  style: props.maskStyle,
120
122
  className: (0, _classnames["default"])(classPrefix + "-mask", props.maskClassName)
@@ -184,7 +186,8 @@ var Dialog = function Dialog(p) {
184
186
  }
185
187
  });
186
188
  }));
187
- })))))));
189
+ }))))));
190
+ return (0, _renderToContainer.renderToContainer)(props.getContainer, (0, _withStopPropagation.withStopPropagation)(props.stopPropagation, node));
188
191
  };
189
192
 
190
193
  exports.Dialog = Dialog;
@@ -10,9 +10,6 @@
10
10
  overflow: hidden;
11
11
  font-size: 17px;
12
12
  }
13
- .adm-list-inner {
14
- margin-bottom: -1px;
15
- }
16
13
  .adm-list-default {
17
14
  border-top: var(--border-top);
18
15
  border-bottom: var(--border-bottom);
@@ -22,9 +19,13 @@
22
19
  border-radius: 8px;
23
20
  }
24
21
  .adm-list-item {
22
+ margin-bottom: -1px;
25
23
  display: block;
26
24
  padding-left: var(--padding-left);
27
25
  }
26
+ .adm-list-item:not(:first-child) {
27
+ padding-top: 1px;
28
+ }
28
29
  .adm-list-item-title,
29
30
  .adm-list-item-description {
30
31
  color: var(--adm-color-weak);
@@ -24,9 +24,7 @@ var List = function List(p) {
24
24
  var props = (0, _withDefaultProps.mergeProps)(defaultProps, p);
25
25
  return (0, _nativeProps.withNativeProps)(props, /*#__PURE__*/_react["default"].createElement("div", {
26
26
  className: (0, _classnames["default"])(classPrefix, classPrefix + "-" + props.mode)
27
- }, /*#__PURE__*/_react["default"].createElement("div", {
28
- className: classPrefix + "-inner"
29
- }, props.children)));
27
+ }, props.children));
30
28
  };
31
29
 
32
30
  exports.List = List;
@@ -3,8 +3,7 @@
3
3
  flex-wrap: wrap;
4
4
  flex: 1;
5
5
  }
6
- .adm-number-keyboard.confirmed-style {
7
- width: 75%;
6
+ .adm-number-keyboard-main.confirmed-style .sign-key {
8
7
  background-color: var(--adm-color-white);
9
8
  }
10
9
  .adm-number-keyboard-popup.adm-popup {
@@ -105,6 +104,7 @@
105
104
  color: var(--adm-color-white);
106
105
  height: 144px;
107
106
  font-size: 16px;
107
+ border: none;
108
108
  }
109
109
  .adm-number-keyboard-bs-key {
110
110
  height: 20px;
@@ -0,0 +1,4 @@
1
+ import './passcode-input.less';
2
+ import { PasscodeInput } from './passcode-input';
3
+ export type { PasscodeInputProps } from './passcode-input';
4
+ export default PasscodeInput;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ require("./passcode-input.css");
9
+
10
+ var _passcodeInput2 = require("./passcode-input");
11
+
12
+ var _default = _passcodeInput2.PasscodeInput;
13
+ exports["default"] = _default;
@@ -0,0 +1,136 @@
1
+ .adm-passcode-input {
2
+ position: relative;
3
+ display: inline-block;
4
+ --cell-size: 40px;
5
+ --cell-gap: 6px;
6
+ --dot-size: 10px;
7
+ --border-color: #e5e5e5;
8
+ --border-radius: 8px;
9
+ }
10
+ .adm-passcode-input-cell-container {
11
+ display: inline-flex;
12
+ vertical-align: top;
13
+ }
14
+ .adm-passcode-input-cell {
15
+ flex: none;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ box-sizing: border-box;
20
+ font-size: 18px;
21
+ width: var(--cell-size);
22
+ height: var(--cell-size);
23
+ background: var(--adm-color-white);
24
+ }
25
+ .adm-passcode-input:not(.seperated) {
26
+ border-radius: var(--border-radius);
27
+ overflow: hidden;
28
+ border: 1px solid var(--border-color);
29
+ }
30
+ .adm-passcode-input:not(.seperated) .adm-passcode-input-cell:not(:last-child) {
31
+ border-right: 1px solid var(--border-color);
32
+ }
33
+ .adm-passcode-input:not(.seperated).focused {
34
+ border-color: var(--adm-color-primary);
35
+ box-shadow: 0 0 2px 0 var(--adm-color-primary);
36
+ outline: none;
37
+ }
38
+ .adm-passcode-input:not(.seperated).error {
39
+ border-color: var(--adm-color-danger);
40
+ box-shadow: 0 0 2px 0 var(--adm-color-danger);
41
+ animation: 100ms ease-in-out 0s 3 normal none running adm-shake-horizontal;
42
+ }
43
+ .adm-passcode-input.seperated .adm-passcode-input-cell {
44
+ border-radius: var(--border-radius);
45
+ border: 1px solid var(--border-color);
46
+ }
47
+ .adm-passcode-input.seperated .adm-passcode-input-cell:not(:last-child) {
48
+ margin-right: var(--cell-gap);
49
+ }
50
+ .adm-passcode-input.seperated .adm-passcode-input-cell.focused {
51
+ border-color: var(--adm-color-primary);
52
+ box-shadow: 0 0 2px 0 var(--adm-color-primary);
53
+ }
54
+ .adm-passcode-input.seperated.focused {
55
+ outline: none;
56
+ }
57
+ .adm-passcode-input.seperated.error {
58
+ animation: 100ms ease-in-out 0s 3 normal none running adm-shake-horizontal;
59
+ }
60
+ .adm-passcode-input.seperated.error .adm-passcode-input-cell {
61
+ border-color: var(--adm-color-danger);
62
+ box-shadow: 0 0 2px 0 var(--adm-color-danger);
63
+ }
64
+ .adm-passcode-input-cell.dot::before {
65
+ content: '';
66
+ width: var(--dot-size);
67
+ height: var(--dot-size);
68
+ border-radius: 50%;
69
+ background: var(--adm-color-text);
70
+ }
71
+ .adm-passcode-input-cell.caret::after {
72
+ content: '';
73
+ width: 2px;
74
+ height: 1.1em;
75
+ margin-left: 1px;
76
+ background: var(--adm-color-primary);
77
+ animation: 1s linear infinite adm-caret-blink;
78
+ }
79
+ .adm-passcode-input > .adm-passcode-input-native-input {
80
+ position: absolute;
81
+ left: -200vw;
82
+ top: 0;
83
+ display: block;
84
+ width: 50px;
85
+ height: 20px;
86
+ opacity: 0.5;
87
+ }
88
+ @keyframes adm-shake-horizontal {
89
+ 0% {
90
+ transform: translateX(0);
91
+ }
92
+ 10% {
93
+ transform: translateX(-4px);
94
+ }
95
+ 20% {
96
+ transform: translateX(5px);
97
+ }
98
+ 30% {
99
+ transform: translateX(-1px);
100
+ }
101
+ 40% {
102
+ transform: translateX(8px);
103
+ }
104
+ 50% {
105
+ transform: translateX(0);
106
+ }
107
+ 60% {
108
+ transform: translateX(-8px);
109
+ }
110
+ 70% {
111
+ transform: translateX(1px);
112
+ }
113
+ 80% {
114
+ transform: translateX(-5px);
115
+ }
116
+ 90% {
117
+ transform: translateX(4px);
118
+ }
119
+ 100% {
120
+ transform: translateX(0);
121
+ }
122
+ }
123
+ @keyframes adm-caret-blink {
124
+ from {
125
+ opacity: 1;
126
+ }
127
+ 60% {
128
+ opacity: 1;
129
+ }
130
+ 80% {
131
+ opacity: 0;
132
+ }
133
+ to {
134
+ opacity: 0;
135
+ }
136
+ }
@@ -0,0 +1,35 @@
1
+ import React, { ReactElement } from 'react';
2
+ import { NativeProps } from '../../utils/native-props';
3
+ import type { NumberKeyboardProps } from '../number-keyboard';
4
+ export declare type PasscodeInputProps = {
5
+ value?: string;
6
+ defaultValue?: string;
7
+ onChange?: (val: string) => void;
8
+ length?: number;
9
+ plain?: boolean;
10
+ error?: boolean;
11
+ caret?: boolean;
12
+ seperated?: boolean;
13
+ onBlur?: () => void;
14
+ onFocus?: () => void;
15
+ keyboard?: ReactElement<NumberKeyboardProps>;
16
+ onFill?: (val: string) => void;
17
+ } & NativeProps<'--cell-gap' | '--cell-size'>;
18
+ export declare type PasscodeInputRef = {
19
+ focus: () => void;
20
+ blur: () => void;
21
+ };
22
+ export declare const PasscodeInput: React.ForwardRefExoticComponent<{
23
+ value?: string | undefined;
24
+ defaultValue?: string | undefined;
25
+ onChange?: ((val: string) => void) | undefined;
26
+ length?: number | undefined;
27
+ plain?: boolean | undefined;
28
+ error?: boolean | undefined;
29
+ caret?: boolean | undefined;
30
+ seperated?: boolean | undefined;
31
+ onBlur?: (() => void) | undefined;
32
+ onFocus?: (() => void) | undefined;
33
+ keyboard?: React.ReactElement<NumberKeyboardProps, string | ((props: any) => React.ReactElement<any, any> | null) | (new (props: any) => React.Component<any, any, any>)> | undefined;
34
+ onFill?: ((val: string) => void) | undefined;
35
+ } & NativeProps<"--cell-size" | "--cell-gap"> & React.RefAttributes<PasscodeInputRef>>;