@douyinfe/semi-ui 2.4.1 → 2.5.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 (69) 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/dist/css/semi.css +50 -27
  5. package/dist/css/semi.min.css +1 -1
  6. package/dist/umd/semi-ui.js +398 -139
  7. package/dist/umd/semi-ui.js.map +1 -1
  8. package/dist/umd/semi-ui.min.js +1 -1
  9. package/dist/umd/semi-ui.min.js.map +1 -1
  10. package/lib/cjs/autoComplete/index.d.ts +1 -1
  11. package/lib/cjs/cascader/index.js +6 -0
  12. package/lib/cjs/dropdown/index.d.ts +1 -1
  13. package/lib/cjs/form/baseForm.d.ts +1 -1
  14. package/lib/cjs/form/field.d.ts +1 -1
  15. package/lib/cjs/select/index.d.ts +1 -1
  16. package/lib/cjs/select/option.js +2 -2
  17. package/lib/cjs/table/Table.d.ts +1 -1
  18. package/lib/cjs/table/Table.js +8 -2
  19. package/lib/cjs/table/interface.d.ts +1 -0
  20. package/lib/cjs/tabs/interface.d.ts +1 -1
  21. package/lib/cjs/tooltip/index.d.ts +1 -1
  22. package/lib/cjs/tree/index.d.ts +2 -0
  23. package/lib/cjs/tree/index.js +15 -8
  24. package/lib/cjs/treeSelect/index.d.ts +2 -0
  25. package/lib/cjs/treeSelect/index.js +64 -27
  26. package/lib/cjs/upload/fileCard.js +31 -22
  27. package/lib/cjs/upload/index.d.ts +6 -0
  28. package/lib/cjs/upload/index.js +15 -8
  29. package/lib/cjs/upload/interface.d.ts +8 -6
  30. package/lib/es/autoComplete/index.d.ts +1 -1
  31. package/lib/es/cascader/index.js +5 -0
  32. package/lib/es/dropdown/index.d.ts +1 -1
  33. package/lib/es/form/baseForm.d.ts +1 -1
  34. package/lib/es/form/field.d.ts +1 -1
  35. package/lib/es/select/index.d.ts +1 -1
  36. package/lib/es/select/option.js +2 -2
  37. package/lib/es/table/Table.d.ts +1 -1
  38. package/lib/es/table/Table.js +10 -2
  39. package/lib/es/table/interface.d.ts +1 -0
  40. package/lib/es/tabs/interface.d.ts +1 -1
  41. package/lib/es/tooltip/index.d.ts +1 -1
  42. package/lib/es/tree/index.d.ts +2 -0
  43. package/lib/es/tree/index.js +15 -8
  44. package/lib/es/treeSelect/index.d.ts +2 -0
  45. package/lib/es/treeSelect/index.js +64 -27
  46. package/lib/es/upload/fileCard.js +31 -24
  47. package/lib/es/upload/index.d.ts +6 -0
  48. package/lib/es/upload/index.js +14 -8
  49. package/lib/es/upload/interface.d.ts +8 -6
  50. package/package.json +9 -9
  51. package/select/option.tsx +2 -2
  52. package/table/Table.tsx +7 -2
  53. package/table/_story/table.stories.js +1 -2
  54. package/table/_story/v2/FixedHeaderMerge/index.jsx +98 -0
  55. package/table/_story/v2/defaultFilteredValue.tsx +123 -0
  56. package/table/_story/v2/index.js +4 -0
  57. package/table/interface.ts +1 -0
  58. package/tabs/interface.ts +1 -1
  59. package/tooltip/_story/tooltip.stories.js +83 -1
  60. package/tree/__test__/treeMultiple.test.js +94 -0
  61. package/tree/_story/tree.stories.js +169 -0
  62. package/tree/index.tsx +12 -5
  63. package/treeSelect/__test__/treeMultiple.test.js +94 -0
  64. package/treeSelect/_story/treeSelect.stories.js +242 -0
  65. package/treeSelect/index.tsx +72 -40
  66. package/upload/_story/upload.stories.js +22 -6
  67. package/upload/fileCard.tsx +23 -23
  68. package/upload/index.tsx +15 -6
  69. 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
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;
@@ -19438,11 +19439,10 @@ p.semi-typography-extended,
19438
19439
  }
