Skip to content

Commit c0b6fd1

Browse files
committed
Make inner border radius of Buttons in ButtonGroup configurable
1 parent a71b3c2 commit c0b6fd1

File tree

11 files changed

+57
-38
lines changed

11 files changed

+57
-38
lines changed

src/lib/components/Button/Button.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import { resolveContextOrProp } from '../_helpers/resolveContextOrProp';
88
import { transferProps } from '../_helpers/transferProps';
99
import { ButtonGroupContext } from '../ButtonGroup';
1010
import { InputGroupContext } from '../InputGroup/InputGroupContext';
11+
import getRootPriorityClassName from '../_helpers/getRootPriorityClassName';
1112
import getRootLabelVisibilityClassName from './helpers/getRootLabelVisibilityClassName';
12-
import getRootPriorityClassName from './helpers/getRootPriorityClassName';
1313
import styles from './Button.scss';
1414

1515
export const Button = React.forwardRef((props, ref) => {

src/lib/components/Button/_base.scss

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// 1. ButtonGroup gap is implemented using the `margin` property so the buttons can overlap and reduce duplicate
2+
// borders.
3+
14
@use "sass:map";
25
@use "../../styles/tools/breakpoint";
36
@use "settings";
@@ -81,20 +84,23 @@
8184
z-index: map.get(settings.$group-z-indexes, button);
8285

8386
&:not(:first-child) {
84-
margin-left: var(--rui-local-gap);
85-
border-top-left-radius: 0;
86-
border-bottom-left-radius: 0;
87+
border-start-start-radius: var(--rui-local-inner-border-radius);
88+
border-end-start-radius: var(--rui-local-inner-border-radius);
8789
}
8890

8991
&:not(:last-child) {
90-
border-top-right-radius: 0;
91-
border-bottom-right-radius: 0;
92+
border-start-end-radius: var(--rui-local-inner-border-radius);
93+
border-end-end-radius: var(--rui-local-inner-border-radius);
9294
}
95+
}
9396

94-
&:focus,
95-
&:not(:disabled):hover {
96-
z-index: map.get(settings.$group-z-indexes, button-hover);
97-
}
97+
.isRootInButtonGroup:not(:first-child) {
98+
margin-inline-start: var(--rui-local-gap); // 1.
99+
}
100+
101+
.isRootInButtonGroup:focus,
102+
.isRootInButtonGroup:not(:disabled):hover {
103+
z-index: map.get(settings.$group-z-indexes, button-hover);
98104
}
99105

100106
.isRootInButtonGroup .startCorner,

src/lib/components/Button/_priorities.scss

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -146,19 +146,3 @@
146146
border-left: var(--rui-local-separator-width) solid var(--rui-local-separator-color);
147147
transform: translateX(calc(-0.5 * var(--rui-local-gap) - 50%));
148148
}
149-
150-
.isRootPriorityFilled.isRootInButtonGroup:not(:first-child) {
151-
--rui-local-gap: #{theme.$group-filled-gap};
152-
--rui-local-separator-width: #{theme.$group-filled-separator-width};
153-
--rui-local-separator-color: #{theme.$group-filled-separator-color};
154-
}
155-
156-
.isRootPriorityFlat.isRootInButtonGroup:not(:first-child) {
157-
--rui-local-gap: #{theme.$group-flat-gap};
158-
--rui-local-separator-width: #{theme.$group-flat-separator-width};
159-
--rui-local-separator-color: #{theme.$group-flat-separator-color};
160-
}
161-
162-
.isRootPriorityOutline.isRootInButtonGroup:not(:first-child) {
163-
--rui-local-gap: #{theme.$group-outline-gap};
164-
}

src/lib/components/Button/_theme.scss

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,6 @@ $disabled-cursor: var(--rui-Button--disabled__cursor);
1212
$feedback-opacity: var(--rui-Button--feedback__opacity);
1313
$feedback-cursor: var(--rui-Button--feedback__cursor);
1414

