@nurihaus/web-design-system 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/ai/components.md +166 -2
  2. package/dist/ai/tokens.md +64 -15
  3. package/dist/bottom-nav.js +407 -0
  4. package/dist/chip-group.js +317 -0
  5. package/dist/chunk-653.js +296 -0
  6. package/dist/components/bottom-nav/base-bottom-nav.d.ts +10 -0
  7. package/dist/components/bottom-nav/bottom-nav-props.d.ts +1 -0
  8. package/dist/components/bottom-nav/bottom-nav-type.d.ts +36 -0
  9. package/dist/components/bottom-nav/bottom-nav.d.ts +4 -0
  10. package/dist/components/bottom-nav/bottom-nav.stories.d.ts +55 -0
  11. package/dist/components/chip-group/base-chip-group.d.ts +5 -0
  12. package/dist/components/chip-group/chip-group-props.d.ts +1 -0
  13. package/dist/components/chip-group/chip-group-type.d.ts +25 -0
  14. package/dist/components/chip-group/chip-group.d.ts +4 -0
  15. package/dist/components/chip-group/chip-group.stories.d.ts +27 -0
  16. package/dist/components/elements/text/text-props.d.ts +1 -1
  17. package/dist/components/elements/text/text.stories.d.ts +1 -1
  18. package/dist/components/icon/base-icon.d.ts +3 -0
  19. package/dist/components/icon/icon-paths.d.ts +202 -0
  20. package/dist/components/icon/icon-props.d.ts +6 -0
  21. package/dist/components/icon/icon-type.d.ts +14 -0
  22. package/dist/components/icon/icon.d.ts +4 -0
  23. package/dist/components/icon/icon.stories.d.ts +33 -0
  24. package/dist/components/step-progress/base-step-progress.d.ts +7 -0
  25. package/dist/components/step-progress/step-progress-props.d.ts +10 -0
  26. package/dist/components/step-progress/step-progress-type.d.ts +17 -0
  27. package/dist/components/step-progress/step-progress.d.ts +4 -0
  28. package/dist/components/step-progress/step-progress.stories.d.ts +29 -0
  29. package/dist/components.css +314 -0
  30. package/dist/icon.js +222 -0
  31. package/dist/index.d.ts +8 -0
  32. package/dist/index.js +854 -49
  33. package/dist/step-progress.js +310 -0
  34. package/dist/styles.css +332 -12
  35. package/dist/tokens/generated/semantic-admin.d.ts +24 -24
  36. package/dist/tokens/generated/semantic-app.d.ts +24 -24
  37. package/dist/tokens.css +64 -12
  38. package/dist/tokens.js +48 -48
  39. package/package.json +21 -3
