@douyinfe/semi-ui 2.19.0-alpha.4 → 2.19.0-alpha.7

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 (52) hide show
  1. package/button/buttonGroup.tsx +38 -4
  2. package/button/index.tsx +2 -0
  3. package/checkbox/_story/checkbox.stories.js +0 -2
  4. package/checkbox/checkbox.tsx +19 -22
  5. package/dist/css/semi.css +65 -94
  6. package/dist/css/semi.min.css +1 -1
  7. package/dist/umd/semi-ui.js +83 -35
  8. package/dist/umd/semi-ui.js.map +1 -1
  9. package/dist/umd/semi-ui.min.js +1 -1
  10. package/dist/umd/semi-ui.min.js.map +1 -1
  11. package/lib/cjs/button/buttonGroup.d.ts +1 -0
  12. package/lib/cjs/button/buttonGroup.js +52 -3
  13. package/lib/cjs/button/index.d.ts +1 -0
  14. package/lib/cjs/button/index.js +1 -0
  15. package/lib/cjs/carousel/CarouselIndicator.d.ts +1 -1
  16. package/lib/cjs/carousel/index.d.ts +1 -1
  17. package/lib/cjs/checkbox/checkbox.js +10 -18
  18. package/lib/cjs/datePicker/dateInput.d.ts +1 -1
  19. package/lib/cjs/datePicker/datePicker.d.ts +1 -1
  20. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -1
  21. package/lib/cjs/radio/radio.d.ts +1 -1
  22. package/lib/cjs/radio/radio.js +21 -13
  23. package/lib/cjs/radio/radioGroup.d.ts +1 -1
  24. package/lib/cjs/radio/radioGroup.js +1 -1
  25. package/lib/cjs/timePicker/TimePicker.d.ts +2 -2
  26. package/lib/cjs/timePicker/TimeShape.d.ts +1 -1
  27. package/lib/cjs/timePicker/index.d.ts +2 -2
  28. package/lib/cjs/typography/title.d.ts +1 -1
  29. package/lib/cjs/upload/index.d.ts +1 -1
  30. package/lib/es/button/buttonGroup.d.ts +1 -0
  31. package/lib/es/button/buttonGroup.js +50 -3
  32. package/lib/es/button/index.d.ts +1 -0
  33. package/lib/es/button/index.js +1 -0
  34. package/lib/es/carousel/CarouselIndicator.d.ts +1 -1
  35. package/lib/es/carousel/index.d.ts +1 -1
  36. package/lib/es/checkbox/checkbox.js +10 -18
  37. package/lib/es/datePicker/dateInput.d.ts +1 -1
  38. package/lib/es/datePicker/datePicker.d.ts +1 -1
  39. package/lib/es/datePicker/monthsGrid.d.ts +1 -1
  40. package/lib/es/radio/radio.d.ts +1 -1
  41. package/lib/es/radio/radio.js +21 -13
  42. package/lib/es/radio/radioGroup.d.ts +1 -1
  43. package/lib/es/radio/radioGroup.js +1 -1
  44. package/lib/es/timePicker/TimePicker.d.ts +2 -2
  45. package/lib/es/timePicker/TimeShape.d.ts +1 -1
  46. package/lib/es/timePicker/index.d.ts +2 -2
  47. package/lib/es/typography/title.d.ts +1 -1
  48. package/lib/es/upload/index.d.ts +1 -1
  49. package/package.json +7 -7
  50. package/radio/_story/radio.stories.js +5 -5
  51. package/radio/radio.tsx +20 -19
  52. package/radio/radioGroup.tsx +1 -1
@@ -1,9 +1,10 @@
1
- import React, { isValidElement, cloneElement } from 'react';
1
+ import React, { isValidElement, cloneElement, ReactNode } from 'react';
2
2
  import BaseComponent, { BaseProps } from '../_base/baseComponent';
3
3
  import PropTypes from 'prop-types';
4
4
  import classNames from 'classnames';
5
5
  import { cssClasses, strings } from '@douyinfe/semi-foundation/button/constants';
6
- import { Type, Size } from './Button';
6
+ import { get } from 'lodash';
7
+ import { Type, Size, ButtonProps } from './Button';
7
8
 
8
9
  import '@douyinfe/semi-foundation/button/button.scss';
9
10
 
@@ -39,9 +40,41 @@ export default class ButtonGroup extends BaseComponent<ButtonGroupProps> {
39
40
  size: 'default',
40
41
  };
41
42
 
