@douyinfe/semi-ui 2.17.0-beta.1 → 2.18.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.
Files changed (155) hide show
  1. package/anchor/index.tsx +1 -1
  2. package/anchor/link.tsx +3 -4
  3. package/autoComplete/__test__/autoComplete.test.js +6 -6
  4. package/autoComplete/index.tsx +3 -1
  5. package/autoComplete/option.tsx +164 -0
  6. package/calendar/__test__/calendar.test.js +21 -2
  7. package/calendar/_story/calendar.stories.js +31 -0
  8. package/calendar/index.tsx +3 -1
  9. package/calendar/interface.ts +2 -1
  10. package/carousel/index.tsx +5 -5
  11. package/checkbox/checkbox.tsx +4 -1
  12. package/dist/css/semi.css +161 -23
  13. package/dist/css/semi.min.css +1 -1
  14. package/dist/umd/semi-ui.js +359 -94
  15. package/dist/umd/semi-ui.js.map +1 -1
  16. package/dist/umd/semi-ui.min.js +1 -1
  17. package/dist/umd/semi-ui.min.js.map +1 -1
  18. package/form/_story/FieldProps/labelOptional.jsx +30 -0
  19. package/form/_story/form.stories.js +7 -0
  20. package/form/hoc/withField.tsx +1 -0
  21. package/form/label.tsx +21 -7
  22. package/gulpfile.js +3 -1
  23. package/lib/cjs/_base/base.css +35 -0
  24. package/lib/cjs/anchor/index.js +2 -1
  25. package/lib/cjs/anchor/link.d.ts +1 -1
  26. package/lib/cjs/anchor/link.js +9 -5
  27. package/lib/cjs/autoComplete/index.d.ts +1 -1
  28. package/lib/cjs/autoComplete/index.js +6 -3
  29. package/lib/cjs/autoComplete/option.d.ts +50 -0
  30. package/lib/cjs/autoComplete/option.js +218 -0
  31. package/lib/cjs/calendar/index.d.ts +2 -0
  32. package/lib/cjs/calendar/index.js +3 -1
  33. package/lib/cjs/calendar/interface.d.ts +2 -1
  34. package/lib/cjs/carousel/index.js +2 -2
  35. package/lib/cjs/checkbox/checkbox.js +4 -1
  36. package/lib/cjs/form/hoc/withField.js +2 -1
  37. package/lib/cjs/form/label.d.ts +8 -5
  38. package/lib/cjs/form/label.js +15 -4
  39. package/lib/cjs/locale/interface.d.ts +3 -0
  40. package/lib/cjs/locale/source/ar.js +3 -0
  41. package/lib/cjs/locale/source/de.js +3 -0
  42. package/lib/cjs/locale/source/en_GB.js +3 -0
  43. package/lib/cjs/locale/source/en_US.js +3 -0
  44. package/lib/cjs/locale/source/es.js +3 -0
  45. package/lib/cjs/locale/source/fr.js +3 -0
  46. package/lib/cjs/locale/source/id_ID.js +3 -0
  47. package/lib/cjs/locale/source/it.js +3 -0
  48. package/lib/cjs/locale/source/ja_JP.js +3 -0
  49. package/lib/cjs/locale/source/ko_KR.js +3 -0
  50. package/lib/cjs/locale/source/ms_MY.js +3 -0
  51. package/lib/cjs/locale/source/pt_BR.js +3 -0
  52. package/lib/cjs/locale/source/ru_RU.js +3 -0
  53. package/lib/cjs/locale/source/th_TH.js +3 -0
  54. package/lib/cjs/locale/source/tr_TR.js +3 -0
  55. package/lib/cjs/locale/source/vi_VN.js +3 -0
  56. package/lib/cjs/locale/source/zh_CN.js +3 -0
  57. package/lib/cjs/locale/source/zh_TW.js +3 -0
  58. package/lib/cjs/modal/Modal.js +0 -8
  59. package/lib/cjs/modal/ModalContent.js +4 -1
  60. package/lib/cjs/tag/group.d.ts +3 -0
  61. package/lib/cjs/tag/group.js +24 -6
  62. package/lib/cjs/tag/index.d.ts +2 -1
  63. package/lib/cjs/tag/index.js +7 -5
  64. package/lib/cjs/tag/interface.d.ts +2 -1
  65. package/lib/cjs/tree/index.d.ts +3 -1
  66. package/lib/cjs/tree/index.js +23 -0
  67. package/lib/cjs/tree/interface.d.ts +4 -0
  68. package/lib/es/_base/base.css +35 -0
  69. package/lib/es/anchor/index.js +2 -1
  70. package/lib/es/anchor/link.d.ts +1 -1
  71. package/lib/es/anchor/link.js +9 -5
  72. package/lib/es/autoComplete/index.d.ts +1 -1
  73. package/lib/es/autoComplete/index.js +6 -3
  74. package/lib/es/autoComplete/option.d.ts +50 -0
  75. package/lib/es/autoComplete/option.js +188 -0
  76. package/lib/es/calendar/index.d.ts +2 -0
  77. package/lib/es/calendar/index.js +3 -1
  78. package/lib/es/calendar/interface.d.ts +2 -1
  79. package/lib/es/carousel/index.js +2 -2
  80. package/lib/es/checkbox/checkbox.js +4 -1
  81. package/lib/es/form/hoc/withField.js +2 -1
  82. package/lib/es/form/label.d.ts +8 -5
  83. package/lib/es/form/label.js +13 -4
  84. package/lib/es/locale/interface.d.ts +3 -0
  85. package/lib/es/locale/source/ar.js +3 -0
  86. package/lib/es/locale/source/de.js +3 -0
  87. package/lib/es/locale/source/en_GB.js +3 -0
  88. package/lib/es/locale/source/en_US.js +3 -0
  89. package/lib/es/locale/source/es.js +3 -0
  90. package/lib/es/locale/source/fr.js +3 -0
  91. package/lib/es/locale/source/id_ID.js +3 -0
  92. package/lib/es/locale/source/it.js +3 -0
  93. package/lib/es/locale/source/ja_JP.js +3 -0
  94. package/lib/es/locale/source/ko_KR.js +3 -0
  95. package/lib/es/locale/source/ms_MY.js +3 -0
  96. package/lib/es/locale/source/pt_BR.js +3 -0
  97. package/lib/es/locale/source/ru_RU.js +3 -0
  98. package/lib/es/locale/source/th_TH.js +3 -0
  99. package/lib/es/locale/source/tr_TR.js +3 -0
  100. package/lib/es/locale/source/vi_VN.js +3 -0
  101. package/lib/es/locale/source/zh_CN.js +3 -0
  102. package/lib/es/locale/source/zh_TW.js +3 -0
  103. package/lib/es/modal/Modal.js +0 -8
  104. package/lib/es/modal/ModalContent.js +4 -1
  105. package/lib/es/tag/group.d.ts +3 -0
  106. package/lib/es/tag/group.js +24 -6
  107. package/lib/es/tag/index.d.ts +2 -1
  108. package/lib/es/tag/index.js +7 -5
  109. package/lib/es/tag/interface.d.ts +2 -1
  110. package/lib/es/tree/index.d.ts +3 -1
  111. package/lib/es/tree/index.js +22 -0
  112. package/lib/es/tree/interface.d.ts +4 -0
  113. package/locale/interface.ts +3 -0
  114. package/locale/source/ar.ts +3 -0
  115. package/locale/source/de.ts +3 -0
  116. package/locale/source/en_GB.ts +3 -0
  117. package/locale/source/en_US.ts +3 -0
  118. package/locale/source/es.ts +3 -0
  119. package/locale/source/fr.ts +3 -0
  120. package/locale/source/id_ID.ts +3 -0
  121. package/locale/source/it.ts +3 -0
  122. package/locale/source/ja_JP.ts +3 -0
  123. package/locale/source/ko_KR.ts +3 -0
  124. package/locale/source/ms_MY.ts +3 -0
  125. package/locale/source/pt_BR.ts +3 -0
  126. package/locale/source/ru_RU.ts +3 -0
  127. package/locale/source/th_TH.ts +3 -0
  128. package/locale/source/tr_TR.ts +4 -1
  129. package/locale/source/vi_VN.ts +3 -0
  130. package/locale/source/zh_CN.ts +3 -0
  131. package/locale/source/zh_TW.ts +3 -0
  132. package/modal/Modal.tsx +0 -6
  133. package/modal/ModalContent.tsx +4 -1
  134. package/modal/__test__/modal.test.js +1 -1
  135. package/modal/_story/__snapshots__/modal.stories.tsx.snap +203 -0
  136. package/package.json +7 -7
  137. package/radio/_story/radio.stories.js +2 -2
  138. package/rating/__test__/rating.test.js +1 -1
  139. package/select/__test__/select.test.js +11 -17
  140. package/select/_story/select.stories.js +6 -6
  141. package/steps/_story/steps.stories.js +3 -3
  142. package/switch/_story/switch.stories.js +4 -4
  143. package/switch/_story/switch.stories.tsx +4 -4
  144. package/table/_story/v2/FixedFilter/index.tsx +106 -0
  145. package/table/_story/v2/FixedSorter/index.tsx +102 -0
  146. package/table/_story/v2/index.js +4 -2
  147. package/tag/_story/tag.stories.js +57 -1
  148. package/tag/group.tsx +20 -3
  149. package/tag/index.tsx +6 -5
  150. package/tag/interface.ts +2 -1
  151. package/transfer/_story/transfer.stories.js +2 -2
  152. package/tree/_story/tree.stories.js +152 -3
  153. package/tree/index.tsx +16 -1
  154. package/tree/interface.ts +6 -0
  155. package/upload/_story/upload.stories.js +2 -2
