diff --git a/.changeset/two-gifts-yawn.md b/.changeset/two-gifts-yawn.md new file mode 100644 index 0000000000..6757853e83 --- /dev/null +++ b/.changeset/two-gifts-yawn.md @@ -0,0 +1,5 @@ +--- +"@primer/css": patch +--- + +Updating the SegmentedControl component to role=list and use `ul`. diff --git a/docs/src/stories/components/SegmentedControl/SegmentedControl.stories.jsx b/docs/src/stories/components/SegmentedControl/SegmentedControl.stories.jsx index 969f6b7284..7dd45c1028 100644 --- a/docs/src/stories/components/SegmentedControl/SegmentedControl.stories.jsx +++ b/docs/src/stories/components/SegmentedControl/SegmentedControl.stories.jsx @@ -74,14 +74,14 @@ IconsAndText.args = { } export const IconsOnlyTemplate = ({fullWidth, ariaLabel, iconOnlyWhenNarrow}) => ( - <> - + + + ) export const IconsOnly = IconsOnlyTemplate.bind({}) diff --git a/docs/src/stories/components/SegmentedControl/SegmentedControlButton.stories.jsx b/docs/src/stories/components/SegmentedControl/SegmentedControlButton.stories.jsx index 1959b0bc38..e44028cedd 100644 --- a/docs/src/stories/components/SegmentedControl/SegmentedControlButton.stories.jsx +++ b/docs/src/stories/components/SegmentedControl/SegmentedControlButton.stories.jsx @@ -33,23 +33,25 @@ export default { // build every component case here in the template (private api) export const SegmentedControlButtonTemplate = ({selected, text, leadingVisual, iconOnly }) => ( <> - + aria-current={selected} + aria-label={iconOnly && text} + > +
+ {leadingVisual && ( + + )} + + {text} + )} +
+ + ) diff --git a/src/segmented-control/segmented-control.scss b/src/segmented-control/segmented-control.scss index eb8e9608d2..fba58f8674 100644 --- a/src/segmented-control/segmented-control.scss +++ b/src/segmented-control/segmented-control.scss @@ -1,13 +1,19 @@ // SegmentedControl +// stylelint-disable selector-max-type .SegmentedControl { - position: relative; display: inline-flex; + list-style: none; background-color: var(--color-segmented-control-bg); // stylelint-disable-next-line primer/borders border-radius: var(--primer-borderRadius-medium, $border-radius); // stylelint-disable-next-line primer/box-shadow box-shadow: var(--primer-borderInset-thin, inset 0 0 0 $border-width) var(--color-border-default); + + li { + position: relative; + display: inline-flex; + } } // Button ----------------------------------------- @@ -27,19 +33,19 @@ // stylelint-disable-next-line primer/borders border-radius: var(--primer-borderRadius-medium, $border-radius); - &:not(.SegmentedControl-button--selected):hover .SegmentedControl-content { + &[aria-current='false']:hover .SegmentedControl-content { background-color: var(--color-segmented-control-button-hover-bg); transition-duration: var(--primer-duration-fast, 80ms); } - &:not(.SegmentedControl-button--selected):active .SegmentedControl-content { + &[aria-current='false']:active .SegmentedControl-content { background-color: var(--color-segmented-control-button-active-bg); transition-duration: 0; } // Selected - &.SegmentedControl-button--selected { + &[aria-current='true'] { // stylelint-disable-next-line primer/typography font-weight: var(--base-text-weight-semibold, $font-weight-bold); background-color: var(--color-btn-bg); @@ -61,8 +67,8 @@ transition: border-color var(--primer-duration-medium, 160ms) cubic-bezier(0.3, 0.1, 0.5, 1); } - &.SegmentedControl-button--selected::before, - &.SegmentedControl-button--selected + .SegmentedControl-button::before { + &[aria-current='true']::before, + &[aria-current='true'] + .SegmentedControl-button::before { border-color: transparent; } } @@ -110,7 +116,8 @@ .SegmentedControl--fullWidth { display: flex; - .SegmentedControl-button { + .SegmentedControl-button, + li { flex: 1; justify-content: center; }