11import { clsx } from 'clsx'
22import type { To } from 'history'
33import React from 'react'
4- import styled from 'styled-components'
5- import Box from '../Box'
6- import { get } from '../constants'
74import type { SxProp } from '../sx'
8- import sx from '../sx'
95import type { ComponentProps } from '../utils/types'
106import classes from './Breadcrumbs.module.css'
11- import { toggleStyledComponent } from '../internal/utils/toggleStyledComponent'
12- import { useFeatureFlag } from '../FeatureFlags'
137import type { ForwardRefComponent as PolymorphicForwardRefComponent } from '../utils/polymorphic'
8+ import { toggleSxComponent } from '../internal/utils/toggleSxComponent'
149
1510const SELECTED_CLASS = 'selected'
16- const CSS_MODULES_FLAG = 'primer_react_css_modules_ga'
17-
18- const Wrapper = toggleStyledComponent (
19- CSS_MODULES_FLAG ,
20- 'li' ,
21- styled . li `
22- display: inline-block;
23- white-space: nowrap;
24- list-style: none;
25- &::after {
26- font-size: ${ get ( 'fontSizes.1' ) } ;
27- content: '';
28- display: inline-block;
29- height: 0.8em;
30- margin: 0 0.5em;
31- border-right: 0.1em solid;
32- border-color: ${ get ( 'colors.fg.muted' ) } ;
33- transform: rotate(15deg) translateY(0.0625em);
34- }
35- &:first-child {
36- margin-left: 0;
37- }
38- &:last-child {
39- &::after {
40- content: none;
41- }
42- }
43- ` ,
44- )
45-
46- const BreadcrumbsBase = toggleStyledComponent (
47- CSS_MODULES_FLAG ,
48- 'nav' ,
49- styled . nav < SxProp > `
50- display: flex;
51- justify-content: space-between;
52- ${ sx } ;
53- ` ,
54- )
5511
5612export type BreadcrumbsProps = React . PropsWithChildren <
5713 {
@@ -60,31 +16,16 @@ export type BreadcrumbsProps = React.PropsWithChildren<
6016>
6117
6218const BreadcrumbsList = ( { children} : React . PropsWithChildren ) => {
63- const enabled = useFeatureFlag ( CSS_MODULES_FLAG )
64- if ( enabled ) {
65- return < ol className = { classes . BreadcrumbsList } > { children } </ ol >
66- }
67-
68- return (
69- < Box as = "ol" my = { 0 } pl = { 0 } >
70- { children }
71- </ Box >
72- )
19+ return < ol className = { classes . BreadcrumbsList } > { children } </ ol >
7320}
7421
75- function Breadcrumbs ( { className, children, sx : sxProp } : React . PropsWithChildren < BreadcrumbsProps > ) {
76- const enabled = useFeatureFlag ( CSS_MODULES_FLAG )
77- const wrappedChildren = React . Children . map ( children , child => (
78- < Wrapper className = { clsx ( { [ classes . ItemWrapper ] : enabled } ) } > { child } </ Wrapper >
79- ) )
22+ const BreadcrumbsBaseComponent = toggleSxComponent ( 'nav' ) as React . ComponentType < BreadcrumbsProps >
23+ function Breadcrumbs ( { className, children, sx : sxProp } : BreadcrumbsProps ) {
24+ const wrappedChildren = React . Children . map ( children , child => < li className = { classes . ItemWrapper } > { child } </ li > )
8025 return (
81- < BreadcrumbsBase
82- className = { clsx ( className , { [ classes . BreadcrumbsBase ] : enabled } ) }
83- aria-label = "Breadcrumbs"
84- sx = { sxProp }
85- >
26+ < BreadcrumbsBaseComponent className = { clsx ( className , classes . BreadcrumbsBase ) } aria-label = "Breadcrumbs" sx = { sxProp } >
8627 < BreadcrumbsList > { wrappedChildren } </ BreadcrumbsList >
87- </ BreadcrumbsBase >
28+ </ BreadcrumbsBaseComponent >
8829 )
8930}
9031
@@ -93,41 +34,18 @@ type StyledBreadcrumbsItemProps = {
9334 selected ?: boolean
9435 className ?: string
9536} & SxProp &
96- React . ComponentPropsWithoutRef < 'a' >
97-
98- const StyledBreadcrumbsItem = toggleStyledComponent (
99- CSS_MODULES_FLAG ,
100- 'a' ,
101- styled . a `
102- color: ${ get ( 'colors.accent.fg' ) } ;
103- display: inline-block;
104- font-size: ${ get ( 'fontSizes.1' ) } ;
105- text-decoration: none;
106- &:hover,
107- &:focus {
108- text-decoration: underline;
109- }
110- &.selected {
111- color: ${ get ( 'colors.fg.default' ) } ;
112- pointer-events: none;
113- }
114- &.selected:focus {
115- text-decoration: none;
116- }
117- ${ sx } ;
118- ` ,
119- )
37+ React . HTMLAttributes < HTMLAnchorElement > &
38+ React . ComponentPropsWithRef < 'a' >
12039
40+ const BreadcrumbsItemBaseComponent = toggleSxComponent ( 'a' ) as React . ComponentType < StyledBreadcrumbsItemProps >
12141const BreadcrumbsItem = React . forwardRef ( ( { selected, className, ...rest } , ref ) => {
122- const enabled = useFeatureFlag ( CSS_MODULES_FLAG )
12342 return (
124- < StyledBreadcrumbsItem
125- className = { clsx ( className , {
43+ < BreadcrumbsItemBaseComponent
44+ className = { clsx ( className , classes . Item , {
12645 [ SELECTED_CLASS ] : selected ,
127- [ classes . Item ] : enabled ,
128- [ classes . ItemSelected ] : enabled && selected ,
46+ [ classes . ItemSelected ] : selected ,
12947 } ) }
130- aria-current = { selected ? 'page' : null }
48+ aria-current = { selected ? 'page' : undefined }
13149 ref = { ref }
13250 { ...rest }
13351 />
@@ -149,7 +67,7 @@ export const Breadcrumb = Object.assign(Breadcrumbs, {Item: BreadcrumbsItem})
14967/**
15068 * @deprecated Use the `BreadcrumbsProps` type instead
15169 */
152- export type BreadcrumbProps = ComponentProps < typeof BreadcrumbsBase >
70+ export type BreadcrumbProps = BreadcrumbsProps
15371
15472/**
15573 * @deprecated Use the `BreadcrumbsItemProps` type instead
0 commit comments