@@ -65,10 +65,14 @@ export default class Link extends BaseComponent {
65
65
  } = this.props;
66
66
 
67
67
  if (!this.context.autoCollapse) {
68
- return this.props.children;
68
+ return /*#__PURE__*/React.createElement("div", {
69
+ role: "list"
70
+ }, children);
69
71
  }
70
72
 
71
- return activeLink === href || childMap[href] && childMap[href].has(activeLink) ? children : null;
73
+ return activeLink === href || childMap[href] && childMap[href].has(activeLink) ? /*#__PURE__*/React.createElement("div", {
74
+ role: "list"
75
+ }, children) : null;
72
76
  };
73
77
 
74
78
  this.foundation = new LinkFoundation(this.adapter);
@@ -144,8 +148,7 @@ export default class Link extends BaseComponent {
144
148
  ["".concat(prefixCls, "-link-title-disabled")]: disabled
145
149
  });
146
150
  const ariaProps = {
147
- 'aria-disabled': disabled,
148
- 'aria-label': href
151
+ 'aria-disabled': disabled
149
152
  };
150
153
 
151
154
  if (active) {
@@ -158,7 +161,8 @@ export default class Link extends BaseComponent {
158
161
 
159
162
  return /*#__PURE__*/React.createElement("div", {
160
163
  className: linkCls,
161
- style: style
164
+ style: style,
165
+ role: "listitem"
162
166
  }, /*#__PURE__*/React.createElement("div", _Object$assign({
163
167
  role: "link",
164
168
  tabIndex: 0
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import { AutoCompleteAdapter, StateOptionItem, DataItem } from '@douyinfe/semi-foundation/lib/es/autoComplete/foundation';
4
4
  import BaseComponent, { ValidateStatus } from '../_base/baseComponent';
5
5
  import { Position } from '../tooltip';
6
- import Option from '../select/option';
6
+ import Option from './option';
7
7
  import '@douyinfe/semi-foundation/lib/es/autoComplete/autoComplete.css';
8
8
  import { Motion } from '../_base/base';
9
9
  /**
@@ -19,7 +19,7 @@ import Spin from '../spin';
19
19
  import Popover from '../popover';
20
20
  import Input from '../input';
21
21
  import Trigger from '../trigger';
22
- import Option from '../select/option';
22
+ import Option from './option';
23
23
  import warning from '@douyinfe/semi-foundation/lib/es/utils/warning';
24
24
  import '@douyinfe/semi-foundation/lib/es/autoComplete/autoComplete.css';
25
25
  const prefixCls = cssClasses.PREFIX;
@@ -195,7 +195,7 @@ class AutoComplete extends BaseComponent {
195
195
  } = this.state;
196
196
  const useCustomTrigger = typeof triggerRender === 'function';
197
197
 
198
- const outerProps = _Object$assign({
198
+ const outerProps = _Object$assign(_Object$assign({
199
199
  style,
200
200
  className: useCustomTrigger ? cls(className) : cls({
201
201
  [prefixCls]: true,
@@ -204,7 +204,10 @@ class AutoComplete extends BaseComponent {
204
204
  onClick: this.handleInputClick,
205
205
  ref: this.triggerRef,
206
206
  id
207
- }, keyboardEventSet);
207
+ }, keyboardEventSet), {
208
+ // tooltip give tabindex 0 to children by default, autoComplete just need the input get focus, so outer div's tabindex set to -1
209
+ tabIndex: -1
210
+ });
208
211
 
209
212
  const innerProps = {
210
213
  disabled,
@@ -0,0 +1,50 @@
1
+ import React, { PureComponent } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { BasicOptionProps } from '@douyinfe/semi-foundation/lib/es/autoComplete/optionFoundation';
4
+ export interface OptionProps extends BasicOptionProps {
5
+ [x: string]: any;
6
+ value?: string | number;
7
+ label?: string | number | React.ReactNode;
8
+ children?: React.ReactNode;
9
+ disabled?: boolean;
10
+ showTick?: boolean;
11
+ className?: string;
12
+ style?: React.CSSProperties;
13
+ }
14
+ interface renderOptionContentArgument {
15
+ config: {
16
+ searchWords: any;
17
+ sourceString: React.ReactNode;
18
+ };
19
+ children: React.ReactNode;
20
+ inputValue: string;
21
+ prefixCls: string;
22
+ }
23
+ declare class Option extends PureComponent<OptionProps> {
24
+ static isSelectOption: boolean;
25
+ static propTypes: {
26
+ children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
27
+ disabled: PropTypes.Requireable<boolean>;
28
+ value: PropTypes.Requireable<string | number>;
29
+ selected: PropTypes.Requireable<boolean>;
30
+ label: PropTypes.Requireable<PropTypes.ReactNodeLike>;
31
+ empty: PropTypes.Requireable<boolean>;
32
+ emptyContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
33
+ onSelect: PropTypes.Requireable<(...args: any[]) => any>;
34
+ focused: PropTypes.Requireable<boolean>;
35
+ showTick: PropTypes.Requireable<boolean>;
36
+ className: PropTypes.Requireable<string>;
37
+ style: PropTypes.Requireable<object>;
38
+ onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
39
+ prefixCls: PropTypes.Requireable<string>;
40
+ renderOptionItem: PropTypes.Requireable<(...args: any[]) => any>;
41
+ inputValue: PropTypes.Requireable<string>;
42
+ };
43
+ static defaultProps: {
44
+ prefixCls: string;
45
+ };
46
+ onClick({ value, label, children, ...rest }: Partial<OptionProps>, event: React.MouseEvent): void;
47
+ renderOptionContent({ config, children, inputValue, prefixCls }: renderOptionContentArgument): React.ReactNode;
48
+ render(): any;
49
+ }
50
+ export default Option;
@@ -0,0 +1,188 @@
1
+ import _isString from "lodash/isString";
2
+ import _indexOfInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/index-of";
3
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
4
+ import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
5
+
6
+ var __rest = this && this.__rest || function (s, e) {
7
+ var t = {};
8
+
9
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && _indexOfInstanceProperty(e).call(e, p) < 0) t[p] = s[p];
10
+
11
+ if (s != null && typeof _Object$getOwnPropertySymbols === "function") for (var i = 0, p = _Object$getOwnPropertySymbols(s); i < p.length; i++) {
12
+ if (_indexOfInstanceProperty(e).call(e, p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
13
+ }
14
+ return t;
15
+ };
16
+ /* eslint-disable max-len */
17
+
18
+
19
+ import React, { PureComponent } from 'react';
20
+ import classNames from 'classnames';
21
+ import PropTypes from 'prop-types';
22
+ import { cssClasses } from '@douyinfe/semi-foundation/lib/es/autoComplete/constants';
23
+ import LocaleConsumer from '../locale/localeConsumer';
24
+ import { IconTick } from '@douyinfe/semi-icons';
25
+ import { getHighLightTextHTML } from '../_utils/index';
26
+
27
+ class Option extends PureComponent {
28
+ onClick(_a, event) {
29
+ var {
30
+ value,
31
+ label,
32
+ children
33
+ } = _a,
34
+ rest = __rest(_a, ["value", "label", "children"]);
35
+
36
+ const {
37
+ props
38
+ } = this;
39
+ const isDisabled = props.disabled;
40
+
41
+ if (!isDisabled) {
42
+ props.onSelect(_Object$assign(_Object$assign({}, rest), {
43
+ value,
44
+ label: label || children
45
+ }), event);
46
+ }
47
+ }
48
+
49
+ renderOptionContent(_ref) {
50
+ let {
51
+ config,
52
+ children,
53
+ inputValue,
54
+ prefixCls
55
+ } = _ref;
56
+
57
+ if (_isString(children) && inputValue) {
58
+ return getHighLightTextHTML(config);
59
+ }
60
+
61
+ return children;
62
+ }
63
+
64
+ render() {
65
+ const _a = this.props,
66
+ {
67
+ children,
68
+ disabled,
69
+ value,
70
+ selected,
71
+ label,
72
+ empty,
73
+ emptyContent,
74
+ onSelect,
75
+ focused,
76
+ showTick,
77
+ className,
78
+ style,
79
+ onMouseEnter,
80
+ prefixCls,
81
+ renderOptionItem,
82
+ inputValue
83
+ } = _a,
84
+ rest = __rest(_a, ["children", "disabled", "value", "selected", "label", "empty", "emptyContent", "onSelect", "focused", "showTick", "className", "style", "onMouseEnter", "prefixCls", "renderOptionItem", "inputValue"]);
85
+
86
+ const optionClassName = classNames(prefixCls, {
87
+ ["".concat(prefixCls, "-disabled")]: disabled,
88
+ ["".concat(prefixCls, "-selected")]: selected,
89
+ ["".concat(prefixCls, "-focused")]: focused,
90
+ ["".concat(prefixCls, "-empty")]: empty,
91
+ [className]: className
92
+ });
93
+ const selectedIconClassName = classNames(["".concat(prefixCls, "-icon")]);
94
+
95
+ if (empty) {
96
+ if (emptyContent === null) {
97
+ return null;
98
+ }
99
+
100
+ return /*#__PURE__*/React.createElement(LocaleConsumer, {
101
+ componentName: "Select"
102
+ }, locale => /*#__PURE__*/React.createElement("div", {
103
+ className: optionClassName,
104
+ "x-semi-prop": "emptyContent"
105
+ }, emptyContent || locale.emptyText));
106
+ } // Since there are empty, locale and other logic, the custom renderOptionItem is directly converged to the internal option instead of being placed in Select/index
107
+
108
+
109
+ if (typeof renderOptionItem === 'function') {
110
+ return renderOptionItem(_Object$assign({
111
+ disabled,
112
+ focused,
113
+ selected,
114
+ style,
115
+ label,
116
+ value,
117
+ inputValue,
118
+ onMouseEnter: e => onMouseEnter(e),
119
+ onClick: e => this.onClick(_Object$assign({
120
+ value,
121
+ label,
122
+ children
123
+ }, rest), e)
124
+ }, rest));
125
+ }
126
+
127
+ const config = {
128
+ searchWords: inputValue,
129
+ sourceString: children,
130
+ option: {
131
+ highlightClassName: "".concat(prefixCls, "-keyword")
132
+ }
133
+ };
134
+ return (
135
+ /*#__PURE__*/
136
+ // eslint-disable-next-line jsx-a11y/interactive-supports-focus,jsx-a11y/click-events-have-key-events
137
+ React.createElement("div", {
138
+ className: optionClassName,
139
+ onClick: e => {
140
+ this.onClick(_Object$assign({
141
+ value,
142
+ label,
143
+ children
144
+ }, rest), e);
145
+ },
146
+ onMouseEnter: e => onMouseEnter && onMouseEnter(e),
147
+ role: "option",
148
+ "aria-selected": selected ? "true" : "false",
149
+ "aria-disabled": disabled ? "true" : "false",
150
+ style: style
151
+ }, showTick ? /*#__PURE__*/React.createElement("div", {
152
+ className: selectedIconClassName
153
+ }, /*#__PURE__*/React.createElement(IconTick, null)) : null, _isString(children) ? /*#__PURE__*/React.createElement("div", {
154
+ className: "".concat(prefixCls, "-text")
155
+ }, this.renderOptionContent({
156
+ children,
157
+ config,
158
+ inputValue,
159
+ prefixCls
160
+ })) : children)
161
+ );
162
+ }
163
+
164
+ }
165
+
166
+ Option.isSelectOption = true;
167
+ Option.propTypes = {
168
+ children: PropTypes.node,
169
+ disabled: PropTypes.bool,
170
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
171
+ selected: PropTypes.bool,
172
+ label: PropTypes.node,
173
+ empty: PropTypes.bool,
174
+ emptyContent: PropTypes.node,
175
+ onSelect: PropTypes.func,
176
+ focused: PropTypes.bool,
177
+ showTick: PropTypes.bool,
178
+ className: PropTypes.string,
179
+ style: PropTypes.object,
180
+ onMouseEnter: PropTypes.func,
181
+ prefixCls: PropTypes.string,
182
+ renderOptionItem: PropTypes.func,
183
+ inputValue: PropTypes.string
184
+ };
185
+ Option.defaultProps = {
186
+ prefixCls: cssClasses.PREFIX_OPTION
187
+ };
188
+ export default Option;
@@ -18,6 +18,7 @@ declare class Calendar extends BaseComponent<CalendarProps, {}> {
18
18
  }>[]>;
19
19
  mode: PropTypes.Requireable<string>;
20
20
  showCurrTime: PropTypes.Requireable<boolean>;
21
+ weekStartsOn: PropTypes.Requireable<number>;
21
22
  scrollTop: PropTypes.Requireable<number>;
22
23
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
23
24
  renderTimeDisplay: PropTypes.Requireable<(...args: any[]) => any>;
@@ -35,6 +36,7 @@ declare class Calendar extends BaseComponent<CalendarProps, {}> {
35
36
  markWeekend: boolean;
36
37
  height: number;
37
38
  scrollTop: number;
39
+ weekStartsOn: number;
38
40
  };
39
41
  render(): React.FunctionComponentElement<any>;
40
42
  }
@@ -54,6 +54,7 @@ Calendar.propTypes = {
54
54
  })),
55
55
  mode: PropTypes.string,
56
56
  showCurrTime: PropTypes.bool,
57
+ weekStartsOn: PropTypes.number,
57
58
  scrollTop: PropTypes.number,
58
59
  onClick: PropTypes.func,
59
60
  renderTimeDisplay: PropTypes.func,
@@ -70,6 +71,7 @@ Calendar.defaultProps = {
70
71
  mode: 'week',
71
72
  markWeekend: false,
72
73
  height: 600,
73
- scrollTop: 400
74
+ scrollTop: 400,
75
+ weekStartsOn: 0
74
76
  };
75
77
  export default Calendar;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { EventObject } from '@douyinfe/semi-foundation/lib/es/calendar/foundation';
2
+ import { EventObject, weeekStartsOnEnum } from '@douyinfe/semi-foundation/lib/es/calendar/foundation';
3
3
  import { strings } from '@douyinfe/semi-foundation/lib/es/calendar/constants';
4
4
  import { ArrayElement } from '../_base/base';
5
5
  import { BaseProps } from '../_base/baseComponent';
@@ -10,6 +10,7 @@ export interface CalendarProps extends BaseProps {
10
10
  events?: EventObject[];
11
11
  mode?: ArrayElement<typeof strings.MODE>;
12
12
  showCurrTime?: boolean;
13
+ weekStartsOn?: weeekStartsOnEnum;
13
14
  scrollTop?: number;
14
15
  onClick?: (e: React.MouseEvent, value: Date) => void;
15
16
  onClose?: (e: React.MouseEvent) => void;
@@ -41,7 +41,7 @@ class Carousel extends BaseComponent {
41
41
  };
42
42
 
43
43
  this.handleAutoPlay = () => {
44
- if (!this.foundation.getIsControledComponent()) {
44
+ if (!this.foundation.getIsControlledComponent()) {
45
45
  this.foundation.handleAutoPlay();
46
46
  }
47
47
  };
@@ -61,7 +61,7 @@ class Carousel extends BaseComponent {
61
61
  autoPlay
62
62
  } = this.props;
63
63
 
64
- if ((typeof autoPlay !== 'object' || autoPlay.hoverToPause) && !this.foundation.getIsControledComponent()) {
64
+ if ((typeof autoPlay !== 'object' || autoPlay.hoverToPause) && !this.foundation.getIsControlledComponent()) {
65
65
  this.foundation.handleAutoPlay();
66
66
  }
67
67
  };
@@ -98,7 +98,10 @@ class Checkbox extends BaseComponent {
98
98
  }
99
99
 
100
100
  isInGroup() {
101
- return Boolean(this.context && this.context.checkboxGroup);
101
+ // Why do we need to determine whether there is a value in props?
102
+ // If there is no value in the props of the checkbox in the context of the checkboxGroup,
103
+ // it will be considered not to belong to the checkboxGroup。
104
+ return Boolean(this.context && this.context.checkboxGroup && 'value' in this.props);
102
105
  }
103
106
 
104
107
  focus() {
@@ -99,7 +99,8 @@ function withField(Component, opts) {
99
99
  if (arrayFieldState) {
100
100
  initVal = arrayFieldState.shouldUseInitValue && typeof initValue !== 'undefined' ? initValue : initValueInFormOpts;
101
101
  }
102
- } catch (err) {}
102
+ } catch (err) {} // FIXME typeof initVal
103
+
103
104
 
104
105
  const [value, setValue, getVal] = useStateWithGetter(typeof initVal !== undefined ? initVal : null);
105
106
 
@@ -1,22 +1,23 @@
1
1
  import React, { PureComponent } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  export interface LabelProps {
4
+ /** text-align of label */
5
+ align?: string;
6
+ className?: string;
7
+ children?: React.ReactNode;
8
+ disabled?: boolean;
4
9
  id?: string;
5
10
  /** Whether to display the required * symbol */
6
11
  required?: boolean;
7
12
  /** Content of label */
8
13
  text?: React.ReactNode;
9
- disabled?: boolean;
10
14
  /** Used to configure the htmlFor attribute of the label tag */
11
15
  name?: string;
12
- /** text-align of label */
13
- align?: string;
14
16
  /** width of label */
15
17
  width?: number | string;
16
18
  style?: React.CSSProperties;
17
- className?: string;
18
- children?: React.ReactNode;
19
19
  extra?: React.ReactNode;
20
+ optional?: boolean;
20
21
  }
21
22
  export default class Label extends PureComponent<LabelProps> {
22
23
  static defaultProps: {
@@ -24,6 +25,7 @@ export default class Label extends PureComponent<LabelProps> {
24
25
  name: string;
25
26
  align: string;
26
27
  className: string;
28
+ optional: boolean;
27
29
  };
28
30
  static propTypes: {
29
31
  id: PropTypes.Requireable<string>;
@@ -37,6 +39,7 @@ export default class Label extends PureComponent<LabelProps> {
37
39
  style: PropTypes.Requireable<object>;
38
40
  className: PropTypes.Requireable<string>;
39
41
  extra: PropTypes.Requireable<PropTypes.ReactNodeLike>;
42
+ optional: PropTypes.Requireable<boolean>;
40
43
  };
41
44
  render(): JSX.Element;
42
45
  }
@@ -2,6 +2,7 @@ import React, { PureComponent } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import PropTypes from 'prop-types';
4
4
  import { cssClasses } from '@douyinfe/semi-foundation/lib/es/form/constants';
5
+ import LocaleConsumer from '../locale/localeConsumer';
5
6
  const prefixCls = cssClasses.PREFIX;
6
7
  export default class Label extends PureComponent {
7
8
  render() {
@@ -16,7 +17,8 @@ export default class Label extends PureComponent {
16
17
  style,
17
18
  className,
18
19
  extra,
19
- id
20
+ id,
21
+ optional
20
22
  } = this.props;
21
23
  const labelCls = classNames(className, {
22
24
  ["".concat(prefixCls, "-field-label")]: true,
@@ -28,10 +30,15 @@ export default class Label extends PureComponent {
28
30
  });
29
31
  const labelStyle = style ? style : {};
30
32
  width ? labelStyle.width = width : null;
33
+ const optionalText = /*#__PURE__*/React.createElement(LocaleConsumer, {
34
+ componentName: "Form"
35
+ }, locale => /*#__PURE__*/React.createElement("span", {
36
+ className: "".concat(prefixCls, "-field-label-optional-text")
37
+ }, locale.optional));
31
38
  const textContent = /*#__PURE__*/React.createElement("div", {
32
39
  className: "".concat(prefixCls, "-field-label-text"),
33
40
  "x-semi-prop": "label"
34
- }, typeof text !== 'undefined' ? text : children);
41
+ }, typeof text !== 'undefined' ? text : children, optional ? optionalText : null);
35
42
  const contentWithExtra = /*#__PURE__*/React.createElement(React.Fragment, null, textContent, /*#__PURE__*/React.createElement("div", {
36
43
  className: "".concat(prefixCls, "-field-label-extra")
37
44
  }, extra));
@@ -48,7 +55,8 @@ Label.defaultProps = {
48
55
  required: false,
49
56
  name: '',
50
57
  align: 'left',
51
- className: ''
58
+ className: '',
59
+ optional: false
52
60
  };
53
61
  Label.propTypes = {
54
62
  id: PropTypes.string,
@@ -61,5 +69,6 @@ Label.propTypes = {
61
69
  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
62
70
  style: PropTypes.object,
63
71
  className: PropTypes.string,
64
- extra: PropTypes.node
72
+ extra: PropTypes.node,
73
+ optional: PropTypes.bool
65
74
  };
@@ -148,4 +148,7 @@ export interface Locale {
148
148
  total: string;
149
149
  selected: string;
150
150
  };
151
+ Form: {
152
+ optional: string;
153
+ };
151
154
  }
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'إلغاء تحديد الكل',
148
148
  total: 'مجموع ${total} العناصر',
149
149
  selected: '${total} العناصر المحدد'
150
+ },
151
+ Form: {
152
+ optional: '(اختياري)'
150
153
  }
151
154
  }; // [i18n-Arabic]
152
155
 
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'Alles abwählen',
148
148
  total: 'Gesamt ${total} Artikel',
149
149
  selected: '${total} ausgewählte Artikel'
150
+ },
151
+ Form: {
152
+ optional: '(Optional)'
150
153
  }
151
154
  }; // [i18n-German]
152
155
 
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'Unselect all',
148
148
  total: 'Total ${total} items',
149
149
  selected: '${total} items selected'
150
+ },
151
+ Form: {
152
+ optional: '(optional)'
150
153
  }
151
154
  }; // [i18n-English(GB)]
152
155
 
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'Unselect all',
148
148
  total: 'Total ${total} items',
149
149
  selected: '${total} items selected'
150
+ },
151
+ Form: {
152
+ optional: '(optional)'
150
153
  }
151
154
  }; // [i18n-English(US)]
