@douyinfe/semi-foundation 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 (75) hide show
  1. package/cascader/cascader.scss +1 -0
  2. package/cascader/variables.scss +4 -2
  3. package/datePicker/foundation.ts +12 -0
  4. package/lib/cjs/autoComplete/constants.d.ts +1 -1
  5. package/lib/cjs/cascader/cascader.css +1 -0
  6. package/lib/cjs/cascader/cascader.scss +1 -0
  7. package/lib/cjs/cascader/variables.scss +4 -2
  8. package/lib/cjs/datePicker/foundation.d.ts +5 -0
  9. package/lib/cjs/datePicker/foundation.js +18 -0
  10. package/lib/cjs/dropdown/constants.d.ts +1 -1
  11. package/lib/cjs/select/constants.d.ts +1 -1
  12. package/lib/cjs/select/foundation.d.ts +1 -1
  13. package/lib/cjs/select/foundation.js +2 -1
  14. package/lib/cjs/select/optionFoundation.d.ts +1 -1
  15. package/lib/cjs/select/optionFoundation.js +3 -3
  16. package/lib/cjs/slider/foundation.js +2 -2
  17. package/lib/cjs/table/foundation.d.ts +2 -0
  18. package/lib/cjs/table/foundation.js +16 -4
  19. package/lib/cjs/table/utils.js +4 -1
  20. package/lib/cjs/tagInput/tagInput.css +1 -0
  21. package/lib/cjs/tagInput/tagInput.scss +3 -2
  22. package/lib/cjs/tagInput/variables.scss +8 -2
  23. package/lib/cjs/tooltip/constants.d.ts +1 -1
  24. package/lib/cjs/tooltip/constants.js +1 -1
  25. package/lib/cjs/tooltip/foundation.js +65 -4
  26. package/lib/cjs/tree/foundation.d.ts +4 -1
  27. package/lib/cjs/tree/foundation.js +69 -20
  28. package/lib/cjs/treeSelect/foundation.d.ts +3 -3
  29. package/lib/cjs/treeSelect/foundation.js +103 -35
  30. package/lib/cjs/upload/upload.css +49 -27
  31. package/lib/cjs/upload/upload.scss +66 -41
  32. package/lib/cjs/upload/variables.scss +3 -1
  33. package/lib/es/autoComplete/constants.d.ts +1 -1
  34. package/lib/es/cascader/cascader.css +1 -0
  35. package/lib/es/cascader/cascader.scss +1 -0
  36. package/lib/es/cascader/variables.scss +4 -2
  37. package/lib/es/datePicker/foundation.d.ts +5 -0
  38. package/lib/es/datePicker/foundation.js +18 -0
  39. package/lib/es/dropdown/constants.d.ts +1 -1
  40. package/lib/es/select/constants.d.ts +1 -1
  41. package/lib/es/select/foundation.d.ts +1 -1
  42. package/lib/es/select/foundation.js +2 -1
  43. package/lib/es/select/optionFoundation.d.ts +1 -1
  44. package/lib/es/select/optionFoundation.js +3 -3
  45. package/lib/es/slider/foundation.js +2 -2
  46. package/lib/es/table/foundation.d.ts +2 -0
  47. package/lib/es/table/foundation.js +16 -4
  48. package/lib/es/table/utils.js +4 -1
  49. package/lib/es/tagInput/tagInput.css +1 -0
  50. package/lib/es/tagInput/tagInput.scss +3 -2
  51. package/lib/es/tagInput/variables.scss +8 -2
  52. package/lib/es/tooltip/constants.d.ts +1 -1
  53. package/lib/es/tooltip/constants.js +1 -1
  54. package/lib/es/tooltip/foundation.js +65 -4
  55. package/lib/es/tree/foundation.d.ts +4 -1
  56. package/lib/es/tree/foundation.js +69 -20
  57. package/lib/es/treeSelect/foundation.d.ts +3 -3
  58. package/lib/es/treeSelect/foundation.js +102 -35
  59. package/lib/es/upload/upload.css +49 -27
  60. package/lib/es/upload/upload.scss +66 -41
  61. package/lib/es/upload/variables.scss +3 -1
  62. package/package.json +3 -3
  63. package/select/foundation.ts +3 -2
  64. package/select/optionFoundation.ts +3 -3
  65. package/slider/foundation.ts +2 -2
  66. package/table/foundation.ts +23 -10
  67. package/table/utils.ts +3 -1
  68. package/tagInput/tagInput.scss +3 -2
  69. package/tagInput/variables.scss +8 -2
  70. package/tooltip/constants.ts +2 -0
  71. package/tooltip/foundation.ts +52 -4
  72. package/tree/foundation.ts +56 -17
  73. package/treeSelect/foundation.ts +89 -41
  74. package/upload/upload.scss +66 -41
  75. package/upload/variables.scss +3 -1
