@douyinfe/semi-ui 2.4.0 → 2.5.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 (95) hide show
  1. package/cascader/__test__/cascader.test.js +24 -0
  2. package/cascader/_story/cascader.stories.js +73 -0
  3. package/cascader/index.tsx +5 -2
  4. package/datePicker/_story/v2/FixInputRangeFocus.jsx +25 -0
  5. package/datePicker/_story/v2/index.js +2 -1
  6. package/datePicker/datePicker.tsx +4 -0
  7. package/dist/css/semi.css +51 -27
  8. package/dist/css/semi.min.css +1 -1
  9. package/dist/umd/semi-ui.js +481 -182
  10. package/dist/umd/semi-ui.js.map +1 -1
  11. package/dist/umd/semi-ui.min.js +1 -1
  12. package/dist/umd/semi-ui.min.js.map +1 -1
  13. package/form/_story/demo.jsx +1 -0
  14. package/input/index.tsx +1 -0
  15. package/input/textarea.tsx +1 -1
  16. package/lib/cjs/autoComplete/index.d.ts +1 -1
  17. package/lib/cjs/cascader/index.js +6 -0
  18. package/lib/cjs/datePicker/datePicker.js +16 -8
  19. package/lib/cjs/dropdown/index.d.ts +1 -1
  20. package/lib/cjs/form/baseForm.d.ts +1 -1
  21. package/lib/cjs/form/field.d.ts +1 -1
  22. package/lib/cjs/input/index.js +2 -1
  23. package/lib/cjs/input/textarea.js +1 -1
  24. package/lib/cjs/select/index.d.ts +3 -3
  25. package/lib/cjs/select/index.js +32 -28
  26. package/lib/cjs/select/option.js +2 -2
  27. package/lib/cjs/select/virtualRow.js +2 -2
  28. package/lib/cjs/table/Table.d.ts +1 -1
  29. package/lib/cjs/table/Table.js +8 -2
  30. package/lib/cjs/table/interface.d.ts +1 -0
  31. package/lib/cjs/tabs/interface.d.ts +1 -1
  32. package/lib/cjs/timePicker/TimePicker.js +2 -1
  33. package/lib/cjs/tooltip/index.d.ts +1 -1
  34. package/lib/cjs/tooltip/index.js +6 -2
  35. package/lib/cjs/tree/index.d.ts +2 -0
  36. package/lib/cjs/tree/index.js +15 -8
  37. package/lib/cjs/treeSelect/index.d.ts +2 -0
  38. package/lib/cjs/treeSelect/index.js +64 -27
  39. package/lib/cjs/upload/fileCard.js +31 -22
  40. package/lib/cjs/upload/index.d.ts +6 -0
  41. package/lib/cjs/upload/index.js +15 -8
  42. package/lib/cjs/upload/interface.d.ts +8 -6
  43. package/lib/es/autoComplete/index.d.ts +1 -1
  44. package/lib/es/cascader/index.js +5 -0
  45. package/lib/es/datePicker/datePicker.js +16 -8
  46. package/lib/es/dropdown/index.d.ts +1 -1
  47. package/lib/es/form/baseForm.d.ts +1 -1
  48. package/lib/es/form/field.d.ts +1 -1
  49. package/lib/es/input/index.js +2 -1
  50. package/lib/es/input/textarea.js +1 -1
  51. package/lib/es/select/index.d.ts +3 -3
  52. package/lib/es/select/index.js +30 -26
  53. package/lib/es/select/option.js +2 -2
  54. package/lib/es/select/virtualRow.js +2 -2
  55. package/lib/es/table/Table.d.ts +1 -1
  56. package/lib/es/table/Table.js +10 -2
  57. package/lib/es/table/interface.d.ts +1 -0
  58. package/lib/es/tabs/interface.d.ts +1 -1
  59. package/lib/es/timePicker/TimePicker.js +2 -1
  60. package/lib/es/tooltip/index.d.ts +1 -1
  61. package/lib/es/tooltip/index.js +6 -2
  62. package/lib/es/tree/index.d.ts +2 -0
  63. package/lib/es/tree/index.js +15 -8
  64. package/lib/es/treeSelect/index.d.ts +2 -0
  65. package/lib/es/treeSelect/index.js +64 -27
  66. package/lib/es/upload/fileCard.js +31 -24
  67. package/lib/es/upload/index.d.ts +6 -0
  68. package/lib/es/upload/index.js +14 -8
  69. package/lib/es/upload/interface.d.ts +8 -6
  70. package/package.json +9 -8
  71. package/select/index.tsx +18 -19
  72. package/select/option.tsx +2 -2
  73. package/select/virtualRow.tsx +2 -2
  74. package/table/Table.tsx +7 -2
  75. package/table/_story/table.stories.js +1 -2
  76. package/table/_story/v2/FixedHeaderMerge/index.jsx +98 -0
  77. package/table/_story/v2/FixedResizable/index.jsx +114 -0
  78. package/table/_story/v2/defaultFilteredValue.tsx +123 -0
  79. package/table/_story/v2/index.js +5 -0
  80. package/table/interface.ts +1 -0
  81. package/tabs/interface.ts +1 -1
  82. package/timePicker/TimePicker.tsx +1 -0
  83. package/tooltip/__test__/tooltip.test.js +48 -4
  84. package/tooltip/_story/tooltip.stories.js +83 -1
  85. package/tooltip/index.tsx +4 -4
  86. package/tree/__test__/treeMultiple.test.js +94 -0
  87. package/tree/_story/tree.stories.js +169 -0
  88. package/tree/index.tsx +12 -5
  89. package/treeSelect/__test__/treeMultiple.test.js +94 -0
  90. package/treeSelect/_story/treeSelect.stories.js +242 -0
  91. package/treeSelect/index.tsx +72 -40
  92. package/upload/_story/upload.stories.js +22 -6
  93. package/upload/fileCard.tsx +23 -23
  94. package/upload/index.tsx +15 -6
  95. package/upload/interface.ts +7 -5
