@douyinfe/semi-ui 2.4.1 → 2.5.1

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 (103) hide show
  1. package/button/index.tsx +1 -1
  2. package/cascader/__test__/cascader.test.js +24 -0
  3. package/cascader/_story/cascader.stories.js +73 -0
  4. package/cascader/index.tsx +5 -2
  5. package/datePicker/_story/v2/FixInputRangeFocus.jsx +25 -0
  6. package/datePicker/_story/v2/index.js +2 -1
  7. package/datePicker/datePicker.tsx +3 -0
  8. package/dist/css/semi.css +56 -29
  9. package/dist/css/semi.min.css +1 -1
  10. package/dist/umd/semi-ui.js +523 -227
  11. package/dist/umd/semi-ui.js.map +1 -1
  12. package/dist/umd/semi-ui.min.js +1 -1
  13. package/dist/umd/semi-ui.min.js.map +1 -1
  14. package/form/__test__/formApi.test.js +182 -0
  15. package/form/_story/FormApi/arrayDemo.jsx +4 -7
  16. package/form/_story/Layout/slotDemo.jsx +2 -2
  17. package/form/_story/demo.jsx +18 -1
  18. package/form/_story/form.stories.js +6 -6
  19. package/form/baseForm.tsx +2 -2
  20. package/lib/cjs/autoComplete/index.d.ts +1 -1
  21. package/lib/cjs/button/Button.d.ts +4 -4
  22. package/lib/cjs/button/buttonGroup.d.ts +2 -2
  23. package/lib/cjs/button/index.d.ts +5 -6
  24. package/lib/cjs/cascader/index.js +6 -0
  25. package/lib/cjs/datePicker/datePicker.js +4 -0
  26. package/lib/cjs/dropdown/index.d.ts +1 -1
  27. package/lib/cjs/form/baseForm.d.ts +1 -1
  28. package/lib/cjs/form/baseForm.js +2 -2
  29. package/lib/cjs/form/field.d.ts +1 -1
  30. package/lib/cjs/iconButton/index.d.ts +2 -2
  31. package/lib/cjs/select/index.d.ts +3 -3
  32. package/lib/cjs/select/index.js +32 -28
  33. package/lib/cjs/select/option.js +2 -2
  34. package/lib/cjs/select/virtualRow.js +2 -2
  35. package/lib/cjs/table/Table.d.ts +1 -1
  36. package/lib/cjs/table/Table.js +8 -2
  37. package/lib/cjs/table/interface.d.ts +1 -0
  38. package/lib/cjs/tabs/interface.d.ts +1 -1
  39. package/lib/cjs/tooltip/index.d.ts +1 -1
  40. package/lib/cjs/tooltip/index.js +12 -4
  41. package/lib/cjs/tree/index.d.ts +2 -0
  42. package/lib/cjs/tree/index.js +15 -8
  43. package/lib/cjs/treeSelect/index.d.ts +2 -0
  44. package/lib/cjs/treeSelect/index.js +64 -27
  45. package/lib/cjs/upload/fileCard.js +31 -22
  46. package/lib/cjs/upload/index.d.ts +6 -0
  47. package/lib/cjs/upload/index.js +15 -8
  48. package/lib/cjs/upload/interface.d.ts +8 -6
  49. package/lib/es/autoComplete/index.d.ts +1 -1
  50. package/lib/es/button/Button.d.ts +4 -4
  51. package/lib/es/button/buttonGroup.d.ts +2 -2
  52. package/lib/es/button/index.d.ts +5 -6
  53. package/lib/es/cascader/index.js +5 -0
  54. package/lib/es/datePicker/datePicker.js +4 -0
  55. package/lib/es/dropdown/index.d.ts +1 -1
  56. package/lib/es/form/baseForm.d.ts +1 -1
  57. package/lib/es/form/baseForm.js +2 -2
  58. package/lib/es/form/field.d.ts +1 -1
  59. package/lib/es/iconButton/index.d.ts +2 -2
  60. package/lib/es/select/index.d.ts +3 -3
  61. package/lib/es/select/index.js +30 -26
  62. package/lib/es/select/option.js +2 -2
  63. package/lib/es/select/virtualRow.js +2 -2
  64. package/lib/es/table/Table.d.ts +1 -1
  65. package/lib/es/table/Table.js +10 -2
  66. package/lib/es/table/interface.d.ts +1 -0
  67. package/lib/es/tabs/interface.d.ts +1 -1
  68. package/lib/es/tooltip/index.d.ts +1 -1
  69. package/lib/es/tooltip/index.js +12 -4
  70. package/lib/es/tree/index.d.ts +2 -0
  71. package/lib/es/tree/index.js +15 -8
  72. package/lib/es/treeSelect/index.d.ts +2 -0
  73. package/lib/es/treeSelect/index.js +64 -27
  74. package/lib/es/upload/fileCard.js +31 -24
  75. package/lib/es/upload/index.d.ts +6 -0
  76. package/lib/es/upload/index.js +14 -8
  77. package/lib/es/upload/interface.d.ts +8 -6
  78. package/package.json +9 -9
  79. package/select/index.tsx +18 -19
  80. package/select/option.tsx +2 -2
  81. package/select/virtualRow.tsx +2 -2
  82. package/table/Table.tsx +7 -2
  83. package/table/_story/Perf/Virtualized/index.jsx +6 -0
  84. package/table/_story/table.stories.js +1 -2
  85. package/table/_story/v2/FixedHeaderMerge/index.jsx +98 -0
  86. package/table/_story/v2/FixedResizable/index.jsx +114 -0
  87. package/table/_story/v2/defaultFilteredValue.tsx +114 -0
  88. package/table/_story/v2/index.js +5 -0
  89. package/table/interface.ts +1 -0
  90. package/tabs/interface.ts +1 -1
  91. package/tooltip/__test__/tooltip.test.js +48 -4
  92. package/tooltip/_story/tooltip.stories.js +718 -559
  93. package/tooltip/index.tsx +6 -6
  94. package/tree/__test__/treeMultiple.test.js +94 -0
  95. package/tree/_story/tree.stories.js +169 -0
  96. package/tree/index.tsx +12 -5
  97. package/treeSelect/__test__/treeMultiple.test.js +94 -0
  98. package/treeSelect/_story/treeSelect.stories.js +242 -0
  99. package/treeSelect/index.tsx +72 -40
  100. package/upload/_story/upload.stories.js +22 -6
  101. package/upload/fileCard.tsx +23 -23
  102. package/upload/index.tsx +15 -6
  103. package/upload/interface.ts +7 -5