152
155
 
@@ -152,6 +152,9 @@ const locale = {
152
152
  clearSelectAll: 'Deseleccionar todo',
153
153
  total: 'Total ${total} objetos',
154
154
  selected: '${total} objetos seleccionados'
155
+ },
156
+ Form: {
157
+ optional: '(opcional)'
155
158
  }
156
159
  };
157
160
  export default locale;
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'Désélectionner tout',
148
148
  total: 'Totale ${total} articles',
149
149
  selected: '${total} articles sélectionnés'
150
+ },
151
+ Form: {
152
+ optional: '(optionnel)'
150
153
  }
151
154
  }; // [i18n-French]
152
155
 
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'Nyahpilih Semua',
148
148
  total: 'Total ${total} proyek',
149
149
  selected: '${total} item dipilih'
150
+ },
151
+ Form: {
152
+ optional: '(opsional)'
150
153
  }
151
154
  }; // [i18n-Indonesia(ID)]
152
155
 
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'Deseleziona tutto',
148
148
  total: 'Totale ${total} elementi',
149
149
  selected: '${total} elementi selezionati'
150
+ },
151
+ Form: {
152
+ optional: '(opzionale)'
150
153
  }
151
154
  }; // [i18n-Italian]
152
155
 
@@ -148,6 +148,9 @@ const local = {
148
148
  clearSelectAll: 'すべてを選択解除',
149
149
  total: '合計 ${total} アイテム',
150
150
  selected: '選択済み ${total} アイテム'
151
+ },
152
+ Form: {
153
+ optional: '(オプション)'
151
154
  }
