@douyinfe/semi-ui 2.5.1 → 2.7.0-beta.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.
- package/button/__test__/button.test.js +7 -0
- package/button/buttonGroup.tsx +5 -2
- package/calendar/monthCalendar.tsx +14 -13
- package/cascader/__test__/cascader.test.js +159 -81
- package/cascader/_story/cascader.stories.js +36 -23
- package/cascader/index.tsx +47 -8
- package/cascader/item.tsx +25 -5
- package/datePicker/_story/v2/InsetInput.jsx +104 -0
- package/datePicker/_story/v2/InsetInputE2E.jsx +69 -0
- package/datePicker/_story/v2/index.js +2 -0
- package/datePicker/dateInput.tsx +102 -13
- package/datePicker/datePicker.tsx +95 -16
- package/datePicker/index.tsx +15 -0
- package/datePicker/insetInput.tsx +76 -0
- package/datePicker/month.tsx +14 -7
- package/datePicker/monthsGrid.tsx +31 -12
- package/datePicker/navigation.tsx +8 -4
- package/datePicker/quickControl.tsx +1 -0
- package/datePicker/yearAndMonth.tsx +1 -1
- package/dist/css/semi.css +120 -8
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +1100 -193
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/form/hoc/withField.tsx +1 -1
- package/input/_story/input.stories.js +13 -0
- package/lib/cjs/_base/base.css +5 -5
- package/lib/cjs/button/buttonGroup.d.ts +1 -0
- package/lib/cjs/button/buttonGroup.js +6 -2
- package/lib/cjs/calendar/monthCalendar.js +21 -5
- package/lib/cjs/cascader/index.d.ts +10 -2
- package/lib/cjs/cascader/index.js +52 -10
- package/lib/cjs/cascader/item.d.ts +6 -2
- package/lib/cjs/cascader/item.js +33 -4
- package/lib/cjs/datePicker/dateInput.d.ts +9 -4
- package/lib/cjs/datePicker/dateInput.js +107 -13
- package/lib/cjs/datePicker/datePicker.d.ts +7 -2
- package/lib/cjs/datePicker/datePicker.js +138 -30
- package/lib/cjs/datePicker/index.js +24 -2
- package/lib/cjs/datePicker/insetInput.d.ts +21 -0
- package/lib/cjs/datePicker/insetInput.js +80 -0
- package/lib/cjs/datePicker/month.d.ts +1 -0
- package/lib/cjs/datePicker/month.js +18 -2
- package/lib/cjs/datePicker/monthsGrid.js +35 -11
- package/lib/cjs/datePicker/navigation.js +8 -0
- package/lib/cjs/datePicker/quickControl.js +1 -0
- package/lib/cjs/datePicker/yearAndMonth.js +1 -0
- package/lib/cjs/form/hoc/withField.js +1 -1
- package/lib/cjs/navigation/Item.d.ts +2 -2
- package/lib/cjs/navigation/Item.js +8 -6
- package/lib/cjs/navigation/SubNav.js +2 -2
- package/lib/cjs/scrollList/scrollItem.d.ts +2 -1
- package/lib/cjs/scrollList/scrollItem.js +13 -3
- package/lib/cjs/table/Body/index.d.ts +2 -0
- package/lib/cjs/table/Body/index.js +13 -4
- package/lib/cjs/tree/index.js +5 -3
- package/lib/cjs/tree/interface.d.ts +1 -0
- package/lib/cjs/tree/nodeList.js +2 -1
- package/lib/cjs/treeSelect/index.js +7 -3
- package/lib/es/_base/base.css +5 -5
- package/lib/es/button/buttonGroup.d.ts +1 -0
- package/lib/es/button/buttonGroup.js +5 -2
- package/lib/es/calendar/monthCalendar.js +22 -5
- package/lib/es/cascader/index.d.ts +10 -2
- package/lib/es/cascader/index.js +49 -7
- package/lib/es/cascader/item.d.ts +6 -2
- package/lib/es/cascader/item.js +31 -4
- package/lib/es/datePicker/dateInput.d.ts +9 -4
- package/lib/es/datePicker/dateInput.js +106 -13
- package/lib/es/datePicker/datePicker.d.ts +7 -2
- package/lib/es/datePicker/datePicker.js +139 -30
- package/lib/es/datePicker/index.js +20 -0
- package/lib/es/datePicker/insetInput.d.ts +21 -0
- package/lib/es/datePicker/insetInput.js +65 -0
- package/lib/es/datePicker/month.d.ts +1 -0
- package/lib/es/datePicker/month.js +18 -2
- package/lib/es/datePicker/monthsGrid.js +35 -11
- package/lib/es/datePicker/navigation.js +8 -0
- package/lib/es/datePicker/quickControl.js +2 -0
- package/lib/es/datePicker/yearAndMonth.js +1 -0
- package/lib/es/form/hoc/withField.js +1 -1
- package/lib/es/navigation/Item.d.ts +2 -2
- package/lib/es/navigation/Item.js +8 -6
- package/lib/es/navigation/SubNav.js +2 -2
- package/lib/es/scrollList/scrollItem.d.ts +2 -1
- package/lib/es/scrollList/scrollItem.js +13 -3
- package/lib/es/table/Body/index.d.ts +2 -0
- package/lib/es/table/Body/index.js +13 -4
- package/lib/es/tree/index.js +5 -3
- package/lib/es/tree/interface.d.ts +1 -0
- package/lib/es/tree/nodeList.js +2 -1
- package/lib/es/treeSelect/index.js +7 -3
- package/navigation/Item.tsx +15 -12
- package/navigation/SubNav.tsx +4 -4
- package/package.json +9 -9
- package/scrollList/_story/ScrollList/index.js +3 -0
- package/scrollList/_story/WheelList/index.js +3 -0
- package/scrollList/scrollItem.tsx +30 -9
- package/table/Body/index.tsx +15 -4
- package/table/__test__/table.test.js +18 -0
- package/table/_story/v2/FixedExpandedRow/index.jsx +95 -0
- package/table/_story/v2/index.js +2 -1
- package/tree/__test__/tree.test.js +87 -2
- package/tree/_story/tree.stories.js +65 -5
- package/tree/index.tsx +4 -2
- package/tree/interface.ts +1 -0
- package/tree/nodeList.tsx +2 -2
- package/treeSelect/__test__/treeSelect.test.js +28 -0
- package/treeSelect/_story/treeSelect.stories.js +55 -2
- package/treeSelect/index.tsx +11 -3
package/form/hoc/withField.tsx
CHANGED
|
@@ -884,4 +884,17 @@ export const ClearButton = () => {
|
|
|
884
884
|
|
|
885
885
|
ClearButton.story = {
|
|
886
886
|
name: 'clear button',
|
|
887
|
+
};
|
|
888
|
+
|
|
889
|
+
export const InputFocus = () => {
|
|
890
|
+
const ref = React.useRef();
|
|
891
|
+
const handleClick = () => {
|
|
892
|
+
ref.current.focus();
|
|
893
|
+
};
|
|
894
|
+
return (
|
|
895
|
+
<>
|
|
896
|
+
<Button onClick={handleClick}>focus input</Button>
|
|
897
|
+
<Input ref={ref} onChange={() => console.log('ref', ref) } onFocus={() => console.log('focus')} />
|
|
898
|
+
</>
|
|
899
|
+
);
|
|
887
900
|
};
|
package/lib/cjs/_base/base.css
CHANGED
|
@@ -19,7 +19,7 @@ body .semi-always-light {
|
|
|
19
19
|
--semi-blue-2: 152,205,253;
|
|
20
20
|
--semi-blue-3: 101,178,252;
|
|
21
21
|
--semi-blue-4: 50,149,251;
|
|
22
|
-
--semi-blue-5: 0,
|
|
22
|
+
--semi-blue-5: 0,100,250;
|
|
23
23
|
--semi-blue-6: 0,98,214;
|
|
24
24
|
--semi-blue-7: 0,79,179;
|
|
25
25
|
--semi-blue-8: 0,61,143;
|
|
@@ -410,7 +410,7 @@ body, body[theme-mode=dark] .semi-always-light {
|
|
|
410
410
|
--semi-color-bg-4: rgba(var(--semi-white), 1);
|
|
411
411
|
--semi-color-text-0: rgba(var(--semi-grey-9), 1);
|
|
412
412
|
--semi-color-text-1: rgba(var(--semi-grey-9), .8);
|
|
413
|
-
--semi-color-text-2: rgba(var(--semi-grey-9), .
|
|
413
|
+
--semi-color-text-2: rgba(var(--semi-grey-9), .62);
|
|
414
414
|
--semi-color-text-3: rgba(var(--semi-grey-9), .35);
|
|
415
415
|
--semi-shadow-elevated: 0 0 1px rgba(0, 0, 0, .3), 0 4px 14px rgba(0, 0, 0, .1);
|
|
416
416
|
--semi-border-radius-extra-small: 3px;
|
|
@@ -487,9 +487,9 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
487
487
|
--semi-color-nav-bg: rgba(35, 36, 41, 1);
|
|
488
488
|
--semi-shadow-elevated: inset 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 14px rgba(0, 0, 0, .25);
|
|
489
489
|
--semi-color-overlay-bg: rgba(22, 22, 26, .6);
|
|
490
|
-
--semi-color-fill-0: rgba(var(--semi-white), .
|
|
491
|
-
--semi-color-fill-1: rgba(var(--semi-white), .
|
|
492
|
-
--semi-color-fill-2: rgba(var(--semi-white), .
|
|
490
|
+
--semi-color-fill-0: rgba(var(--semi-white), .12);
|
|
491
|
+
--semi-color-fill-1: rgba(var(--semi-white), .16);
|
|
492
|
+
--semi-color-fill-2: rgba(var(--semi-white), .20);
|
|
493
493
|
--semi-color-border: rgba(var(--semi-white), .08);
|
|
494
494
|
--semi-color-shadow: rgba(var(--semi-black), .04);
|
|
495
495
|
--semi-color-bg-0: rgba(22, 22, 26, 1);
|
|
@@ -30,6 +30,8 @@ var _baseComponent = _interopRequireDefault(require("../_base/baseComponent"));
|
|
|
30
30
|
|
|
31
31
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
32
32
|
|
|
33
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
34
|
+
|
|
33
35
|
var _constants = require("@douyinfe/semi-foundation/lib/cjs/button/constants");
|
|
34
36
|
|
|
35
37
|
require("@douyinfe/semi-foundation/lib/cjs/button/button.css");
|
|
@@ -60,11 +62,13 @@ class ButtonGroup extends _baseComponent.default {
|
|
|
60
62
|
disabled,
|
|
61
63
|
size,
|
|
62
64
|
type,
|
|
65
|
+
className,
|
|
63
66
|
'aria-label': ariaLabel
|
|
64
67
|
} = _a,
|
|
65
|
-
rest = __rest(_a, ["children", "disabled", "size", "type", 'aria-label']);
|
|
68
|
+
rest = __rest(_a, ["children", "disabled", "size", "type", "className", 'aria-label']);
|
|
66
69
|
|
|
67
70
|
let inner;
|
|
71
|
+
const cls = (0, _classnames.default)("".concat(prefixCls, "-group"), className);
|
|
68
72
|
|
|
69
73
|
if (children) {
|
|
70
74
|
var _context;
|
|
@@ -79,7 +83,7 @@ class ButtonGroup extends _baseComponent.default {
|
|
|
79
83
|
}
|
|
80
84
|
|
|
81
85
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
82
|
-
className:
|
|
86
|
+
className: cls,
|
|
83
87
|
role: "group",
|
|
84
88
|
"aria-label": ariaLabel
|
|
85
89
|
}, inner);
|
|
@@ -52,6 +52,7 @@ var _iconButton = _interopRequireDefault(require("../iconButton"));
|
|
|
52
52
|
|
|
53
53
|
require("@douyinfe/semi-foundation/lib/cjs/calendar/calendar.css");
|
|
54
54
|
|
|
55
|
+
/* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */
|
|
55
56
|
// eslint-disable-next-line max-len
|
|
56
57
|
const toPercent = num => {
|
|
57
58
|
const res = num < 1 ? num * 100 : 100;
|
|
@@ -95,11 +96,13 @@ class monthCalendar extends _baseComponent.default {
|
|
|
95
96
|
} = this.props;
|
|
96
97
|
this.monthlyData = this.foundation.getMonthlyData(displayValue, dateFnsLocale);
|
|
97
98
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
98
|
-
className: "".concat(prefixCls, "-header")
|
|
99
|
+
className: "".concat(prefixCls, "-header"),
|
|
100
|
+
role: "presentation"
|
|
99
101
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
100
|
-
role: "
|
|
102
|
+
role: "presentation",
|
|
101
103
|
className: "".concat(prefixCls, "-grid")
|
|
102
104
|
}, /*#__PURE__*/_react.default.createElement("ul", {
|
|
105
|
+
role: "row",
|
|
103
106
|
className: "".concat(prefixCls, "-grid-row")
|
|
104
107
|
}, (0, _map.default)(_context = this.monthlyData[0]).call(_context, day => {
|
|
105
108
|
const {
|
|
@@ -109,6 +112,8 @@ class monthCalendar extends _baseComponent.default {
|
|
|
109
112
|
["".concat(_constants.cssClasses.PREFIX, "-weekend")]: markWeekend && day.isWeekend
|
|
110
113
|
});
|
|
111
114
|
return /*#__PURE__*/_react.default.createElement("li", {
|
|
115
|
+
role: "columnheader",
|
|
116
|
+
"aria-label": weekday,
|
|
112
117
|
key: "".concat(weekday, "-monthheader"),
|
|
113
118
|
className: listCls
|
|
114
119
|
}, /*#__PURE__*/_react.default.createElement("span", null, weekday));
|
|
@@ -195,7 +200,10 @@ class monthCalendar extends _baseComponent.default {
|
|
|
195
200
|
|
|
196
201
|
const text = /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
|
|
197
202
|
componentName: "Calendar"
|
|
198
|
-
}, locale =>
|
|
203
|
+
}, locale =>
|
|
204
|
+
/*#__PURE__*/
|
|
205
|
+
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
206
|
+
_react.default.createElement("div", {
|
|
199
207
|
className: "".concat(cardCls, "-wrapper"),
|
|
200
208
|
style: {
|
|
201
209
|
bottom: 0
|
|
@@ -264,11 +272,12 @@ class monthCalendar extends _baseComponent.default {
|
|
|
264
272
|
day
|
|
265
273
|
} = events;
|
|
266
274
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
267
|
-
role: "
|
|
275
|
+
role: "presentation",
|
|
268
276
|
className: "".concat(prefixCls, "-weekrow"),
|
|
269
277
|
ref: _this.cellDom,
|
|
270
278
|
key: "".concat(index, "-weekrow")
|
|
271
279
|
}, /*#__PURE__*/_react.default.createElement("ul", {
|
|
280
|
+
role: "row",
|
|
272
281
|
className: "".concat(prefixCls, "-skeleton")
|
|
273
282
|
}, (0, _map.default)(weekDay).call(weekDay, each => {
|
|
274
283
|
const {
|
|
@@ -288,6 +297,9 @@ class monthCalendar extends _baseComponent.default {
|
|
|
288
297
|
const shouldRenderCollapsed = Boolean(day && day[ind] && day[ind].length > itemLimit);
|
|
289
298
|
|
|
290
299
|
const inner = /*#__PURE__*/_react.default.createElement("li", {
|
|
300
|
+
role: "gridcell",
|
|
301
|
+
"aria-label": date.toLocaleDateString(),
|
|
302
|
+
"aria-current": isToday ? "date" : false,
|
|
291
303
|
key: "".concat(date, "-weeksk"),
|
|
292
304
|
className: listCls,
|
|
293
305
|
onClick: e => _this.handleClick(e, [date])
|
|
@@ -310,9 +322,10 @@ class monthCalendar extends _baseComponent.default {
|
|
|
310
322
|
parsedEvents
|
|
311
323
|
} = this.state;
|
|
312
324
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
313
|
-
role: "
|
|
325
|
+
role: "presentation",
|
|
314
326
|
className: "".concat(prefixCls, "-week")
|
|
315
327
|
}, /*#__PURE__*/_react.default.createElement("ul", {
|
|
328
|
+
role: "presentation",
|
|
316
329
|
className: "".concat(prefixCls, "-grid-col")
|
|
317
330
|
}, (0, _map.default)(_context3 = (0, _keys.default)(this.monthlyData)).call(_context3, weekInd => this.renderWeekRow(weekInd, this.monthlyData[weekInd], parsedEvents[weekInd]))));
|
|
318
331
|
};
|
|
@@ -439,12 +452,15 @@ class monthCalendar extends _baseComponent.default {
|
|
|
439
452
|
return /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
|
|
440
453
|
componentName: "Calendar"
|
|
441
454
|
}, (locale, localeCode, dateFnsLocale) => /*#__PURE__*/_react.default.createElement("div", {
|
|
455
|
+
role: "grid",
|
|
442
456
|
className: monthCls,
|
|
443
457
|
key: this.state.itemLimit,
|
|
444
458
|
style: monthStyle
|
|
445
459
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
460
|
+
role: "presentation",
|
|
446
461
|
className: "".concat(prefixCls, "-sticky-top")
|
|
447
462
|
}, header, this.renderHeader(dateFnsLocale)), /*#__PURE__*/_react.default.createElement("div", {
|
|
463
|
+
role: "presentation",
|
|
448
464
|
className: "".concat(prefixCls, "-grid-wrapper")
|
|
449
465
|
}, this.renderMonthGrid())));
|
|
450
466
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { ReactNode, CSSProperties, MouseEvent } from 'react';
|
|
1
|
+
import React, { ReactNode, CSSProperties, MouseEvent, KeyboardEvent } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { BasicCascaderInnerData, BasicCascaderProps, BasicTriggerRenderProps, BasicScrollPanelProps, CascaderAdapter, CascaderType } from '@douyinfe/semi-foundation/lib/cjs/cascader/foundation';
|
|
4
4
|
import '@douyinfe/semi-foundation/lib/cjs/cascader/cascader.css';
|
|
@@ -24,6 +24,7 @@ export interface CascaderProps extends BasicCascaderProps {
|
|
|
24
24
|
'aria-invalid'?: React.AriaAttributes['aria-invalid'];
|
|
25
25
|
'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
|
|
26
26
|
'aria-required'?: React.AriaAttributes['aria-required'];
|
|
27
|
+
'aria-label'?: React.AriaAttributes['aria-label'];
|
|
27
28
|
arrowIcon?: ReactNode;
|
|
28
29
|
defaultValue?: Value;
|
|
29
30
|
dropdownStyle?: CSSProperties;
|
|
@@ -65,6 +66,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
65
66
|
'aria-errormessage': PropTypes.Requireable<string>;
|
|
66
67
|
'aria-describedby': PropTypes.Requireable<string>;
|
|
67
68
|
'aria-required': PropTypes.Requireable<boolean>;
|
|
69
|
+
'aria-label': PropTypes.Requireable<string>;
|
|
68
70
|
arrowIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
69
71
|
changeOnSelect: PropTypes.Requireable<boolean>;
|
|
70
72
|
defaultValue: PropTypes.Requireable<string | any[]>;
|
|
@@ -158,6 +160,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
158
160
|
onDropdownVisibleChange: (...args: any[]) => void;
|
|
159
161
|
onListScroll: (...args: any[]) => void;
|
|
160
162
|
enableLeafClick: boolean;
|
|
163
|
+
'aria-label': string;
|
|
161
164
|
};
|
|
162
165
|
options: any;
|
|
163
166
|
isEmpty: boolean;
|
|
@@ -177,13 +180,14 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
177
180
|
renderTagItem: (value: string | Array<string>, idx: number, type: string) => React.ReactNode;
|
|
178
181
|
renderTagInput(): JSX.Element;
|
|
179
182
|
renderInput(): JSX.Element;
|
|
180
|
-
handleItemClick: (e: MouseEvent, item: Entity | Data) => void;
|
|
183
|
+
handleItemClick: (e: MouseEvent | KeyboardEvent, item: Entity | Data) => void;
|
|
181
184
|
handleItemHover: (e: MouseEvent, item: Entity) => void;
|
|
182
185
|
onItemCheckboxClick: (item: Entity | Data) => void;
|
|
183
186
|
handleListScroll: (e: React.UIEvent<HTMLUListElement, UIEvent>, ind: number) => void;
|
|
184
187
|
renderContent: () => JSX.Element;
|
|
185
188
|
renderPlusN: (hiddenTag: Array<ReactNode>) => JSX.Element;
|
|
186
189
|
renderMultipleTags: () => JSX.Element;
|
|
190
|
+
renderDisplayText: () => ReactNode;
|
|
187
191
|
renderSelectContent: () => JSX.Element;
|
|
188
192
|
renderSuffix: () => JSX.Element;
|
|
189
193
|
renderPrefix: () => JSX.Element;
|
|
@@ -191,6 +195,10 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
191
195
|
handleMouseOver: () => void;
|
|
192
196
|
handleMouseLeave: () => void;
|
|
193
197
|
handleClear: (e: MouseEvent) => void;
|
|
198
|
+
/**
|
|
199
|
+
* A11y: simulate clear button click
|
|
200
|
+
*/
|
|
201
|
+
handleClearEnterPress: (e: KeyboardEvent) => void;
|
|
194
202
|
showClearBtn: () => boolean;
|
|
195
203
|
renderClearBtn: () => JSX.Element;
|
|
196
204
|
renderArrow: () => JSX.Element;
|
|
@@ -20,14 +20,14 @@ var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
|
|
|
20
20
|
|
|
21
21
|
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
|
|
22
22
|
|
|
23
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
24
|
+
|
|
23
25
|
var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
|
|
24
26
|
|
|
25
27
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
|
|
26
28
|
|
|
27
29
|
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
|
|
28
30
|
|
|
29
|
-
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
30
|
-
|
|
31
31
|
var _flatten2 = _interopRequireDefault(require("lodash/flatten"));
|
|
32
32
|
|
|
33
33
|
var _noop2 = _interopRequireDefault(require("lodash/noop"));
|
|
@@ -66,7 +66,7 @@ var _util = require("@douyinfe/semi-foundation/lib/cjs/cascader/util");
|
|
|
66
66
|
|
|
67
67
|
var _treeUtil = require("@douyinfe/semi-foundation/lib/cjs/tree/treeUtil");
|
|
68
68
|
|
|
69
|
-
var
|
|
69
|
+
var _context5 = _interopRequireDefault(require("../configProvider/context"));
|
|
70
70
|
|
|
71
71
|
var _baseComponent = _interopRequireDefault(require("../_base/baseComponent"));
|
|
72
72
|
|
|
@@ -267,6 +267,36 @@ class Cascader extends _baseComponent.default {
|
|
|
267
267
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, displayTag, !(0, _isEmpty2.default)(hiddenTag) && this.renderPlusN(hiddenTag));
|
|
268
268
|
};
|
|
269
269
|
|
|
270
|
+
this.renderDisplayText = () => {
|
|
271
|
+
const {
|
|
272
|
+
displayProp,
|
|
273
|
+
separator,
|
|
274
|
+
displayRender
|
|
275
|
+
} = this.props;
|
|
276
|
+
const {
|
|
277
|
+
selectedKeys
|
|
278
|
+
} = this.state;
|
|
279
|
+
let displayText = '';
|
|
280
|
+
|
|
281
|
+
if (selectedKeys.size) {
|
|
282
|
+
const displayPath = this.foundation.getItemPropPath([...selectedKeys][0], displayProp);
|
|
283
|
+
|
|
284
|
+
if (displayRender && typeof displayRender === 'function') {
|
|
285
|
+
displayText = displayRender(displayPath);
|
|
286
|
+
} else {
|
|
287
|
+
displayText = (0, _map.default)(displayPath).call(displayPath, (path, index) => {
|
|
288
|
+
var _context3;
|
|
289
|
+
|
|
290
|
+
return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
|
|
291
|
+
key: (0, _concat.default)(_context3 = "".concat(path, "-")).call(_context3, index)
|
|
292
|
+
}, index < displayPath.length - 1 ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, path, separator) : path);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return displayText;
|
|
298
|
+
};
|
|
299
|
+
|
|
270
300
|
this.renderSelectContent = () => {
|
|
271
301
|
const {
|
|
272
302
|
placeholder,
|
|
@@ -274,7 +304,6 @@ class Cascader extends _baseComponent.default {
|
|
|
274
304
|
multiple
|
|
275
305
|
} = this.props;
|
|
276
306
|
const {
|
|
277
|
-
selectedKeys,
|
|
278
307
|
checkedKeys
|
|
279
308
|
} = this.state;
|
|
280
309
|
const searchable = Boolean(filterTreeNode);
|
|
@@ -289,9 +318,9 @@ class Cascader extends _baseComponent.default {
|
|
|
289
318
|
|
|
290
319
|
return this.renderMultipleTags();
|
|
291
320
|
} else {
|
|
292
|
-
const displayText =
|
|
321
|
+
const displayText = this.renderDisplayText();
|
|
293
322
|
const spanCls = (0, _classnames.default)({
|
|
294
|
-
["".concat(prefixcls, "-selection-placeholder")]: !displayText
|
|
323
|
+
["".concat(prefixcls, "-selection-placeholder")]: !displayText
|
|
295
324
|
});
|
|
296
325
|
return /*#__PURE__*/_react.default.createElement("span", {
|
|
297
326
|
className: spanCls
|
|
@@ -387,6 +416,15 @@ class Cascader extends _baseComponent.default {
|
|
|
387
416
|
e && e.stopPropagation();
|
|
388
417
|
this.foundation.handleClear();
|
|
389
418
|
};
|
|
419
|
+
/**
|
|
420
|
+
* A11y: simulate clear button click
|
|
421
|
+
*/
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
this.handleClearEnterPress = e => {
|
|
425
|
+
e && e.stopPropagation();
|
|
426
|
+
this.foundation.handleClearEnterPress();
|
|
427
|
+
};
|
|
390
428
|
|
|
391
429
|
this.showClearBtn = () => {
|
|
392
430
|
const {
|
|
@@ -413,6 +451,7 @@ class Cascader extends _baseComponent.default {
|
|
|
413
451
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
414
452
|
className: clearCls,
|
|
415
453
|
onClick: this.handleClear,
|
|
454
|
+
onKeyPress: this.handleClearEnterPress,
|
|
416
455
|
role: 'button',
|
|
417
456
|
tabIndex: 0
|
|
418
457
|
}, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClear, null));
|
|
@@ -502,6 +541,7 @@ class Cascader extends _baseComponent.default {
|
|
|
502
541
|
style: style,
|
|
503
542
|
ref: this.triggerRef,
|
|
504
543
|
onClick: e => this.foundation.handleClick(e),
|
|
544
|
+
onKeyPress: e => this.foundation.handleSelectionEnterPress(e),
|
|
505
545
|
"aria-invalid": this.props['aria-invalid'],
|
|
506
546
|
"aria-errormessage": this.props['aria-errormessage'],
|
|
507
547
|
"aria-label": this.props['aria-label'],
|
|
@@ -824,7 +864,7 @@ class Cascader extends _baseComponent.default {
|
|
|
824
864
|
}
|
|
825
865
|
|
|
826
866
|
renderTagInput() {
|
|
827
|
-
var
|
|
867
|
+
var _context4;
|
|
828
868
|
|
|
829
869
|
const {
|
|
830
870
|
size,
|
|
@@ -843,7 +883,7 @@ class Cascader extends _baseComponent.default {
|
|
|
843
883
|
const tagInputcls = (0, _classnames.default)("".concat(prefixcls, "-tagInput-wrapper"));
|
|
844
884
|
const tagValue = [];
|
|
845
885
|
const realKeys = this.mergeType === _constants.strings.NONE_MERGE_TYPE ? checkedKeys : resolvedCheckedKeys;
|
|
846
|
-
(0, _forEach.default)(
|
|
886
|
+
(0, _forEach.default)(_context4 = [...realKeys]).call(_context4, checkedKey => {
|
|
847
887
|
if (!(0, _isEmpty2.default)(keyEntities[checkedKey])) {
|
|
848
888
|
tagValue.push(keyEntities[checkedKey].valuePath);
|
|
849
889
|
}
|
|
@@ -934,13 +974,14 @@ class Cascader extends _baseComponent.default {
|
|
|
934
974
|
|
|
935
975
|
}
|
|
936
976
|
|
|
937
|
-
Cascader.contextType =
|
|
977
|
+
Cascader.contextType = _context5.default;
|
|
938
978
|
Cascader.propTypes = {
|
|
939
979
|
'aria-labelledby': _propTypes.default.string,
|
|
940
980
|
'aria-invalid': _propTypes.default.bool,
|
|
941
981
|
'aria-errormessage': _propTypes.default.string,
|
|
942
982
|
'aria-describedby': _propTypes.default.string,
|
|
943
983
|
'aria-required': _propTypes.default.bool,
|
|
984
|
+
'aria-label': _propTypes.default.string,
|
|
944
985
|
arrowIcon: _propTypes.default.node,
|
|
945
986
|
changeOnSelect: _propTypes.default.bool,
|
|
946
987
|
defaultValue: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.array]),
|
|
@@ -1035,7 +1076,8 @@ Cascader.defaultProps = {
|
|
|
1035
1076
|
onClear: _noop2.default,
|
|
1036
1077
|
onDropdownVisibleChange: _noop2.default,
|
|
1037
1078
|
onListScroll: _noop2.default,
|
|
1038
|
-
enableLeafClick: false
|
|
1079
|
+
enableLeafClick: false,
|
|
1080
|
+
'aria-label': 'Cascader'
|
|
1039
1081
|
};
|
|
1040
1082
|
var _default = Cascader;
|
|
1041
1083
|
exports.default = _default;
|
|
@@ -22,7 +22,7 @@ export interface CascaderItemProps {
|
|
|
22
22
|
selectedKeys: Set<string>;
|
|
23
23
|
loadedKeys: Set<string>;
|
|
24
24
|
loadingKeys: Set<string>;
|
|
25
|
-
onItemClick: (e: React.MouseEvent, item: Entity | Data) => void;
|
|
25
|
+
onItemClick: (e: React.MouseEvent | React.KeyboardEvent, item: Entity | Data) => void;
|
|
26
26
|
onItemHover: (e: React.MouseEvent, item: Entity) => void;
|
|
27
27
|
showNext: ShowNextType;
|
|
28
28
|
onItemCheckboxClick: (item: Entity | Data) => void;
|
|
@@ -57,7 +57,11 @@ export default class Item extends PureComponent<CascaderItemProps> {
|
|
|
57
57
|
static defaultProps: {
|
|
58
58
|
empty: boolean;
|
|
59
59
|
};
|
|
60
|
-
onClick: (e: React.MouseEvent, item: Entity | Data) => void;
|
|
60
|
+
onClick: (e: React.MouseEvent | React.KeyboardEvent, item: Entity | Data) => void;
|
|
61
|
+
/**
|
|
62
|
+
* A11y: simulate item click
|
|
63
|
+
*/
|
|
64
|
+
handleItemEnterPress: (keyboardEvent: React.KeyboardEvent, item: Entity | Data) => void;
|
|
61
65
|
onHover: (e: React.MouseEvent, item: Entity) => void;
|
|
62
66
|
onCheckboxChange: (e: CheckboxEvent, item: Entity | Data) => void;
|
|
63
67
|
getItemStatus: (key: string) => {
|
package/lib/cjs/cascader/item.js
CHANGED
|
@@ -20,6 +20,8 @@ var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-st
|
|
|
20
20
|
|
|
21
21
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
22
22
|
|
|
23
|
+
var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
|
|
24
|
+
|
|
23
25
|
var _includes2 = _interopRequireDefault(require("lodash/includes"));
|
|
24
26
|
|
|
25
27
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -30,6 +32,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
30
32
|
|
|
31
33
|
var _constants = require("@douyinfe/semi-foundation/lib/cjs/cascader/constants");
|
|
32
34
|
|
|
35
|
+
var _isEnterPress = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/utils/isEnterPress"));
|
|
36
|
+
|
|
33
37
|
var _context7 = _interopRequireDefault(require("../configProvider/context"));
|
|
34
38
|
|
|
35
39
|
var _localeConsumer = _interopRequireDefault(require("../locale/localeConsumer"));
|
|
@@ -61,6 +65,16 @@ class Item extends _react.PureComponent {
|
|
|
61
65
|
|
|
62
66
|
onItemClick(e, item);
|
|
63
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* A11y: simulate item click
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
this.handleItemEnterPress = (keyboardEvent, item) => {
|
|
74
|
+
if ((0, _isEnterPress.default)(keyboardEvent)) {
|
|
75
|
+
this.onClick(keyboardEvent, item);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
64
78
|
|
|
65
79
|
this.onHover = (e, item) => {
|
|
66
80
|
const {
|
|
@@ -140,6 +154,7 @@ class Item extends _react.PureComponent {
|
|
|
140
154
|
|
|
141
155
|
case 'empty':
|
|
142
156
|
return /*#__PURE__*/_react.default.createElement("span", {
|
|
157
|
+
"aria-hidden": true,
|
|
143
158
|
className: (0, _concat.default)(_context3 = "".concat(prefixcls, "-icon ")).call(_context3, prefixcls, "-icon-empty")
|
|
144
159
|
});
|
|
145
160
|
|
|
@@ -202,11 +217,13 @@ class Item extends _react.PureComponent {
|
|
|
202
217
|
["".concat(prefixcls, "-disabled")]: disabled
|
|
203
218
|
});
|
|
204
219
|
return /*#__PURE__*/_react.default.createElement("li", {
|
|
220
|
+
role: 'menuitem',
|
|
205
221
|
className: className,
|
|
206
222
|
key: key,
|
|
207
223
|
onClick: e => {
|
|
208
224
|
this.onClick(e, item);
|
|
209
|
-
}
|
|
225
|
+
},
|
|
226
|
+
onKeyPress: e => this.handleItemEnterPress(e, item)
|
|
210
227
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
211
228
|
className: "".concat(prefixcls, "-label")
|
|
212
229
|
}, !multiple && this.renderIcon('empty'), multiple && /*#__PURE__*/_react.default.createElement(_checkbox.default, {
|
|
@@ -232,13 +249,15 @@ class Item extends _react.PureComponent {
|
|
|
232
249
|
let showChildItem;
|
|
233
250
|
const ind = content.length;
|
|
234
251
|
content.push( /*#__PURE__*/_react.default.createElement("ul", {
|
|
252
|
+
role: 'menu',
|
|
235
253
|
className: "".concat(prefixcls, "-list"),
|
|
236
254
|
key: renderData[0].key,
|
|
237
255
|
onScroll: e => this.props.onListScroll(e, ind)
|
|
238
256
|
}, (0, _map.default)(renderData).call(renderData, item => {
|
|
239
257
|
const {
|
|
240
258
|
data,
|
|
241
|
-
key
|
|
259
|
+
key,
|
|
260
|
+
parentKey
|
|
242
261
|
} = item;
|
|
243
262
|
const {
|
|
244
263
|
children,
|
|
@@ -263,16 +282,26 @@ class Item extends _react.PureComponent {
|
|
|
263
282
|
["".concat(prefixcls, "-select")]: selected && !multiple,
|
|
264
283
|
["".concat(prefixcls, "-disabled")]: disabled
|
|
265
284
|
});
|
|
266
|
-
|
|
285
|
+
const otherAriaProps = parentKey ? {
|
|
286
|
+
['aria-owns']: "cascaderItem-".concat(parentKey)
|
|
287
|
+
} : {};
|
|
288
|
+
return /*#__PURE__*/_react.default.createElement("li", (0, _assign.default)({
|
|
289
|
+
role: 'menuitem',
|
|
290
|
+
id: "cascaderItem-".concat(key),
|
|
291
|
+
"aria-expanded": active,
|
|
292
|
+
"aria-haspopup": Boolean(showExpand),
|
|
293
|
+
"aria-disabled": disabled
|
|
294
|
+
}, otherAriaProps, {
|
|
267
295
|
className: className,
|
|
268
296
|
key: key,
|
|
269
297
|
onClick: e => {
|
|
270
298
|
this.onClick(e, item);
|
|
271
299
|
},
|
|
300
|
+
onKeyPress: e => this.handleItemEnterPress(e, item),
|
|
272
301
|
onMouseEnter: e => {
|
|
273
302
|
this.onHover(e, item);
|
|
274
303
|
}
|
|
275
|
-
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
304
|
+
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
276
305
|
className: "".concat(prefixcls, "-label")
|
|
277
306
|
}, selected && !multiple && this.renderIcon('tick'), !selected && !multiple && this.renderIcon('empty'), multiple && /*#__PURE__*/_react.default.createElement(_checkbox.default, {
|
|
278
307
|
onChange: e => this.onCheckboxChange(e, item),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import DateInputFoundation, { DateInputAdapter, DateInputFoundationProps, RangeType } from '@douyinfe/semi-foundation/lib/cjs/datePicker/inputFoundation';
|
|
3
|
+
import DateInputFoundation, { DateInputAdapter, DateInputFoundationProps, RangeType, InsetInputChangeProps, InsetInputChangeFoundationProps } from '@douyinfe/semi-foundation/lib/cjs/datePicker/inputFoundation';
|
|
4
4
|
import { noop } from '@douyinfe/semi-foundation/lib/cjs/utils/function';
|
|
5
|
-
import BaseComponent, { BaseProps } from '../_base/baseComponent';
|
|
6
5
|
import { ValueType } from '@douyinfe/semi-foundation/lib/cjs/datePicker/foundation';
|
|
6
|
+
import BaseComponent, { BaseProps } from '../_base/baseComponent';
|
|
7
7
|
export interface DateInputProps extends DateInputFoundationProps, BaseProps {
|
|
8
8
|
insetLabel?: React.ReactNode;
|
|
9
9
|
prefix?: React.ReactNode;
|
|
@@ -13,6 +13,8 @@ export interface DateInputProps extends DateInputFoundationProps, BaseProps {
|
|
|
13
13
|
onBlur?: (e: React.MouseEvent<HTMLInputElement>) => void;
|
|
14
14
|
onFocus?: (e: React.MouseEvent<HTMLInputElement>, rangeType?: RangeType) => void;
|
|
15
15
|
onClear?: (e: React.MouseEvent<HTMLDivElement>) => void;
|
|
16
|
+
onInsetInputChange?: (options: InsetInputChangeProps) => void;
|
|
17
|
+
value?: Date[];
|
|
16
18
|
}
|
|
17
19
|
export default class DateInput extends BaseComponent<DateInputProps, {}> {
|
|
18
20
|
static propTypes: {
|
|
@@ -25,7 +27,6 @@ export default class DateInput extends BaseComponent<DateInputProps, {}> {
|
|
|
25
27
|
value: PropTypes.Requireable<any[]>;
|
|
26
28
|
disabled: PropTypes.Requireable<boolean>;
|
|
27
29
|
type: PropTypes.Requireable<"dateTime" | "date" | "month" | "dateRange" | "year" | "dateTimeRange">;
|
|
28
|
-
multiple: PropTypes.Requireable<boolean>;
|
|
29
30
|
showClear: PropTypes.Requireable<boolean>;
|
|
30
31
|
format: PropTypes.Requireable<string>;
|
|
31
32
|
inputStyle: PropTypes.Requireable<object>;
|
|
@@ -40,6 +41,8 @@ export default class DateInput extends BaseComponent<DateInputProps, {}> {
|
|
|
40
41
|
rangeInputStartRef: PropTypes.Requireable<object>;
|
|
41
42
|
rangeInputEndRef: PropTypes.Requireable<object>;
|
|
42
43
|
rangeSeparator: PropTypes.Requireable<string>;
|
|
44
|
+
insetInput: PropTypes.Requireable<boolean>;
|
|
45
|
+
insetInputValue: PropTypes.Requireable<object>;
|
|
43
46
|
};
|
|
44
47
|
static defaultProps: {
|
|
45
48
|
showClear: boolean;
|
|
@@ -49,7 +52,6 @@ export default class DateInput extends BaseComponent<DateInputProps, {}> {
|
|
|
49
52
|
onBlur: typeof noop;
|
|
50
53
|
onClear: typeof noop;
|
|
51
54
|
onFocus: typeof noop;
|
|
52
|
-
multiple: boolean;
|
|
53
55
|
type: string;
|
|
54
56
|
inputStyle: {};
|
|
55
57
|
inputReadOnly: boolean;
|
|
@@ -71,11 +73,14 @@ export default class DateInput extends BaseComponent<DateInputProps, {}> {
|
|
|
71
73
|
handleRangeInputEndKeyPress: (e: React.KeyboardEvent<HTMLInputElement>) => void;
|
|
72
74
|
handleRangeInputFocus: (e: React.MouseEvent<HTMLElement>, rangeType: RangeType) => void;
|
|
73
75
|
handleRangeStartFocus: React.MouseEventHandler<HTMLElement>;
|
|
76
|
+
handleInsetInputChange: (options: InsetInputChangeFoundationProps) => void;
|
|
74
77
|
getRangeInputValue: (rangeStart: string, rangeEnd: string) => string;
|
|
75
78
|
renderRangePrefix(): JSX.Element;
|
|
76
79
|
renderRangeSeparator(rangeStart: string, rangeEnd: string): JSX.Element;
|
|
77
80
|
renderRangeClearBtn(rangeStart: string, rangeEnd: string): JSX.Element;
|
|
78
81
|
renderRangeSuffix(suffix: React.ReactNode): JSX.Element;
|
|
79
82
|
renderRangeInput(rangeProps: DateInputProps): JSX.Element;
|
|
83
|
+
renderInputInset(): JSX.Element;
|
|
84
|
+
renderTriggerInput(): JSX.Element;
|
|
80
85
|
render(): JSX.Element;
|
|
81
86
|
}
|