@nurihaus/web-design-system 3.1.1 → 3.3.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 (41) hide show
  1. package/dist/ai/components.md +166 -2
  2. package/dist/ai/tokens.md +66 -15
  3. package/dist/bottom-nav.js +407 -0
  4. package/dist/chip-group.js +317 -0
  5. package/dist/chunk-653.js +300 -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 +206 -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/skeleton/skeleton.stories.d.ts +5 -5
  25. package/dist/components/step-progress/base-step-progress.d.ts +7 -0
  26. package/dist/components/step-progress/step-progress-props.d.ts +10 -0
  27. package/dist/components/step-progress/step-progress-type.d.ts +17 -0
  28. package/dist/components/step-progress/step-progress.d.ts +4 -0
  29. package/dist/components/step-progress/step-progress.stories.d.ts +29 -0
  30. package/dist/components/toast/toast.stories.d.ts +5 -5
  31. package/dist/components.css +324 -0
  32. package/dist/icon.js +222 -0
  33. package/dist/index.d.ts +8 -0
  34. package/dist/index.js +858 -49
  35. package/dist/step-progress.js +310 -0
  36. package/dist/styles.css +342 -12
  37. package/dist/tokens/generated/semantic-admin.d.ts +24 -24
  38. package/dist/tokens/generated/semantic-app.d.ts +24 -24
  39. package/dist/tokens.css +66 -12
  40. package/dist/tokens.js +48 -48
  41. package/package.json +21 -3
package/dist/styles.css CHANGED
@@ -207,10 +207,24 @@
207
207
  --modal-width-m: 450px;
208
208
  --modal-width-l: 500px;
209
209
 
210
+ /* 하단 탭 바: 화면 아래에 떠 있는 유리 캡슐. 화면은 아래를 --bottom-nav-space(+ 안전 영역)만큼 비운다 */
211
+ --bottom-nav-height: 62px;
212
+ --bottom-nav-padding: 5px;
213
+ --bottom-nav-offset: 14px;
214
+ --bottom-nav-space: calc(var(--bottom-nav-height) + var(--bottom-nav-offset) + 16px);
215
+ --bottom-nav-badge-dot: 8px;
216
+ --bottom-nav-badge-count: 18px;
217
+ --glass-blur: 18px;
218
+
219
+ /* 진행 단계 바 */
220
+ --step-bar-height: 4px;
221
+
210
222
  /* 그 밖의 치수 */
223
+ --icon-size-xs: 16px;
211
224
  --icon-size-s: 18px;
212
225
  --icon-size-m: 20px;
213
226
  --icon-size-l: 24px;
227
+ --icon-size-xl: 32px;
214
228
  --tooltip-arrow: 8px;
215
229
  --spinner-stroke: 3px;
216
230
  --overlay-spinner-size: 64px;
@@ -228,6 +242,7 @@
228
242
 
229
243
  /* 그림자 */
230
244
  --shadow-popover: 0px 4px 6px -2px rgba(0, 0, 0, 0.06), 0px 10px 15px -3px rgba(0, 0, 0, 0.1);
245
+ --shadow-floating: 0px 10px 30px rgba(24, 24, 27, 0.14), 0px 1px 3px rgba(24, 24, 27, 0.08);
231
246
 
232
247
  /* 레이어. 값이 같아도 역할이 다르면 이름을 따로 둔다 */
233
248
  --z-base: 0;
@@ -244,6 +259,9 @@
244
259
  --motion-fast: 160ms;
245
260
  --motion-base: 300ms;
246
261
  --motion-ease: ease;
262
+ --motion-slow: 420ms;
263
+ /* 끝에서 살짝 넘쳤다 돌아온다. 탭 바 선택 캡슐 */
264
+ --motion-spring: cubic-bezier(0.34, 1.45, 0.5, 1);
247
265
  --spinner-duration: 1.2s;
248
266
  --skeleton-duration: 1.5s;
249
267
  --spinner-ease: cubic-bezier(0.5, 0, 0.5, 1);
@@ -268,12 +286,30 @@
268
286
  --button-variant-outlined-background: var(--color-white);
269
287
  --button-variant-outlined-border: var(--color-accent-red-700);
270
288
  --button-variant-outlined-text: var(--color-accent-red-700);