@@ -30,6 +30,11 @@ const fields = (
30
30
  </>
31
31
  );
32
32
 
33
+ const getDomValue = (field, form) => {
34
+ let inputDOM = form.find(`[x-field-id="${field}"] input`).getDOMNode();
35
+ return inputDOM.getAttribute("value");
36
+ };
37
+
33
38
  describe('Form-formApi', () => {
34
39
  beforeEach(() => {
35
40
  document.body.innerHTML = '';
@@ -416,6 +421,183 @@ describe('Form-formApi', () => {
416
421
  expect(formApi.getFormState().touched).toEqual({ a: { b: true, c: true }});
417
422
  })
418
423
 
424
+ it('formApi-setValue, field path precise', () => {
425
+ // case like:
426
+ // Exist 3 Field: a.b、a.c、a.d
427
+ // formApi.setValue('a.b', '123');
428
+ let formApi = null;
429
+ const fields = (
430
+ <>
431
+ <Form.Input field='a.b' />
432
+ <Form.Input field='a.c' />
433
+ <Form.Input field='a.d' />
434
+ </>
435
+ );
436
+ const props = {
437
+ children: fields,
438
+ getFormApi: api => {
439
+ formApi = api;
440
+ },
441
+ };
442
+ const form = getForm(props);
443
+ formApi.setValue('a.c', 'semi');
444
+ // check formState.values
445
+ let val = formApi.getValue('a.c');
446
+ expect(val).toEqual('semi');
447
+ form.update();
448
+ // check dom render
449
+ expect(getDomValue('a.c', form)).toEqual('semi');
450
+ });
451
+
452
+ it('formApi-setValue, field path belongs to parent aggregate', () => {
453
+ // case like:
454
+ // Exist 3 Field: a.b、a.c、a.d
455
+ // formApi.setValue('a', { b: 'semi', c: 'design' });
456
+ let formApi = null;
457
+ const fields = (
458
+ <>
459
+ <Form.Input field='a.b' />
460
+ <Form.Input field='a.c' />
461
+ <Form.Input field='a.d' />
462
+ </>
463
+ );
464
+ const props = {
465
+ children: fields,
466
+ getFormApi: api => {
467
+ formApi = api;
468
+ },
469
+ };
470
+ const form = getForm(props);
471
+ formApi.setValue('a', { b: 'semi', c: 'design' });
472
+ let acVal = formApi.getValue('a.c');
473
+ let abVal = formApi.getValue('a.b');
474
+ expect(abVal).toEqual('semi');
475
+ expect(acVal).toEqual('design');
476
+ form.update();
477
+
478
+ // check dom render
479
+ expect(getDomValue('a.b', form)).toEqual('semi');
480
+ expect(getDomValue('a.c', form)).toEqual('design');
481
+ });
482
+
483
+ it('formApi-setValue with array field path, 0 -> 3', () => {
484
+
485
+ const fields = ({ formState, values }) => {
486
+
487
+ return values.a && values.a.map((effect, i) => (
488
+ <div key={effect.key}>
489
+ <Form.Input field={`a[${i}].name`} />
490
+ <Form.Input field={`a[${i}].type`} />
491
+ </div>
492
+ ));
493
+ };
494
+ let formApi = null;
495
+ const props = {
496
+ children: fields,
497
+ getFormApi: api => {
498
+ formApi = api;
499
+ },
500
+ };
501
+ const form = getForm(props);
502
+ let targetValue = [
503
+ { name: '0-name', type: '0-type' },
504
+ { name: '1-name', type: '1-type' },
505
+ { name: '2-name', type: '2-type' },
506
+ ];
507
+ formApi.setValue('a', targetValue);
508
+ let formStateValues = formApi.getValue();
509
+ form.update();
510
+ // check dom render
511
+ expect(getDomValue('a[0].name', form)).toEqual('0-name');
512
+ expect(getDomValue('a[0].type', form)).toEqual('0-type');
513
+ expect(getDomValue('a[1].name', form)).toEqual('1-name');
514
+ expect(getDomValue('a[1].type', form)).toEqual('1-type');
515
+ expect(getDomValue('a[2].name', form)).toEqual('2-name');
516
+ expect(getDomValue('a[2].type', form)).toEqual('2-type');
517
+ });
518
+
519
+ // // this case result was different in cypress / jest, jest result is wrong
520
+ // it('formApi-setValue with array field path, 3 -> 2, delete some field', done => {
521
+ // const fields = ({ formState, values }) => {
522
+ // return values.a && values.a.map((item, i) => (
523
+ // <div key={item.key} style={{ width: 300 }}>
524
+ // <Form.Input field={`a[${i}].name`} />
525
+ // <Form.Input field={`a[${i}].type`} />
526
+ // </div>
527
+ // ));
528
+ // };
529
+ // let formApi = null;
530
+ // const props = {
531
+ // children: fields,
532
+ // initValues: {
533
+ // a: [
534
+ // { name: '0-name', type: '0-type', key: 0 },
535
+ // { name: '1-name', type: '1-type', key: 1 },
536
+ // { name: '2-name', type: '2-type', key: 2 },
537
+ // ]
538
+ // },
539
+ // getFormApi: api => {
540
+ // formApi = api;
541
+ // },
542
+ // };
543
+ // let form = getForm(props);
544
+ // // remove middle one
545
+ // formApi.setValue('a', [
546
+ // { name: '0-name', type: '0-type', key: 0 },
547
+ // { name: '2-name', type: '2-type', key: 2 },
548
+ // ]);
549
+ // let formStateValues = formApi.getValue();
550
+ // form.update();
551
+
552
+ // setTimeout(() => {
553
+ // // check dom render
554
+ // expect(getDomValue('a[0].name', form)).toEqual('0-name');
555
+ // expect(getDomValue('a[0].type', form)).toEqual('0-type');
556
+ // expect(getDomValue('a[1].name', form)).toEqual('2-name');
557
+ // expect(getDomValue('a[1].type', form)).toEqual('2-type');
558
+
559
+ // expect(form.exists(`[x-field-id="a[2].name"] input`)).toEqual(false);
560
+ // expect(form.exists(`[x-field-id="a[2].type"] input`)).toEqual(false);
561
+ // done();
562
+ // }, 5000);
563
+ // });
564
+
565
+ it('formApi-setValue with array field path, 1 -> 3, add some field', () => {
566
+ const fields = ({ formState, values }) => {
567
+ return values.a && values.a.map((effect, i) => (
568
+ <div key={effect.key}>
569
+ <Form.Input field={`a[${i}].name`} />
570
+ <Form.Input field={`a[${i}].type`} />
571
+ </div>
572
+ ));
573
+ };
574
+ let formApi = null;
575
+ const props = {
576
+ children: fields,
577
+ initValues: {
578
+ a: [{ name: 'semi', type: 'design' }]
579
+ },
580
+ getFormApi: api => {
581
+ formApi = api;
582
+ },
583
+ };
584
+ let form = getForm(props);
585
+ formApi.setValue('a', [
586
+ { name: '0-name', type: '0-type' },
587
+ { name: '1-name', type: '1-type' },
588
+ { name: '2-name', type: '2-type' },
589
+ ]);
590
+ let formStateValues = formApi.getValue();
591
+ form.update();
592
+ // check dom render
593
+ expect(getDomValue('a[0].name', form)).toEqual('0-name');
594
+ expect(getDomValue('a[0].type', form)).toEqual('0-type');
595
+ expect(getDomValue('a[1].name', form)).toEqual('1-name');
596
+ expect(getDomValue('a[1].type', form)).toEqual('1-type');
597
+ expect(getDomValue('a[2].name', form)).toEqual('2-name');
598
+ expect(getDomValue('a[2].type', form)).toEqual('2-type');
599
+ });
600
+
419
601
  // it('formApi-submitForm', () => {
420
602
  // // submit should call validate first
421
603
  // });
@@ -24,9 +24,9 @@ class ArrayDemo extends React.Component {
24
24
  this.state = {
25
25
  initValues: {
26
26
  effects: [
27
- { name: '脸部贴纸', type: '2D', key: 0 },
28
- { name: '美妆', type: '2D', key: 1 },
29
- { name: '前景贴纸', type: '3D', key: 2 },
27
+ { name: '1-name', type: '1-type', key: 0 },
28
+ { name: '2-name', type: '2-type', key: 1 },
29
+ { name: '3-name', type: '3-type', key: 2 },
30
30
  ]
31
31
  }
32
32
  };
@@ -59,10 +59,7 @@ class ArrayDemo extends React.Component {
59
59
  return values.effects && values.effects.map((effect, i) => (
60
60
  <div key={effect.key} style={{ width: 1000, display: 'flex' }}>
61
61
  <Form.Input field={`effects[${i}].name`} style={{ width: 200, marginRight: 16 }} />
62
- <Form.Select field={`effects[${i}].type`} style={{ width: 90 }}>
63
- <Form.Select.Option value="2D">2D</Form.Select.Option>
64
- <Form.Select.Option value="3D">3D</Form.Select.Option>
65
- </Form.Select>
62
+ <Form.Input field={`effects[${i}].type`} style={{ width: 90 }} />
66
63
  <Button type="danger" onClick={() => this.remove(effect.key)} style={{ margin: 16 }}>Remove</Button>
67
64
  </div>
68
65
  ));
@@ -98,7 +98,7 @@ class AssistComponent extends React.Component {
98
98
  我是Semi Form SlotB, 我的Label Align、Width与众不同
99
99
  </div>
100
100
  </Form.Slot>
101
- </Form>,
101
+ </Form>
102
102
  <Form.Slot
103
103
  label={{
104
104
  text: 'SlotB',
@@ -117,7 +117,7 @@ class AssistComponent extends React.Component {
117
117
  >
118
118
  我是Slot,我并没有被Form包裹,我是单独使用的
119
119
  </div>
120
- </Form.Slot>,
120
+ </Form.Slot>
121
121
  </>
122
122
  );
123
123
  }
@@ -195,7 +195,7 @@ class BasicDemoWithInit extends Component {
195
195
  initValues={formInitValue}
196
196
  onReset={this.handleReset}
197
197
  onValueChange={(v)=>console.log(v)}
198
- style={{ padding: '10px', width: 600 }}
198
+ style={{ padding: '10px', width: 900 }}
199
199
  autoScrollToError
200
200
  aria-label='Demo Form'
201
201
  id='demo-form-id'
@@ -341,6 +341,23 @@ class BasicDemoWithInit extends Component {
341
341
  <Form.Switch field='switch' label='开关(Switch)'/>
342
342
  </Col>
343
343
  </Row>
344
+ <Form.CheckboxGroup field="cardCheckbox" label='卡片选择' style={{ width: '90%' }} type='card' initValue={['1', '3']} direction={'horizontal'} aria-label="CheckboxGroup 示例">
345
+ <Form.Checkbox value={'1'} disabled extra='Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统' style={{width:280}}>
346
+ 单选框标题
347
+ </Form.Checkbox>
348
+ <Form.Checkbox value={'2'} disabled extra='Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统' style={{width:280}}>
349
+ 单选框标题
350
+ </Form.Checkbox>
351
+ </Form.CheckboxGroup>
352
+ <Row>
353
+ <Col span={12}>
354
+ <Form.RadioGroup field='buttonRadio' type='button' buttonSize='middle' defaultValue={1} aria-label="单选组合示例">
355
+ <Radio value={1}>即时推送</Radio>
356
+ <Radio value={2}>定时推送</Radio>
357
+ <Radio value={3}>动态推送</Radio>
358
+ </Form.RadioGroup>
359
+ </Col>
360
+ </Row>
344
361
  </Form.Section>
345
362
  <Form.Checkbox value="false" field="agree" useOutSideGroup={true} noLabel={true}>
346
363
  我已阅读并清楚相关规定
@@ -158,6 +158,12 @@ FormApiSetValueUsingFieldParentPath.story = {
158
158
  name: 'formApi-setValue using field parent path',
159
159
  };
160
160
 
161
+ export const UseFormApiSetValueUpdateArray = () => <ArrayDemo />;
162
+
163
+ UseFormApiSetValueUpdateArray.story = {
164
+ name: 'formApi-setValue set array',
165
+ };
166
+
161
167
  export const DynamicAddRemoveField = () => (
162
168
  <Form>
163
169
  {({ formState }) => (
@@ -209,12 +215,6 @@ _ArrayFieldCollapseDemo.story = {
209
215
  name: 'ArrayField-CollapseDemo',
210
216
  };
211
217
 
212
- export const ArrayFieldDynamicUpdate = () => <ArrayDemo />;
213
-
214
- ArrayFieldDynamicUpdate.story = {
215
- name: 'ArrayField-dynamic update',
216
- };
217
-
218
218
  export const LinkField = () => <LinkFieldForm />;
219
219
 
220
220
  LinkField.story = {
package/form/baseForm.tsx CHANGED
@@ -160,8 +160,8 @@ class Form extends BaseComponent<BaseFormProps, BaseFormState> {
160
160
  notifySubmitFail: (errors: ErrorMsg, values: any) => {
161
161
  this.props.onSubmitFail(errors, values);
162
162
  },
163
- forceUpdate: () => {
164
- this.forceUpdate();
163
+ forceUpdate: (callback?: () => void) => {
164
+ this.forceUpdate(callback);
165
165
  },
166
166
  notifyChange: (formState: FormState) => {
167
167
  this.props.onChange(formState);
@@ -113,7 +113,7 @@ declare class AutoComplete<T extends AutoCompleteItems> extends BaseComponent<Au
113
113
  onBlur: PropTypes.Requireable<(...args: any[]) => any>;
114
114
  onFocus: PropTypes.Requireable<(...args: any[]) => any>;
115
115
  onChange: PropTypes.Requireable<(...args: any[]) => any>;
116
- position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver">;
116
+ position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver" | "leftBottomOver" | "rightBottomOver">;
117
117
  placeholder: PropTypes.Requireable<string>;
118
118
  prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
119
119
  onChangeWithObject: PropTypes.Requireable<boolean>;
@@ -46,15 +46,15 @@ export default class Button extends PureComponent<ButtonProps> {
46
46
  disabled: PropTypes.Requireable<boolean>;
47
47
  prefixCls: PropTypes.Requireable<string>;
48
48
  style: PropTypes.Requireable<object>;
49
- size: PropTypes.Requireable<unknown>;
50
- type: PropTypes.Requireable<unknown>;
49
+ size: PropTypes.Requireable<"default" | "small" | "large">;
50
+ type: PropTypes.Requireable<"warning" | "primary" | "tertiary" | "secondary" | "danger">;
51
51
  block: PropTypes.Requireable<boolean>;
52
52
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
53
53
  onMouseDown: PropTypes.Requireable<(...args: any[]) => any>;
54
54
  circle: PropTypes.Requireable<boolean>;
55
55
  loading: PropTypes.Requireable<boolean>;
56
- htmlType: PropTypes.Requireable<unknown>;
57
- theme: PropTypes.Requireable<unknown>;
56
+ htmlType: PropTypes.Requireable<"button" | "reset" | "submit">;
57
+ theme: PropTypes.Requireable<"solid" | "light" | "borderless">;
58
58
  className: PropTypes.Requireable<string>;
59
59
  onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
60
60
  onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
@@ -16,8 +16,8 @@ export default class ButtonGroup extends BaseComponent<ButtonGroupProps> {
16
16
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
17
17
  disabled: PropTypes.Requireable<boolean>;
18
18
  type: PropTypes.Requireable<string>;
19
- size: PropTypes.Requireable<unknown>;
20
- theme: PropTypes.Requireable<unknown>;
19
+ size: PropTypes.Requireable<"default" | "small" | "large">;
20
+ theme: PropTypes.Requireable<"solid" | "light" | "borderless">;
21
21
  'aria-label': PropTypes.Requireable<string>;
22
22
  };
23
23
  static defaultProps: {
@@ -1,11 +1,10 @@
1
1
  import React from 'react';
2
- import { ButtonProps as BaseButtonProps } from './Button';
3
2
  import { IconButtonProps } from '../iconButton';
4
3
  export { ButtonProps as BaseButtonProps, HtmlType, Size, Theme, Type } from './Button';
5
4
  export { HorizontalPaddingType } from '../iconButton';
6
5
  export { ButtonGroupProps } from './buttonGroup';
7
6
  export { SplitButtonGroupProps } from './splitButtonGroup';
8
- export interface ButtonProps extends IconButtonProps, BaseButtonProps {
7
+ export interface ButtonProps extends IconButtonProps {
9
8
  }
10
9
  declare class Button extends React.PureComponent<ButtonProps> {
11
10
  static propTypes: {
@@ -18,18 +17,18 @@ declare class Button extends React.PureComponent<ButtonProps> {
18
17
  noHorizontalPadding: import("prop-types").Requireable<string | boolean | any[]>;
19
18
  children: import("prop-types").Requireable<import("prop-types").ReactNodeLike>;
20
19
  theme: import("prop-types").Requireable<string>;
21
- iconPosition: import("prop-types").Requireable<unknown>;
20
+ iconPosition: import("prop-types").Requireable<"left" | "right">;
22
21
  className: import("prop-types").Requireable<string>;
23
22
  onMouseEnter: import("prop-types").Requireable<(...args: any[]) => any>;
24
23
  onMouseLeave: import("prop-types").Requireable<(...args: any[]) => any>;
25
24
  disabled: import("prop-types").Requireable<boolean>;
26
- size: import("prop-types").Requireable<unknown>;
27
- type: import("prop-types").Requireable<unknown>;
25
+ size: import("prop-types").Requireable<"default" | "small" | "large">;
26
+ type: import("prop-types").Requireable<"warning" | "primary" | "tertiary" | "secondary" | "danger">;
28
27
  block: import("prop-types").Requireable<boolean>;
29
28
  onClick: import("prop-types").Requireable<(...args: any[]) => any>;
30
29
  onMouseDown: import("prop-types").Requireable<(...args: any[]) => any>;
31
30
  circle: import("prop-types").Requireable<boolean>;
32
- htmlType: import("prop-types").Requireable<unknown>;
31
+ htmlType: import("prop-types").Requireable<"button" | "reset" | "submit">;
33
32
  'aria-label': import("prop-types").Requireable<string>;
34
33
  };
35
34
  constructor(props?: {});
@@ -42,6 +42,8 @@ var _isString2 = _interopRequireDefault(require("lodash/isString"));
42
42
 
43
43
  var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
44
44
 
45
+ var _isSet2 = _interopRequireDefault(require("lodash/isSet"));
46
+
45
47
  var _react = _interopRequireWildcard(require("react"));
46
48
 
47
49
  var _reactDom = _interopRequireDefault(require("react-dom"));
@@ -776,6 +778,10 @@ class Cascader extends _baseComponent.default {
776
778
  realKeys = formatKeys;
777
779
  }
778
780
 
781
+ if ((0, _isSet2.default)(realKeys)) {
782
+ realKeys = [...realKeys];
783
+ }
784
+
779
785
  const calRes = (0, _treeUtil.calcCheckedKeys)((0, _flatten2.default)(realKeys), keyEntities);
780
786
  const checkedKeys = new _set.default(calRes.checkedKeys);
781
787
  const halfCheckedKeys = new _set.default(calRes.halfCheckedKeys); // disableStrictly
@@ -434,6 +434,10 @@ class DatePicker extends _baseComponent.default {
434
434
 
435
435
  if (prevProps.open !== this.props.open) {
436
436
  this.foundation.initPanelOpenStatus();
437
+
438
+ if (!this.props.open) {
439
+ this.foundation.clearRangeInputFocus();
440
+ }
437
441
  }
438
442
  }
439
443
 
@@ -58,7 +58,7 @@ declare class Dropdown extends BaseComponent<DropdownProps, DropdownState> {
58
58
  render: PropTypes.Requireable<PropTypes.ReactNodeLike>;
59
59
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
60
60
  visible: PropTypes.Requireable<boolean>;
61
- position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver">;
61
+ position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver" | "leftBottomOver" | "rightBottomOver">;
62
62
  getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
63
63
  mouseEnterDelay: PropTypes.Requireable<number>;
64
64
  mouseLeaveDelay: PropTypes.Requireable<number>;
@@ -80,7 +80,7 @@ declare class Form extends BaseComponent<BaseFormProps, BaseFormState> {
80
80
  emptyContent?: React.ReactNode;
81
81
  onDropdownVisibleChange?: (visible: boolean) => void;
82
82
  zIndex?: number;
83
- position?: "top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver";
83
+ position?: "top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver" | "leftBottomOver" | "rightBottomOver";
84
84
  onSearch?: (value: string) => void;
85
85
  dropdownClassName?: string;
86
86
  dropdownStyle?: React.CSSProperties;
@@ -115,8 +115,8 @@ class Form extends _baseComponent.default {
115
115
  notifySubmitFail: (errors, values) => {
116
116
  this.props.onSubmitFail(errors, values);
117
117
  },
118
- forceUpdate: () => {
119
- this.forceUpdate();
118
+ forceUpdate: callback => {
119
+ this.forceUpdate(callback);
120
120
  },
121
121
  notifyChange: formState => {
122
122
  this.props.onChange(formState);
@@ -28,7 +28,7 @@ declare const FormSelect: import("react").ComponentType<import("utility-types").
28
28
  emptyContent?: import("react").ReactNode;
29
29
  onDropdownVisibleChange?: (visible: boolean) => void;
30
30
  zIndex?: number;
31
- position?: "top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver";
31
+ position?: "top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver" | "leftBottomOver" | "rightBottomOver";
32
32
  onSearch?: (value: string) => void;
33
33
  dropdownClassName?: string;
34
34
  dropdownStyle?: import("react").CSSProperties;
@@ -19,7 +19,7 @@ export interface IconButtonProps extends ButtonProps {
19
19
  }
20
20
  declare class IconButton extends PureComponent<IconButtonProps> {
21
21
  static defaultProps: {
22
- iconPosition: any;
22
+ iconPosition: "left";
23
23
  prefixCls: string;
24
24
  loading: boolean;
25
25
  noHorizontalPadding: boolean;
@@ -36,7 +36,7 @@ declare class IconButton extends PureComponent<IconButtonProps> {
36
36
  noHorizontalPadding: PropTypes.Requireable<string | boolean | any[]>;
37
37
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
38
38
  theme: PropTypes.Requireable<string>;
39
- iconPosition: PropTypes.Requireable<unknown>;
39
+ iconPosition: PropTypes.Requireable<"left" | "right">;
40
40
  className: PropTypes.Requireable<string>;
41
41
  onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
42
42
  onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
@@ -165,7 +165,7 @@ declare class Select extends BaseComponent<SelectProps, SelectState> {
165
165
  emptyContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
166
166
  onDropdownVisibleChange: PropTypes.Requireable<(...args: any[]) => any>;
167
167
  zIndex: PropTypes.Requireable<number>;
168
- position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver">;
168
+ position: PropTypes.Requireable<"top" | "topLeft" | "topRight" | "left" | "leftTop" | "leftBottom" | "right" | "rightTop" | "rightBottom" | "bottom" | "bottomLeft" | "bottomRight" | "leftTopOver" | "rightTopOver" | "leftBottomOver" | "rightBottomOver">;
169
169
  onSearch: PropTypes.Requireable<(...args: any[]) => any>;
170
170
  getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
171
171
  dropdownClassName: PropTypes.Requireable<string>;
@@ -243,8 +243,8 @@ declare class Select extends BaseComponent<SelectProps, SelectState> {
243
243
  renderOption(option: OptionProps, optionIndex: number, style?: React.CSSProperties): any;
244
244
  renderCreateOption(option: OptionProps, isFocused: boolean, optionIndex: number, style: React.CSSProperties): JSX.Element;
245
245
  onOptionHover(optionIndex: number): void;
246
- renderWithGroup(visibileOptions: OptionProps[]): JSX.Element[];
247
- renderVirtualizeList(visibileOptions: OptionProps[]): JSX.Element;
246
+ renderWithGroup(visibleOptions: OptionProps[]): JSX.Element[];
247
+ renderVirtualizeList(visibleOptions: OptionProps[]): JSX.Element;
248
248
  renderOptions(children?: React.ReactNode): JSX.Element;
249
249
  renderSingleSelection(selections: Map<OptionProps['label'], any>, filterable: boolean): JSX.Element;
250
250
  renderMultipleSelection(selections: Map<OptionProps['label'], any>, filterable: boolean): JSX.Element;