From f8396de15de36dd77ab94944319430a7619c9916 Mon Sep 17 00:00:00 2001
From: Matthew Costabile
Date: Sat, 10 Dec 2022 13:23:49 +0000
Subject: [PATCH 01/14] update types for many buttony things
---
src/ActionMenu.tsx | 5 ++--
src/Button/ButtonBase.tsx | 17 ++++++-----
src/Button/IconButton.tsx | 8 +++--
src/Button/types.ts | 16 ++++------
src/__tests__/ActionMenu.types.test.tsx | 20 +++++++++++++
src/__tests__/Button.types.test.tsx | 39 +++++++++++++++++++++++--
src/utils/defaultSxProp.tsx | 3 ++
7 files changed, 83 insertions(+), 25 deletions(-)
create mode 100644 src/__tests__/ActionMenu.types.test.tsx
create mode 100644 src/utils/defaultSxProp.tsx
diff --git a/src/ActionMenu.tsx b/src/ActionMenu.tsx
index 558ddf02abb..78a3a31e15e 100644
--- a/src/ActionMenu.tsx
+++ b/src/ActionMenu.tsx
@@ -9,6 +9,7 @@ import {ActionListContainerContext} from './ActionList/ActionListContainerContex
import {Button, ButtonProps} from './Button'
import {MandateProps} from './utils/types'
import {merge, BetterSystemStyleObject} from './sx'
+import {defaultSxProp} from './utils/defaultSxProp'
export type MenuContextProps = Pick<
AnchoredOverlayProps,
@@ -76,8 +77,8 @@ const Anchor = React.forwardRef(
- ({sx: sxProp = {}, ...props}, anchorRef) => {
+const MenuButton = React.forwardRef(
+ ({sx: sxProp = defaultSxProp, ...props}, anchorRef) => {
return (
-
+
{selectedOption ? `Group by ${selectedOption.text}` : 'Group items by'}
diff --git a/src/stories/ActionMenu/fixtures.stories.tsx b/src/stories/ActionMenu/fixtures.stories.tsx
index 000e285b6d4..8426d5fdebd 100644
--- a/src/stories/ActionMenu/fixtures.stories.tsx
+++ b/src/stories/ActionMenu/fixtures.stories.tsx
@@ -427,6 +427,7 @@ export function MemexViewOptionsMenu(): JSX.Element {
Date: Mon, 12 Dec 2022 19:22:59 +0000
Subject: [PATCH 08/14] scope readonly to dev
---
src/Button/ButtonBase.tsx | 1 -
src/global.d.ts | 2 ++
src/hooks/useControllableState.ts | 1 -
src/utils/defaultSxProp.tsx | 4 +++-
src/utils/deprecate.tsx | 1 -
5 files changed, 5 insertions(+), 4 deletions(-)
create mode 100644 src/global.d.ts
diff --git a/src/Button/ButtonBase.tsx b/src/Button/ButtonBase.tsx
index d2c292bf904..15443f7fef0 100644
--- a/src/Button/ButtonBase.tsx
+++ b/src/Button/ButtonBase.tsx
@@ -7,7 +7,6 @@ import {ButtonProps, StyledButton} from './types'
import {getVariantStyles, getSizeStyles, getButtonStyles} from './styles'
import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef'
import {defaultSxProp} from '../utils/defaultSxProp'
-declare let __DEV__: boolean
const iconWrapStyles = {
display: 'inline-block',
diff --git a/src/global.d.ts b/src/global.d.ts
new file mode 100644
index 00000000000..4781b52c003
--- /dev/null
+++ b/src/global.d.ts
@@ -0,0 +1,2 @@
+// eslint-disable-next-line no-var
+declare var __DEV__: boolean
diff --git a/src/hooks/useControllableState.ts b/src/hooks/useControllableState.ts
index c85f253f21a..de7dcb41896 100644
--- a/src/hooks/useControllableState.ts
+++ b/src/hooks/useControllableState.ts
@@ -1,5 +1,4 @@
import React from 'react'
-declare let __DEV__: boolean
type ControllableStateOptions = {
/**
diff --git a/src/utils/defaultSxProp.tsx b/src/utils/defaultSxProp.tsx
index 14c7015ac5d..71f1e60c385 100644
--- a/src/utils/defaultSxProp.tsx
+++ b/src/utils/defaultSxProp.tsx
@@ -1,3 +1,5 @@
import {BetterSystemStyleObject} from '../sx'
-export const defaultSxProp: BetterSystemStyleObject = {}
+export const defaultSxProp: Readonly = __DEV__
+ ? Object.freeze({})
+ : {}
diff --git a/src/utils/deprecate.tsx b/src/utils/deprecate.tsx
index 49c29205fa0..70a91ae298d 100644
--- a/src/utils/deprecate.tsx
+++ b/src/utils/deprecate.tsx
@@ -1,5 +1,4 @@
import {useRef, useCallback} from 'react'
-declare let __DEV__: boolean
type DeprecationType = {name: string; message: string; version: string}
From 96a6224448b283850841df032a2dfcd44359c9d1 Mon Sep 17 00:00:00 2001
From: Matthew Costabile
Date: Sat, 17 Dec 2022 08:00:12 -0500
Subject: [PATCH 09/14] update tabnavlink to work with button props
---
src/Button/types.ts | 7 +++----
src/TabNav.tsx | 10 +++++-----
src/__tests__/TabNav.types.test.tsx | 9 +++++++++
3 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/src/Button/types.ts b/src/Button/types.ts
index 6a98c2de84c..f68372b620c 100644
--- a/src/Button/types.ts
+++ b/src/Button/types.ts
@@ -1,6 +1,5 @@
import React from 'react'
import styled from 'styled-components'
-import {IconProps} from '@primer/octicons-react'
import sx, {SxProp} from '../sx'
import getGlobalFocusStyles from '../_getGlobalFocusStyles'
@@ -37,16 +36,16 @@ export type ButtonProps = {
/**
* The leading icon comes before button content
*/
- leadingIcon?: React.FunctionComponent> | null | undefined
+ leadingIcon?: React.ComponentType | null | undefined
/**
* The trailing icon comes after button content
*/
- trailingIcon?: React.FunctionComponent> | null | undefined
+ trailingIcon?: React.ComponentType | null | undefined
children: React.ReactNode
} & ButtonBaseProps
export type IconButtonProps = ButtonA11yProps & {
- icon: React.FunctionComponent>
+ icon: React.ComponentType
} & Omit
// adopted from React.AnchorHTMLAttributes
diff --git a/src/TabNav.tsx b/src/TabNav.tsx
index 79b859d2518..4ed70de71ad 100644
--- a/src/TabNav.tsx
+++ b/src/TabNav.tsx
@@ -1,3 +1,4 @@
+import {ForwardRefComponent as PolymorphicForwardRefComponent} from './utils/polymorphic'
import classnames from 'classnames'
import {To} from 'history'
import React, {useRef, useState} from 'react'
@@ -67,18 +68,18 @@ function TabNav({children, 'aria-label': ariaLabel, ...rest}: TabNavProps) {
)
}
-type StyledTabNavLinkProps = {
+export type TabNavLinkProps = React.DetailedHTMLProps, HTMLAnchorElement> & {
to?: To
selected?: boolean
} & SxProp
-const TabNavLink = styled.a.attrs(props => ({
+const TabNavLink = styled.a.attrs(props => ({
activeClassName: typeof props.to === 'string' ? 'selected' : '',
className: classnames(ITEM_CLASS, props.selected && SELECTED_CLASS, props.className),
role: 'tab',
'aria-selected': !!props.selected,
tabIndex: -1,
-}))`
+}))`
padding: 8px 12px;
font-size: ${get('fontSizes.1')};
line-height: 20px;
@@ -105,9 +106,8 @@ const TabNavLink = styled.a.attrs(props => ({
}
${sx};
-`
+` as PolymorphicForwardRefComponent<'a', TabNavLinkProps>
TabNavLink.displayName = 'TabNav.Link'
-export type TabNavLinkProps = ComponentProps
export default Object.assign(TabNav, {Link: TabNavLink})
diff --git a/src/__tests__/TabNav.types.test.tsx b/src/__tests__/TabNav.types.test.tsx
index a0e3dd0b90a..f1f14d83fb4 100644
--- a/src/__tests__/TabNav.types.test.tsx
+++ b/src/__tests__/TabNav.types.test.tsx
@@ -1,5 +1,6 @@
import React from 'react'
import TabNav from '../TabNav'
+import {Button} from '../Button'
export function shouldAcceptCallWithNoProps() {
return (
@@ -20,3 +21,11 @@ export function shouldNotAcceptSystemProps() {
>
)
}
+
+export function shouldAcceptButtonAsProps() {
+ return
+}
+
+export function shouldAcceptTabNavLinkprops() {
+ return
+}
From bf1f55e24c316dad6651f1578bbed243bb8f5ceb Mon Sep 17 00:00:00 2001
From: Matthew Costabile
Date: Sat, 17 Dec 2022 08:04:12 -0500
Subject: [PATCH 10/14] explitly allow href, even if as doesnt support it
---
src/TabNav.tsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/TabNav.tsx b/src/TabNav.tsx
index 4ed70de71ad..d77f2aa4123 100644
--- a/src/TabNav.tsx
+++ b/src/TabNav.tsx
@@ -71,6 +71,7 @@ function TabNav({children, 'aria-label': ariaLabel, ...rest}: TabNavProps) {
export type TabNavLinkProps = React.DetailedHTMLProps, HTMLAnchorElement> & {
to?: To
selected?: boolean
+ href?: string
} & SxProp
const TabNavLink = styled.a.attrs(props => ({
From a324bea03763ae61a5db75882f5ef6ae294f55dc Mon Sep 17 00:00:00 2001
From: Matthew Costabile
Date: Tue, 27 Dec 2022 18:39:47 +0000
Subject: [PATCH 11/14] lint
---
src/stories/ActionMenu/fixtures.stories.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/stories/ActionMenu/fixtures.stories.tsx b/src/stories/ActionMenu/fixtures.stories.tsx
index b2cb4a0209d..f40e78a9714 100644
--- a/src/stories/ActionMenu/fixtures.stories.tsx
+++ b/src/stories/ActionMenu/fixtures.stories.tsx
@@ -422,7 +422,7 @@ export function MemexViewOptionsMenu(): JSX.Element {
-
+
From 98f7989d2e31ca46854556b415791a839d0f6594 Mon Sep 17 00:00:00 2001
From: Matthew Costabile
Date: Tue, 27 Dec 2022 18:41:04 +0000
Subject: [PATCH 12/14] fix unused
---
src/Button/types.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Button/types.ts b/src/Button/types.ts
index 9a91d0f23ab..f2ef172397c 100644
--- a/src/Button/types.ts
+++ b/src/Button/types.ts
@@ -50,7 +50,7 @@ export type ButtonProps = {
/**
* Trailing action appears to the right of the trailing visual and is always locked to the end
*/
- trailingAction?: React.FunctionComponent>
+ trailingAction?: React.ComponentType | null | undefined
children: React.ReactNode
/**
* Content alignment for when visuals are present
From 6db1ab634ba625538ec37f0694760c3b83f29472 Mon Sep 17 00:00:00 2001
From: Matthew Costabile
Date: Tue, 27 Dec 2022 13:59:24 -0500
Subject: [PATCH 13/14] fix types
---
src/Button/ButtonBase.tsx | 2 +-
src/Button/IconButton.tsx | 9 ++++++++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/Button/ButtonBase.tsx b/src/Button/ButtonBase.tsx
index 14de19ff09e..d6d70870a6d 100644
--- a/src/Button/ButtonBase.tsx
+++ b/src/Button/ButtonBase.tsx
@@ -21,7 +21,7 @@ const ButtonBase = forwardRef(
...rest
} = props
- const innerRef = React.useRef(null)
+ const innerRef = React.useRef(null)
useRefObjectAsForwardedRef(forwardedRef, innerRef)
const {theme} = useTheme()
diff --git a/src/Button/IconButton.tsx b/src/Button/IconButton.tsx
index 220e491cc94..c3c53ea78e8 100644
--- a/src/Button/IconButton.tsx
+++ b/src/Button/IconButton.tsx
@@ -11,7 +11,14 @@ const IconButton = forwardRef((props, forwardedRef): JSX.Element => {
const {theme} = useTheme()
const sxStyles = merge.all([getBaseStyles(theme), getVariantStyles(variant, theme), sxProp])
return (
-
+
)
From 4761a20f87675a595594c5fd7d4554081e4a2a95 Mon Sep 17 00:00:00 2001
From: Matthew Costabile
Date: Tue, 27 Dec 2022 14:31:13 -0500
Subject: [PATCH 14/14] remove a prop re-added in a merge
---
src/_TextInputInnerAction.tsx | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/_TextInputInnerAction.tsx b/src/_TextInputInnerAction.tsx
index cd4163a371b..c19ac720ef9 100644
--- a/src/_TextInputInnerAction.tsx
+++ b/src/_TextInputInnerAction.tsx
@@ -88,7 +88,6 @@ const TextInputAction = forwardRef(
variant={variant}
type="button"
icon={icon}
- size="small"
sx={sx}
{...rest}
aria-label={ariaLabel as unknown as string}