@@ -62,6 +62,10 @@ import '@nurihaus/web-design-system/components.css';
62
62
  - [Spinner](#spinner)
63
63
  - [InlineLoading](#inlineloading)
64
64
  - [OverlayLoading](#overlayloading)
65
+ - [Icon](#icon)
66
+ - [BottomNav](#bottomnav)
67
+ - [StepProgress](#stepprogress)
68
+ - [ChipGroup](#chipgroup)
65
69
 
66
70
  ## Avatar
67
71
 
@@ -706,7 +710,7 @@ import { DropDown } from '@nurihaus/web-design-system'; // 루트.
706
710
  | `rightIcon` | `ReactNode` | | |
707
711
  | `width` | `string \| number` | | `'fit-content'` |
708
712
  | `side` | `'bottom' \| 'left' \| 'right' \| 'top'` | | |
709
- | `align` | `'center' \| 'start' \| 'end'` | | |
713
+ | `align` | `'center' \| 'end' \| 'start'` | | |
710
714
  | `position` | `'popper' \| 'item-aligned'` | | |
711
715
  | `className` | `string` | | |
712
716
  | `style` | `CSSProperties` | | |
@@ -1024,6 +1028,167 @@ import { OverlayLoading } from '@nurihaus/web-design-system'; // 루
1024
1028
 
1025
1029
  이 밖에 React·HTML 기본 속성 2개를 받는다.
1026
1030
 
1031
+ ## Icon
1032
+
1033
+ ```ts
1034
+ import { Icon } from '@nurihaus/web-design-system/icon'; // 이 컴포넌트만 싣는다 (권장)
1035
+ import { Icon } from '@nurihaus/web-design-system'; // 루트. 첫 로드 JS 가 커진다
1036
+ ```
1037
+
1038
+ **언제 쓴다.** 화면에 아이콘을 그릴 때 쓴다. 모양은 Phosphor(MIT) 에서 고른 것만 있고, `name` 으로 고른다. 색은 글자색(`currentColor`)을 따르므로 감싼 요소의 `color` 로 바꾼다. 꺼진 상태는 선(`weight="regular"`, 기본), 켜진 상태나 강조는 채움(`weight="fill"`)을 쓴다. 크기는 `s`(18) · `m`(20) · `l`(24, 기본). `className`·`style` 은 `<svg>` 에 붙는다.
1039
+
1040
+ 글자 없이 아이콘만으로 뜻을 전하면(닫기 버튼 등) `label` 을 준다. 없으면 화면 낭독기가 건너뛴다.
1041
+
1042
+ **쓰지 않는다.** 없는 모양을 다른 라이브러리나 손으로 그린 SVG 로 채우지 않는다. 이 저장소의 `scripts/build-icons.mjs` 에 이름을 더하고 `yarn icons` 를 돌린다. 브랜드 로고(SNS 제외)·일러스트는 아이콘이 아니다.
1043
+
1044
+ ```tsx
1045
+ <button type="button" aria-label="알림">
1046
+ <Icon name="bell" />
1047
+ </button>
1048
+ ```
1049
+
1050
+ ```tsx
1051
+ <Icon name="house" weight="fill" size="l" />
1052
+ ```
1053
+
1054
+ ```tsx
1055
+ <Icon name="x" size="m" label="닫기" />
1056
+ ```
1057
+
1058
+ ### props
1059
+
1060
+ | prop | 타입 | 필수 | 기본값 |
1061
+ | --- | --- | --- | --- |
1062
+ | `size` | `'s' \| 'm' \| 'l'` | | `'l'` |
1063
+ | `label` | `string` | | |
1064
+ | `name` | `'link' \| 'image' \| 'x' \| 'warning' \| 'house' \| 'megaphone-simple' \| 'chats-circle' \| 'user-circle' \| 'bell' \| 'caret-left' \| 'magnifying-glass' \| 'dots-three' \| 'gear-six' \| 'chat-circle' \| 'paper-plane-tilt' \| 'plus' \| 'camera' \| 'video-camera' \| 'upload-simple' \| 'calendar-blank' \| 'clock' \| 'map-pin' \| 'truck' \| 'ticket' \| 'qr-code' \| 'sparkle' \| 'gift' \| 'wallet' \| 'bank' \| 'credit-card' \| 'check-circle' \| 'check' \| 'info' \| 'question' \| 'lock' \| 'pencil-simple' \| 'trash' \| 'copy' \| 'share-network' \| 'eye' \| 'sliders-horizontal' \| 'heart' \| 'star' \| 'globe' \| 'sign-out' \| 'caret-right' \| 'arrow-right' \| 'instagram-logo' \| 'tiktok-logo' \| 'youtube-logo'` | 예 | |
1065
+ | `weight` | `'fill' \| 'regular'` | | |
1066
+
1067
+ 이 밖에 React·HTML 기본 속성 474개를 받는다.
1068
+
1069
+ ## BottomNav
1070
+
1071
+ ```ts
1072
+ import { BottomNav } from '@nurihaus/web-design-system/bottom-nav'; // 이 컴포넌트만 싣는다 (권장)
1073
+ import { BottomNav } from '@nurihaus/web-design-system'; // 루트. 첫 로드 JS 가 커진다
1074
+ ```
1075
+
1076
+ **언제 쓴다.** 휴대폰 화면 아래에 떠 있는 주 메뉴(탭 바)다. 탭은 3~5개, 탭마다 `href` 로 화면을 바꾼다. 지금 화면의 탭 id 를 `value` 로 넘기면 그 탭에 캡슐이 깔리고 아이콘이 채움으로 바뀐다(`aria-current="page"`). 탭 바가 스스로 `value` 를 바꾸지 않는다 — 주소가 바뀌면 쓰는 쪽이 새 `value` 를 넘긴다. `label` 은 `<nav>` 의 이름이다.
1077
+
1078
+ 화면 아래에 고정(`position: fixed`)되고 내용 위에 떠 있다. 화면 본문은 아래를 `calc(var(--bottom-nav-space) + env(safe-area-inset-bottom))` 만큼 비워 마지막 내용이 가려지지 않게 한다. `className`·`style` 은 `<nav>` 에 붙는다.
1079
+
1080
+ 링크는 기본으로 `<a>` 다. 라우터의 링크로 바꾸려면 `linkComponent` 에 넘긴다. 받는 props 는 `href`·`className`·`children`·`aria-current` 이고, 그대로 링크에 전달하면 된다.
1081
+
1082
+ 배지는 `badge` 로 단다. `count` 가 없으면 점, 있으면 숫자(99 넘으면 99+)다. `label` 은 화면 낭독기가 읽는 말이다.
1083
+
1084
+ **쓰지 않는다.** 같은 화면 안에서 패널을 바꾸는 것은 Tabs, 목록을 거르는 것은 ChipGroup 을 쓴다. 앱 웹뷰처럼 앱이 탭 바를 직접 그리는 곳에서는 그리지 않는다. 데스크톱 사이드바는 CollapsibleMenu 를 쓴다.
1085
+
1086
+ Next.js 에서는 `next/link` 의 `Link` 를 그대로 넘긴다.
1087
+
1088
+ ```ts
1089
+ import Link from 'next/link';
1090
+
1091
+ // <BottomNav linkComponent={Link} … />
1092
+ ```
1093
+
1094
+ ```tsx
1095
+ <BottomNav
1096
+ label="주 메뉴"
1097
+ value="home"
1098
+ items={[
1099
+ { id: 'home', label: '홈', icon: 'house', href: '/', badge: { label: '새 소식' } },
1100
+ { id: 'campaigns', label: '캠페인', icon: 'megaphone-simple', href: '/campaigns' },
1101
+ { id: 'community', label: '커뮤니티', icon: 'chats-circle', href: '/community' },
1102
+ { id: 'me', label: '내 정보', icon: 'user-circle', href: '/me', badge: { count: 3, label: '알림 3개' } },
1103
+ ]}
1104
+ />
1105
+ ```
1106
+
1107
+ ### props
1108
+
1109
+ | prop | 타입 | 필수 | 기본값 |
1110
+ | --- | --- | --- | --- |
1111
+ | `items` | `BottomNavItem[]` | 예 | |
1112
+ | `value` | `string` | | |
1113
+ | `label` | `string` | 예 | |
1114
+ | `linkComponent` | `ComponentType<BottomNavLinkProps>` | | |
1115
+ | `className` | `string` | | |
1116
+ | `style` | `CSSProperties` | | |
1117
+
1118
+ 이 밖에 React·HTML 기본 속성 2개를 받는다.
1119
+
1120
+ ## StepProgress
1121
+
1122
+ ```ts
1123
+ import { StepProgress } from '@nurihaus/web-design-system/step-progress'; // 이 컴포넌트만 싣는다 (권장)
1124
+ import { StepProgress } from '@nurihaus/web-design-system'; // 루트. 첫 로드 JS 가 커진다
1125
+ ```
1126
+
1127
+ **언제 쓴다.** 정해진 단계를 차례로 밟는 일에서 "지금 어디까지 왔나"를 막대로 보여 준다(캠페인 진행: 가이드 → 제품 → 결과 제출 → 승인 → 보상). 단계마다 막대 하나가 끝남·지금·남음으로 칠해진다. `current` 는 지금 단계 순번(0부터)이고, `steps.length` 를 넘기면 모두 끝난 것이다. `labelVisibility="current"` 면 지금 단계 이름만 보인다(카드 안처럼 좁을 때). 다른 이름은 화면 낭독기가 읽는다. `label` 은 목록의 이름이다. `className`·`style` 은 `<ol>` 에 붙는다.
1128
+
1129
+ **쓰지 않는다.** 단계를 눌러 이동하지 않는다(버튼이 없다). 다음 행동 버튼은 이 컴포넌트 밖, 카드에 둔다. 로딩 진행률(%)에는 쓰지 않는다.
1130
+
1131
+ ```tsx
1132
+ <StepProgress
1133
+ label="진행 단계"
1134
+ steps={['가이드', '제품', '결과 제출', '승인', '보상']}
1135
+ current={2}
1136
+ labelVisibility="current"
1137
+ />
1138
+ ```
1139
+
1140
+ ### props
1141
+
1142
+ | prop | 타입 | 필수 | 기본값 |
1143
+ | --- | --- | --- | --- |
1144
+ | `steps` | `ReactNode[]` | 예 | |
1145
+ | `current` | `number` | 예 | |
1146
+ | `labelVisibility` | `'all' \| 'current'` | | `'all'` |
1147
+ | `label` | `string` | 예 | |
1148
+ | `className` | `string` | | |
1149
+ | `style` | `CSSProperties` | | |
1150
+
1151
+ 이 밖에 React·HTML 기본 속성 2개를 받는다.
1152
+
1153
+ ## ChipGroup
1154
+
1155
+ ```ts
1156
+ import { ChipGroup } from '@nurihaus/web-design-system/chip-group'; // 이 컴포넌트만 싣는다 (권장)
1157
+ import { ChipGroup } from '@nurihaus/web-design-system'; // 루트. 첫 로드 JS 가 커진다
1158
+ ```
1159
+
1160
+ **언제 쓴다.** 목록 위에서 하나를 골라 목록을 거르는 필터다. 고르면 바로 `onValueChange` 가 불리고 적용 버튼은 없다. 늘 하나가 골라져 있고 고른 칩을 다시 눌러도 풀리지 않는다. `value`·`defaultValue` 가 없으면 첫 칩을 고른다. 넘치면 가로로 밀어서 본다. `count` 를 주면 라벨 옆에 개수가 붙는다. 0 인 칩은 `disabled` 로 막을 수 있다. 좌우 화살표 키로 칩 사이를 옮긴다. `label` 은 그룹의 이름이다. `className`·`style` 은 그룹(`role="group"`)에 붙는다.
1161
+
1162
+ **쓰지 않는다.** 같은 화면 안에서 패널 내용을 바꾸는 것은 Tabs, 폼에서 값 하나를 고르는 입력은 Radio, 화면을 옮기는 메뉴는 BottomNav 를 쓴다. 여러 개를 함께 고르는 필터는 아직 없다.
1163
+
1164
+ ```tsx
1165
+ <ChipGroup
1166
+ label="캠페인 종류"
1167
+ defaultValue="all"
1168
+ onValueChange={(id) => console.log(id)}
1169
+ items={[
1170
+ { id: 'all', label: '전체' },
1171
+ { id: 'product', label: '제품 리뷰', count: 12 },
1172
+ { id: 'visit', label: '방문', count: 3 },
1173
+ { id: 'event', label: '이벤트', count: 0, disabled: true },
1174
+ ]}
1175
+ />
1176
+ ```
1177
+
1178
+ ### props
1179
+
1180
+ | prop | 타입 | 필수 | 기본값 |
1181
+ | --- | --- | --- | --- |
1182
+ | `items` | `ChipGroupItem[]` | 예 | |
1183
+ | `value` | `string` | | |
1184
+ | `defaultValue` | `string` | | |
1185
+ | `onValueChange` | `((id: string) => void)` | | |
1186
+ | `label` | `string` | 예 | |
1187
+ | `className` | `string` | | |
1188
+ | `style` | `CSSProperties` | | |
1189
+
1190
+ 이 밖에 React·HTML 기본 속성 2개를 받는다.
1191
+
1027
1192
  ## 아직 없는 것
1028
1193
 
1029
1194
  아래는 디자인 시스템에 없다. 비슷한 이름의 컴포넌트를 지어내 import 하지 않는다.
@@ -1031,6 +1196,5 @@ import { OverlayLoading } from '@nurihaus/web-design-system'; // 루
1031
1196
  | 필요한 것 | 지금 있는 것 |
1032
1197
  | --- | --- |
1033
1198
  | 날짜 선택 | 없음 |
1034
- | 아이콘 세트 | 없음. 패키지 안 아이콘은 컴포넌트 내부용이라 내보내지 않는다 |
1035
1199
 
1036
1200
  없는 것이 필요하면 쓰는 쪽 저장소에서 `tokens.md` 의 변수로 만든다. 그리고 디자인 시스템에 추가할 후보라고 알린다.
package/dist/ai/tokens.md CHANGED
@@ -40,12 +40,30 @@
40
40
  | `--button-variant-outlined-background` | `var(--color-white)` | `var(--color-white)` |
41
41
  | `--button-variant-outlined-border` | `var(--color-accent-red-700)` | `var(--color-accent-red-700)` |
42
42
  | `--button-variant-outlined-text` | `var(--color-accent-red-700)` | `var(--color-accent-red-700)` |
43
- | `--button-size-xl` | `[object Object]` | `60` |
44
- | `--button-size-lg` | `[object Object]` | — |
45
- | `--button-size-md` | `[object Object]` | — |
46
- | `--button-size-rg` | `[object Object]` | — |
47
- | `--button-size-sm` | `[object Object]` | — |
48
- | `--button-size-xs` | `[object Object]` | `30` |
43
+ | `--button-size-xl-font-family` | `var(--font-family-primary)` | — |
44
+ | `--button-size-xl-font-weight` | `var(--font-weight-bold)` | — |
45
+ | `--button-size-xl-font-size` | `var(--font-size-lg)` | — |
46
+ | `--button-size-xl-line-height` | `var(--line-height-lg)` | — |
47
+ | `--button-size-lg-font-family` | `var(--font-family-primary)` | — |
48
+ | `--button-size-lg-font-weight` | `var(--font-weight-bold)` | — |
49
+ | `--button-size-lg-font-size` | `var(--font-size-base)` | — |
50
+ | `--button-size-lg-line-height` | `var(--line-height-base)` | — |
51
+ | `--button-size-md-font-family` | `var(--font-family-primary)` | — |
52
+ | `--button-size-md-font-weight` | `var(--font-weight-semibold)` | — |
53
+ | `--button-size-md-font-size` | `var(--font-size-sm)` | — |
54
+ | `--button-size-md-line-height` | `var(--line-height-sm)` | — |
55
+ | `--button-size-rg-font-family` | `var(--font-family-primary)` | — |
56
+ | `--button-size-rg-font-weight` | `var(--font-weight-semibold)` | — |
57
+ | `--button-size-rg-font-size` | `var(--font-size-sm)` | — |
58
+ | `--button-size-rg-line-height` | `var(--line-height-sm)` | — |
59
+ | `--button-size-sm-font-family` | `var(--font-family-primary)` | — |
60
+ | `--button-size-sm-font-weight` | `var(--font-weight-semibold)` | — |
61
+ | `--button-size-sm-font-size` | `var(--font-size-xsm)` | — |
62
+ | `--button-size-sm-line-height` | `var(--line-height-sm)` | — |
63
+ | `--button-size-xs-font-family` | `var(--font-family-primary)` | — |
64
+ | `--button-size-xs-font-weight` | `var(--font-weight-semibold)` | — |
65
+ | `--button-size-xs-font-size` | `var(--font-size-xsm)` | — |
66
+ | `--button-size-xs-line-height` | `var(--line-height-sm)` | — |
49
67
  | `--button-variant-primary-hover-background` | — | `var(--color-purple-900)` |
50
68
  | `--button-variant-primary-hover-border` | — | `var(--color-purple-900)` |
51
69
  | `--button-variant-primary-hover-text` | — | `var(--color-white)` |
@@ -64,16 +82,36 @@
64
82
  | `--button-variant-confirm-hover-background` | — | `var(--color-accent-red-700)` |
65
83
  | `--button-variant-confirm-hover-border` | — | `var(--color-accent-red-700)` |
66
84
  | `--button-variant-confirm-hover-text` | — | `var(--color-white)` |
67
- | `--button-xl` | — | `[object Object]` |
68
- | `--button-l` | — | `[object Object]` |
69
- | `--button-sb` | — | `[object Object]` |
70
- | `--button-r` | — | `[object Object]` |
71
- | `--button-s` | — | `[object Object]` |
72
- | `--button-xs` | — | `[object Object]` |
85
+ | `--button-xl-font-family` | — | `var(--font-family-primary)` |
86
+ | `--button-xl-font-weight` | — | `var(--font-weight-bold)` |
87
+ | `--button-xl-font-size` | — | `var(--font-size-lg)` |
88
+ | `--button-xl-line-height` | — | `var(--line-height-lg)` |
89
+ | `--button-l-font-family` | — | `var(--font-family-primary)` |
90
+ | `--button-l-font-weight` | — | `var(--font-weight-bold)` |
91
+ | `--button-l-font-size` | — | `var(--font-size-base)` |
92
+ | `--button-l-line-height` | — | `var(--line-height-base)` |
93
+ | `--button-sb-font-family` | — | `var(--font-family-primary)` |
94
+ | `--button-sb-font-weight` | — | `var(--font-weight-semibold)` |
95
+ | `--button-sb-font-size` | — | `var(--font-size-sm)` |
96
+ | `--button-sb-line-height` | — | `var(--line-height-sm)` |
97
+ | `--button-r-font-family` | — | `var(--font-family-primary)` |
98
+ | `--button-r-font-weight` | — | `var(--font-weight-semibold)` |
99
+ | `--button-r-font-size` | — | `var(--font-size-sm)` |
100
+ | `--button-r-line-height` | — | `var(--line-height-sm)` |
101
+ | `--button-s-font-family` | — | `var(--font-family-primary)` |
102
+ | `--button-s-font-weight` | — | `var(--font-weight-semibold)` |
103
+ | `--button-s-font-size` | — | `var(--font-size-xsm)` |
104
+ | `--button-s-line-height` | — | `var(--line-height-sm)` |
105
+ | `--button-xs-font-family` | — | `var(--font-family-primary)` |
106
+ | `--button-xs-font-weight` | — | `var(--font-weight-semibold)` |
107
+ | `--button-xs-font-size` | — | `var(--font-size-xsm)` |
108
+ | `--button-xs-line-height` | — | `var(--line-height-sm)` |
109
+ | `--button-size-xs` | — | `30` |
73
110
  | `--button-size-s` | — | `40` |
74
111
  | `--button-size-r` | — | `48` |
75
112
  | `--button-size-m` | — | `50` |
76
113
  | `--button-size-l` | — | `54` |
114
+ | `--button-size-xl` | — | `60` |
77
115
 
78
116
  `—` 는 그 테마에 값이 없다는 뜻이다. 그 테마에서는 `app` 값이 쓰인다.
79
117
 
@@ -309,6 +347,14 @@
309
347
  | `--modal-width-s` | `400px` | 폭 |
310
348
  | `--modal-width-m` | `450px` | 폭 |
311
349
  | `--modal-width-l` | `500px` | 폭 |
350
+ | `--bottom-nav-height` | `62px` | 폭 |
351
+ | `--bottom-nav-padding` | `5px` | 폭 |
352
+ | `--bottom-nav-offset` | `14px` | 폭 |
353
+ | `--bottom-nav-space` | `calc(var(--bottom-nav-height) + var(--bottom-nav-offset) + 16px)` | 폭 |
354
+ | `--bottom-nav-badge-dot` | `8px` | 폭 |
355
+ | `--bottom-nav-badge-count` | `18px` | 폭 |
356
+ | `--glass-blur` | `18px` | 폭 |
357
+ | `--step-bar-height` | `4px` | 진행 단계 바 |
312
358
  | `--icon-size-s` | `18px` | 그 밖의 치수 |
313
359
  | `--icon-size-m` | `20px` | 그 밖의 치수 |
314
360
  | `--icon-size-l` | `24px` | 그 밖의 치수 |
@@ -327,6 +373,7 @@
327
373
  | `--skeleton-last-line-width` | `60%` | 그 밖의 치수 |
328
374
  | `--hairline` | `1px` | 그 밖의 치수 |
329
375
  | `--shadow-popover` | `0px 4px 6px -2px rgba(0, 0, 0, 0.06), 0px 10px 15px -3px rgba(0, 0, 0, 0.1)` | 그림자 |
376
+ | `--shadow-floating` | `0px 10px 30px rgba(24, 24, 27, 0.14), 0px 1px 3px rgba(24, 24, 27, 0.08)` | 그림자 |
330
377
  | `--z-base` | `0` | 레이어. 값이 같아도 역할이 다르면 이름을 따로 둔다 |
331
378
  | `--z-raised` | `1` | 레이어. 값이 같아도 역할이 다르면 이름을 따로 둔다 |
332
379
  | `--z-sticky` | `2` | 레이어. 값이 같아도 역할이 다르면 이름을 따로 둔다 |
@@ -339,6 +386,8 @@
339
386
  | `--motion-fast` | `160ms` | 모션 |
340
387
  | `--motion-base` | `300ms` | 모션 |
341
388
  | `--motion-ease` | `ease` | 모션 |
342
- | `--spinner-duration` | `1.2s` | 모션 |
343
- | `--skeleton-duration` | `1.5s` | 모션 |
344
- | `--spinner-ease` | `cubic-bezier(0.5, 0, 0.5, 1)` | 모션 |
389
+ | `--motion-slow` | `420ms` | 모션 |
390
+ | `--motion-spring` | `cubic-bezier(0.34, 1.45, 0.5, 1)` | 끝에서 살짝 넘쳤다 돌아온다. 탭 바 선택 캡슐 |
391
+ | `--spinner-duration` | `1.2s` | 끝에서 살짝 넘쳤다 돌아온다. 탭 바 선택 캡슐 |
392
+ | `--skeleton-duration` | `1.5s` | 끝에서 살짝 넘쳤다 돌아온다. 탭 바 선택 캡슐 |
393
+ | `--spinner-ease` | `cubic-bezier(0.5, 0, 0.5, 1)` | 끝에서 살짝 넘쳤다 돌아온다. 탭 바 선택 캡슐 |