271
- --button-size-xl: [object Object];
272
- --button-size-lg: [object Object];
273
- --button-size-md: [object Object];
274
- --button-size-rg: [object Object];
275
- --button-size-sm: [object Object];
276
- --button-size-xs: [object Object];
289
+ --button-size-xl-font-family: var(--font-family-primary);
290
+ --button-size-xl-font-weight: var(--font-weight-bold);
291
+ --button-size-xl-font-size: var(--font-size-lg);
292
+ --button-size-xl-line-height: var(--line-height-lg);
293
+ --button-size-lg-font-family: var(--font-family-primary);
294
+ --button-size-lg-font-weight: var(--font-weight-bold);
295
+ --button-size-lg-font-size: var(--font-size-base);
296
+ --button-size-lg-line-height: var(--line-height-base);
297
+ --button-size-md-font-family: var(--font-family-primary);
298
+ --button-size-md-font-weight: var(--font-weight-semibold);
299
+ --button-size-md-font-size: var(--font-size-sm);
300
+ --button-size-md-line-height: var(--line-height-sm);
301
+ --button-size-rg-font-family: var(--font-family-primary);
302
+ --button-size-rg-font-weight: var(--font-weight-semibold);
303
+ --button-size-rg-font-size: var(--font-size-sm);
304
+ --button-size-rg-line-height: var(--line-height-sm);
305
+ --button-size-sm-font-family: var(--font-family-primary);
306
+ --button-size-sm-font-weight: var(--font-weight-semibold);
307
+ --button-size-sm-font-size: var(--font-size-xsm);
308
+ --button-size-sm-line-height: var(--line-height-sm);
309
+ --button-size-xs-font-family: var(--font-family-primary);
310
+ --button-size-xs-font-weight: var(--font-weight-semibold);
311
+ --button-size-xs-font-size: var(--font-size-xsm);
312
+ --button-size-xs-line-height: var(--line-height-sm);
277
313
  }
278
314
  /* semantic: admin */
