@douyinfe/semi-ui 2.11.2 → 2.12.0-alpha.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.
- package/avatar/index.tsx +2 -2
- package/backtop/index.tsx +11 -7
- package/badge/index.tsx +1 -1
- package/banner/index.tsx +5 -5
- package/breadcrumb/index.tsx +5 -3
- package/button/Button.tsx +10 -8
- package/card/index.tsx +43 -41
- package/carousel/CarouselArrow.tsx +2 -0
- package/carousel/index.tsx +1 -0
- package/cascader/index.tsx +101 -123
- package/cascader/item.tsx +1 -1
- package/checkbox/checkbox.tsx +13 -2
- package/collapsible/index.tsx +8 -1
- package/datePicker/dateInput.tsx +1 -0
- package/datePicker/datePicker.tsx +13 -5
- package/dist/css/semi.css +33 -0
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +694 -384
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/divider/index.tsx +8 -4
- package/dropdown/index.tsx +1 -1
- package/empty/index.tsx +13 -5
- package/form/_story/FormSubmit/index.tsx +45 -0
- package/form/_story/form.stories.js +2 -1
- package/form/hoc/withField.tsx +1 -1
- package/form/label.tsx +1 -1
- package/grid/col.tsx +1 -1
- package/grid/row.tsx +1 -1
- package/iconButton/index.tsx +2 -1
- package/input/index.tsx +38 -11
- package/lib/cjs/avatar/index.js +4 -2
- package/lib/cjs/backtop/index.js +2 -1
- package/lib/cjs/badge/index.js +2 -1
- package/lib/cjs/banner/index.js +9 -4
- package/lib/cjs/breadcrumb/index.js +4 -3
- package/lib/cjs/button/Button.js +13 -3
- package/lib/cjs/card/index.js +10 -5
- package/lib/cjs/carousel/CarouselArrow.js +6 -2
- package/lib/cjs/carousel/index.js +2 -1
- package/lib/cjs/cascader/index.js +9 -6
- package/lib/cjs/cascader/item.js +2 -1
- package/lib/cjs/checkbox/checkbox.js +8 -4
- package/lib/cjs/collapsible/index.js +2 -1
- package/lib/cjs/datePicker/dateInput.d.ts +1 -1
- package/lib/cjs/datePicker/dateInput.js +2 -1
- package/lib/cjs/datePicker/datePicker.d.ts +1 -1
- package/lib/cjs/datePicker/datePicker.js +4 -2
- package/lib/cjs/datePicker/monthsGrid.d.ts +2 -2
- package/lib/cjs/divider/index.js +2 -1
- package/lib/cjs/dropdown/index.js +2 -1
- package/lib/cjs/empty/index.js +8 -4
- package/lib/cjs/form/baseForm.d.ts +1 -1
- package/lib/cjs/form/field.d.ts +1 -1
- package/lib/cjs/form/hoc/withField.js +2 -1
- package/lib/cjs/form/label.js +2 -1
- package/lib/cjs/grid/col.js +2 -1
- package/lib/cjs/grid/row.js +2 -1
- package/lib/cjs/iconButton/index.js +3 -1
- package/lib/cjs/input/index.js +9 -5
- package/lib/cjs/list/index.js +6 -3
- package/lib/cjs/modal/ConfirmModal.js +2 -1
- package/lib/cjs/modal/Modal.js +6 -2
- package/lib/cjs/modal/ModalContent.js +13 -6
- package/lib/cjs/notification/notice.js +6 -3
- package/lib/cjs/pagination/index.js +4 -2
- package/lib/cjs/popconfirm/index.js +6 -3
- package/lib/cjs/radio/radio.d.ts +1 -1
- package/lib/cjs/radio/radio.js +4 -2
- package/lib/cjs/radio/radioGroup.d.ts +1 -1
- package/lib/cjs/rating/item.js +2 -1
- package/lib/cjs/scrollList/index.js +6 -3
- package/lib/cjs/select/index.js +9 -5
- package/lib/cjs/select/option.js +2 -1
- package/lib/cjs/sideSheet/SideSheetContent.js +6 -3
- package/lib/cjs/skeleton/index.js +3 -1
- package/lib/cjs/slider/index.js +9 -5
- package/lib/cjs/space/index.js +2 -1
- package/lib/cjs/spin/index.js +7 -3
- package/lib/cjs/switch/index.js +6 -4
- package/lib/cjs/table/Table.d.ts +1 -1
- package/lib/cjs/table/Table.js +6 -3
- package/lib/cjs/tabs/TabBar.d.ts +1 -0
- package/lib/cjs/tabs/TabBar.js +10 -2
- package/lib/cjs/tabs/TabPane.js +7 -3
- package/lib/cjs/tabs/index.js +2 -1
- package/lib/cjs/tabs/interface.d.ts +1 -0
- package/lib/cjs/tag/index.d.ts +2 -0
- package/lib/cjs/tag/index.js +60 -11
- package/lib/cjs/tag/interface.d.ts +1 -0
- package/lib/cjs/tagInput/index.js +7 -4
- package/lib/cjs/timePicker/Combobox.js +3 -1
- package/lib/cjs/toast/toast.js +6 -3
- package/lib/cjs/transfer/index.js +2 -1
- package/lib/cjs/tree/treeNode.js +2 -1
- package/lib/cjs/treeSelect/index.js +9 -6
- package/lib/cjs/typography/base.js +2 -1
- package/lib/cjs/typography/title.d.ts +1 -1
- package/lib/cjs/upload/index.d.ts +1 -1
- package/lib/cjs/upload/index.js +13 -6
- package/lib/es/avatar/index.js +4 -2
- package/lib/es/backtop/index.js +2 -1
- package/lib/es/badge/index.js +2 -1
- package/lib/es/banner/index.js +9 -4
- package/lib/es/breadcrumb/index.js +4 -3
- package/lib/es/button/Button.js +11 -3
- package/lib/es/card/index.js +10 -5
- package/lib/es/carousel/CarouselArrow.js +6 -2
- package/lib/es/carousel/index.js +2 -1
- package/lib/es/cascader/index.js +9 -6
- package/lib/es/cascader/item.js +2 -1
- package/lib/es/checkbox/checkbox.js +8 -4
- package/lib/es/collapsible/index.js +2 -1
- package/lib/es/datePicker/dateInput.d.ts +1 -1
- package/lib/es/datePicker/dateInput.js +2 -1
- package/lib/es/datePicker/datePicker.d.ts +1 -1
- package/lib/es/datePicker/datePicker.js +4 -2
- package/lib/es/datePicker/monthsGrid.d.ts +2 -2
- package/lib/es/divider/index.js +2 -1
- package/lib/es/dropdown/index.js +2 -1
- package/lib/es/empty/index.js +8 -4
- package/lib/es/form/baseForm.d.ts +1 -1
- package/lib/es/form/field.d.ts +1 -1
- package/lib/es/form/hoc/withField.js +2 -1
- package/lib/es/form/label.js +2 -1
- package/lib/es/grid/col.js +2 -1
- package/lib/es/grid/row.js +2 -1
- package/lib/es/iconButton/index.js +3 -1
- package/lib/es/input/index.js +9 -5
- package/lib/es/list/index.js +6 -3
- package/lib/es/modal/ConfirmModal.js +2 -1
- package/lib/es/modal/Modal.js +6 -2
- package/lib/es/modal/ModalContent.js +13 -6
- package/lib/es/notification/notice.js +6 -3
- package/lib/es/pagination/index.js +4 -2
- package/lib/es/popconfirm/index.js +6 -3
- package/lib/es/radio/radio.d.ts +1 -1
- package/lib/es/radio/radio.js +4 -2
- package/lib/es/radio/radioGroup.d.ts +1 -1
- package/lib/es/rating/item.js +2 -1
- package/lib/es/scrollList/index.js +6 -3
- package/lib/es/select/index.js +9 -5
- package/lib/es/select/option.js +2 -1
- package/lib/es/sideSheet/SideSheetContent.js +6 -3
- package/lib/es/skeleton/index.js +3 -1
- package/lib/es/slider/index.js +9 -5
- package/lib/es/space/index.js +2 -1
- package/lib/es/spin/index.js +7 -3
- package/lib/es/switch/index.js +6 -4
- package/lib/es/table/Table.d.ts +1 -1
- package/lib/es/table/Table.js +6 -3
- package/lib/es/tabs/TabBar.d.ts +1 -0
- package/lib/es/tabs/TabBar.js +10 -2
- package/lib/es/tabs/TabPane.js +7 -3
- package/lib/es/tabs/index.js +2 -1
- package/lib/es/tabs/interface.d.ts +1 -0
- package/lib/es/tag/index.d.ts +2 -0
- package/lib/es/tag/index.js +56 -9
- package/lib/es/tag/interface.d.ts +1 -0
- package/lib/es/tagInput/index.js +7 -4
- package/lib/es/timePicker/Combobox.js +3 -1
- package/lib/es/toast/toast.js +6 -3
- package/lib/es/transfer/index.js +2 -1
- package/lib/es/tree/treeNode.js +2 -1
- package/lib/es/treeSelect/index.js +8 -5
- package/lib/es/typography/base.js +2 -1
- package/lib/es/typography/title.d.ts +1 -1
- package/lib/es/upload/index.d.ts +1 -1
- package/lib/es/upload/index.js +13 -6
- package/list/index.tsx +16 -4
- package/modal/ConfirmModal.tsx +1 -1
- package/modal/Modal.tsx +2 -0
- package/modal/ModalContent.tsx +33 -21
- package/notification/notice.tsx +16 -4
- package/package.json +9 -9
- package/pagination/index.tsx +16 -2
- package/popconfirm/index.tsx +11 -3
- package/radio/radio.tsx +10 -2
- package/rating/item.tsx +1 -1
- package/scrollList/index.tsx +19 -3
- package/select/index.tsx +13 -6
- package/select/option.tsx +5 -1
- package/sideSheet/SideSheetContent.tsx +3 -3
- package/skeleton/index.tsx +1 -1
- package/slider/index.tsx +5 -3
- package/space/index.tsx +1 -1
- package/spin/index.tsx +15 -9
- package/switch/index.tsx +9 -14
- package/table/Table.tsx +5 -3
- package/table/_story/v2/index.js +2 -1
- package/table/_story/v2/radioRowSelection.tsx +107 -0
- package/tabs/TabBar.tsx +8 -1
- package/tabs/TabPane.tsx +10 -4
- package/tabs/index.tsx +2 -1
- package/tabs/interface.ts +1 -0
- package/tag/index.tsx +32 -2
- package/tag/interface.ts +1 -0
- package/tagInput/index.tsx +3 -2
- package/timePicker/Combobox.tsx +6 -1
- package/toast/toast.tsx +3 -3
- package/transfer/index.tsx +1 -0
- package/tree/treeNode.tsx +1 -1
- package/treeSelect/index.tsx +16 -4
- package/typography/base.tsx +1 -1
- package/upload/index.tsx +107 -38
package/cascader/index.tsx
CHANGED
|
@@ -122,7 +122,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
122
122
|
PropTypes.shape({
|
|
123
123
|
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
124
124
|
label: PropTypes.any,
|
|
125
|
-
})
|
|
125
|
+
})
|
|
126
126
|
),
|
|
127
127
|
treeNodeFilterProp: PropTypes.string,
|
|
128
128
|
suffix: PropTypes.node,
|
|
@@ -199,7 +199,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
199
199
|
onDropdownVisibleChange: noop,
|
|
200
200
|
onListScroll: noop,
|
|
201
201
|
enableLeafClick: false,
|
|
202
|
-
'aria-label': 'Cascader'
|
|
202
|
+
'aria-label': 'Cascader',
|
|
203
203
|
};
|
|
204
204
|
|
|
205
205
|
options: any;
|
|
@@ -247,7 +247,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
247
247
|
/* Keys of loading item */
|
|
248
248
|
loadingKeys: new Set(),
|
|
249
249
|
/* Mark whether this rendering has triggered asynchronous loading of data */
|
|
250
|
-
loading: false
|
|
250
|
+
loading: false,
|
|
251
251
|
};
|
|
252
252
|
this.options = {};
|
|
253
253
|
this.isEmpty = false;
|
|
@@ -274,10 +274,9 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
274
274
|
}
|
|
275
275
|
},
|
|
276
276
|
};
|
|
277
|
-
const cascaderAdapter: Pick<
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
| 'rePositionDropdown'
|
|
277
|
+
const cascaderAdapter: Pick<
|
|
278
|
+
CascaderAdapter,
|
|
279
|
+
'registerClickOutsideHandler' | 'unregisterClickOutsideHandler' | 'rePositionDropdown'
|
|
281
280
|
> = {
|
|
282
281
|
registerClickOutsideHandler: cb => {
|
|
283
282
|
const clickOutsideHandler = (e: Event) => {
|
|
@@ -368,17 +367,10 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
368
367
|
}
|
|
369
368
|
|
|
370
369
|
static getDerivedStateFromProps(props: CascaderProps, prevState: CascaderState) {
|
|
371
|
-
const {
|
|
372
|
-
multiple,
|
|
373
|
-
value,
|
|
374
|
-
defaultValue,
|
|
375
|
-
onChangeWithObject,
|
|
376
|
-
leafOnly,
|
|
377
|
-
autoMergeValue,
|
|
378
|
-
} = props;
|
|
370
|
+
const { multiple, value, defaultValue, onChangeWithObject, leafOnly, autoMergeValue } = props;
|
|
379
371
|
const { prevProps } = prevState;
|
|
380
372
|
let keyEntities = prevState.keyEntities || {};
|
|
381
|
-
const newState: Partial<CascaderState> = {
|
|
373
|
+
const newState: Partial<CascaderState> = {};
|
|
382
374
|
const needUpdate = (name: string) => {
|
|
383
375
|
const firstInProps = isEmpty(prevProps) && name in props;
|
|
384
376
|
const nameHasChange = prevProps && !isEqual(prevProps[name], props[name]);
|
|
@@ -408,18 +400,18 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
408
400
|
const realValue = needUpdate('value') ? value : defaultValue;
|
|
409
401
|
// eslint-disable-next-line max-depth
|
|
410
402
|
if (Array.isArray(realValue)) {
|
|
411
|
-
normallizedValue = Array.isArray(realValue[0])
|
|
412
|
-
realValue as SimpleValueType[][]
|
|
413
|
-
[realValue] as SimpleValueType[][];
|
|
403
|
+
normallizedValue = Array.isArray(realValue[0])
|
|
404
|
+
? (realValue as SimpleValueType[][])
|
|
405
|
+
: ([realValue] as SimpleValueType[][]);
|
|
414
406
|
} else {
|
|
415
407
|
normallizedValue = [[realValue]];
|
|
416
408
|
}
|
|
417
409
|
// formatValuePath is used to save value of valuePath
|
|
418
410
|
const formatValuePath: (string | number)[][] = [];
|
|
419
411
|
normallizedValue.forEach((valueItem: SimpleValueType[]) => {
|
|
420
|
-
const formatItem: (string | number)[] = onChangeWithObject
|
|
421
|
-
(valueItem as CascaderData[]).map(i => i.value)
|
|
422
|
-
valueItem as (string | number)[];
|
|
412
|
+
const formatItem: (string | number)[] = onChangeWithObject
|
|
413
|
+
? (valueItem as CascaderData[]).map(i => i.value)
|
|
414
|
+
: (valueItem as (string | number)[]);
|
|
423
415
|
formatValuePath.push(formatItem);
|
|
424
416
|
});
|
|
425
417
|
// formatKeys is used to save key of value
|
|
@@ -480,12 +472,9 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
480
472
|
renderTagItem = (value: string | Array<string>, idx: number, type: string) => {
|
|
481
473
|
const { keyEntities, disabledKeys } = this.state;
|
|
482
474
|
const { size, disabled, displayProp, displayRender, disableStrictly } = this.props;
|
|
483
|
-
const nodeKey = type === strings.IS_VALUE ?
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
const isDsiabled = disabled ||
|
|
487
|
-
keyEntities[nodeKey].data.disabled ||
|
|
488
|
-
(disableStrictly && disabledKeys.has(nodeKey));
|
|
475
|
+
const nodeKey = type === strings.IS_VALUE ? findKeysForValues(value, keyEntities)[0] : value;
|
|
476
|
+
const isDsiabled =
|
|
477
|
+
disabled || keyEntities[nodeKey].data.disabled || (disableStrictly && disabledKeys.has(nodeKey));
|
|
489
478
|
if (!isEmpty(keyEntities) && !isEmpty(keyEntities[nodeKey])) {
|
|
490
479
|
const tagCls = cls(`${prefixcls}-selection-tag`, {
|
|
491
480
|
[`${prefixcls}-selection-tag-disabled`]: isDsiabled,
|
|
@@ -493,7 +482,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
493
482
|
// custom render tags
|
|
494
483
|
if (isFunction(displayRender)) {
|
|
495
484
|
return displayRender(keyEntities[nodeKey], idx);
|
|
496
|
-
|
|
485
|
+
// default render tags
|
|
497
486
|
} else {
|
|
498
487
|
return (
|
|
499
488
|
<Tag
|
|
@@ -517,25 +506,11 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
517
506
|
};
|
|
518
507
|
|
|
519
508
|
renderTagInput() {
|
|
520
|
-
const {
|
|
521
|
-
|
|
522
|
-
disabled,
|
|
523
|
-
placeholder,
|
|
524
|
-
maxTagCount,
|
|
525
|
-
showRestTagsPopover,
|
|
526
|
-
restTagsPopoverProps,
|
|
527
|
-
} = this.props;
|
|
528
|
-
const {
|
|
529
|
-
inputValue,
|
|
530
|
-
checkedKeys,
|
|
531
|
-
keyEntities,
|
|
532
|
-
resolvedCheckedKeys
|
|
533
|
-
} = this.state;
|
|
509
|
+
const { size, disabled, placeholder, maxTagCount, showRestTagsPopover, restTagsPopoverProps } = this.props;
|
|
510
|
+
const { inputValue, checkedKeys, keyEntities, resolvedCheckedKeys } = this.state;
|
|
534
511
|
const tagInputcls = cls(`${prefixcls}-tagInput-wrapper`);
|
|
535
512
|
const tagValue: Array<Array<string>> = [];
|
|
536
|
-
const realKeys = this.mergeType === strings.NONE_MERGE_TYPE
|
|
537
|
-
? checkedKeys
|
|
538
|
-
: resolvedCheckedKeys;
|
|
513
|
+
const realKeys = this.mergeType === strings.NONE_MERGE_TYPE ? checkedKeys : resolvedCheckedKeys;
|
|
539
514
|
[...realKeys].forEach(checkedKey => {
|
|
540
515
|
if (!isEmpty(keyEntities[checkedKey])) {
|
|
541
516
|
tagValue.push(keyEntities[checkedKey].valuePath);
|
|
@@ -548,7 +523,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
548
523
|
disabled={disabled}
|
|
549
524
|
size={size}
|
|
550
525
|
// TODO Modify logic, not modify type
|
|
551
|
-
value={tagValue as unknown as string[]}
|
|
526
|
+
value={(tagValue as unknown) as string[]}
|
|
552
527
|
showRestTagsPopover={showRestTagsPopover}
|
|
553
528
|
restTagsPopoverProps={restTagsPopoverProps}
|
|
554
529
|
maxTagCount={maxTagCount}
|
|
@@ -556,7 +531,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
556
531
|
inputValue={inputValue}
|
|
557
532
|
onInputChange={this.handleInputChange}
|
|
558
533
|
// TODO Modify logic, not modify type
|
|
559
|
-
onRemove={v => this.handleTagRemove(null, v as unknown as (string | number)[])}
|
|
534
|
+
onRemove={v => this.handleTagRemove(null, (v as unknown) as (string | number)[])}
|
|
560
535
|
placeholder={placeholder}
|
|
561
536
|
/>
|
|
562
537
|
);
|
|
@@ -578,11 +553,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
578
553
|
});
|
|
579
554
|
return (
|
|
580
555
|
<div className={wrappercls}>
|
|
581
|
-
<Input
|
|
582
|
-
ref={this.inputRef as any}
|
|
583
|
-
size={size}
|
|
584
|
-
{...inputProps}
|
|
585
|
-
/>
|
|
556
|
+
<Input ref={this.inputRef as any} size={size} {...inputProps} />
|
|
586
557
|
</div>
|
|
587
558
|
);
|
|
588
559
|
}
|
|
@@ -612,7 +583,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
612
583
|
checkedKeys,
|
|
613
584
|
halfCheckedKeys,
|
|
614
585
|
loadedKeys,
|
|
615
|
-
loadingKeys
|
|
586
|
+
loadingKeys,
|
|
616
587
|
} = this.state;
|
|
617
588
|
const {
|
|
618
589
|
filterTreeNode,
|
|
@@ -624,7 +595,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
624
595
|
topSlot,
|
|
625
596
|
bottomSlot,
|
|
626
597
|
showNext,
|
|
627
|
-
multiple
|
|
598
|
+
multiple,
|
|
628
599
|
} = this.props;
|
|
629
600
|
const searchable = Boolean(filterTreeNode) && isSearching;
|
|
630
601
|
const popoverCls = cls(dropdownClassName, `${prefixcls}-popover`);
|
|
@@ -661,37 +632,29 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
661
632
|
renderPlusN = (hiddenTag: Array<ReactNode>) => {
|
|
662
633
|
const { disabled, showRestTagsPopover, restTagsPopoverProps } = this.props;
|
|
663
634
|
const plusNCls = cls(`${prefixcls}-selection-n`, {
|
|
664
|
-
[`${prefixcls}-selection-n-disabled`]: disabled
|
|
635
|
+
[`${prefixcls}-selection-n-disabled`]: disabled,
|
|
665
636
|
});
|
|
666
|
-
const renderPlusNChildren =
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
{...restTagsPopoverProps}
|
|
681
|
-
>
|
|
682
|
-
{renderPlusNChildren}
|
|
683
|
-
</Popover>
|
|
684
|
-
) :
|
|
685
|
-
renderPlusNChildren
|
|
637
|
+
const renderPlusNChildren = <span className={plusNCls}>+{hiddenTag.length}</span>;
|
|
638
|
+
return showRestTagsPopover && !disabled ? (
|
|
639
|
+
<Popover
|
|
640
|
+
content={hiddenTag}
|
|
641
|
+
showArrow
|
|
642
|
+
trigger="hover"
|
|
643
|
+
position="top"
|
|
644
|
+
autoAdjustOverflow
|
|
645
|
+
{...restTagsPopoverProps}
|
|
646
|
+
>
|
|
647
|
+
{renderPlusNChildren}
|
|
648
|
+
</Popover>
|
|
649
|
+
) : (
|
|
650
|
+
renderPlusNChildren
|
|
686
651
|
);
|
|
687
652
|
};
|
|
688
653
|
|
|
689
654
|
renderMultipleTags = () => {
|
|
690
655
|
const { autoMergeValue, maxTagCount } = this.props;
|
|
691
656
|
const { checkedKeys, resolvedCheckedKeys } = this.state;
|
|
692
|
-
const realKeys = this.mergeType === strings.NONE_MERGE_TYPE
|
|
693
|
-
? checkedKeys
|
|
694
|
-
: resolvedCheckedKeys;
|
|
657
|
+
const realKeys = this.mergeType === strings.NONE_MERGE_TYPE ? checkedKeys : resolvedCheckedKeys;
|
|
695
658
|
const displayTag: Array<ReactNode> = [];
|
|
696
659
|
const hiddenTag: Array<ReactNode> = [];
|
|
697
660
|
[...realKeys].forEach((checkedKey, idx) => {
|
|
@@ -720,19 +683,22 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
720
683
|
if (displayRender && typeof displayRender === 'function') {
|
|
721
684
|
displayText = displayRender(displayPath);
|
|
722
685
|
} else {
|
|
723
|
-
displayText = displayPath.map((path: ReactNode, index: number)=>(
|
|
686
|
+
displayText = displayPath.map((path: ReactNode, index: number) => (
|
|
724
687
|
<Fragment key={`${path}-${index}`}>
|
|
725
|
-
{
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
688
|
+
{index < displayPath.length - 1 ? (
|
|
689
|
+
<>
|
|
690
|
+
{path}
|
|
691
|
+
{separator}
|
|
692
|
+
</>
|
|
693
|
+
) : (
|
|
694
|
+
path
|
|
695
|
+
)}
|
|
730
696
|
</Fragment>
|
|
731
697
|
));
|
|
732
698
|
}
|
|
733
699
|
}
|
|
734
700
|
return displayText;
|
|
735
|
-
}
|
|
701
|
+
};
|
|
736
702
|
|
|
737
703
|
renderSelectContent = () => {
|
|
738
704
|
const { placeholder, filterTreeNode, multiple } = this.props;
|
|
@@ -763,7 +729,11 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
763
729
|
[`${prefixcls}-suffix-text`]: suffix && isString(suffix),
|
|
764
730
|
[`${prefixcls}-suffix-icon`]: isSemiIcon(suffix),
|
|
765
731
|
});
|
|
766
|
-
return
|
|
732
|
+
return (
|
|
733
|
+
<div className={suffixWrapperCls} x-semi-prop="suffix">
|
|
734
|
+
{suffix}
|
|
735
|
+
</div>
|
|
736
|
+
);
|
|
767
737
|
};
|
|
768
738
|
|
|
769
739
|
renderPrefix = () => {
|
|
@@ -778,7 +748,11 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
778
748
|
[`${prefixcls}-prefix-icon`]: isSemiIcon(labelNode),
|
|
779
749
|
});
|
|
780
750
|
|
|
781
|
-
return
|
|
751
|
+
return (
|
|
752
|
+
<div className={prefixWrapperCls} id={insetLabelId} x-semi-prop="prefix,insetLabel">
|
|
753
|
+
{labelNode}
|
|
754
|
+
</div>
|
|
755
|
+
);
|
|
782
756
|
};
|
|
783
757
|
|
|
784
758
|
renderCustomTrigger = () => {
|
|
@@ -847,7 +821,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
847
821
|
className={clearCls}
|
|
848
822
|
onClick={this.handleClear}
|
|
849
823
|
onKeyPress={this.handleClearEnterPress}
|
|
850
|
-
role=
|
|
824
|
+
role="button"
|
|
851
825
|
tabIndex={0}
|
|
852
826
|
>
|
|
853
827
|
<IconClear />
|
|
@@ -863,7 +837,11 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
863
837
|
if (showClearBtn) {
|
|
864
838
|
return null;
|
|
865
839
|
}
|
|
866
|
-
return arrowIcon ?
|
|
840
|
+
return arrowIcon ? (
|
|
841
|
+
<div className={cls(`${prefixcls}-arrow`)} x-semi-prop="arrowIcon">
|
|
842
|
+
{arrowIcon}
|
|
843
|
+
</div>
|
|
844
|
+
) : null;
|
|
867
845
|
};
|
|
868
846
|
|
|
869
847
|
renderSelection = () => {
|
|
@@ -885,40 +863,40 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
885
863
|
const { isOpen, isFocus, isInput, checkedKeys } = this.state;
|
|
886
864
|
const filterable = Boolean(filterTreeNode);
|
|
887
865
|
const useCustomTrigger = typeof triggerRender === 'function';
|
|
888
|
-
const classNames = useCustomTrigger
|
|
889
|
-
cls(className)
|
|
890
|
-
cls(prefixcls, className, {
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
const mouseEvent = showClear
|
|
903
|
-
{
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
{};
|
|
866
|
+
const classNames = useCustomTrigger
|
|
867
|
+
? cls(className)
|
|
868
|
+
: cls(prefixcls, className, {
|
|
869
|
+
[`${prefixcls}-focus`]: isFocus || (isOpen && !isInput),
|
|
870
|
+
[`${prefixcls}-disabled`]: disabled,
|
|
871
|
+
[`${prefixcls}-single`]: true,
|
|
872
|
+
[`${prefixcls}-filterable`]: filterable,
|
|
873
|
+
[`${prefixcls}-error`]: validateStatus === 'error',
|
|
874
|
+
[`${prefixcls}-warning`]: validateStatus === 'warning',
|
|
875
|
+
[`${prefixcls}-small`]: size === 'small',
|
|
876
|
+
[`${prefixcls}-large`]: size === 'large',
|
|
877
|
+
[`${prefixcls}-with-prefix`]: prefix || insetLabel,
|
|
878
|
+
[`${prefixcls}-with-suffix`]: suffix,
|
|
879
|
+
});
|
|
880
|
+
const mouseEvent = showClear
|
|
881
|
+
? {
|
|
882
|
+
onMouseEnter: () => this.handleMouseOver(),
|
|
883
|
+
onMouseLeave: () => this.handleMouseLeave(),
|
|
884
|
+
}
|
|
885
|
+
: {};
|
|
908
886
|
const sectionCls = cls(`${prefixcls}-selection`, {
|
|
909
887
|
[`${prefixcls}-selection-multiple`]: multiple && !isEmpty(checkedKeys),
|
|
910
888
|
});
|
|
911
|
-
const inner = useCustomTrigger
|
|
912
|
-
this.renderCustomTrigger()
|
|
913
|
-
[
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
889
|
+
const inner = useCustomTrigger
|
|
890
|
+
? this.renderCustomTrigger()
|
|
891
|
+
: [
|
|
892
|
+
<Fragment key={'prefix'}>{prefix || insetLabel ? this.renderPrefix() : null}</Fragment>,
|
|
893
|
+
<Fragment key={'selection'}>
|
|
894
|
+
<div className={sectionCls}>{this.renderSelectContent()}</div>
|
|
895
|
+
</Fragment>,
|
|
896
|
+
<Fragment key={'clearbtn'}>{this.renderClearBtn()}</Fragment>,
|
|
897
|
+
<Fragment key={'suffix'}>{suffix ? this.renderSuffix() : null}</Fragment>,
|
|
898
|
+
<Fragment key={'arrow'}>{this.renderArrow()}</Fragment>,
|
|
899
|
+
];
|
|
922
900
|
/**
|
|
923
901
|
* Reasons for disabling the a11y eslint rule:
|
|
924
902
|
* The following attributes(aria-controls,aria-expanded) will be automatically added by Tooltip, no need to declare here
|
|
@@ -934,12 +912,12 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
934
912
|
aria-errormessage={this.props['aria-errormessage']}
|
|
935
913
|
aria-label={this.props['aria-label']}
|
|
936
914
|
aria-labelledby={this.props['aria-labelledby']}
|
|
937
|
-
aria-describedby={this.props[
|
|
915
|
+
aria-describedby={this.props['aria-describedby']}
|
|
938
916
|
aria-required={this.props['aria-required']}
|
|
939
917
|
id={id}
|
|
940
918
|
{...mouseEvent}
|
|
941
919
|
// eslint-disable-next-line jsx-a11y/role-has-required-aria-props
|
|
942
|
-
role=
|
|
920
|
+
role="combobox"
|
|
943
921
|
tabIndex={0}
|
|
944
922
|
>
|
|
945
923
|
{inner}
|
package/cascader/item.tsx
CHANGED
|
@@ -291,7 +291,7 @@ export default class Item extends PureComponent<CascaderItemProps> {
|
|
|
291
291
|
<LocaleConsumer componentName="Cascader">
|
|
292
292
|
{(locale: Locale['Cascader']) => (
|
|
293
293
|
<ul className={`${prefixcls} ${prefixcls}-empty`} key={'empty-list'}>
|
|
294
|
-
<span className={`${prefixcls}-label`}>
|
|
294
|
+
<span className={`${prefixcls}-label`} x-semi-prop="emptyContent">
|
|
295
295
|
{emptyContent || locale.emptyText}
|
|
296
296
|
</span>
|
|
297
297
|
</ul>
|
package/checkbox/checkbox.tsx
CHANGED
|
@@ -203,10 +203,21 @@ class Checkbox extends BaseComponent<CheckboxProps, CheckboxState> {
|
|
|
203
203
|
[`${prefix}-cardType_extra_noChildren`]: props.isCardType && !children,
|
|
204
204
|
});
|
|
205
205
|
|
|
206
|
+
const name = inGroup && this.context.checkboxGroup.name;
|
|
207
|
+
const xSemiPropChildren = this.props['x-semi-children-alias'] || 'children';
|
|
208
|
+
|
|
206
209
|
const renderContent = () => (
|
|
207
210
|
<>
|
|
208
|
-
{children ?
|
|
209
|
-
|
|
211
|
+
{children ? (
|
|
212
|
+
<span id={this.addonId} className={`${prefix}-addon`} x-semi-prop={xSemiPropChildren}>
|
|
213
|
+
{children}
|
|
214
|
+
</span>
|
|
215
|
+
) : null}
|
|
216
|
+
{extra ? (
|
|
217
|
+
<div id={this.extraId} className={extraCls} x-semi-prop="extra">
|
|
218
|
+
{extra}
|
|
219
|
+
</div>
|
|
220
|
+
) : null}
|
|
210
221
|
</>
|
|
211
222
|
);
|
|
212
223
|
return (
|
package/collapsible/index.tsx
CHANGED
|
@@ -92,7 +92,14 @@ const Collapsible = (props: CollapsibleProps) => {
|
|
|
92
92
|
const wrapperCls = cls(`${cssClasses.PREFIX}-wrapper`, className);
|
|
93
93
|
return (
|
|
94
94
|
<div style={wrapperstyle} className={wrapperCls} ref={ref}>
|
|
95
|
-
<div
|
|
95
|
+
<div
|
|
96
|
+
ref={setHeight}
|
|
97
|
+
style={{ overflow: 'hidden' }}
|
|
98
|
+
id={id}
|
|
99
|
+
x-semi-prop="children"
|
|
100
|
+
>
|
|
101
|
+
{children}
|
|
102
|
+
</div>
|
|
96
103
|
</div>
|
|
97
104
|
);
|
|
98
105
|
};
|
package/datePicker/dateInput.tsx
CHANGED
|
@@ -172,6 +172,7 @@ export default class DateInput extends BaseComponent<DateInputProps, {}> {
|
|
|
172
172
|
<div
|
|
173
173
|
className={`${prefixCls}-range-input-prefix`}
|
|
174
174
|
onClick={e => !disabled && !rangeInputFocus && this.handleRangeStartFocus(e)}
|
|
175
|
+
x-semi-prop="prefix,insetLabel"
|
|
175
176
|
>
|
|
176
177
|
{labelNode}
|
|
177
178
|
</div>
|
|
@@ -653,13 +653,21 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
|
|
|
653
653
|
|
|
654
654
|
return (
|
|
655
655
|
<div ref={this.panelRef} className={wrapCls} style={dropdownStyle}>
|
|
656
|
-
{topSlot &&
|
|
656
|
+
{topSlot && (
|
|
657
|
+
<div className={`${cssClasses.PREFIX}-topSlot`} x-semi-prop="topSlot">
|
|
658
|
+
{topSlot}
|
|
659
|
+
</div>
|
|
660
|
+
)}
|
|
657
661
|
{insetInput && <DateInput {...insetInputProps} insetInput={true} />}
|
|
658
|
-
{this.adapter.typeIsYearOrMonth()
|
|
659
|
-
this.renderYearMonthPanel(locale, localeCode)
|
|
660
|
-
this.renderMonthGrid(locale, localeCode, dateFnsLocale)}
|
|
662
|
+
{this.adapter.typeIsYearOrMonth()
|
|
663
|
+
? this.renderYearMonthPanel(locale, localeCode)
|
|
664
|
+
: this.renderMonthGrid(locale, localeCode, dateFnsLocale)}
|
|
661
665
|
{this.renderQuickControls()}
|
|
662
|
-
{bottomSlot &&
|
|
666
|
+
{bottomSlot && (
|
|
667
|
+
<div className={`${cssClasses.PREFIX}-bottomSlot`} x-semi-prop="bottomSlot">
|
|
668
|
+
{bottomSlot}
|
|
669
|
+
</div>
|
|
670
|
+
)}
|
|
663
671
|
{this.renderFooter(locale, localeCode)}
|
|
664
672
|
</div>
|
|
665
673
|
);
|
package/dist/css/semi.css
CHANGED
|
@@ -17270,6 +17270,10 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17270
17270
|
width: 0;
|
|
17271
17271
|
height: 0;
|
|
17272
17272
|
}
|
|
17273
|
+
.semi-tabs-bar-collapse .semi-overflow-list .semi-overflow-list-scroll-wrapper:focus-visible {
|
|
17274
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17275
|
+
outline-offset: -2px;
|
|
17276
|
+
}
|
|
17273
17277
|
.semi-tabs-bar-collapse .semi-tabs-bar-arrow-start {
|
|
17274
17278
|
margin-right: 4px;
|
|
17275
17279
|
}
|
|
@@ -17299,6 +17303,10 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17299
17303
|
.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:hover {
|
|
17300
17304
|
border-bottom: 2px solid var(--semi-color-fill-0);
|
|
17301
17305
|
}
|
|
17306
|
+
.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:focus-visible {
|
|
17307
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17308
|
+
outline-offset: -1px;
|
|
17309
|
+
}
|
|
17302
17310
|
.semi-tabs-bar-line.semi-tabs-bar-top .semi-tabs-tab:active {
|
|
17303
17311
|
border-bottom: 2px solid var(--semi-color-fill-1);
|
|
17304
17312
|
}
|
|
@@ -17325,6 +17333,10 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17325
17333
|
border-left: 2px solid var(--semi-color-fill-0);
|
|
17326
17334
|
background-color: var(--semi-color-fill-0);
|
|
17327
17335
|
}
|
|
17336
|
+
.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:focus-visible {
|
|
17337
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17338
|
+
outline-offset: -2px;
|
|
17339
|
+
}
|
|
17328
17340
|
.semi-tabs-bar-line.semi-tabs-bar-left .semi-tabs-tab:active {
|
|
17329
17341
|
border-left: 2px solid var(--semi-color-fill-1);
|
|
17330
17342
|
background-color: var(--semi-color-fill-1);
|
|
@@ -17410,6 +17422,10 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17410
17422
|
.semi-tabs-bar-card .semi-tabs-tab:hover {
|
|
17411
17423
|
background: var(--semi-color-fill-0);
|
|
17412
17424
|
}
|
|
17425
|
+
.semi-tabs-bar-card .semi-tabs-tab:focus-visible {
|
|
17426
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17427
|
+
outline-offset: -2px;
|
|
17428
|
+
}
|
|
17413
17429
|
.semi-tabs-bar-card .semi-tabs-tab:active {
|
|
17414
17430
|
background: var(--semi-color-fill-1);
|
|
17415
17431
|
}
|
|
@@ -17432,6 +17448,10 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17432
17448
|
border: none;
|
|
17433
17449
|
background-color: var(--semi-color-fill-0);
|
|
17434
17450
|
}
|
|
17451
|
+
.semi-tabs-bar-button .semi-tabs-tab:focus-visible {
|
|
17452
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17453
|
+
outline-offset: -2px;
|
|
17454
|
+
}
|
|
17435
17455
|
.semi-tabs-bar-button .semi-tabs-tab:active {
|
|
17436
17456
|
background-color: var(--semi-color-fill-1);
|
|
17437
17457
|
}
|
|
@@ -17452,6 +17472,9 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17452
17472
|
width: 100%;
|
|
17453
17473
|
overflow: hidden;
|
|
17454
17474
|
}
|
|
17475
|
+
.semi-tabs-pane:focus-visible {
|
|
17476
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17477
|
+
}
|
|
17455
17478
|
.semi-tabs-pane-inactive, .semi-tabs-content-no-animated .semi-tabs-pane-inactive {
|
|
17456
17479
|
display: none;
|
|
17457
17480
|
}
|
|
@@ -17564,6 +17587,9 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17564
17587
|
height: 20px;
|
|
17565
17588
|
padding: 2px 8px;
|
|
17566
17589
|
}
|
|
17590
|
+
.semi-tag-default:focus-visible, .semi-tag-small:focus-visible {
|
|
17591
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17592
|
+
}
|
|
17567
17593
|
.semi-tag-large {
|
|
17568
17594
|
font-size: 12px;
|
|
17569
17595
|
line-height: 16px;
|
|
@@ -17571,6 +17597,9 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17571
17597
|
padding: 4px 8px;
|
|
17572
17598
|
height: 24px;
|
|
17573
17599
|
}
|
|
17600
|
+
.semi-tag-large:focus-visible {
|
|
17601
|
+
outline: 2px solid var(--semi-color-primary-light-active);
|
|
17602
|
+
}
|
|
17574
17603
|
.semi-tag-invisible {
|
|
17575
17604
|
display: none;
|
|
17576
17605
|
}
|
|
@@ -17937,6 +17966,10 @@ body[theme-mode=dark], body .semi-always-dark {
|
|
|
17937
17966
|
color: var(--semi-color-text-0);
|
|
17938
17967
|
}
|
|
17939
17968
|
|
|
17969
|
+
.semi-tag-solid .semi-tag-close {
|
|
17970
|
+
color: var(--semi-color-white);
|
|
17971
|
+
}
|
|
17972
|
+
|
|
17940
17973
|
.semi-rtl .semi-tag,
|
|
17941
17974
|
.semi-portal-rtl .semi-tag {
|
|
17942
17975
|
direction: rtl;
|