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;
}