diff --git a/.changeset/fifty-deers-applaud.md b/.changeset/fifty-deers-applaud.md
new file mode 100644
index 00000000000..b8d3f6a0372
--- /dev/null
+++ b/.changeset/fifty-deers-applaud.md
@@ -0,0 +1,5 @@
+---
+"@primer/react": patch
+---
+
+The `UnderlinePanels` component wasn't supporting passing in `className`. Adding to the prop list
diff --git a/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.test.tsx b/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.test.tsx
index ebda94ffbe2..ad3e726f8ac 100644
--- a/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.test.tsx
+++ b/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.test.tsx
@@ -5,6 +5,7 @@ import {render, screen} from '@testing-library/react'
import UnderlinePanels from './UnderlinePanels'
import {behavesAsComponent} from '../../utils/testing'
import TabContainerElement from '@github/tab-container-element'
+import {FeatureFlags} from '../../FeatureFlags'
TabContainerElement.prototype.selectTab = jest.fn()
@@ -158,4 +159,28 @@ describe('UnderlinePanels', () => {
expect(spy).toHaveBeenCalled()
spy.mockRestore()
})
+ it('should support `className` on the outermost element', () => {
+ const Element = () => (
+
+ Tab 1
+ Tab 2
+ Panel 1
+ Panel 2
+
+ )
+ const FeatureFlagElement = () => {
+ return (
+
+
+
+ )
+ }
+ expect(render().baseElement.firstChild?.firstChild?.firstChild).toHaveClass('test-class-name')
+ expect(render().baseElement.firstChild?.firstChild?.firstChild).toHaveClass('test-class-name')
+ })
})
diff --git a/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.tsx b/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.tsx
index 13fbb20c41e..de6ca596e42 100644
--- a/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.tsx
+++ b/packages/react/src/experimental/UnderlinePanels/UnderlinePanels.tsx
@@ -27,6 +27,7 @@ import useIsomorphicLayoutEffect from '../../utils/useIsomorphicLayoutEffect'
import {useFeatureFlag} from '../../FeatureFlags'
import classes from './UnderlinePanels.module.css'
import {toggleStyledComponent} from '../../internal/utils/toggleStyledComponent'
+import {clsx} from 'clsx'
const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_staff'
@@ -51,6 +52,10 @@ export type UnderlinePanelsProps = {
* Loading state for all counters. It displays loading animation for individual counters until all are resolved. It is needed to prevent multiple layout shift.
*/
loadingCounters?: boolean
+ /**
+ * Class name for custom styling
+ */
+ className?: string
} & SxProp
export type TabProps = PropsWithChildren<{
@@ -89,6 +94,7 @@ const UnderlinePanels: FC = ({
children,
loadingCounters,
sx: sxProp = defaultSxProp,
+ className,
...props
}) => {
const [iconsVisible, setIconsVisible] = useState(true)
@@ -184,7 +190,7 @@ const UnderlinePanels: FC = ({
slot="tablist-wrapper"
data-icons-visible={iconsVisible}
sx={sxProp}
- className={classes.StyledUnderlineWrapper}
+ className={clsx(className, classes.StyledUnderlineWrapper)}
{...props}
>
@@ -214,6 +220,7 @@ const UnderlinePanels: FC = ({
},
sxProp as SxProp,
)}
+ className={className}
{...props}
>