@@ -195,6 +195,30 @@ describe('Cascader', () => {
195
195
  // done();
196
196
  });
197
197
 
198
+ it('dynamic treeData in multiple and uncontrolled mode', () => {
199
+ const cascader = render({
200
+ defaultValue: 'Yazhou',
201
+ multiple: true,
202
+ });
203
+ const opt = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-cascader-selection-multiple .${BASE_CLASS_PREFIX}-tag`);
204
+ expect(opt.length).toEqual(1);
205
+ cascader.setProps({ treeData: treeDataWithDisabled });
206
+ cascader.update();
207
+ expect(opt.length).toEqual(1);
208
+ });
209
+
210
+ it('dynamic treeData in multiple and controlled mode', () => {
211
+ const cascader = render({
212
+ value: 'Yazhou',
213
+ multiple: true,
214
+ });
215
+ const opt = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-cascader-selection-multiple .${BASE_CLASS_PREFIX}-tag`);
216
+ expect(opt.length).toEqual(1);
217
+ cascader.setProps({ treeData: treeDataWithDisabled });
218
+ cascader.update();
219
+ expect(opt.length).toEqual(1);
220
+ });
221
+
198
222
  it('getPopupContainer', () => {
199
223
  let cascader = render({
200
224
  getPopupContainer: getPopupContainer,
@@ -1348,4 +1348,77 @@ export const LeafOnly = () => {
1348
1348
  />
1349
1349
  </div>
1350
1350
  );
1351
+ }
1352
+
1353
+ export const DynamicTreeData = () => {
1354
+ const [treeDataDemo1,setTreeData1]=useState(treeData2);
1355
+ const [treeDataDemo2,setTreeData2]=useState(treeData2);
1356
+ const [treeDataDemo3,setTreeData3]=useState(treeData2);
1357
+ const [treeDataDemo4,setTreeData4]=useState(treeData2);
1358
+ const [treeDataDemo5,setTreeData5]=useState(treeData2);
1359
+ const [value3,setValue3]=useState();
1360
+ const [value4,setValue4]=useState();
1361
+ return (
1362
+ <div>
1363
+ <div>多选 + 动态更新 tree</div>
1364
+ <Cascader
1365
+ style={{ width: 300 }}
1366
+ treeData={treeDataDemo1}
1367
+ multiple
1368
+ placeholder="请选择所在地区"
1369
+ />
1370
+ <Button onClick={()=>{setTreeData1(treeData3)}}>改变treeData</Button>
1371
+ <br />
1372
+ <br />
1373
+ <div>单选 + 动态更新 tree</div>
1374
+ <Cascader
1375
+ style={{ width: 300 }}
1376
+ treeData={treeDataDemo2}
1377
+ placeholder="请选择所在地区"
1378
+ />
1379
+ <Button onClick={()=>{setTreeData2(treeData3)}}>改变treeData</Button>
1380
+ <br />
1381
+ <br />
1382
+ <div>多选 + 动态更新 tree + 受控</div>
1383
+ <Cascader
1384
+ style={{ width: 300 }}
1385
+ treeData={treeDataDemo3}
1386
+ multiple
1387
+ value={value3}
1388
+ onChange={v=>{
1389
+ console.log(v);
1390
+ setValue3(v);
1391
+ }}
1392
+ placeholder="请选择所在地区"
1393
+ />
1394
+ <Button onClick={()=>{setTreeData3(treeData3)}}>改变treeData</Button>
1395
+ <br />
1396
+ <br />
1397
+ <div>单选 + 动态更新 tree + 受控</div>
1398
+ <Cascader
1399
+ style={{ width: 300 }}
1400
+ treeData={treeDataDemo4}
1401
+ value={value4}
1402
+ onChange={v=>{
1403
+ console.log(v);
1404
+ setValue4(v);
1405
+ }}
1406
+ placeholder="请选择所在地区"
1407
+ />
1408
+ <Button onClick={()=>{setTreeData4(treeData3)}}>改变treeData</Button>
1409
+ <br />
1410
+ <br />
1411
+ <div>多选 + 动态更新 tree + defaultValue 为亚洲</div>
1412
+ <Cascader
1413
+ style={{ width: 300 }}
1414
+ treeData={treeDataDemo5}
1415
+ multiple
1416
+ defaultValue='yazhou'
1417
+ placeholder="请选择所在地区"
1418
+ />
1419
+ <Button onClick={()=>{setTreeData5(treeData3)}}>改变treeData</Button>
1420
+ <br />
1421
+ <br />
1422
+ </div>
1423
+ );
1351
1424
  }
@@ -14,7 +14,7 @@ import CascaderFoundation, {
14
14
  } from '@douyinfe/semi-foundation/cascader/foundation';
15
15
  import { cssClasses, strings } from '@douyinfe/semi-foundation/cascader/constants';
16
16
  import { numbers as popoverNumbers } from '@douyinfe/semi-foundation/popover/constants';
17
- import { isEqual, isString, isEmpty, isFunction, isNumber, noop, flatten } from 'lodash';
17
+ import { isSet, isEqual, isString, isEmpty, isFunction, isNumber, noop, flatten } from 'lodash';
18
18
  import '@douyinfe/semi-foundation/cascader/cascader.scss';
19
19
  import { IconClear, IconChevronDown } from '@douyinfe/semi-icons';
20
20
  import { findKeysForValues, convertDataToEntities, calcMergeType } from '@douyinfe/semi-foundation/cascader/util';
@@ -426,7 +426,10 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
426
426
  });
427
427
  realKeys = formatKeys;
428
428
  }
