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