@@ -112,6 +112,7 @@ class TreeFoundation extends _foundation.default {
112
112
  selectedKeys = [],
113
113
  checkedKeys = new _set.default([]),
114
114
  halfCheckedKeys = new _set.default([]),
115
+ realCheckedKeys = new _set.default([]),
115
116
  keyEntities = {},
116
117
  filteredKeys = new _set.default([]),
117
118
  inputValue = '',
@@ -121,13 +122,26 @@ class TreeFoundation extends _foundation.default {
121
122
  disabledKeys = new _set.default([])
122
123
  } = this.getStates();
123
124
  const {
124
- treeNodeFilterProp
125
+ treeNodeFilterProp,
126
+ checkRelation
125
127
  } = this.getProps();
126
128
  const entity = keyEntities[key];
127
129
  const notExist = !entity;
128
130
 
129
131
  if (notExist) {
130
132
  return null;
133
+ } // if checkRelation is invalid, the checked status of node will be false
134
+
135
+
136
+ let realChecked = false;
137
+ let realHalfChecked = false;
138
+
139
+ if (checkRelation === 'related') {
140
+ realChecked = checkedKeys.has(key);
141
+ realHalfChecked = halfCheckedKeys.has(key);
142
+ } else if (checkRelation === 'unRelated') {
143
+ realChecked = realCheckedKeys.has(key);
144
+ realHalfChecked = false;
131
145
  }
132
146
 
133
147
  const isSearching = Boolean(inputValue);
@@ -135,8 +149,8 @@ class TreeFoundation extends _foundation.default {
135
149
  eventKey: key,
136
150
  expanded: isSearching ? filteredExpandedKeys.has(key) : expandedKeys.has(key),
137
151
  selected: (0, _includes.default)(selectedKeys).call(selectedKeys, key),
138
- checked: checkedKeys.has(key),
139
- halfChecked: halfCheckedKeys.has(key),
152
+ checked: realChecked,
153
+ halfChecked: realHalfChecked,
140
154
  pos: String(entity ? entity.pos : ''),
141
155
  level: entity.level,
142
156
  filtered: filteredKeys.has(key),
@@ -168,10 +182,17 @@ class TreeFoundation extends _foundation.default {
168
182
  keyEntities
169
183
  } = this.getStates();
170
184
  const {
171
- leafOnly
185
+ leafOnly,
186
+ checkRelation
172
187
  } = this.getProps();
173
188
  let value;
174
- const keyList = (0, _treeUtil.normalizeKeyList)(key, keyEntities, leafOnly);
189
+ let keyList = [];
190
+
191
+ if (checkRelation === 'related') {
192
+ keyList = (0, _treeUtil.normalizeKeyList)(key, keyEntities, leafOnly);
193
+ } else if (checkRelation === 'unRelated') {
194
+ keyList = key;
195
+ }
175
196
 
176
197
  if (this.getProp('onChangeWithObject')) {
177
198
  value = (0, _map.default)(keyList).call(keyList, itemKey => keyEntities[itemKey].data);
@@ -376,30 +397,58 @@ class TreeFoundation extends _foundation.default {
376
397
 
377
398
  handleMultipleSelect(e, treeNode) {
378
399
  const {
379
- disableStrictly
380
- } = this.getProps(); // eventKey: The key value of the currently clicked node
400
+ disableStrictly,
401
+ checkRelation
402
+ } = this.getProps();
403
+ const {
404
+ realCheckedKeys
405
+ } = this.getStates(); // eventKey: The key value of the currently clicked node
381
406
 
382
407
  const {
383
408
  checked,
384
409
  eventKey,
385
410
  data
386
- } = treeNode; // Find the checked state of the current node
411
+ } = treeNode;
387
412
 
388
- const targetStatus = disableStrictly ? this.calcChekcedStatus(!checked, eventKey) : !checked;
389
- const {
390
- checkedKeys,
391
- halfCheckedKeys
392
- } = disableStrictly ? this.calcNonDisabedCheckedKeys(eventKey, targetStatus) : this.calcCheckedKeys(eventKey, targetStatus);
413
+ if (checkRelation === 'related') {
414
+ // Find the checked state of the current node
415
+ const targetStatus = disableStrictly ? this.calcChekcedStatus(!checked, eventKey) : !checked;
416
+ const {
417
+ checkedKeys,
418
+ halfCheckedKeys
419
+ } = disableStrictly ? this.calcNonDisabedCheckedKeys(eventKey, targetStatus) : this.calcCheckedKeys(eventKey, targetStatus);
393
420
 
394
- this._adapter.notifySelect(eventKey, targetStatus, data);
421
+ this._adapter.notifySelect(eventKey, targetStatus, data);
395
422
 
396
- this.notifyChange([...checkedKeys], e);
423
+ this.notifyChange([...checkedKeys], e);
397
424
 
398
- if (!this._isControlledComponent()) {
399
- this._adapter.updateState({
400
- checkedKeys,
401
- halfCheckedKeys
402
- });
425
+ if (!this._isControlledComponent()) {
426
+ this._adapter.updateState({
427
+ checkedKeys,
428
+ halfCheckedKeys
429
+ });
430
+ }
431
+ } else if (checkRelation === 'unRelated') {
432
+ const newRealCheckedKeys = new _set.default(realCheckedKeys);
433
+ let targetStatus;
434
+
435
+ if (realCheckedKeys.has(eventKey)) {
436
+ newRealCheckedKeys.delete(eventKey);
437
+ targetStatus = false;
438
+ } else {
439
+ newRealCheckedKeys.add(eventKey);
440
+ targetStatus = true;
441
+ }
442
+
443
+ this._adapter.notifySelect(eventKey, targetStatus, data);
444
+
445
+ this.notifyChange([...newRealCheckedKeys], e);
446
+
447
+ if (!this._isControlledComponent()) {
448
+ this._adapter.updateState({
449
+ realCheckedKeys: newRealCheckedKeys
450
+ });
451
+ }
403
452
  }
404
453
  }
405
454
 
@@ -27,7 +27,7 @@ export interface BasicOnChange {
27
27
  (node: BasicTreeNodeData[] | BasicTreeNodeData, e: any): void;
28
28
  (value: BasicTreeNodeData['value'] | Array<BasicTreeNodeData['value']>, node: BasicTreeNodeData[] | BasicTreeNodeData, e: any): void;
29
29
  }
30
- export interface BasicTreeSelectProps extends Pick<BasicTreeProps, 'virtualize' | 'renderFullLabel' | 'renderLabel' | 'autoExpandParent' | 'className' | 'defaultExpandAll' | 'defaultExpandedKeys' | 'defaultValue' | 'disabled' | 'emptyContent' | 'expandAction' | 'expandedKeys' | 'filterTreeNode' | 'labelEllipsis' | 'leafOnly' | 'multiple' | 'onChangeWithObject' | 'showClear' | 'showFilteredOnly' | 'style' | 'treeData' | 'treeNodeFilterProp' | 'value' | 'onExpand' | 'onSearch' | 'expandAll' | 'disableStrictly' | 'aria-label'> {
30
+ export interface BasicTreeSelectProps extends Pick<BasicTreeProps, 'virtualize' | 'renderFullLabel' | 'renderLabel' | 'autoExpandParent' | 'className' | 'defaultExpandAll' | 'defaultExpandedKeys' | 'defaultValue' | 'disabled' | 'emptyContent' | 'expandAction' | 'expandedKeys' | 'filterTreeNode' | 'labelEllipsis' | 'leafOnly' | 'multiple' | 'onChangeWithObject' | 'showClear' | 'showFilteredOnly' | 'style' | 'treeData' | 'treeNodeFilterProp' | 'value' | 'onExpand' | 'onSearch' | 'expandAll' | 'disableStrictly' | 'aria-label' | 'checkRelation'> {
31
31
  motion?: Motion;
32
32
  mouseEnterDelay?: number;
33
33
  mouseLeaveDelay?: number;
@@ -68,7 +68,7 @@ export interface BasicTreeSelectProps extends Pick<BasicTreeProps, 'virtualize'
68
68
  onVisibleChange?: (isVisible: boolean) => void;
69
69
  onLoad?: (keys: Set<string>, data: BasicTreeNodeData) => void;
70
70
  }
71
- export interface BasicTreeSelectInnerData extends Pick<BasicTreeInnerData, 'keyEntities' | 'treeData' | 'flattenNodes' | 'selectedKeys' | 'checkedKeys' | 'halfCheckedKeys' | 'motionKeys' | 'motionType' | 'expandedKeys' | 'filteredKeys' | 'filteredExpandedKeys' | 'filteredShownKeys' | 'cachedKeyValuePairs' | 'inputValue' | 'disabledKeys' | 'loadedKeys' | 'loadingKeys'> {
71
+ export interface BasicTreeSelectInnerData extends Pick<BasicTreeInnerData, 'keyEntities' | 'treeData' | 'flattenNodes' | 'selectedKeys' | 'checkedKeys' | 'halfCheckedKeys' | 'motionKeys' | 'motionType' | 'expandedKeys' | 'filteredKeys' | 'filteredExpandedKeys' | 'filteredShownKeys' | 'cachedKeyValuePairs' | 'inputValue' | 'disabledKeys' | 'loadedKeys' | 'loadingKeys' | 'realCheckedKeys'> {
72
72
  inputTriggerFocus: boolean;
73
73
  isOpen: boolean;
74
74
  isInput: boolean;
@@ -82,7 +82,7 @@ export interface TreeSelectAdapter<P = Record<string, any>, S = Record<string, a
82
82
  registerClickOutsideHandler: (cb: (e: any) => void) => void;
83
83
  unregisterClickOutsideHandler: () => void;
84
84
  rePositionDropdown: () => void;
85
- updateState: (states: Pick<S, keyof S>) => void;
85
+ updateState: (states: Partial<BasicTreeSelectInnerData>) => void;
86
86
  notifySelect: (selectedKeys: string, selected: boolean, selectedNode: BasicTreeNodeData) => void;
87
87
  notifySearch: (input: string) => void;
88
88
  cacheFlattenNodes: (bool: boolean) => void;
@@ -158,6 +158,7 @@ class TreeSelectFoundation extends _foundation.default {
158
158
  selectedKeys = [],
159
159
  checkedKeys = new _set.default([]),
160
160
  halfCheckedKeys = new _set.default([]),
161
+ realCheckedKeys = new _set.default([]),
161
162
  keyEntities = {},
162
163
  filteredKeys = new _set.default([]),
163
164
  inputValue = '',
@@ -167,13 +168,26 @@ class TreeSelectFoundation extends _foundation.default {
167
168
  disabledKeys = new _set.default([])
168
169
  } = this.getStates();
169
170
  const {
170
- treeNodeFilterProp
171
+ treeNodeFilterProp,
172
+ checkRelation
171
173
  } = this.getProps();
172
174
  const entity = keyEntities[key];
173
175
  const notExist = !entity;
174
176
 
175
177
  if (notExist) {
176
178
  return null;
179
+ } // if checkRelation is invalid, the checked status of node will be false
180
+
181
+
182
+ let realChecked = false;
183
+ let realHalfChecked = false;
184
+
185
+ if (checkRelation === 'related') {
186
+ realChecked = checkedKeys.has(key);
187
+ realHalfChecked = halfCheckedKeys.has(key);
188
+ } else if (checkRelation === 'unRelated') {
189
+ realChecked = realCheckedKeys.has(key);
190
+ realHalfChecked = false;
177
191
  }
178
192
 
179
193
  const isSearching = Boolean(inputValue);
@@ -181,8 +195,8 @@ class TreeSelectFoundation extends _foundation.default {
181
195
  eventKey: key,
182
196
  expanded: isSearching ? filteredExpandedKeys.has(key) : expandedKeys.has(key),
183
197
  selected: (0, _includes.default)(selectedKeys).call(selectedKeys, key),
184
- checked: checkedKeys.has(key),
185
- halfChecked: halfCheckedKeys.has(key),
198
+ checked: realChecked,
199
+ halfChecked: realHalfChecked,
186
200
  pos: String(entity ? entity.pos : ''),
187
201
  level: entity.level,
188
202
  filtered: filteredKeys.has(key),
@@ -248,9 +262,17 @@ class TreeSelectFoundation extends _foundation.default {
248
262
  keyEntities
249
263
  } = this.getStates();
250
264
  const {
251
- leafOnly
265
+ leafOnly,
266
+ checkRelation
252
267
  } = this.getProps();
253
- const keyList = (0, _treeUtil.normalizeKeyList)(key, keyEntities, leafOnly);
268
+ let keyList = [];
269
+
270
+ if (checkRelation === 'related') {
271
+ keyList = (0, _treeUtil.normalizeKeyList)(key, keyEntities, leafOnly);
272
+ } else if (checkRelation === 'unRelated') {
273
+ keyList = key;
274
+ }
275
+
254
276
  const nodes = (0, _map.default)(keyList).call(keyList, i => keyEntities[i].data);
255
277
 
256
278
  if (this.getProp('onChangeWithObject')) {
@@ -376,7 +398,8 @@ class TreeSelectFoundation extends _foundation.default {
376
398
  this._adapter.updateState({
377
399
  selectedKeys: [],
378
400
  checkedKeys: new _set.default(),
379
- halfCheckedKeys: new _set.default()
401
+ halfCheckedKeys: new _set.default(),
402
+ realCheckedKeys: new _set.default([])
380
403
  });
381
404
  } // When triggerSearch, clicking the clear button will trigger to clear Input
382
405
 
@@ -404,11 +427,13 @@ class TreeSelectFoundation extends _foundation.default {
404
427
 
405
428
  removeTag(eventKey) {
406
429
  const {
407
- disableStrictly
430
+ disableStrictly,
431
+ checkRelation
408
432
  } = this.getProps();
409
433
  const {
410
434
  keyEntities,
411
- disabledKeys
435
+ disabledKeys,
436
+ realCheckedKeys
412
437
  } = this.getStates();
413
438
  const item = keyEntities[eventKey].data;
414
439
 
@@ -416,20 +441,35 @@ class TreeSelectFoundation extends _foundation.default {
416
441
  return;
417
442
  }
418
443
 
419
- const {
420
- checkedKeys,
421
- halfCheckedKeys
422
- } = this.calcCheckedKeys(eventKey, false);
444
+ if (checkRelation === 'unRelated') {
445
+ const newRealCheckedKeys = new _set.default(realCheckedKeys);
446
+ newRealCheckedKeys.delete(eventKey);
423
447
 
424
- this._notifyChange([...checkedKeys], null);
448
+ this._notifyChange([...newRealCheckedKeys], null);
425
449
 
426
- if (!this._isControlledComponent()) {
427
- this._adapter.updateState({
450
+ if (!this._isControlledComponent()) {
451
+ this._adapter.updateState({
452
+ realCheckedKeys: newRealCheckedKeys
453
+ });
454
+
455
+ this._adapter.rePositionDropdown();
456
+ }
457
+ } else if (checkRelation === 'related') {
458
+ const {
428
459
  checkedKeys,
429
460
  halfCheckedKeys
430
- });
461
+ } = this.calcCheckedKeys(eventKey, false);
431
462
 
432
- this._adapter.rePositionDropdown();
463
+ this._notifyChange([...checkedKeys], null);
464
+
465
+ if (!this._isControlledComponent()) {
466
+ this._adapter.updateState({
467
+ checkedKeys,
468
+ halfCheckedKeys
469
+ });
470
+
471
+ this._adapter.rePositionDropdown();
472
+ }
433
473
  }
434
474
 
435
475
  this._adapter.notifySelect(eventKey, false, item); // reposition dropdown when selected values change
@@ -576,39 +616,67 @@ class TreeSelectFoundation extends _foundation.default {
576
616
  handleMultipleSelect(e, treeNode) {
577
617
  const {
578
618
  searchPosition,
579
- disableStrictly
619
+ disableStrictly,
620
+ checkRelation
580
621
  } = this.getProps();
581
622
  const {
582
- inputValue
623
+ inputValue,
624
+ realCheckedKeys
583
625
  } = this.getStates();
584
626
  const {
585
627
  checked,
586
628
  eventKey,
587
629
  data
588
630
  } = treeNode;
589
- const targetStatus = disableStrictly ? this.calcChekcedStatus(!checked, eventKey) : !checked;
590
- const {
591
- checkedKeys,
592
- halfCheckedKeys
593
- } = disableStrictly ? this.calcNonDisabedCheckedKeys(eventKey, targetStatus) : this.calcCheckedKeys(eventKey, targetStatus);
594
631
 
595
- this._adapter.notifySelect(eventKey, targetStatus, data);
632
+ if (checkRelation === 'related') {
633
+ const targetStatus = disableStrictly ? this.calcChekcedStatus(!checked, eventKey) : !checked;
634
+ const {
635
+ checkedKeys,
636
+ halfCheckedKeys
637
+ } = disableStrictly ? this.calcNonDisabedCheckedKeys(eventKey, targetStatus) : this.calcCheckedKeys(eventKey, targetStatus);
596
638
 
597
- this._notifyChange([...checkedKeys], e);
639
+ this._adapter.notifySelect(eventKey, targetStatus, data);
598
640
 
599
- if (searchPosition === _constants.strings.SEARCH_POSITION_TRIGGER && inputValue !== '') {
600
- this._adapter.updateState({
601
- inputValue: ''
602
- });
641
+ this._notifyChange([...checkedKeys], e);
642
+
643
+ if (!this._isControlledComponent()) {
644
+ this._adapter.updateState({
645
+ checkedKeys,
646
+ halfCheckedKeys
647
+ });
648
+
649
+ this._adapter.rePositionDropdown();
650
+ }
651
+ } else if (checkRelation === 'unRelated') {
652
+ const newRealCheckedKeys = new _set.default(realCheckedKeys);
653
+ let targetStatus;
654
+
655
+ if (realCheckedKeys.has(eventKey)) {
656
+ newRealCheckedKeys.delete(eventKey);
657
+ targetStatus = false;
658
+ } else {
659
+ newRealCheckedKeys.add(eventKey);
660
+ targetStatus = true;
661
+ }
662
+
663
+ this._adapter.notifySelect(eventKey, targetStatus, data);
664
+
665
+ this._notifyChange([...newRealCheckedKeys], e);
666
+
667
+ if (!this._isControlledComponent()) {
668
+ this._adapter.updateState({
669
+ realCheckedKeys: newRealCheckedKeys
670
+ });
671
+
672
+ this._adapter.rePositionDropdown();
673
+ }
603
674
  }
604
675
 
605
- if (!this._isControlledComponent()) {
676
+ if (searchPosition === _constants.strings.SEARCH_POSITION_TRIGGER && inputValue !== '') {
606
677
  this._adapter.updateState({
607
- checkedKeys,
608
- halfCheckedKeys
678
+ inputValue: ''
609
679
  });
610
-
611
- this._adapter.rePositionDropdown();
612
680
  }
613
681
  }
614
682
 
@@ -53,11 +53,10 @@
53
53
  }
54
54
  .semi-upload[x-prompt-pos=left] .semi-upload-add {
55
55
  display: inline-flex;
56
- order: 2;
57
56
  }
58
57
  .semi-upload[x-prompt-pos=left] .semi-upload-prompt {
59
58
  display: inline-flex;
60
- order: 1;
59
+ order: -1;
61
60
  }
62
61
  .semi-upload[x-prompt-pos=left] .semi-upload-file-list {
63
62
  order: 2;
@@ -237,15 +236,9 @@
237
236
  .semi-upload-picture[x-prompt-pos=bottom] .semi-upload-prompt {
238
237
  order: 1;
239
238
  }
240
- .semi-upload-picture[x-prompt-pos=bottom] .semi-upload-add {
241
- order: 0;
242
- }
243
239
  .semi-upload-picture[x-prompt-pos=right] .semi-upload-prompt {
244
240
  order: 1;
245
241
  }
246
- .semi-upload-picture[x-prompt-pos=right] .semi-upload-add {
247
- order: 0;
248
- }
249
242
  .semi-upload-picture-add {
250
243
  background-color: var(--semi-color-fill-0);
251
244
  height: 96px;
@@ -257,7 +250,6 @@
257
250
  border: 2px dashed var(--semi-color-border);
258
251
  color: var(--semi-color-tertiary);
259
252
  border-radius: var(--semi-border-radius-small);
260
- order: 2;
261
253
  cursor: pointer;
262
254
  }
263
255
  .semi-upload-picture-add:hover {
@@ -297,35 +289,32 @@
297
289
  border-radius: var(--semi-border-radius-small);
298
290
  }
299
291
  .semi-upload-picture-file-card-close {
300
- width: 16px;
301
- height: 16px;
302
- background-color: var(--semi-color-overlay-bg);
292
+ visibility: hidden;
293
+ display: inline-flex;
303
294
  position: absolute;
304
295
  top: 8px;
305
296
  right: 8px;
306
- display: flex;
307
- justify-content: center;
308
- align-items: center;
309
- display: none;
310
297
  border-radius: var(--semi-border-radius-circle);
311
- color: white;
312
298
  cursor: pointer;
313
299
  transition: all 0s;
314
300
  }
315
- .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-close {
316
- display: flex;
317
- }
318
- .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-replace {
319
- visibility: visible;
301
+ .semi-upload-picture-file-card-icon-close {
302
+ font-size: 16px;
303
+ color: var(--semi-color-white);
320
304
  }
321
- .semi-upload-picture-file-card .semi-progress-circle {
305
+ .semi-upload-picture-file-card::before {
306
+ visibility: hidden;
307
+ background-color: var(--semi-color-overlay-bg);
308
+ content: "";
322
309
  position: absolute;
323
- top: 50%;
324
- left: 50%;
325
- transform: translate(-50%, -50%);
310
+ left: 0;
311
+ right: 0;
312
+ top: 0;
313
+ bottom: 0;
326
314
  }
327
315
  .semi-upload-picture-file-card-retry {
328
- background-color: #fff;
316
+ visibility: hidden;
317
+ background-color: var(--semi-color-white);
329
318
  width: 24px;
330
319
  height: 24px;
331
320
  position: absolute;
@@ -353,6 +342,15 @@
353
342
  color: var(--semi-color-white);
354
343
  transform: translate3D(-50%, -50%, 0);
355
344
  }
345
+ .semi-upload-picture-file-card-preview {
346
+ visibility: hidden;
347
+ display: inline-flex;
348
+ position: absolute;
349
+ cursor: pointer;
350
+ top: 50%;
351
+ left: 50%;
352
+ transform: translate3D(-50%, -50%, 0);
353
+ }
356
354
  .semi-upload-picture-file-card-pic-info {
357
355
  display: inline-flex;
358
356
  box-sizing: border-box;
@@ -384,6 +382,30 @@
384
382
  .semi-upload-picture-file-card-error {
385
383
  outline: 1px solid var(--semi-color-danger);
386
384
  }
385
+ .semi-upload-picture-file-card:hover::before {
386
+ visibility: visible;
387
+ }
388
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-close {
389
+ visibility: visible;
390
+ }
391
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-replace {
392
+ visibility: visible;
393
+ }
394
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-retry {
395
+ visibility: visible;
396
+ }
397
+ .semi-upload-picture-file-card:hover .semi-upload-picture-file-card-preview {
398
+ visibility: visible;
399
+ }
400
+ .semi-upload-picture-file-card-uploading::before {
401
+ visibility: visible;
402
+ }
403
+ .semi-upload-picture-file-card .semi-progress-circle {
404
+ position: absolute;
405
+ top: 50%;
406
+ left: 50%;
407
+ transform: translate(-50%, -50%);
408
+ }
387
409
  .semi-upload-drag-area {
388
410
  border-radius: var(--semi-border-radius-small);
389
411
  border: 2px dashed var(--semi-color-border);