429
- const calRes = calcCheckedKeys(flatten(realKeys as string[]), keyEntities);
429
+ if (isSet(realKeys)) {
430
+ realKeys = [...realKeys];
431
+ }
432
+ const calRes = calcCheckedKeys(flatten(realKeys), keyEntities);
430
433
  const checkedKeys = new Set(calRes.checkedKeys);
431
434
  const halfCheckedKeys = new Set(calRes.halfCheckedKeys);
432
435
  // disableStrictly
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { DatePicker, Button } from '../../../index';
3
+
4
+ /**
5
+ * fix gitlab #1375
6
+ */
7
+ App.storyName = 'fixed input range focus';
8
+ export default function App() {
9
+ const [visible, setVisible] = React.useState(false);
10
+ return (
11
+ <div>
12
+ {/* <Button onClick={() => { setVisible(false); }}>关闭</Button> */}
13
+ <DatePicker
14
+ type="dateTimeRange"
15
+ bottomSlot={<Button onClick={() => { setVisible(false); }}>关闭</Button>}
16
+ onFocus={() => {
17
+ console.log('focus');
18
+ setVisible(true);
19
+ }}
20
+ open={visible}
21
+ showClear
22
+ />
23
+ </div>
24
+ );
25
+ }
@@ -1,2 +1,3 @@
1
1
  export { default as YearButton } from './YearButton';
