Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Handy Semantic 토큰 추가 #132

Merged
merged 5 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: semantic token 구현 완료
  • Loading branch information
fecapark committed Jul 21, 2024
commit c6ec757308b3f71ffa91bcfebb35143c264bd86f
2 changes: 1 addition & 1 deletion src/style/foundation/color/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export * from './primitiveColor';
// export * from './semanticColor';
export * from './semanticColor';
1 change: 0 additions & 1 deletion src/style/foundation/color/primitiveColor/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
export type * from './primitiveColor.type';
export { primitiveColorPalette } from './primitiveColorPalette';
export type { PrimitiveColorPalette } from './primitiveColorPalette';
38 changes: 21 additions & 17 deletions src/style/foundation/color/primitiveColor/primitiveColor.type.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
// https://www.figma.com/design/gvwhMF6iNkuYKzxipKzkaG/Handy-v1-(demo)?node-id=636-131805&t=Wr7H8VzVaJXsyDQT-1

type PrimitiveVariousColor<ColorName extends string> =
| `${ColorName}050`
| `${ColorName}100`
| `${ColorName}200`
| `${ColorName}300`
| `${ColorName}400`
| `${ColorName}500`
| `${ColorName}600`
| `${ColorName}700`
| `${ColorName}800`
| `${ColorName}900`
| `${ColorName}950`;
import { MergeVariants } from '@/types/variant';

export type PrimitiveVioletColor = PrimitiveVariousColor<'violet'>;
export type PrimitiveGrayColor = PrimitiveVariousColor<'gray'>;
type PrimitiveColorSaturationVariant =
| '050'
| '100'
| '200'
| '300'
| '400'
| '500'
| '600'
| '700'
| '800'
| '900'
| '950';

export type PrimitiveNeutralColor = 'neutralBlack' | 'neutralWhite' | 'neutralTransparent';
export type PrimitiveVioletColor = MergeVariants<'violet', PrimitiveColorSaturationVariant>;
export type PrimitiveGrayColor = MergeVariants<'gray', PrimitiveColorSaturationVariant>;

export type PrimitiveStatusColor = 'statusRedMain' | 'statusRedSub';
export type PrimitiveNeutralColor = MergeVariants<'neutral', 'black' | 'white' | 'transparent'>;

export type PrimitiveColor =
export type PrimitiveStatusColor = MergeVariants<'status', 'red', 'main' | 'sub'>;

export type PrimitiveColorType =
| PrimitiveVioletColor
| PrimitiveGrayColor
| PrimitiveNeutralColor
| PrimitiveStatusColor;

export type PrimitiveColorPalette = Readonly<Record<PrimitiveColorType, string>>;
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { PrimitiveColor } from './primitiveColor.type';

export type PrimitiveColorPalette = Readonly<Record<PrimitiveColor, string>>;
import { PrimitiveColorPalette } from '@/style/foundation/color/primitiveColor/primitiveColor.type';