43
+ getInnerWithLine(inner) {
44
+ const innerWithLine: ReactNode[] = [];
45
+ let lineCls = `${prefixCls}-group-line`;
46
+ if (inner.length > 1) {
47
+ inner.slice(0, -1).forEach(item => {
48
+ const isButtonType = get(item, 'type.elementType') === 'Button';
49
+ const buttonProps = get(item, 'props') as ButtonProps;
50
+ if (buttonProps) {
51
+ const { type, theme, disabled } = buttonProps;
52
+ lineCls = classNames(
53
+ `${prefixCls}-group-line`,
54
+ `${prefixCls}-group-line-${theme ?? 'light'}`,
55
+ `${prefixCls}-group-line-${type ?? 'primary'}`,
56
+ {
57
+ [`${prefixCls}-group-line-disabled`]: disabled,
58
+ }
59
+ );
60
+ }
61
+ if (isButtonType) {
62
+ innerWithLine.push(item, <span className={lineCls} />);
63
+ } else {
64
+ innerWithLine.push(item);
65
+ }
66
+ });
67
+ innerWithLine.push(inner.slice(-1));
68
+ return innerWithLine;
69
+ } else {
70
+ return inner;
71
+ }
72
+ }
73
+
42
74
  render() {
43
75
  const { children, disabled, size, type, className, 'aria-label': ariaLabel, ...rest } = this.props;
44
- let inner;
76
+ let inner: ReactNode[];
77
+ let innerWithLine: ReactNode[] = [];
45
78
  const cls = classNames(`${prefixCls}-group`, className);
46
79
 
47
80
  if (children) {
@@ -50,7 +83,8 @@ export default class ButtonGroup extends BaseComponent<ButtonGroupProps> {
50
83
  ? cloneElement(itm, { disabled, size, type, ...itm.props, ...rest, key: index })
51
84
  : itm
52
85
  ));
86
+ innerWithLine = this.getInnerWithLine(inner);
53
87
  }
54
- return <div className={cls} role="group" aria-label={ariaLabel}>{inner}</div>;
88
+ return <div className={cls} role="group" aria-label={ariaLabel}>{innerWithLine}</div>;
55
89
  }
56
90
  }
package/button/index.tsx CHANGED
@@ -18,6 +18,7 @@ class Button extends React.PureComponent<ButtonProps> {
18
18
  ...BaseButton.propTypes,
19
19
  ...IconButton.propTypes,
20
20
  };
21
+ static elementType: string;
21
22
  constructor(props = {}) {
22
23
  super(props);
23
24
  }
@@ -34,5 +35,6 @@ class Button extends React.PureComponent<ButtonProps> {
34
35
  }
35
36
  }
36
37
  }
38
+ Button.elementType = 'Button';
37
39
 
38
40
  export default Button;
@@ -31,8 +31,6 @@ export const CheckboxDefault = () => {
31
31
  </Checkbox>
32
32
  <br />
33
33
  <Checkbox indeterminate>indeterminate</Checkbox>
34
- <Checkbox onChange={e => console.log(e)} value={1} onChange={v => console.log(v)}>
35
- </Checkbox>
36
34
  </div>
37
35
  );
38
36
  };
