|
1 | | -import React from 'react' |
2 | | -import { |
3 | | - type TokenProps as PrimerTokenProps, |
4 | | - type SxProp, |
5 | | - Token as PrimerToken, |
6 | | - useTheme, |
7 | | - theme as defaultTheme, |
8 | | -} from '@primer/react' |
9 | | -import css from '@styled-system/css' |
| 1 | +import React, {forwardRef} from 'react' |
| 2 | +import {type TokenProps as PrimerTokenProps, Token as PrimerToken} from '@primer/react' |
| 3 | +import {sx, type SxProp} from '../sx' |
10 | 4 | import type {ForwardRefComponent} from '../polymorphic' |
11 | 5 | import type {PropsWithChildren} from 'react' |
| 6 | +import styled from 'styled-components' |
12 | 7 |
|
13 | 8 | type TokenProps = PropsWithChildren<PrimerTokenProps> & SxProp |
14 | 9 |
|
15 | | -const Token: ForwardRefComponent<'a' | 'button' | 'span', TokenProps> = React.forwardRef<HTMLElement, TokenProps>( |
16 | | - ({sx: sxProp, style, ...rest}, ref) => { |
17 | | - const contextTheme = useTheme() |
18 | | - const theme = contextTheme.theme || defaultTheme |
| 10 | +const StyledToken: ForwardRefComponent<'a' | 'button' | 'span', TokenProps> = styled(PrimerToken).withConfig({ |
| 11 | + shouldForwardProp: prop => (prop as keyof TokenProps) !== 'sx', |
| 12 | +})<TokenProps>` |
| 13 | + ${sx} |
| 14 | +` |
19 | 15 |
|
20 | | - // If no sx prop is provided, just return PrimerToken directly |
21 | | - if (!sxProp) { |
22 | | - return <PrimerToken {...rest} style={style} ref={ref} /> |
23 | | - } |
24 | | - |
25 | | - // Convert sx to CSS styles using the theme context |
26 | | - const sxStyles = css(sxProp)(theme) |
27 | | - const mergedStyle = {...sxStyles, ...style} |
28 | | - |
29 | | - return <PrimerToken {...rest} style={mergedStyle} ref={ref} /> |
30 | | - }, |
31 | | -) as ForwardRefComponent<'a' | 'button' | 'span', TokenProps> |
| 16 | +const Token = forwardRef<HTMLElement, TokenProps>(({as, ...props}, ref) => { |
| 17 | + return <StyledToken {...props} {...(as ? {forwardedAs: as} : {})} ref={ref} /> |
| 18 | +}) as ForwardRefComponent<'a' | 'button' | 'span', TokenProps> |
32 | 19 |
|
33 | 20 | export {Token, type TokenProps} |
0 commit comments