2
- export { default as PanelOpen } from './PanelOpen';
2
+ export { default as PanelOpen } from './PanelOpen';
3
+ export { default as FixInputRangeFocus } from './FixInputRangeFocus';
@@ -331,6 +331,9 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
331
331
 
332
332
  if (prevProps.open !== this.props.open) {
333
333
  this.foundation.initPanelOpenStatus();
334
+ if (!this.props.open) {
335
+ this.foundation.clearRangeInputFocus();
336
+ }
334
337
  }
335
338
  }
336
339
 
@@ -525,6 +528,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
525
528
  };
526
529
 
527
530
  return (
531
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events
528
532
  <div
529
533
  onClick={this.handleTriggerWrapperClick}
530
534
  className={inputCls}>
package/dist/css/semi.css CHANGED
@@ -2612,6 +2612,7 @@ body[theme-mode=dark], body .semi-always-dark {
2612
2612
  }
2613
2613
  .semi-cascader:hover {
2614
2614
  background-color: var(--semi-color-fill-1);
2615
+ border: 1px transparent solid;
2615
2616
  }
2616
2617
  .semi-cascader-small {
2617
2618
  min-height: 24px;
@@ -17485,6 +17486,7 @@ body[theme-mode=dark], body .semi-always-dark {
17485
17486
  }
17486
17487
  .semi-tagInput-hover {
17487
17488
  background-color: var(--semi-color-fill-1);
17489
+ border: 1px transparent solid;
17488
17490
  }
17489
17491
  .semi-tagInput-focus {
17490
17492
  background-color: var(--semi-color-fill-0);
@@ -19437,11 +19439,10 @@ p.semi-typography-extended,
19437
19439
  }
19438
19440
  .semi-upload[x-prompt-pos=left] .semi-upload-add {
19439
19441
  display: inline-flex;
19440
- order: 2;
19441
19442
  }
19442
19443
  .semi-upload[x-prompt-pos=left] .semi-upload-prompt {
19443
19444
  display: inline-flex;
19444
- order: 1;
19445
+ order: -1;
19445
19446
  }
19446
19447
  .semi-upload[x-prompt-pos=left] .semi-upload-file-list {
19447
19448
  order: 2;
@@ -19621,15 +19622,9 @@ p.semi-typography-extended,
19621
19622
  .semi-upload-picture[x-prompt-pos=bottom] .semi-upload-prompt {
19622
19623
  order: 1;
19623
19624
  }
19624
- .semi-upload-picture[x-prompt-pos=bottom] .semi-upload-add {
19625
- order: 0;
19626
- }
19627
19625
  .semi-upload-picture[x-prompt-pos=right] .semi-upload-prompt {
19628
19626
  order: 1;
19629
19627
  }
19630
- .semi-upload-picture[x-prompt-pos=right] .semi-upload-add {
19631
- order: 0;
19632
- }
19633
19628
  .semi-upload-picture-add {
19634
19629
  background-color: var(--semi-color-fill-0);
19635
19630
  height: 96px;
@@ -19641,7 +19636,6 @@ p.semi-typography-extended,
19641
19636
  border: 2px dashed var(--semi-color-border);
19642
19637
  color: var(--semi-color-tertiary);
19643
19638
  border-radius: var(--semi-border-radius-small);
19644
- order: 2;
19645
19639
  cursor: pointer;
19646
19640
  }
19647
19641
  .semi-upload-picture-add:hover {
@@ -19681,35 +19675,32 @@ p.semi-typography-extended,
19681
19675
  border-radius: var(--semi-border-radius-small);
19682
19676
  }
19683
19677
  .semi-upload-picture-file-card-close {
19684
- width: 16px;
19685
- height: 16px;
19686
- background-color: var(--semi-color-overlay-bg);
19678
+ visibility: hidden;
19679
+ display: inline-flex;
19687
19680
  position: absolute;
19688
19681
  top: 8px;
19689
19682
  right: 8px;
19690
- display: flex;
19691
- justify-content: center;
19692
- align-items: center;
19693
- display: none;
19694
19683
  border-radius: var(--semi-border-radius-circle);
19695
- color: white;
19696
19684
  cursor: pointer;
19697
19685
  transition: all 0s;
19698
19686
  }
19699
- .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-close {
19700
- display: flex;
19701
- }
19702
- .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-replace {
19703
- visibility: visible;
19687
+ .semi-upload-picture-file-card-icon-close {
19688
+ font-size: 16px;
19689
+ color: var(--semi-color-white);
19704
19690
  }
19705
- .semi-upload-picture-file-card .semi-progress-circle {
19691
+ .semi-upload-picture-file-card::before {
19692
+ visibility: hidden;
19693
+ background-color: var(--semi-color-overlay-bg);
19694
+ content: "";
19706
19695
  position: absolute;
19707
- top: 50%;
19708
- left: 50%;
19709
- transform: translate(-50%, -50%);
19696
+ left: 0;
19697
+ right: 0;
19698
+ top: 0;
19699
+ bottom: 0;
19710
19700
  }
19711
19701
  .semi-upload-picture-file-card-retry {
19712
- background-color: #fff;
19702
+ visibility: hidden;
19703
+ background-color: var(--semi-color-white);
19713
19704
  width: 24px;
19714
19705
  height: 24px;
19715
19706
  position: absolute;
@@ -19737,6 +19728,15 @@ p.semi-typography-extended,
19737
19728
  color: var(--semi-color-white);
19738
19729
  transform: translate3D(-50%, -50%, 0);
19739
19730
  }
19731
+ .semi-upload-picture-file-card-preview {
19732
+ visibility: hidden;
19733
+ display: inline-flex;
19734
+ position: absolute;
19735
+ cursor: pointer;
19736
+ top: 50%;
19737
+ left: 50%;
19738
+ transform: translate3D(-50%, -50%, 0);
19739
+ }
19740
19740
  .semi-upload-picture-file-card-pic-info {
19741
19741
  display: inline-flex;
19742
19742
  box-sizing: border-box;
@@ -19768,6 +19768,30 @@ p.semi-typography-extended,
19768
19768
  .semi-upload-picture-file-card-error {
19769
19769
  outline: 1px solid var(--semi-color-danger);
19770
19770
  }
19771
+ .semi-upload-picture-file-card:hover::before {
19772
+ visibility: visible;
19773
+ }
19774
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-close {
19775
+ visibility: visible;
19776
+ }
19777
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-replace {
19778
+ visibility: visible;
19779
+ }
19780
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-retry {
19781
+ visibility: visible;
19782
+ }
19783
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-preview {
19784
+ visibility: visible;
19785
+ }
19786
+ .semi-upload-picture-file-card-uploading::before {
19787
+ visibility: visible;
19788
+ }
19789
+ .semi-upload-picture-file-card .semi-progress-circle {
19790
+ position: absolute;
19791
+ top: 50%;
19792
+ left: 50%;
19793
+ transform: translate(-50%, -50%);
19794
+ }
19771
19795
  .semi-upload-drag-area {
19772
19796
  border-radius: var(--semi-border-radius-small);
19773
19797
  border: 2px dashed var(--semi-color-border);