From c77e73b8e66d21e225454d6ccb6d352f453497c3 Mon Sep 17 00:00:00 2001 From: Mike Perrotti Date: Thu, 24 Mar 2022 15:55:56 -0400 Subject: [PATCH 1/6] adds 'xlarge' token size to align w/ ADR --- docs/content/TextInputWithTokens.mdx | 4 +- docs/content/Token.mdx | 12 +- src/TextInputWithTokens.tsx | 8 +- src/Token/Token.tsx | 1 + src/Token/TokenBase.tsx | 30 +- src/Token/_RemoveTokenButton.tsx | 6 + .../TextInputWithTokens.test.tsx.snap | 1308 +++++++++++++---- .../__snapshots__/Token.test.tsx.snap | 641 +++++++- src/stories/TextInputWithTokens.stories.tsx | 4 +- 9 files changed, 1630 insertions(+), 384 deletions(-) diff --git a/docs/content/TextInputWithTokens.mdx b/docs/content/TextInputWithTokens.mdx index 52c35873354..d8978aad5d8 100644 --- a/docs/content/TextInputWithTokens.mdx +++ b/docs/content/TextInputWithTokens.mdx @@ -419,8 +419,8 @@ render() /> { console.log('remove me') }} @@ -267,8 +267,8 @@ Tokens that represent Issue labels should use the `IssueLabelToken` component. /> { console.log('remove me') }} @@ -355,8 +355,8 @@ Tokens that represent GitHub users should use the `AvatarToken` component. /> { console.log('remove me') }} diff --git a/src/TextInputWithTokens.tsx b/src/TextInputWithTokens.tsx index 4ab12930433..6d7b79997f0 100644 --- a/src/TextInputWithTokens.tsx +++ b/src/TextInputWithTokens.tsx @@ -59,7 +59,8 @@ const overflowCountFontSizeMap: Record = { small: 0, medium: 1, large: 1, - extralarge: 2 + extralarge: 2, + xlarge: 2 // will eventually replace "extralarge" per this ADR: https://github.com/github/primer/blob/main/adrs/2022-02-09-size-naming-guidelines.md } // using forwardRef is important so that other components (ex. Autocomplete) can use the ref @@ -239,7 +240,8 @@ function TextInputWithTokensInnerComponent>` switch (props.size) { case 'large': case 'extralarge': + case 'xlarge': return css` margin-right: ${get('space.2')}; ` diff --git a/src/Token/TokenBase.tsx b/src/Token/TokenBase.tsx index 398deb0dcfe..d93294106c3 100644 --- a/src/Token/TokenBase.tsx +++ b/src/Token/TokenBase.tsx @@ -4,13 +4,18 @@ import {variant} from 'styled-system' import {get} from '../constants' import sx, {SxProp} from '../sx' -export type TokenSizeKeys = 'small' | 'medium' | 'large' | 'extralarge' +// TODO: remove invalid "extralarge" size name in next breaking change +// ADR: https://github.com/github/primer/blob/main/adrs/2022-02-09-size-naming-guidelines.md +export type TokenSizeKeys = 'small' | 'medium' | 'large' | 'extralarge' | 'xlarge' + +const xlargeSize = '32px' export const tokenSizes: Record = { small: '16px', medium: '20px', large: '24px', - extralarge: '32px' + extralarge: xlargeSize, + xlarge: xlargeSize } export const defaultTokenSize: TokenSizeKeys = 'medium' @@ -43,6 +48,16 @@ export interface TokenBaseProps export const isTokenInteractive = ({as = 'span', onClick, onFocus, tabIndex = -1}: TokenBaseProps) => Boolean(onFocus || onClick || tabIndex > -1 || ['a', 'button'].includes(as)) +const xlargeVariantStyles = { + fontSize: 1, + height: tokenSizes.xlarge, + lineHeight: tokenSizes.xlarge, + paddingLeft: 3, + paddingRight: 3, + paddingTop: 0, + paddingBottom: 0 +} + const variants = variant< { fontSize: number @@ -87,15 +102,8 @@ const variants = variant< paddingTop: 0, paddingBottom: 0 }, - extralarge: { - fontSize: 1, - height: tokenSizes.extralarge, - lineHeight: tokenSizes.extralarge, - paddingLeft: 3, - paddingRight: 3, - paddingTop: 0, - paddingBottom: 0 - } + extralarge: xlargeVariantStyles, + xlarge: xlargeVariantStyles } }) diff --git a/src/Token/_RemoveTokenButton.tsx b/src/Token/_RemoveTokenButton.tsx index 0eec78b9dc9..1bd9a08a26a 100644 --- a/src/Token/_RemoveTokenButton.tsx +++ b/src/Token/_RemoveTokenButton.tsx @@ -31,6 +31,11 @@ const variants = variant<{height: string; width: string}, TokenSizeKeys>({ extralarge: { height: tokenSizes.extralarge, width: tokenSizes.extralarge + }, + // xlarge will eventually replace "extralarge" per this ADR: https://github.com/github/primer/blob/main/adrs/2022-02-09-size-naming-guidelines.md + xlarge: { + height: tokenSizes.xlarge, + width: tokenSizes.xlarge } } }) @@ -58,6 +63,7 @@ const StyledTokenButton = styled.span` switch (props.size) { case 'large': case 'extralarge': + case 'xlarge': return css` margin-left: ${get('space.2')}; ` diff --git a/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap b/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap index c4f02a602bc..85f6c7182f7 100644 --- a/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +++ b/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap @@ -320,7 +320,7 @@ exports[`TextInputWithTokens renders a leadingVisual and trailingVisual 1`] = ` onKeyDown={[Function]} onKeyUp={[Function]} onRemove={[Function]} - size="extralarge" + size="xlarge" tabIndex={0} >