export const primitiveColorPalette: PrimitiveColorPalette = {
// Primitive Violet Color
Expand Down
2 changes: 2 additions & 0 deletions src/style/foundation/color/semanticColor/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export type * from './semanticColor.type';
export { semanticColorPalette } from './semanticColorPalette';
121 changes: 121 additions & 0 deletions src/style/foundation/color/semanticColor/semanticColor.type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
import { MergeVariants } from '@/types/variant';

type StaticBasicVariant = 'primary' | 'secondary' | 'tertiary' | 'disabled' | 'white';
type StaticBrandVariant = 'primary' | 'secondary';
type StatusVariant = 'negative' | 'positive';
type InteractiveVariant = 'enabled' | 'pressed' | 'disabled';
type SelectableVariant = 'selected' | 'unselected';
type SelectableVariantWithDisabled = SelectableVariant | 'disabled';

export type SemanticBackgroundBasicColor = MergeVariants<
'bg',
'basic',
'default' | 'light' | 'strong' | 'black'
>;

export type SemanticBackgroundBrandColor = MergeVariants<'bg', 'brand', StaticBrandVariant>;

export type SemanticBackgroundStatusColor = MergeVariants<'bg', 'status', StatusVariant>;

export type SemanticTextBasicColor = MergeVariants<'text', 'basic', StaticBasicVariant>;

export type SemanticTextBrandColor = MergeVariants<'text', 'brand', StaticBrandVariant>;

export type SemanticTextStatusColor = MergeVariants<'text', 'status', StatusVariant>;

export type SemanticLineBasicColor = MergeVariants<'line', 'basic', 'light' | 'medium' | 'strong'>;

export type SemanticLineStatusColor = MergeVariants<'line', 'status', StatusVariant>;

export type SemanticButtonBoxPrimaryColor = MergeVariants<
'button',
'box',
'primary',
InteractiveVariant
>;

export type SemanticButtonBoxSecondaryColor = MergeVariants<
'button',
'box',
'secondary',
InteractiveVariant
>;

export type SemanticButtonBoxTertiaryColor = MergeVariants<
'button',
'box',
'tertiary',
InteractiveVariant
>;

export type SemanticButtonFabPrimaryColor = MergeVariants<
'button',
'fab',
'primary',
InteractiveVariant
>;

export type SemanticButtonFabSecondaryColor = MergeVariants<
'button',
'fab',
'secondary',
InteractiveVariant
>;

export type SemanticButtonTextPrimaryColor = MergeVariants<
'button',
'text',
'primary',
InteractiveVariant
>;

export type SemanticButtonTextSecondaryColor = MergeVariants<
'button',
'text',
'secondary',
InteractiveVariant
>;

export type SemanticButtonRadioColor = MergeVariants<
'button',
'radio',
SelectableVariantWithDisabled
>;

export type SemanticIconBasicColor = MergeVariants<'icon', 'basic', StaticBasicVariant>;

export type SemanticIconBrandColor = MergeVariants<'icon', 'brand', StaticBrandVariant>;

export type SemanticCheckboxColor = MergeVariants<'checkbox', SelectableVariantWithDisabled>;

export type SemanticChipColor = MergeVariants<'chip', SelectableVariantWithDisabled>;

export type SemanticPaginationBrandColor = MergeVariants<'pagination', 'brand', 'pressed'>;

export type SemanticPaginationBasicColor = MergeVariants<'pagination', 'basic', SelectableVariant>;

export type SemanticColorType =
| SemanticBackgroundBasicColor
| SemanticBackgroundBrandColor
| SemanticBackgroundStatusColor
| SemanticTextBasicColor
| SemanticTextBrandColor
| SemanticTextStatusColor
| SemanticLineBasicColor
| SemanticLineStatusColor
| SemanticButtonBoxPrimaryColor
| SemanticButtonBoxSecondaryColor
| SemanticButtonBoxTertiaryColor
| SemanticButtonFabPrimaryColor
| SemanticButtonFabSecondaryColor
| SemanticButtonTextPrimaryColor
| SemanticButtonTextSecondaryColor
| SemanticButtonRadioColor
| SemanticIconBasicColor
| SemanticIconBrandColor
| SemanticCheckboxColor
| SemanticChipColor
| SemanticPaginationBrandColor
| SemanticPaginationBasicColor;

export type SemanticColorPalette = Readonly<Record<SemanticColorType, string>>;
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import { primitiveColorPalette } from '@/style/foundation/color/primitiveColor';
import { SemanticColorPalette } from '@/style/foundation/color/semanticColor/semanticColor.type';

export const semanticColorPalette: SemanticColorPalette = {
bgBasicDefault: primitiveColorPalette.neutralWhite,
bgBasicLight: primitiveColorPalette.gray050,
bgBasicStrong: primitiveColorPalette.gray100,
bgBasicBlack: primitiveColorPalette.neutralBlack,

bgBrandPrimary: primitiveColorPalette.violet500,
bgBrandSecondary: primitiveColorPalette.violet050,

bgStatusNegative: primitiveColorPalette.statusRedMain,
bgStatusPositive: primitiveColorPalette.violet500,

textBasicPrimary: primitiveColorPalette.neutralBlack,
textBasicSecondary: primitiveColorPalette.gray700,
textBasicTertiary: primitiveColorPalette.gray500,
textBasicDisabled: primitiveColorPalette.gray300,
textBasicWhite: primitiveColorPalette.neutralWhite,

textBrandPrimary: primitiveColorPalette.violet500,
textBrandSecondary: primitiveColorPalette.violet600,

textStatusNegative: primitiveColorPalette.statusRedMain,
textStatusPositive: primitiveColorPalette.violet500,

lineBasicLight: primitiveColorPalette.gray100,
lineBasicMedium: primitiveColorPalette.gray200,
lineBasicStrong: primitiveColorPalette.gray300,

lineStatusNegative: primitiveColorPalette.statusRedMain,
lineStatusPositive: primitiveColorPalette.violet500,

buttonBoxPrimaryEnabled: primitiveColorPalette.violet500,
buttonBoxPrimaryPressed: primitiveColorPalette.violet700,
buttonBoxPrimaryDisabled: primitiveColorPalette.gray100,

buttonBoxSecondaryEnabled: primitiveColorPalette.violet050,
buttonBoxSecondaryPressed: primitiveColorPalette.violet200,
buttonBoxSecondaryDisabled: primitiveColorPalette.gray100,

buttonBoxTertiaryEnabled: primitiveColorPalette.neutralTransparent,
buttonBoxTertiaryPressed: primitiveColorPalette.gray100,
buttonBoxTertiaryDisabled: primitiveColorPalette.neutralTransparent,

buttonTextPrimaryEnabled: primitiveColorPalette.neutralTransparent,
buttonTextPrimaryPressed: primitiveColorPalette.violet050,
buttonTextPrimaryDisabled: primitiveColorPalette.neutralTransparent,

buttonFabPrimaryEnabled: primitiveColorPalette.violet500,
buttonFabPrimaryPressed: primitiveColorPalette.violet700,
buttonFabPrimaryDisabled: primitiveColorPalette.gray100,

buttonRadioSelected: primitiveColorPalette.violet500,
buttonRadioUnselected: primitiveColorPalette.gray200,
buttonRadioDisabled: primitiveColorPalette.neutralWhite,

buttonTextSecondaryEnabled: primitiveColorPalette.neutralTransparent,
buttonTextSecondaryPressed: primitiveColorPalette.gray100,
buttonTextSecondaryDisabled: primitiveColorPalette.neutralTransparent,

buttonFabSecondaryEnabled: primitiveColorPalette.neutralWhite,
buttonFabSecondaryPressed: primitiveColorPalette.gray100,
buttonFabSecondaryDisabled: primitiveColorPalette.neutralWhite,

iconBasicPrimary: primitiveColorPalette.neutralBlack,
iconBasicSecondary: primitiveColorPalette.gray700,
iconBasicTertiary: primitiveColorPalette.gray500,
iconBasicDisabled: primitiveColorPalette.gray200,
iconBasicWhite: primitiveColorPalette.neutralWhite,

iconBrandPrimary: primitiveColorPalette.violet500,
iconBrandSecondary: primitiveColorPalette.violet600,

checkboxSelected: primitiveColorPalette.violet500,
checkboxUnselected: primitiveColorPalette.neutralWhite,
checkboxDisabled: primitiveColorPalette.gray200,

chipSelected: primitiveColorPalette.violet100,
chipUnselected: primitiveColorPalette.gray100,
chipDisabled: primitiveColorPalette.gray050,

paginationBrandPressed: primitiveColorPalette.violet050,

paginationBasicSelected: primitiveColorPalette.neutralBlack,
paginationBasicUnselected: primitiveColorPalette.gray500,
} as const;
4 changes: 2 additions & 2 deletions src/style/foundation/spacing/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export * from './spacing';
export * from './spacing.type';
export * from './primitiveSpacing';
export * from './semanticSpacing';
2 changes: 2 additions & 0 deletions src/style/foundation/spacing/primitiveSpacing/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export type * from './primitiveSpacing.type';
export { primitiveSpacing } from './primitiveSpacing';
11 changes: 11 additions & 0 deletions src/style/foundation/spacing/primitiveSpacing/primitiveSpacing.ts
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

채널 확인을 늦게 했는데 Spcing(Radius)로 되어있던 이름이 Number로 바뀌었네요.....🤔
저는 지금처럼 Spacing 들어간 게 의도를 드러내기 좋다고 생각하는데
피그마 이름과 달라지는 부분이라 조심스럽네용

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 약간 바뀐게 좋다고 생각하는게
padding, margin 만 쓰이는거면 spacing 이 맥락상 맞아보이는데
그 값들과 연계되는 border-radius 까지 설정되어 버리니까 spacing 보다는 number 또는 sizing 이 더 좋아보이긴하네요

  • 이 부분도 여기서 수정해서 커밋 넣겠습니다

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { PrimitiveSpacing } from '@/style/foundation/spacing/primitiveSpacing/primitiveSpacing.type';

const primitiveSpacing: PrimitiveSpacing = {
'8': 8,
'10': 10,
'12': 12,
'14': 14,
'16': 16,
} as const;

export { primitiveSpacing };
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type PrimitiveSpacingType = '8' | '10' | '12' | '14' | '16';

type PrimitiveSpacing = Readonly<Record<PrimitiveSpacingType, number>>;

export type { PrimitiveSpacingType, PrimitiveSpacing };
2 changes: 2 additions & 0 deletions src/style/foundation/spacing/semanticSpacing/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './semanticSpacing.type';
export { semanticSpacing } from './semanticSpacing';
12 changes: 12 additions & 0 deletions src/style/foundation/spacing/semanticSpacing/semanticSpacing.ts
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

spacing이 두번 들어가는게 굳이굳이 싶습니다
theme.semantic.spacing.radiusXL 이런 방식이어도 괜찮지 않을까요?

제안하신 방식 아주아주 괜찮다고 생각합니다!
특별한 이유가 없다면 사용처 코드가 짧은 쪽으로 ㄱㄱ하시죠

근데 지금 피그마를 보면 radiusXL 같은 방식의 이름으로 짓는 게 맞네요!
작업하는 사이에 피그마 수정이 있었던 거 같은데 아무튼....... 좋습니다............!

image

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굿 같이 수정하겠습니다

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { primitiveSpacing } from '@/style/foundation/spacing/primitiveSpacing';
import { SemanticSpacing } from '@/style/foundation/spacing/semanticSpacing/semanticSpacing.type';

const semanticSpacing: SemanticSpacing = {
spacingRadiusXS: primitiveSpacing[8],
spacingRadiusS: primitiveSpacing[10],
spacingRadiusM: primitiveSpacing[12],
spacingRadiusL: primitiveSpacing[14],
spacingRadiusXL: primitiveSpacing[16],
} as const;

export { semanticSpacing };
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { MergeVariants } from '@/types/variant';

export type SemanticSpacingRadius = MergeVariants<
'spacing',
'radius',
'XS' | 's' | 'm' | 'l' | 'XL'
>;

export type SemanticSpacingType = SemanticSpacingRadius;

export type SemanticSpacing = Readonly<Record<SemanticSpacingType, number>>;
11 changes: 0 additions & 11 deletions src/style/foundation/spacing/spacing.ts

This file was deleted.

5 changes: 0 additions & 5 deletions src/style/foundation/spacing/spacing.type.ts

This file was deleted.

15 changes: 12 additions & 3 deletions src/style/theme/YDSThemeProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { ThemeProvider } from 'styled-components';

import { primitiveColorPalette, spacing, typo } from '../foundation';
import {
primitiveColorPalette,
primitiveSpacing,
semanticColorPalette,
semanticSpacing,
typo,
} from '../foundation';

import { YDSTheme } from './theme.type';

Expand All @@ -12,9 +18,12 @@ export const YDSThemeProvider = ({ children }: YDSThemeProviderProps) => {
const theme: YDSTheme = {
primitive: {
color: primitiveColorPalette,
spacing,
spacing: primitiveSpacing,
},
semantic: {
color: semanticColorPalette,
spacing: semanticSpacing,
},
// semantic: {},
typo,
};

Expand Down
Loading