279
315
  :root[data-ds-theme='admin'] {
@@ -312,12 +348,30 @@
312
348
  --button-variant-confirm-hover-background: var(--color-accent-red-700);
313
349
  --button-variant-confirm-hover-border: var(--color-accent-red-700);
314
350
  --button-variant-confirm-hover-text: var(--color-white);
315
- --button-xl: [object Object];
316
- --button-l: [object Object];
317
- --button-sb: [object Object];
318
- --button-r: [object Object];
319
- --button-s: [object Object];
320
- --button-xs: [object Object];
351
+ --button-xl-font-family: var(--font-family-primary);
352
+ --button-xl-font-weight: var(--font-weight-bold);
353
+ --button-xl-font-size: var(--font-size-lg);
354
+ --button-xl-line-height: var(--line-height-lg);
355
+ --button-l-font-family: var(--font-family-primary);
356
+ --button-l-font-weight: var(--font-weight-bold);
357
+ --button-l-font-size: var(--font-size-base);
358
+ --button-l-line-height: var(--line-height-base);
359
+ --button-sb-font-family: var(--font-family-primary);
360
+ --button-sb-font-weight: var(--font-weight-semibold);
361
+ --button-sb-font-size: var(--font-size-sm);
362
+ --button-sb-line-height: var(--line-height-sm);
363
+ --button-r-font-family: var(--font-family-primary);
364
+ --button-r-font-weight: var(--font-weight-semibold);
365
+ --button-r-font-size: var(--font-size-sm);
366
+ --button-r-line-height: var(--line-height-sm);
367
+ --button-s-font-family: var(--font-family-primary);
368
+ --button-s-font-weight: var(--font-weight-semibold);
369
+ --button-s-font-size: var(--font-size-xsm);
370
+ --button-s-line-height: var(--line-height-sm);
371
+ --button-xs-font-family: var(--font-family-primary);
372
+ --button-xs-font-weight: var(--font-weight-semibold);
373
+ --button-xs-font-size: var(--font-size-xsm);
374
+ --button-xs-line-height: var(--line-height-sm);
321
375
  --button-size-xs: 30;
322
376
  --button-size-s: 40;
323
377
  --button-size-r: 48;
@@ -735,6 +789,133 @@ p {
735
789
  background-color: var(--color-white);
736
790
  border: var(--hairline) solid var(--color-grey-scale-300);
737
791
  }
792
+ .base-bottom-nav:where(.root) {
793
+ position: fixed;
794
+ left: var(--spacing-16);
795
+ right: var(--spacing-16);
796
+ /* 기기 홈 막대만큼 더 띄운다. env() 의 대체값 0 은 단위가 있어야 calc 가 성립한다 */
797
+ bottom: calc(var(--bottom-nav-offset) + env(safe-area-inset-bottom, 0px)); /* raw-px */
798
+ z-index: var(--z-sticky);
799
+ display: grid;
800
+ grid-template-columns: repeat(var(--bottom-nav-count), minmax(0, 1fr));
801
+ height: var(--bottom-nav-height);
802
+ padding: var(--bottom-nav-padding);
803
+ box-sizing: border-box;
804
+ border-radius: var(--radius-full);
805
+ isolation: isolate;
806
+ }
807
+ .base-bottom-nav:where(.indicator) {
808
+ position: absolute;
809
+ z-index: var(--z-base);
810
+ top: var(--bottom-nav-padding);
811
+ bottom: var(--bottom-nav-padding);
812
+ left: var(--bottom-nav-padding);
813
+ width: calc((100% - 2 * var(--bottom-nav-padding)) / var(--bottom-nav-count));
814
+ border-radius: inherit;
815
+ transform: translateX(calc(var(--bottom-nav-active) * 100%));
816
+ }
817
+ .base-bottom-nav:where(.item) {
818
+ position: relative;
819
+ z-index: var(--z-raised);
820
+ display: flex;
821
+ flex-direction: column-reverse;
822
+ align-items: center;
823
+ justify-content: center;
824
+ gap: var(--spacing-2);
825
+ border-radius: inherit;
826
+ text-decoration: none;
827
+ }
828
+ /***************************************************************************************************
829
+ * *
830
+ * bottom-nav — 유리 캡슐 *
831
+ * *
832
+ ***************************************************************************************************/
833
+ .bottom-nav {
834
+ /* 뒤를 흐리고 채도를 올린 반투명 바탕 + 위쪽 반사광 + 흰 안쪽 테두리 + 그림자 */
835
+ background:
836
+ linear-gradient(
837
+ 180deg,
838
+ color-mix(in srgb, var(--color-grey-scale-50) 55%, transparent),
839
+ transparent 55%
840
+ ),
841
+ color-mix(in srgb, var(--color-grey-scale-50) 62%, transparent);
842
+ backdrop-filter: blur(var(--glass-blur)) saturate(180%);
843
+ box-shadow:
844
+ inset 0 var(--hairline) 0 color-mix(in srgb, var(--color-grey-scale-50) 75%, transparent),
845
+ inset 0 0 0 var(--hairline) color-mix(in srgb, var(--color-grey-scale-50) 35%, transparent),
846
+ var(--shadow-floating);
847
+
848
+ /* 흐림을 못 하는 브라우저, 투명도 줄이기 설정에서는 거의 불투명하게 */
849
+ }
850
+ @supports not ((backdrop-filter: none) or (-webkit-backdrop-filter: none)) {
851
+ .bottom-nav {
852
+ background: color-mix(in srgb, var(--color-grey-scale-50) 96%, transparent);
853
+ }
854
+ }
855
+ @media (prefers-reduced-transparency: reduce) {
856
+ .bottom-nav {
857
+ background: color-mix(in srgb, var(--color-grey-scale-50) 98%, transparent);
858
+ }
859
+ }
860
+ .bottom-nav-indicator {
861
+ background: color-mix(in srgb, var(--color-purple-900) 10%, transparent);
862
+ box-shadow: inset 0 var(--hairline) 0
863
+ color-mix(in srgb, var(--color-grey-scale-50) 50%, transparent);
864
+ transition: transform var(--motion-slow) var(--motion-spring);
865
+ }
866
+ @media (prefers-reduced-motion: reduce) {
867
+ .bottom-nav-indicator {
868
+ transition: none;
869
+ }
870
+ }
871
+ .bottom-nav-item {
872
+ color: var(--color-grey-scale-600);
873
+ font-size: var(--font-size-xsm);
874
+ font-weight: var(--font-weight-medium);
875
+ -webkit-tap-highlight-color: transparent;
876
+ transition: color var(--motion-fast) var(--motion-ease);
877
+ }
878
+ .bottom-nav-item[aria-current='page'] {
879
+ color: var(--color-purple-900);
880
+ font-weight: var(--font-weight-bold);
881
+ }
882
+ .bottom-nav-item:focus-visible {
883
+ outline: var(--hairline) solid var(--color-purple-600);
884
+ outline-offset: calc(-1 * var(--spacing-2));
885
+ }
886
+ .bottom-nav-item:active .bottom-nav-icon {
887
+ transform: scale(0.88);
888
+ }
889
+ .bottom-nav-icon {
890
+ position: relative;
891
+ display: flex;
892
+ transition: transform var(--motion-fast) var(--motion-spring);
893
+ }
894
+ .bottom-nav-badge {
895
+ position: absolute;
896
+ top: 0;
897
+ left: calc(100% - var(--spacing-6));
898
+ min-width: var(--bottom-nav-badge-dot);
899
+ height: var(--bottom-nav-badge-dot);
900
+ box-sizing: border-box;
901
+ border-radius: var(--radius-full);
902
+ background: var(--color-accent-red-500);
903
+ box-shadow: 0 0 0 var(--spacing-2) var(--color-grey-scale-50);
904
+ }
905
+ .bottom-nav-badge[data-count] {
906
+ top: calc(-1 * var(--spacing-4));
907
+ left: calc(100% - var(--spacing-8));
908
+ min-width: var(--bottom-nav-badge-count);
909
+ height: var(--bottom-nav-badge-count);
910
+ padding: 0 var(--spacing-4);
911
+ display: flex;
912
+ align-items: center;
913
+ justify-content: center;
914
+ color: var(--color-grey-scale-50);
915
+ font-size: var(--font-size-xsm);
916
+ font-weight: var(--font-weight-bold);
917
+ font-variant-numeric: tabular-nums;
918
+ }
738
919
  .base-breadcrumb:where(.list) {
739
920
  display: flex;
740
921
  flex-wrap: wrap;
@@ -1005,6 +1186,73 @@ p {
1005
1186
  border-radius: var(--radius-4);
1006
1187
  background-color: var(--color-grey-scale-300);
1007
1188
  }
1189
+ .base-chip-group:where(.root) {
1190
+ display: flex;
1191
+ gap: var(--spacing-8);
1192
+ overflow-x: auto;
1193
+ /* 칩의 터치 여백이 잘리지 않게 위아래를 비운다 */
1194
+ padding-block: var(--spacing-4);
1195
+ scrollbar-width: none;
1196
+ }
1197
+ .base-chip-group:where(.root)::-webkit-scrollbar {
1198
+ display: none;
1199
+ }
1200
+ .base-chip-group:where(.chip) {
1201
+ position: relative;
1202
+ flex-shrink: 0;
1203
+ display: inline-flex;
1204
+ align-items: center;
1205
+ gap: var(--spacing-6);
1206
+ cursor: pointer;
1207
+
1208
+ /* 36 높이를 터치 44 로 넓힌다 */
1209
+ }
1210
+ .base-chip-group:where(.chip)::after {
1211
+ content: '';
1212
+ position: absolute;
1213
+ inset: calc(-1 * var(--spacing-4)) 0;
1214
+ }
1215
+ .base-chip-group[data-disabled]:where(.chip) {
1216
+ cursor: not-allowed;
1217
+ }
1218
+ /***************************************************************************************************
1219
+ * *
1220
+ * chip-group *
1221
+ * *
1222
+ ***************************************************************************************************/
1223
+ .chip-group-chip {
1224
+ height: var(--control-height-s);
1225
+ padding: 0 var(--spacing-14);
1226
+ border: var(--hairline) solid var(--color-grey-scale-300);
1227
+ border-radius: var(--radius-full);
1228
+ background: var(--color-grey-scale-50);
1229
+ color: var(--color-grey-scale-600);
1230
+ font-size: var(--font-size-sm);
1231
+ font-weight: var(--font-weight-medium);
1232
+ transition:
1233
+ background-color var(--motion-fast) var(--motion-ease),
1234
+ color var(--motion-fast) var(--motion-ease),
1235
+ border-color var(--motion-fast) var(--motion-ease);
1236
+ }
1237
+ .chip-group-chip[data-state='on'] {
1238
+ border-color: var(--color-purple-900);
1239
+ background: var(--color-purple-900);
1240
+ color: var(--color-grey-scale-50);
1241
+ font-weight: var(--font-weight-semibold);
1242
+ }
1243
+ .chip-group-chip[data-disabled] {
1244
+ border-color: var(--color-grey-scale-200);
1245
+ color: var(--color-grey-scale-300);
1246
+ }
1247
+ .chip-group-chip:focus-visible {
1248
+ outline: var(--hairline) solid var(--color-purple-600);
1249
+ outline-offset: var(--spacing-2);
1250
+ }
1251
+ .chip-group-count {
1252
+ font-size: var(--font-size-xsm);
1253
+ font-variant-numeric: tabular-nums;
1254
+ opacity: 0.75;
1255
+ }
1008
1256
  .base-collapsible-menu.trigger {
1009
1257
  display: flex;
1010
1258
  align-items: center;
@@ -1773,6 +2021,30 @@ p {
1773
2021
  .base-text.color-accent-orange-900[class*='color-'] {
1774
2022
  color: var(--color-accent-orange-900);
1775
2023
  }
2024
+ .base-icon {
2025
+ flex-shrink: 0;
2026
+ vertical-align: middle;
2027
+ }
2028
+ .icon.size-xs {
2029
+ width: var(--icon-size-xs);
2030
+ height: var(--icon-size-xs);
2031
+ }
2032
+ .icon.size-s {
2033
+ width: var(--icon-size-s);
2034
+ height: var(--icon-size-s);
2035
+ }
2036
+ .icon.size-m {
2037
+ width: var(--icon-size-m);
2038
+ height: var(--icon-size-m);
2039
+ }
2040
+ .icon.size-l {
2041
+ width: var(--icon-size-l);
2042
+ height: var(--icon-size-l);
2043
+ }
2044
+ .icon.size-xl {
2045
+ width: var(--icon-size-xl);
2046
+ height: var(--icon-size-xl);
2047
+ }
1776
2048
  .base-inline-loading {
1777
2049
  display: flex;
1778
2050
  width: 100%;
@@ -2213,6 +2485,64 @@ p {
2213
2485
  transform: translateX(100%);
2214
2486
  }
2215
2487
  }
2488
+ .base-step-progress:where(.root) {
2489
+ display: grid;
2490
+ grid-template-columns: repeat(var(--step-count), minmax(0, 1fr));
2491
+ gap: var(--spacing-4);
2492
+ margin: 0;
2493
+ padding: 0;
2494
+ list-style: none;
2495
+ }
2496
+ .base-step-progress:where(.step) {
2497
+ display: flex;
2498
+ flex-direction: column;
2499
+ gap: var(--spacing-6);
2500
+ min-width: 0;
2501
+ }
2502
+ /***************************************************************************************************
2503
+ * *
2504
+ * step-progress *
2505
+ * *
2506
+ ***************************************************************************************************/
2507
+ .step-progress-bar {
2508
+ display: block;
2509
+ height: var(--step-bar-height);
2510
+ border-radius: var(--radius-full);
2511
+ background: var(--color-grey-scale-200);
2512
+ transition: background-color var(--motion-base) var(--motion-ease);
2513
+ }
2514
+ .step-progress-name {
2515
+ overflow: hidden;
2516
+ color: var(--color-grey-scale-500);
2517
+ font-size: var(--font-size-xsm);
2518
+ white-space: nowrap;
2519
+ text-overflow: ellipsis;
2520
+ }
2521
+ .step-progress-step[data-state='done'] .step-progress-bar {
2522
+ background: var(--color-purple-900);
2523
+ }
2524
+ .step-progress-step[data-state='done'] .step-progress-name {
2525
+ color: var(--color-grey-scale-600);
2526
+ }
2527
+ .step-progress-step[data-state='current'] .step-progress-bar {
2528
+ background: var(--color-purple-600);
2529
+ }
2530
+ .step-progress-step[data-state='current'] .step-progress-name {
2531
+ color: var(--color-purple-900);
2532
+ font-weight: var(--font-weight-semibold);
2533
+ }
2534
+ /* 지금 단계 이름만 보인다. 다른 이름은 낭독기에는 남긴다 */
2535
+ .step-progress.label-visibility-current .step-progress-step:not([data-state='current']) .step-progress-name {
2536
+ position: absolute;
2537
+ width: 1px; /* raw-px */
2538
+ height: 1px; /* raw-px */
2539
+ overflow: hidden;
2540
+ clip-path: inset(50%);
2541
+ white-space: nowrap;
2542
+ }
2543
+ .step-progress.label-visibility-current .step-progress-step[data-state='current'] .step-progress-name {
2544
+ overflow: visible;
2545
+ }
2216
2546
  .base-switch:where(.thumb) {
2217
2547
  display: block;
2218
2548
  }
@@ -62,40 +62,40 @@ export declare const semanticAdmin: {
62
62
  };
63
63
  };
64
64
  readonly xl: {
65
- readonly fontFamily: "{primary}";
66
- readonly fontWeight: "{font-weight.b}";
67
- readonly fontSize: "{font-size.lg}";
68
- readonly lineHeight: "{line-height.24}";
65
+ readonly fontFamily: "Pretendard";
66
+ readonly fontWeight: 700;
67
+ readonly fontSize: 18;
68
+ readonly lineHeight: 24;
69
69
  };
70
70
  readonly l: {
71
- readonly fontFamily: "{primary}";
72
- readonly fontWeight: "{font-weight.b}";
73
- readonly fontSize: "{font-size.base}";
74
- readonly lineHeight: "{line-height.22}";
71
+ readonly fontFamily: "Pretendard";
72
+ readonly fontWeight: 700;
73
+ readonly fontSize: 16;
74
+ readonly lineHeight: 22;
75
75
  };
76
76
  readonly sb: {
77
- readonly fontFamily: "{primary}";
78
- readonly fontWeight: "{font-weight.sb}";
79
- readonly fontSize: "{font-size.sm}";
80
- readonly lineHeight: "{line-height.18}";
77
+ readonly fontFamily: "Pretendard";
78
+ readonly fontWeight: 600;
79
+ readonly fontSize: 14;
80
+ readonly lineHeight: 18;
81
81
  };
82
82
  readonly r: {
83
- readonly fontFamily: "{primary}";
84
- readonly fontWeight: "{font-weight.sb}";
85
- readonly fontSize: "{font-size.sm}";
86
- readonly lineHeight: "{line-height.18}";
83
+ readonly fontFamily: "Pretendard";
84
+ readonly fontWeight: 600;
85
+ readonly fontSize: 14;
86
+ readonly lineHeight: 18;
87
87
  };
88
88
  readonly s: {
89
- readonly fontFamily: "{primary}";
90
- readonly fontWeight: "{font-weight.sb}";
91
- readonly fontSize: "{font-size.xsm}";
92
- readonly lineHeight: "{line-height.18}";
89
+ readonly fontFamily: "Pretendard";
90
+ readonly fontWeight: 600;
91
+ readonly fontSize: 12;
92
+ readonly lineHeight: 18;
93
93
  };
94
94
  readonly xs: {
95
- readonly fontFamily: "{primary}";
96
- readonly fontWeight: "{font-weight.sb}";
97
- readonly fontSize: "{font-size.xsm}";
98
- readonly lineHeight: "{line-height.18}";
95
+ readonly fontFamily: "Pretendard";
96
+ readonly fontWeight: 600;
97
+ readonly fontSize: 12;
98
+ readonly lineHeight: 18;
99
99
  };
100
100
  readonly size: {
101
101
  readonly xs: 30;
@@ -34,40 +34,40 @@ export declare const semanticApp: {
34
34
  };
35
35
  readonly size: {
36
36
  readonly xl: {
37
- readonly fontFamily: "{primary}";
38
- readonly fontWeight: "{font-weight.b}";
39
- readonly fontSize: "{font-size.lg}";
40
- readonly lineHeight: "{line-height.24}";
37
+ readonly fontFamily: "Pretendard";
38
+ readonly fontWeight: 700;
39
+ readonly fontSize: 18;
40
+ readonly lineHeight: 24;
41
41
  };
42
42
  readonly lg: {
43
- readonly fontFamily: "{primary}";
44
- readonly fontWeight: "{font-weight.b}";
45
- readonly fontSize: "{font-size.base}";
46
- readonly lineHeight: "{line-height.22}";
43
+ readonly fontFamily: "Pretendard";
44
+ readonly fontWeight: 700;
45
+ readonly fontSize: 16;
46
+ readonly lineHeight: 22;
47
47
  };
48
48
  readonly md: {
49
- readonly fontFamily: "{primary}";
50
- readonly fontWeight: "{font-weight.sb}";
51
- readonly fontSize: "{font-size.sm}";
52
- readonly lineHeight: "{line-height.18}";
49
+ readonly fontFamily: "Pretendard";
50
+ readonly fontWeight: 600;
51
+ readonly fontSize: 14;
52
+ readonly lineHeight: 18;
53
53
  };
54
54
  readonly rg: {
55
- readonly fontFamily: "{primary}";
56
- readonly fontWeight: "{font-weight.sb}";
57
- readonly fontSize: "{font-size.sm}";
58
- readonly lineHeight: "{line-height.18}";
55
+ readonly fontFamily: "Pretendard";
56
+ readonly fontWeight: 600;
57
+ readonly fontSize: 14;
58
+ readonly lineHeight: 18;
59
59
  };
60
60
  readonly sm: {
61
- readonly fontFamily: "{primary}";
62
- readonly fontWeight: "{font-weight.sb}";
63
- readonly fontSize: "{font-size.xsm}";
64
- readonly lineHeight: "{line-height.18}";
61
+ readonly fontFamily: "Pretendard";
62
+ readonly fontWeight: 600;
63
+ readonly fontSize: 12;
64
+ readonly lineHeight: 18;
65
65
  };
66
66
  readonly xs: {
67
- readonly fontFamily: "{primary}";
68
- readonly fontWeight: "{font-weight.sb}";
69
- readonly fontSize: "{font-size.xsm}";
70
- readonly lineHeight: "{line-height.18}";
67
+ readonly fontFamily: "Pretendard";
68
+ readonly fontWeight: 600;
69
+ readonly fontSize: 12;
70
+ readonly lineHeight: 18;
71
71
  };
72
72
  };
73
73
  };
package/dist/tokens.css CHANGED
@@ -205,10 +205,24 @@
205
205
  --modal-width-m: 450px;
206
206
  --modal-width-l: 500px;
207
207
 
208
+ /* 하단 탭 바: 화면 아래에 떠 있는 유리 캡슐. 화면은 아래를 --bottom-nav-space(+ 안전 영역)만큼 비운다 */
209
+ --bottom-nav-height: 62px;
210
+ --bottom-nav-padding: 5px;
211
+ --bottom-nav-offset: 14px;
212
+ --bottom-nav-space: calc(var(--bottom-nav-height) + var(--bottom-nav-offset) + 16px);
213
+ --bottom-nav-badge-dot: 8px;
214
+ --bottom-nav-badge-count: 18px;
215
+ --glass-blur: 18px;
216
+
217
+ /* 진행 단계 바 */
218
+ --step-bar-height: 4px;
219
+
208
220
  /* 그 밖의 치수 */
221
+ --icon-size-xs: 16px;
209
222
  --icon-size-s: 18px;
210
223
  --icon-size-m: 20px;
211
224
  --icon-size-l: 24px;
225
+ --icon-size-xl: 32px;
212
226
  --tooltip-arrow: 8px;
213
227
  --spinner-stroke: 3px;
214
228
  --overlay-spinner-size: 64px;
@@ -226,6 +240,7 @@
226
240
 
227
241
  /* 그림자 */
228
242
  --shadow-popover: 0px 4px 6px -2px rgba(0, 0, 0, 0.06), 0px 10px 15px -3px rgba(0, 0, 0, 0.1);
243
+ --shadow-floating: 0px 10px 30px rgba(24, 24, 27, 0.14), 0px 1px 3px rgba(24, 24, 27, 0.08);
229
244
 
230
245
  /* 레이어. 값이 같아도 역할이 다르면 이름을 따로 둔다 */
231
246
  --z-base: 0;
@@ -242,6 +257,9 @@
242
257
  --motion-fast: 160ms;
243
258
  --motion-base: 300ms;
244
259
  --motion-ease: ease;
260
+ --motion-slow: 420ms;
261
+ /* 끝에서 살짝 넘쳤다 돌아온다. 탭 바 선택 캡슐 */
262
+ --motion-spring: cubic-bezier(0.34, 1.45, 0.5, 1);
245
263
  --spinner-duration: 1.2s;
246
264
  --skeleton-duration: 1.5s;
247
265
  --spinner-ease: cubic-bezier(0.5, 0, 0.5, 1);
@@ -266,12 +284,30 @@
266
284
  --button-variant-outlined-background: var(--color-white);
267
285
  --button-variant-outlined-border: var(--color-accent-red-700);
268
286
  --button-variant-outlined-text: var(--color-accent-red-700);
269
- --button-size-xl: [object Object];
270
- --button-size-lg: [object Object];
271
- --button-size-md: [object Object];
272
- --button-size-rg: [object Object];
273
- --button-size-sm: [object Object];
274
- --button-size-xs: [object Object];
287
+ --button-size-xl-font-family: var(--font-family-primary);
288
+ --button-size-xl-font-weight: var(--font-weight-bold);
289
+ --button-size-xl-font-size: var(--font-size-lg);
290
+ --button-size-xl-line-height: var(--line-height-lg);
291
+ --button-size-lg-font-family: var(--font-family-primary);
292
+ --button-size-lg-font-weight: var(--font-weight-bold);
293
+ --button-size-lg-font-size: var(--font-size-base);
294
+ --button-size-lg-line-height: var(--line-height-base);
295
+ --button-size-md-font-family: var(--font-family-primary);
296
+ --button-size-md-font-weight: var(--font-weight-semibold);
297
+ --button-size-md-font-size: var(--font-size-sm);
298
+ --button-size-md-line-height: var(--line-height-sm);
299
+ --button-size-rg-font-family: var(--font-family-primary);
300
+ --button-size-rg-font-weight: var(--font-weight-semibold);
301
+ --button-size-rg-font-size: var(--font-size-sm);
302
+ --button-size-rg-line-height: var(--line-height-sm);
303
+ --button-size-sm-font-family: var(--font-family-primary);
304
+ --button-size-sm-font-weight: var(--font-weight-semibold);
305
+ --button-size-sm-font-size: var(--font-size-xsm);
306
+ --button-size-sm-line-height: var(--line-height-sm);
307
+ --button-size-xs-font-family: var(--font-family-primary);
308
+ --button-size-xs-font-weight: var(--font-weight-semibold);
309
+ --button-size-xs-font-size: var(--font-size-xsm);
310
+ --button-size-xs-line-height: var(--line-height-sm);
275
311
  }
276
312
  /* semantic: admin */
277
313
  :root[data-ds-theme='admin'] {
@@ -310,12 +346,30 @@
310
346
  --button-variant-confirm-hover-background: var(--color-accent-red-700);
311
347
  --button-variant-confirm-hover-border: var(--color-accent-red-700);
312
348
  --button-variant-confirm-hover-text: var(--color-white);
313
- --button-xl: [object Object];
314
- --button-l: [object Object];
315
- --button-sb: [object Object];
316
- --button-r: [object Object];
317
- --button-s: [object Object];
318
- --button-xs: [object Object];
349
+ --button-xl-font-family: var(--font-family-primary);
350
+ --button-xl-font-weight: var(--font-weight-bold);
351
+ --button-xl-font-size: var(--font-size-lg);
352
+ --button-xl-line-height: var(--line-height-lg);
353
+ --button-l-font-family: var(--font-family-primary);
354
+ --button-l-font-weight: var(--font-weight-bold);
355
+ --button-l-font-size: var(--font-size-base);
356
+ --button-l-line-height: var(--line-height-base);
357
+ --button-sb-font-family: var(--font-family-primary);
358
+ --button-sb-font-weight: var(--font-weight-semibold);
359
+ --button-sb-font-size: var(--font-size-sm);
360
+ --button-sb-line-height: var(--line-height-sm);
361
+ --button-r-font-family: var(--font-family-primary);
362
+ --button-r-font-weight: var(--font-weight-semibold);
363
+ --button-r-font-size: var(--font-size-sm);
364
+ --button-r-line-height: var(--line-height-sm);
365
+ --button-s-font-family: var(--font-family-primary);
366
+ --button-s-font-weight: var(--font-weight-semibold);
367
+ --button-s-font-size: var(--font-size-xsm);
368
+ --button-s-line-height: var(--line-height-sm);
369
+ --button-xs-font-family: var(--font-family-primary);
370
+ --button-xs-font-weight: var(--font-weight-semibold);
371
+ --button-xs-font-size: var(--font-size-xsm);
372
+ --button-xs-line-height: var(--line-height-sm);
319
373
  --button-size-xs: 30;
320
374
  --button-size-s: 40;
321
375
  --button-size-r: 48;