diff --git a/.changeset/olive-rats-serve.md b/.changeset/olive-rats-serve.md
new file mode 100644
index 00000000000..38e82f92605
--- /dev/null
+++ b/.changeset/olive-rats-serve.md
@@ -0,0 +1,5 @@
+---
+'@primer/react': major
+---
+
+Update Text component to no longer support sx.
diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.module.css b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.module.css
new file mode 100644
index 00000000000..d2aee9d9598
--- /dev/null
+++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.module.css
@@ -0,0 +1,10 @@
+.TextMutedWithMargin {
+ color: var(--fgColor-muted);
+ margin-left: var(--base-size-4);
+}
+
+.TextSmallMutedWithMargin {
+ font-size: var(--text-body-size-small);
+ color: var(--fgColor-muted);
+ margin-left: var(--base-size-4);
+}
diff --git a/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx
index 2af45cb998f..0c11a0d85ec 100644
--- a/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx
+++ b/packages/react/src/AnchoredOverlay/AnchoredOverlay.stories.tsx
@@ -8,6 +8,7 @@ import {Button} from '../Button'
import Octicon from '../Octicon'
import {action} from 'storybook/actions'
import {Stack} from '../Stack/Stack'
+import classes from './AnchoredOverlay.stories.module.css'
export default {
title: 'Components/AnchoredOverlay',
@@ -22,7 +23,7 @@ const hoverCard = (
monalisa
-
+
Monalisa Octocat
@@ -31,15 +32,11 @@ const hoverCard = (
Former beach cat and champion swimmer. Now your friendly octapus with a normal face.
-
- Interwebs
-
+ Interwebs
-
- Owns this repository
-
+ Owns this repository
)
diff --git a/packages/react/src/Button/Button.dev.stories.module.css b/packages/react/src/Button/Button.dev.stories.module.css
new file mode 100644
index 00000000000..351a8f5622c
--- /dev/null
+++ b/packages/react/src/Button/Button.dev.stories.module.css
@@ -0,0 +1,3 @@
+.DefaultText {
+ color: var(--fgColor-default);
+}
diff --git a/packages/react/src/Button/Button.dev.stories.tsx b/packages/react/src/Button/Button.dev.stories.tsx
index 977b86a74f5..1ec0d70bb6d 100644
--- a/packages/react/src/Button/Button.dev.stories.tsx
+++ b/packages/react/src/Button/Button.dev.stories.tsx
@@ -2,6 +2,7 @@ import {SearchIcon, TriangleDownIcon, EyeIcon, IssueClosedIcon, HeartFillIcon} f
import {Button, IconButton} from '.'
import {default as Text} from '../Text'
import {Stack} from '../Stack'
+import classes from './Button.dev.stories.module.css'
export default {
title: 'Components/Button/Dev',
@@ -67,7 +68,7 @@ export const TestSxProp = () => {
Invariant color overridden
- {colorMode}
+ {colorMode}
)
@@ -316,7 +316,7 @@ it('inherits dayScheme from parent', async () => {
Toggle
- {dayScheme}
+ {dayScheme}
)
@@ -342,7 +342,7 @@ it('inherits nightScheme from parent', async () => {
Toggle
- {nightScheme}
+ {nightScheme}
)
@@ -372,7 +372,7 @@ describe('setColorMode', () => {
render(
- Hello
+ Hello
,
)
@@ -402,7 +402,7 @@ describe('setDayScheme', () => {
render(
- Hello
+ Hello
,
)
@@ -432,7 +432,7 @@ describe('setNightScheme', () => {
render(
- Hello
+ Hello
,
)
@@ -470,7 +470,7 @@ describe('useColorSchemeVar', () => {
'inherit',
)
- return Hello
+ return Hello
}
render(
@@ -502,7 +502,7 @@ describe('useColorSchemeVar', () => {
function CustomBg() {
const customBg = useColorSchemeVar({dark: 'blue'}, 'red')
- return Hello
+ return Hello
}
render(
@@ -525,7 +525,7 @@ describe('useTheme().resolvedColorScheme', () => {
const Component = () => {
const {resolvedColorScheme} = useTheme()
- return {resolvedColorScheme}
+ return {resolvedColorScheme}
}
render()
@@ -537,7 +537,7 @@ describe('useTheme().resolvedColorScheme', () => {
const Component = () => {
const {resolvedColorScheme} = useTheme()
- return {resolvedColorScheme}
+ return {resolvedColorScheme}
}
render(
@@ -553,7 +553,7 @@ describe('useTheme().resolvedColorScheme', () => {
const Component = () => {
const {resolvedColorScheme} = useTheme()
- return {resolvedColorScheme}
+ return {resolvedColorScheme}
}
const schemeToApply = 'dark'
@@ -573,7 +573,7 @@ describe('useTheme().resolvedColorScheme', () => {
const Component = () => {
const {resolvedColorScheme} = useTheme()
- return {resolvedColorScheme}
+ return {resolvedColorScheme}
}
const schemeToApply = 'totally-invalid-colorscheme'
@@ -598,7 +598,7 @@ describe('useTheme().resolvedColorScheme', () => {
const Component = () => {
const {resolvedColorScheme} = useTheme()
- return {resolvedColorScheme}
+ return {resolvedColorScheme}
}
const schemeToApply = 'dark'
@@ -621,7 +621,7 @@ describe('useTheme().resolvedColorScheme', () => {
const Component = () => {
const {resolvedColorScheme} = useTheme()
- return {resolvedColorScheme}
+ return {resolvedColorScheme}
}
const schemeToApply = 'totally-invalid-colorscheme'
diff --git a/packages/react/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap b/packages/react/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap
index 1d218553be9..ab7d44ec634 100644
--- a/packages/react/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap
+++ b/packages/react/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap
@@ -1,10 +1,10 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`has default theme 1`] = `
-
Hello
-
+
`;
diff --git a/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.module.css b/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.module.css
index 731d400ca03..e7896e2c805 100644
--- a/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.module.css
+++ b/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.module.css
@@ -15,6 +15,10 @@
color: var(--fgColor-muted);
}
+.TextMuted {
+ color: var(--fgColor-muted);
+}
+
.FilterButtons {
display: flex;
margin-top: var(--base-size-4);
diff --git a/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.tsx b/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.tsx
index b21b6b87d07..49506802d89 100644
--- a/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.tsx
+++ b/packages/react/src/experimental/SelectPanel2/SelectPanel.examples.stories.tsx
@@ -643,7 +643,7 @@ export const ShortSelectPanel = () => {
- Notify me:{' '}
+ Notify me:{' '}
{Object.keys(channels)
.filter(channel => channels[channel as keyof typeof channels])
.join(', ') || 'Never'}
diff --git a/packages/react/src/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroupCaption.tsx b/packages/react/src/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroupCaption.tsx
index bd7735d1fb3..1aa1bcd45b3 100644
--- a/packages/react/src/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroupCaption.tsx
+++ b/packages/react/src/internal/components/CheckboxOrRadioGroup/CheckboxOrRadioGroupCaption.tsx
@@ -7,10 +7,10 @@ import {clsx} from 'clsx'
type CheckboxOrRadioGroupCaptionProps = React.PropsWithChildren & {className?: string}
-const CheckboxOrRadioGroupCaption: React.FC = ({className, children, sx}) => {
+const CheckboxOrRadioGroupCaption: React.FC = ({className, children}) => {
const {captionId} = React.useContext(CheckboxOrRadioGroupContext)
return (
-
+
{children}
)
diff --git a/packages/react/src/internal/components/InputValidation.tsx b/packages/react/src/internal/components/InputValidation.tsx
index fd5d3344956..4dd5bb5bf95 100644
--- a/packages/react/src/internal/components/InputValidation.tsx
+++ b/packages/react/src/internal/components/InputValidation.tsx
@@ -21,7 +21,7 @@ const validationIconMap: Record<
error: AlertFillIcon,
}
-const InputValidation: React.FC> = ({children, className, id, validationStatus, sx}) => {
+const InputValidation: React.FC> = ({children, className, id, validationStatus}) => {
const IconComponent = validationStatus ? validationIconMap[validationStatus] : undefined
// TODO: use `text-caption-lineHeight` token as a custom property when it's available
@@ -31,7 +31,7 @@ const InputValidation: React.FC> = ({children, cl
const iconBoxMinHeight = iconSize * captionLineHeight
return (
-
+
{IconComponent ? (
({
+ shouldForwardProp: prop => (prop as keyof TextProps) !== 'sx',
+})`
+ ${sx}
+`
+
+const Text = forwardRef<'span', TextProps>(({as, ...props}, ref) => {
+ return
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+}) as StyledComponent<'span', any, TextProps, never>
+
+export {Text, type TextProps}
diff --git a/packages/styled-react/src/components/Token.tsx b/packages/styled-react/src/components/Token.tsx
index 2564a1e5ff1..1a0e2102744 100644
--- a/packages/styled-react/src/components/Token.tsx
+++ b/packages/styled-react/src/components/Token.tsx
@@ -15,7 +15,7 @@ type TokenProps = PropsWithChildren & SxProp
const Token: ForwardRefComponent<'a' | 'button' | 'span', TokenProps> = React.forwardRef(
({sx: sxProp, style, ...rest}, ref) => {
const contextTheme = useTheme()
- const theme = contextTheme?.theme || defaultTheme
+ const theme = contextTheme.theme || defaultTheme
// If no sx prop is provided, just return PrimerToken directly
if (!sxProp) {
diff --git a/packages/styled-react/src/index.tsx b/packages/styled-react/src/index.tsx
index da4ea253af7..2f0a5b90e3e 100644
--- a/packages/styled-react/src/index.tsx
+++ b/packages/styled-react/src/index.tsx
@@ -6,7 +6,6 @@ export {Details} from '@primer/react'
export {IconButton} from '@primer/react'
export {ProgressBar} from '@primer/react'
export {Select} from '@primer/react'
-export {Text} from '@primer/react'
export {Textarea} from '@primer/react'
export {TextInput} from '@primer/react'
export {type TextInputProps} from '@primer/react'
@@ -54,6 +53,7 @@ export {
export {Spinner, type SpinnerProps} from './components/Spinner'
export {StateLabel, type StateLabelProps} from './components/StateLabel'
export {SubNav, type SubNavProps, type SubNavLinkProps} from './components/SubNav'
+export {Text, type TextProps} from './components/Text'
export {
Timeline,
type TimelineProps,