19439
19440
  .semi-upload[x-prompt-pos=left] .semi-upload-add {
19440
19441
  display: inline-flex;
19441
- order: 2;
19442
19442
  }
19443
19443
  .semi-upload[x-prompt-pos=left] .semi-upload-prompt {
19444
19444
  display: inline-flex;
19445
- order: 1;
19445
+ order: -1;
19446
19446
  }
19447
19447
  .semi-upload[x-prompt-pos=left] .semi-upload-file-list {
19448
19448
  order: 2;
@@ -19622,15 +19622,9 @@ p.semi-typography-extended,
19622
19622
  .semi-upload-picture[x-prompt-pos=bottom] .semi-upload-prompt {
19623
19623
  order: 1;
19624
19624
  }
19625
- .semi-upload-picture[x-prompt-pos=bottom] .semi-upload-add {
19626
- order: 0;
19627
- }
19628
19625
  .semi-upload-picture[x-prompt-pos=right] .semi-upload-prompt {
19629
19626
  order: 1;
19630
19627
  }
19631
- .semi-upload-picture[x-prompt-pos=right] .semi-upload-add {
19632
- order: 0;
19633
- }
19634
19628
  .semi-upload-picture-add {
19635
19629
  background-color: var(--semi-color-fill-0);
19636
19630
  height: 96px;
@@ -19642,7 +19636,6 @@ p.semi-typography-extended,
19642
19636
  border: 2px dashed var(--semi-color-border);
19643
19637
  color: var(--semi-color-tertiary);
19644
19638
  border-radius: var(--semi-border-radius-small);
19645
- order: 2;
19646
19639
  cursor: pointer;
19647
19640
  }
19648
19641
  .semi-upload-picture-add:hover {
@@ -19682,35 +19675,32 @@ p.semi-typography-extended,
19682
19675
  border-radius: var(--semi-border-radius-small);
19683
19676
  }
19684
19677
  .semi-upload-picture-file-card-close {
19685
- width: 16px;
19686
- height: 16px;
19687
- background-color: var(--semi-color-overlay-bg);
19678
+ visibility: hidden;
19679
+ display: inline-flex;
19688
19680
  position: absolute;
19689
19681
  top: 8px;
19690
19682
  right: 8px;
19691
- display: flex;
19692
- justify-content: center;
19693
- align-items: center;
19694
- display: none;
19695
19683
  border-radius: var(--semi-border-radius-circle);
19696
- color: white;
19697
19684
  cursor: pointer;
19698
19685
  transition: all 0s;
19699
19686
  }
19700
- .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-close {
19701
- display: flex;
19702
- }
19703
- .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-replace {
19704
- visibility: visible;
19687
+ .semi-upload-picture-file-card-icon-close {
19688
+ font-size: 16px;
19689
+ color: var(--semi-color-white);
19705
19690
  }
19706
- .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: "";
19707
19695
  position: absolute;
19708
- top: 50%;
19709
- left: 50%;
19710
- transform: translate(-50%, -50%);
19696
+ left: 0;
19697
+ right: 0;
19698
+ top: 0;
19699
+ bottom: 0;
19711
19700
  }
19712
19701
  .semi-upload-picture-file-card-retry {
19713
- background-color: #fff;
19702
+ visibility: hidden;
19703
+ background-color: var(--semi-color-white);
19714
19704
  width: 24px;
19715
19705
  height: 24px;
19716
19706
  position: absolute;
@@ -19738,6 +19728,15 @@ p.semi-typography-extended,
19738
19728
  color: var(--semi-color-white);
19739
19729
  transform: translate3D(-50%, -50%, 0);
19740
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
+ }
19741
19740
  .semi-upload-picture-file-card-pic-info {
19742
19741
  display: inline-flex;
19743
19742
  box-sizing: border-box;
@@ -19769,6 +19768,30 @@ p.semi-typography-extended,
19769
19768
  .semi-upload-picture-file-card-error {
19770
19769
  outline: 1px solid var(--semi-color-danger);
19771
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
+ }
19772
19795
  .semi-upload-drag-area {
19773
19796
  border-radius: var(--semi-border-radius-small);
19774
19797
  border: 2px dashed var(--semi-color-border);