15-
$group-filled-gap: var(--rui-ButtonGroup--filled__gap);
16-
$group-filled-separator-width: var(--rui-ButtonGroup--filled__separator__width);
17-
$group-filled-separator-color: var(--rui-ButtonGroup--filled__separator__color);
18-
19-
$group-flat-gap: var(--rui-ButtonGroup--flat__gap);
20-
$group-flat-separator-width: var(--rui-ButtonGroup--flat__separator__width);
21-
$group-flat-separator-color: var(--rui-ButtonGroup--flat__separator__color);
22-
23-
$group-outline-gap: var(--rui-ButtonGroup--outline__gap);
24-
2515
$sizes: (
2616
small: (
2717
height: var(--rui-Button--small__height),

src/lib/components/ButtonGroup/ButtonGroup.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
22
import React from 'react';
33
import { withGlobalProps } from '../../provider';
44
import { classNames } from '../../utils/classNames';
5+
import getRootPriorityClassName from '../_helpers/getRootPriorityClassName';
56
import { isChildrenEmpty } from '../_helpers/isChildrenEmpty';
67
import { transferProps } from '../_helpers/transferProps';
78
import styles from './ButtonGroup.scss';
@@ -25,6 +26,7 @@ export const ButtonGroup = ({
2526
className={classNames(
2627
styles.root,
2728
block && styles.isRootBlock,
29+
getRootPriorityClassName(priority, styles),
2830
)}
2931
role="group"
3032
>

src/lib/components/ButtonGroup/ButtonGroup.scss

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
1+
// 1. ButtonGroup gap is implemented using the `margin` property on buttons so the buttons can overlap and reduce
2+
// duplicate borders.
3+
4+
@use "theme";
5+
16
.root {
2-
display: inline-flex;
7+
--rui-local-inner-border-radius: #{theme.$inner-border-radius};
8+
9+
display: inline-flex; // 1.
10+
}
11+
12+
.isRootPriorityFilled {
13+
--rui-local-gap: #{theme.$filled-gap};
14+
--rui-local-separator-width: #{theme.$filled-separator-width};
15+
--rui-local-separator-color: #{theme.$filled-separator-color};
16+
}
17+
18+
.isRootPriorityFlat {
19+
--rui-local-gap: #{theme.$flat-gap};
20+
--rui-local-separator-width: #{theme.$flat-separator-width};
21+
--rui-local-separator-color: #{theme.$flat-separator-color};
22+
}
23+
24+
.isRootPriorityOutline {
25+
--rui-local-gap: #{theme.$outline-gap};
326
}
427

528
.isRootBlock {

src/lib/components/ButtonGroup/README.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ its accessibility.
266266

267267
| Custom Property | Description |
268268
|--------------------------------------------------------------------|------------------------------------------------|
269+
| `--rui-ButtonGroup__inner-border-radius` | Inner border radius of buttons |
269270
| `--rui-ButtonGroup--filled__gap` | Gap between `filled` buttons |
270271
| `--rui-ButtonGroup--filled__separator__width` | Separator width for `filled` buttons |
271272
| `--rui-ButtonGroup--filled__separator__color` | Separator color for `filled` buttons |
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
$inner-border-radius: var(--rui-ButtonGroup__inner-border-radius);
2+
3+
$filled-gap: var(--rui-ButtonGroup--filled__gap);
4+
$filled-separator-width: var(--rui-ButtonGroup--filled__separator__width);
5+
$filled-separator-color: var(--rui-ButtonGroup--filled__separator__color);
6+
7+
$flat-gap: var(--rui-ButtonGroup--flat__gap);
8+
$flat-separator-width: var(--rui-ButtonGroup--flat__separator__width);
9+
$flat-separator-color: var(--rui-ButtonGroup--flat__separator__color);
10+
11+
$outline-gap: var(--rui-ButtonGroup--outline__gap);

src/lib/components/FormLayout/README.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ This is a demo of all components supported by FormLayout.
444444
/>
445445
<InputGroup label="Promo code">
446446
<TextField label="Promo code" />
447-
<Button label="Submit" />
447+
<Button label="Apply" color="secondary" priority="outline" />
448448
</InputGroup>
449449
</FormLayout>
450450
</div>

0 commit comments

Comments
 (0)