152
155
  }; // [i18n-Japan]
153
156
 
@@ -148,6 +148,9 @@ const local = {
148
148
  clearSelectAll: '모두 선택 취소',
149
149
  total: '총 {total} 개 항목',
150
150
  selected: '선택된 {Total} 개 항목'
151
+ },
152
+ Form: {
153
+ optional: '(선택 과목)'
151
154
  }
152
155
  }; // [i18n-Korea]
153
156
 
@@ -147,6 +147,9 @@ const local = {
147
147
  clearSelectAll: 'Nyahpilih semua',
148
148
  total: 'Jumlah ${total} item',
149
149
  selected: '${total} projek dipilih'
150
+ },
151
+ Form: {
152
+ optional: '(pilihan)'
150
153
  }
151
154
  }; // [i18n-Malaysia(MY)]
152
155
 
@@ -155,6 +155,9 @@ const local = {
155
155
  clearSelectAll: 'Cancelar selecionar tudo',
156
156
  total: 'Total de ${total} itens',
157
157
  selected: '${total} itens selecionados'
158
+ },
159
+ Form: {
160
+ optional: '(opcional)'
158
161
  }
159
162
  }; // 葡萄牙语
160
163
 
@@ -150,6 +150,9 @@ const local = {
150
150
  clearSelectAll: 'Снять выделение',
151
151
  total: 'Всего ${total} элементов',
152
152
  selected: 'Выбрано ${total} элементов'
153
+ },
154
+ Form: {
155
+ optional: '(по желанию)'
153
156
  }
154
157
  }; // [i18n-Russia] 俄罗斯语
155
158
 
@@ -151,6 +151,9 @@ const local = {
151
151
  clearSelectAll: 'ยกเลิกการเลือกทั้งหมด',
152
152
  total: 'รวม ${total} รายการ',
153
153
  selected: 'เลือก ${total} รายการ'
154
+ },
155
+ Form: {
156
+ optional: '(ไม่จำเป็น)'
154
157
  }
155
158
  }; // [i18n-Thai]
156
159