diff --git a/.changeset/bright-islands-kick.md b/.changeset/bright-islands-kick.md new file mode 100644 index 000000000000..a1cce3b79d92 --- /dev/null +++ b/.changeset/bright-islands-kick.md @@ -0,0 +1,5 @@ +--- +'@primer/react': minor +--- + +Add support for providing icons as an element to UnderlineNavItem diff --git a/packages/react/src/UnderlineNav/UnderlineNav.test.tsx b/packages/react/src/UnderlineNav/UnderlineNav.test.tsx index ae1383d5bab4..c3b113981de8 100644 --- a/packages/react/src/UnderlineNav/UnderlineNav.test.tsx +++ b/packages/react/src/UnderlineNav/UnderlineNav.test.tsx @@ -1,5 +1,5 @@ import React from 'react' -import {render} from '@testing-library/react' +import {render, screen} from '@testing-library/react' import userEvent from '@testing-library/user-event' import type {IconProps} from '@primer/octicons-react' import { @@ -186,6 +186,22 @@ describe('UnderlineNav', () => { // We are expecting a left value back, that way we know the `getAnchoredPosition` ran. expect(results).toEqual(expect.objectContaining({left: 0})) }) + + it('should support icons passed in as an element', () => { + render( + + }> + Page one + + }>Page two + }>Page three + , + ) + + expect(screen.getByTestId('page-one-icon')).toBeInTheDocument() + expect(screen.getByTestId('page-two-icon')).toBeInTheDocument() + expect(screen.getByTestId('page-three-icon')).toBeInTheDocument() + }) }) describe('Keyboard Navigation', () => { diff --git a/packages/react/src/UnderlineNav/UnderlineNavItem.tsx b/packages/react/src/UnderlineNav/UnderlineNavItem.tsx index f1b7e74f2097..f63c38c270b2 100644 --- a/packages/react/src/UnderlineNav/UnderlineNavItem.tsx +++ b/packages/react/src/UnderlineNav/UnderlineNavItem.tsx @@ -38,7 +38,7 @@ export type UnderlineNavItemProps = { /** * Icon before the text */ - icon?: React.FunctionComponent + icon?: React.FunctionComponent | React.ReactElement /** * Renders `UnderlineNav.Item` as given component i.e. react-router's Link **/ diff --git a/packages/react/src/internal/components/UnderlineTabbedInterface.tsx b/packages/react/src/internal/components/UnderlineTabbedInterface.tsx index 38acc6aafd51..f00ae0bd750f 100644 --- a/packages/react/src/internal/components/UnderlineTabbedInterface.tsx +++ b/packages/react/src/internal/components/UnderlineTabbedInterface.tsx @@ -193,7 +193,7 @@ export type UnderlineItemProps = { iconsVisible?: boolean loadingCounters?: boolean counter?: number | string - icon?: FC + icon?: FC | React.ReactElement id?: string } & SxProp @@ -213,11 +213,7 @@ export const UnderlineItem = forwardRef( ) => { return ( - {iconsVisible && Icon && ( - - - - )} + {iconsVisible && Icon && {typeof Icon === 'function' ? : Icon}} {children && ( {children}