@@ -235,27 +235,20 @@ class Checkbox extends BaseComponent<CheckboxProps, CheckboxState> {
235
235
  const name = inGroup && this.context.checkboxGroup.name;
236
236
  const xSemiPropChildren = this.props['x-semi-children-alias'] || 'children';
237
237
 
238
- const renderContent = () => {
239
- if (!children && !extra) {
240
- return null;
241
- }
242
-
243
- return (
244
- <div className={`${prefix}-content`}>
245
- {children ? (
246
- <span id={addonId} className={`${prefix}-addon`} x-semi-prop={xSemiPropChildren}>
247
- {children}
248
- </span>
249
- ) : null}
250
- {extra ? (
251
- <div id={extraId} className={extraCls} x-semi-prop="extra">
252
- {extra}
253
- </div>
254
- ) : null}
255
- </div>
256
- );
257
- };
258
-
238
+ const renderContent = () => (
239
+ <>
240
+ {children ? (
241
+ <span id={addonId} className={`${prefix}-addon`} x-semi-prop={xSemiPropChildren}>
242
+ {children}
243
+ </span>
244
+ ) : null}
245
+ {extra ? (
246
+ <div id={extraId} className={extraCls} x-semi-prop="extra">
247
+ {extra}
248
+ </div>
249
+ ) : null}
250
+ </>
251
+ );
259
252
  return (
260
253
  // label is better than span, however span is here which is to solve gitlab issue #364
261
254
  <span
@@ -283,7 +276,11 @@ class Checkbox extends BaseComponent<CheckboxProps, CheckboxState> {
283
276
  onInputFocus={this.handleFocusVisible}
284
277
  onInputBlur={this.handleBlur}
285
278
  />
286
- {renderContent()}
279
+ {
280
+ props.isCardType ?
281
+ <div>{renderContent()}</div> :
282
+ renderContent()
283
+ }
287
284
  </span>
288
285
  );
289
286
  }
package/dist/css/semi.css CHANGED
@@ -1778,6 +1778,10 @@ body {
1778
1778
  .semi-button-block {
1779
1779
  width: 100%;
1780
1780
  }
1781
+ .semi-button-group {
1782
+ display: flex;
1783
+ flex-wrap: wrap;
1784
+ }
1781
1785
  .semi-button-group > .semi-button {
1782
1786
  margin: 0;
1783
1787
  padding-left: 0;
@@ -1816,13 +1820,46 @@ body {
1816
1820
  border-top-left-radius: var(--semi-border-radius-small);
1817
1821
  border-bottom-left-radius: var(--semi-border-radius-small);
1818
1822
  }
1819
- .semi-button-group > .semi-button:not(:last-child) .semi-button-content {
1820
- border-right: 1px var(--semi-color-border) solid;
1821
- }
1822
1823
  .semi-button-group > .semi-button:last-child {
1823
1824
  border-top-right-radius: var(--semi-border-radius-small);
1824
1825
  border-bottom-right-radius: var(--semi-border-radius-small);
1825
1826
  }
1827
+ .semi-button-group-line {
1828
+ display: inline-flex;
1829
+ align-items: center;
1830
+ background-color: var(--semi-color-border);
1831
+ }
1832
+ .semi-button-group-line-primary {
1833
+ background-color: var(--semi-color-primary);
1834
+ }
1835
+ .semi-button-group-line-secondary {
1836
+ background-color: var(--semi-color-secondary);
1837
+ }
1838
+ .semi-button-group-line-tertiary {
1839
+ background-color: var(--semi-color-tertiary);
1840
+ }
1841
+ .semi-button-group-line-warning {
1842
+ background-color: var(--semi-color-warning);
1843
+ }
1844
+ .semi-button-group-line-danger {
1845
+ background-color: var(--semi-color-danger);
1846
+ }
1847
+ .semi-button-group-line-disabled {
1848
+ background-color: var(--semi-color-disabled-bg);
1849
+ }
1850
+ .semi-button-group-line-light {
1851
+ background-color: var(--semi-color-fill-0);
1852
+ }
1853
+ .semi-button-group-line-borderless {
1854
+ background-color: transparent;
1855
+ }
1856
+ .semi-button-group-line::before {
1857
+ display: block;
1858
+ content: "";
1859
+ width: 1px;
1860
+ height: 20px;
1861
+ background-color: var(--semi-color-border);
1862
+ }
1826
1863
 
1827
1864
  .semi-rtl .semi-button,
1828
1865
  .semi-portal-rtl .semi-button {
@@ -3471,7 +3508,7 @@ body {
3471
3508
  box-sizing: border-box;
3472
3509
  position: relative;
3473
3510
  display: flex;
3474
- align-items: flex-start;
3511
+ align-items: center;
3475
3512
  flex-wrap: wrap;
3476
3513
  font-size: 14px;
3477
3514
  line-height: 20px;
@@ -3479,7 +3516,6 @@ body {
3479
3516
  cursor: pointer;
3480
3517
  transition: background-color var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest), border var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest);
3481
3518
  transform: scale(var(--semi-transform_scale-none));
3482
- column-gap: 8px;
3483
3519
  }
3484
3520
  .semi-checkbox input[type=checkbox] {
3485
3521
  position: absolute;
@@ -3490,16 +3526,11 @@ body {
3490
3526
  margin: 0;
3491
3527
  opacity: 0;
3492
3528
  }
3493
- .semi-checkbox-content {
3494
- flex: 1;
3495
- display: flex;
3496
- flex-direction: column;
3497
- row-gap: 4px;
3498
- }
3499
3529
  .semi-checkbox-addon {
3500
3530
  display: flex;
3501
3531
  flex: 1;
3502
3532
  align-items: center;
3533
+ padding-left: 8px;
3503
3534
  color: var(--semi-color-text-0);
3504
3535
  line-height: 20px;
3505
3536
  user-select: none;
@@ -3728,7 +3759,9 @@ body {
3728
3759
  flex-grow: 1;
3729
3760
  flex-basis: 100%;
3730
3761
  box-sizing: border-box;
3762
+ padding-left: 24px;
3731
3763
  color: var(--semi-color-text-2);
3764
+ margin-top: 4px;
3732
3765
  }
3733
3766
  .semi-checkbox-focus {
3734
3767
  outline: 2px solid var(--semi-color-primary-light-active);
@@ -14631,9 +14664,8 @@ body {
14631
14664
  font-size: 14px;
14632
14665
  line-height: 20px;
14633
14666
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
14634
- position: relative;
14635
14667
  display: inline-flex;
14636
- flex-wrap: wrap;
14668
+ column-gap: 8px;
14637
14669
  transition: background-color var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest), border var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest);
14638
14670
  min-height: 20px;
14639
14671
  min-width: 16px;
@@ -14682,6 +14714,7 @@ body {
14682
14714
  border-radius: var(--semi-border-radius-small);
14683
14715
  }
14684
14716
  .semi-radio-buttonRadioGroup {
14717
+ position: relative;
14685
14718
  padding: 4px;
14686
14719
  border-radius: var(--semi-border-radius-small);
14687
14720
  line-height: 16px;
@@ -14706,8 +14739,6 @@ body {
14706
14739
  transition: background-color var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest), border var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest);
14707
14740
  }
14708
14741
  .semi-radio-cardRadioGroup .semi-radio-inner {
14709
- position: relative;
14710
- margin-right: 8px;
14711
14742
  flex-shrink: 0;
14712
14743
  }
14713
14744
  .semi-radio-cardRadioGroup .semi-radio-inner-display {
@@ -14718,8 +14749,6 @@ body {
14718
14749
  font-size: 14px;
14719
14750
  line-height: 20px;
14720
14751
  color: var(--semi-color-text-0);
14721
- margin-left: 0;
14722
- padding-left: 0;
14723
14752
  }
14724
14753
  .semi-radio-cardRadioGroup .semi-radio-extra {
14725
14754
  font-weight: normal;
@@ -14776,19 +14805,18 @@ body {
14776
14805
  border-color: var(--semi-color-primary-disabled);
14777
14806
  }
14778
14807
  .semi-radio-inner {
14779
- position: absolute;
14780
- display: inline-block;
14781
- top: 2px;
14782
- left: 0;
14808
+ display: inline-flex;
14809
+ margin-top: 2px;
14810
+ position: relative;
14783
14811
  width: 16px;
14784
14812
  height: 16px;
14785
14813
  vertical-align: sub;
14786
14814
  user-select: none;
14787
14815
  }
14788
14816
  .semi-radio-inner-display {
14789
- position: absolute;
14790
- left: 0;
14791
- top: 0;
14817
+ display: inline-flex;
14818
+ align-items: center;
14819
+ justify-content: center;
14792
14820
  box-sizing: border-box;
14793
14821
  width: 16px;
14794
14822
  height: 16px;
@@ -14798,11 +14826,14 @@ body {
14798
14826
  transition: background-color var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest), border var(--semi-transition_duration-faster) var(--semi-transition_function-easeIn) var(--semi-transition_delay-fastest);
14799
14827
  }
14800
14828
  .semi-radio-inner-display .semi-icon {
14801
- position: absolute;
14802
14829
  width: 100%;
14803
14830
  height: 100%;
14804
14831
  font-size: 14px;
14805
14832
  }
14833
+ .semi-radio-content {
14834
+ display: flex;
14835
+ flex-direction: column;
14836
+ }
14806
14837
  .semi-radio:hover .semi-radio-inner-display {
14807
14838
  background: var(--semi-color-fill-0);
14808
14839
  }
@@ -14811,14 +14842,11 @@ body {
14811
14842
  }
14812
14843
  .semi-radio-addon {
14813
14844
  user-select: none;
14814
- padding-left: 8px;
14815
- margin-left: 16px;
14816
14845
  color: var(--semi-color-text-0);
14817
14846
  display: inline-flex;
14818
14847
  align-items: center;
14819
14848
  }
14820
14849
  .semi-radio-addon-buttonRadio {
14821
- margin-left: 0;
14822
14850
  text-align: center;
14823
14851
  border-radius: var(--semi-border-radius-small);
14824
14852
  font-weight: 600;
@@ -14902,11 +14930,7 @@ body {
14902
14930
  color: var(--semi-color-disabled-text);
14903
14931
  }
14904
14932
  .semi-radio-extra {
14905
- flex-grow: 1;
14906
- flex-basis: 100%;
14907
- flex-shrink: 0;
14908
14933
  color: var(--semi-color-text-2);
14909
- padding-left: 24px;
14910
14934
  box-sizing: border-box;
14911
14935
  }
14912
14936
  .semi-radio-focus {
@@ -14921,25 +14945,21 @@ body {
14921
14945
  line-height: 20px;
14922
14946
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
14923
14947
  }
14924
- .semi-radioGroup-vertical .semi-radio:last-of-type {
14925
- margin-bottom: 0;
14948
+ .semi-radioGroup-vertical {
14949
+ display: flex;
14950
+ flex-direction: column;
14951
+ row-gap: 12px;
14926
14952
  }
14927
14953
  .semi-radioGroup-vertical-default .semi-radio {
14928
- display: block;
14929
- margin-bottom: 12px;
14954
+ display: flex;
14930
14955
  }
14931
14956
  .semi-radioGroup-vertical-card .semi-radio {
14932
14957
  display: flex;
14933
- margin-bottom: 16px;
14934
- }
14935
- .semi-radioGroup-horizontal .semi-radio {
14936
- margin-right: 16px;
14937
- }
14938
- .semi-radioGroup-horizontal .semi-radio:last-of-type {
14939
- margin-right: 0;
14940
14958
  }
14941
- .semi-radioGroup-horizontal-default {
14942
- display: inline-block;
14959
+ .semi-radioGroup-horizontal {
14960
+ display: inline-flex;
14961
+ flex-wrap: wrap;
14962
+ gap: 16px;
14943
14963
  }
14944
14964
  .semi-radioGroup-buttonRadio {
14945
14965
  display: inline-block;
@@ -14963,59 +14983,10 @@ body {
14963
14983
  .semi-portal-rtl .semi-radio-buttonRadioGroup:not(:last-child) {
14964
14984
  padding-left: 0;
14965
14985
  }
14966
- .semi-rtl .semi-radio-inner,
14967
- .semi-portal-rtl .semi-radio-inner {
14968
- left: auto;
14969
- right: 0;
14970
- }
14971
- .semi-rtl .semi-radio-inner-display,
14972
- .semi-portal-rtl .semi-radio-inner-display {
14973
- left: auto;
14974
- right: 0;
14975
- }
14976
- .semi-rtl .semi-radio-addon,
14977
- .semi-portal-rtl .semi-radio-addon {
14978
- padding-left: 0;
14979
- margin-left: 0;
14980
- padding-right: 8px;
14981
- margin-right: 16px;
14982
- }
14983
- .semi-rtl .semi-radio-addon-buttonRadio,
14984
- .semi-portal-rtl .semi-radio-addon-buttonRadio {
14985
- margin-right: 0;
14986
- }
14987
- .semi-rtl .semi-radio-extra,
14988
- .semi-portal-rtl .semi-radio-extra {
14989
- padding-left: 0;
14990
- padding-right: 24px;
14991
- }
14992
- .semi-rtl-isCardRadioGroup .semi-radio-inner,
14993
- .semi-portal-rtl-isCardRadioGroup .semi-radio-inner {
14994
- margin-right: 0;
14995
- margin-left: 8px;
14996
- }
14997
- .semi-rtl-isCardRadioGroup .semi-radio-addon,
14998
- .semi-portal-rtl-isCardRadioGroup .semi-radio-addon {
14999
- margin-right: 0;
15000
- padding-right: 0;
15001
- }
15002
- .semi-rtl-isCardRadioGroup .semi-radio-extra,
15003
- .semi-portal-rtl-isCardRadioGroup .semi-radio-extra {
15004
- padding-right: 0;
15005
- }
15006
14986
  .semi-rtl .semi-radioGroup,
15007
14987
  .semi-portal-rtl .semi-radioGroup {
15008
14988
  direction: rtl;
15009
14989
  }
15010
- .semi-rtl .semi-radioGroup-horizontal .semi-radio,
15011
- .semi-portal-rtl .semi-radioGroup-horizontal .semi-radio {
15012
- margin-right: 0;
15013
- margin-left: 16px;
15014
- }
15015
- .semi-rtl .semi-radioGroup-horizontal .semi-radio:last-of-type,
15016
- .semi-portal-rtl .semi-radioGroup-horizontal .semi-radio:last-of-type {
15017
- margin-left: 0;
15018
- }
15019
14990
 
15020
14991
  .semi-rating {
15021
14992
  display: inline-block;