@stn-uiux/pub-ui 0.1.72 → 0.1.74

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 (50) hide show
  1. package/dist/{chunk-KLIYAEJA.js → chunk-2LRCGTKQ.js} +7 -17
  2. package/dist/chunk-2LRCGTKQ.js.map +1 -0
  3. package/dist/{chunk-WN7FYFIO.js → chunk-AJLP3Y53.js} +3 -1
  4. package/dist/chunk-AJLP3Y53.js.map +1 -0
  5. package/dist/chunk-DOD5KA5Y.js +9 -0
  6. package/dist/chunk-DOD5KA5Y.js.map +1 -0
  7. package/dist/{chunk-NB4NJQYE.js → chunk-YJLOIDKY.js} +24 -24
  8. package/dist/chunk-YJLOIDKY.js.map +1 -0
  9. package/dist/cli.js +1 -1
  10. package/dist/data/index.d.ts +1 -1
  11. package/dist/data/index.js +6 -4
  12. package/dist/data/stnCard.d.ts +3 -1
  13. package/dist/data/stnCard.js +3 -1
  14. package/dist/data/stnChip.d.ts +2 -3
  15. package/dist/data/stnChip.js +1 -1
  16. package/dist/data/stnPackageVersion.d.ts +2 -2
  17. package/dist/data/stnPackageVersion.js +1 -1
  18. package/dist/data/stnTextField.d.ts +2 -2
  19. package/dist/data/stnTextField.js +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +6 -4
  22. package/package.json +1 -1
  23. package/styles/components/stn-breadcrumb.css +37 -34
  24. package/styles/components/stn-card.css +24 -3
  25. package/styles/components/stn-date-picker.css +1 -1
  26. package/styles/components/stn-drawer.css +182 -0
  27. package/styles/components/stn-event-banner.css +18 -18
  28. package/styles/components/stn-pagination.css +9 -8
  29. package/styles/components/stn-progress-bar.css +5 -5
  30. package/styles/components/stn-side-nav.css +55 -31
  31. package/styles/components/stn-status.css +22 -22
  32. package/styles/components/stn-table.css +42 -0
  33. package/styles/components/stn-tabs.css +3 -3
  34. package/styles/components/stn-tooltip.css +1 -1
  35. package/styles/components/stn-widget.css +3 -3
  36. package/styles/patterns/stn-alert-center.css +6 -6
  37. package/styles/patterns/stn-header.css +7 -7
  38. package/styles/patterns/stn-section-side.css +3 -2
  39. package/styles/style-pub.css +1 -0
  40. package/styles/tokens/stn-breakpoint.css +0 -12
  41. package/styles/tokens/stn-colors-semantic.css +25 -15
  42. package/styles/tokens/stn-elevation.css +5 -1
  43. package/styles/tokens/stn-radius-semantic.css +1 -1
  44. package/styles/tokens/stn-size-semantic.css +8 -0
  45. package/styles/tokens/stn-spacing-semantic.css +25 -0
  46. package/dist/chunk-KLIYAEJA.js.map +0 -1
  47. package/dist/chunk-NB4NJQYE.js.map +0 -1
  48. package/dist/chunk-OYP5UJ62.js +0 -9
  49. package/dist/chunk-OYP5UJ62.js.map +0 -1
  50. package/dist/chunk-WN7FYFIO.js.map +0 -1
@@ -19,7 +19,7 @@
19
19
  align-items: center;
20
20
  gap: var(--stn-space-6, 6px);
21
21
  font-family: var(--stn-font-body);
22
- font-size: var(--stn-font-size-13, 13px);
22
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
23
23
  font-weight: var(--stn-font-weight-medium, 500);
24
24
  line-height: 1;
25
25
  color: var(--stn-text-primary);
@@ -50,12 +50,12 @@
50
50
  padding: 0 var(--stn-space-6, 6px);
51
51
  }
52
52
  .stn-status-dot.xs .stn-status-dot__count {
53
- font-size: var(--stn-font-size-10, 10px);
53
+ font-size: var(--stn-text-label-xsmall-size, var(--stn-font-size-10, 10px));
54
54
  }
55
55
 
56
56
  /* sm — 24px (bordered: 버튼 sm과 1:1 일치) */
57
57
  .stn-status-dot.sm {
58
- font-size: var(--stn-font-size-12, 12px);
58
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
59
59
  gap: var(--stn-space-4, 4px);
60
60
  }
61
61
  .stn-status-dot.sm .stn-status-dot__point {
@@ -72,7 +72,7 @@
72
72
 
73
73
  /* md — 32px (기본 · bordered: 버튼 md와 1:1 일치) */
74
74
  .stn-status-dot.md {
75
- font-size: var(--stn-font-size-13, 13px);
75
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
76
76
  gap: var(--stn-space-6, 6px);
77
77
  }
78
78
  .stn-status-dot.md .stn-status-dot__point {
@@ -84,12 +84,12 @@
84
84
  padding: 0 var(--stn-space-10, 10px);
85
85
  }
86
86
  .stn-status-dot.md .stn-status-dot__count {
87
- font-size: var(--stn-font-size-12, 12px);
87
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
88
88
  }
89
89
 
90
90
  /* lg — 40px (bordered: 버튼 lg와 1:1 일치) */
91
91
  .stn-status-dot.lg {
92
- font-size: var(--stn-font-size-14, 14px);
92
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
93
93
  gap: var(--stn-space-8, 8px);
94
94
  }
95
95
  .stn-status-dot.lg .stn-status-dot__point {
@@ -101,12 +101,12 @@
101
101
  padding: 0 var(--stn-space-12, 12px);
102
102
  }
103
103
  .stn-status-dot.lg .stn-status-dot__count {
104
- font-size: var(--stn-font-size-13, 13px);
104
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
105
105
  }
106
106
 
107
107
  /* xl — 48px (bordered) */
108
108
  .stn-status-dot.xl {
109
- font-size: var(--stn-font-size-15, 15px);
109
+ font-size: var(--stn-text-label-medium-size, var(--stn-font-size-15, 15px));
110
110
  gap: var(--stn-space-8, 8px);
111
111
  }
112
112
  .stn-status-dot.xl .stn-status-dot__point {
@@ -118,7 +118,7 @@
118
118
  padding: 0 var(--stn-space-14, 14px);
119
119
  }
120
120
  .stn-status-dot.xl .stn-status-dot__count {
121
- font-size: var(--stn-font-size-14, 14px);
121
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
122
122
  }
123
123
 
124
124
  /* 여백(Gap) 조절 */
@@ -153,7 +153,7 @@
153
153
  display: inline-flex;
154
154
  align-items: center;
155
155
  font-family: var(--stn-font-number, var(--stn-font-body));
156
- font-size: var(--stn-font-size-12, 12px);
156
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
157
157
  font-weight: var(--stn-font-weight-bold, 700);
158
158
  line-height: 1;
159
159
  color: var(--stn-text-primary);
@@ -259,7 +259,7 @@
259
259
  height: 100%;
260
260
  box-sizing: border-box;
261
261
  font-family: var(--stn-font-body);
262
- font-size: var(--stn-font-size-12, 12px);
262
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
263
263
  font-weight: var(--stn-font-weight-medium, 500);
264
264
  color: var(--stn-text-primary);
265
265
  user-select: none;
@@ -302,7 +302,7 @@
302
302
  background-color: var(--_switch-bg);
303
303
  color: var(--_switch-color);
304
304
  font-family: var(--stn-font-body);
305
- font-size: var(--stn-font-size-12, 12px);
305
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
306
306
  font-weight: var(--stn-font-weight-medium, 500);
307
307
  cursor: pointer;
308
308
  user-select: none;
@@ -475,7 +475,7 @@
475
475
  .stn-status-flow.sm .stn-status-flow__badge {
476
476
  width: var(--stn-size-16, 16px);
477
477
  height: var(--stn-size-16, 16px);
478
- font-size: var(--stn-font-size-10, 10px);
478
+ font-size: var(--stn-text-label-xsmall-size, var(--stn-font-size-10, 10px));
479
479
  border-radius: var(--stn-radius-3, 3px);
480
480
  }
481
481
  .stn-status-flow.sm .stn-status-flow__badge .stn-icon {
@@ -486,7 +486,7 @@
486
486
  /* md — 26px (기본) */
487
487
  .stn-status-flow.md .stn-status-flow__step {
488
488
  height: var(--stn-size-26, 26px);
489
- font-size: var(--stn-font-size-12, 12px);
489
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
490
490
  padding: 0 var(--stn-space-10, 10px) 0 var(--stn-space-4, 4px);
491
491
  gap: var(--stn-space-6, 6px);
492
492
  }
@@ -500,14 +500,14 @@
500
500
  /* lg — 32px */
501
501
  .stn-status-flow.lg .stn-status-flow__step {
502
502
  height: var(--stn-size-32, 32px);
503
- font-size: var(--stn-font-size-13, 13px);
503
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
504
504
  padding: 0 var(--stn-space-12, 12px) 0 var(--stn-space-5, 5px);
505
505
  gap: var(--stn-space-8, 8px);
506
506
  }
507
507
  .stn-status-flow.lg .stn-status-flow__badge {
508
508
  width: var(--stn-size-22, 22px);
509
509
  height: var(--stn-size-22, 22px);
510
- font-size: var(--stn-font-size-12, 12px);
510
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
511
511
  border-radius: var(--stn-radius-4, 4px);
512
512
  }
513
513
  .stn-status-flow.lg .stn-status-flow__badge .stn-icon {
@@ -518,14 +518,14 @@
518
518
  /* xl — 36px */
519
519
  .stn-status-flow.xl .stn-status-flow__step {
520
520
  height: var(--stn-size-36, 36px);
521
- font-size: var(--stn-font-size-14, 14px);
521
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
522
522
  padding: 0 var(--stn-space-14, 14px) 0 var(--stn-space-6, 6px);
523
523
  gap: var(--stn-space-10, 10px);
524
524
  }
525
525
  .stn-status-flow.xl .stn-status-flow__badge {
526
526
  width: var(--stn-size-26, 26px);
527
527
  height: var(--stn-size-26, 26px);
528
- font-size: var(--stn-font-size-13, 13px);
528
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
529
529
  border-radius: var(--stn-radius-6, 6px);
530
530
  }
531
531
  .stn-status-flow.xl .stn-status-flow__badge .stn-icon {
@@ -550,7 +550,7 @@
550
550
  align-items: center;
551
551
  color: var(--stn-status-flow-connector-color);
552
552
  opacity: var(--stn-status-flow-connector-opacity);
553
- font-size: var(--stn-font-size-12, 12px);
553
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
554
554
  user-select: none;
555
555
  }
556
556
 
@@ -617,7 +617,7 @@
617
617
  .stn-status-severity.sm {
618
618
  height: var(--stn-severity-badge-height-sm, var(--stn-size-18, 18px));
619
619
  padding: var(--stn-severity-badge-padding-sm, var(--stn-space-2, 2px) var(--stn-space-4, 4px));
620
- font-size: var(--stn-font-size-10, 10px);
620
+ font-size: var(--stn-text-label-xsmall-size, var(--stn-font-size-10, 10px));
621
621
  gap: var(--stn-severity-badge-gap-sm, var(--stn-space-2, 2px));
622
622
  }
623
623
 
@@ -643,7 +643,7 @@
643
643
  .stn-status-severity.lg {
644
644
  height: var(--stn-severity-badge-height-lg, var(--stn-size-24, 24px));
645
645
  padding: var(--stn-severity-badge-padding-lg, var(--stn-space-4, 4px) var(--stn-space-10, 10px));
646
- font-size: var(--stn-font-size-12, 12px);
646
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
647
647
  gap: var(--stn-severity-badge-gap-lg, var(--stn-space-4, 4px));
648
648
  }
649
649
 
@@ -688,7 +688,7 @@
688
688
  width: var(--stn-severity-filter-width, var(--stn-size-52, 52px));
689
689
  height: var(--stn-severity-filter-height, var(--stn-size-26, 26px));
690
690
  padding: var(--stn-space-4, 4px);
691
- font-size: var(--stn-font-size-14, 14px);
691
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
692
692
  font-weight: var(--stn-font-weight-bold, 700);
693
693
  cursor: pointer;
694
694
  background: transparent;
@@ -354,6 +354,48 @@ td.stn-table__col-check .stn-checkbox {
354
354
  white-space: nowrap;
355
355
  }
356
356
 
357
+ /* Density Modifiers — 인라인 padding 지정 없이 토큰 기반 조절 */
358
+ .stn-table.stn-table--compact,
359
+ .stn-table--compact .stn-table__grid {
360
+ --stn-table-cell-padding: var(--stn-space-1) var(--stn-space-2);
361
+ --stn-table-row-height: var(--stn-size-32);
362
+ }
363
+
364
+ .stn-table.stn-table--comfortable,
365
+ .stn-table--comfortable .stn-table__grid {
366
+ --stn-table-cell-padding: var(--stn-space-3) var(--stn-space-4);
367
+ --stn-table-row-height: var(--stn-size-44);
368
+ }
369
+
370
+ /* Cell Helper Classes */
371
+ .stn-table__font-number,
372
+ .stn-table td.stn-table__font-number {
373
+ font-family: var(--stn-font-number);
374
+ }
375
+
376
+ .stn-table__cell-sub {
377
+ color: var(--stn-text-secondary);
378
+ }
379
+
380
+ .stn-table__cell-muted {
381
+ color: var(--stn-text-tertiary);
382
+ font-size: var(--stn-text-caption-size);
383
+ }
384
+
385
+ .stn-table__cell-primary {
386
+ color: var(--stn-text-primary);
387
+ }
388
+
389
+ .stn-table__cell-critical {
390
+ color: var(--stn-critical);
391
+ font-weight: var(--stn-font-weight-bold);
392
+ }
393
+
394
+ .stn-table__divider {
395
+ color: var(--stn-text-tertiary);
396
+ margin-inline: var(--stn-space-1);
397
+ }
398
+
357
399
  /* align variant — Th/Td `align="left" | "center" | "right"` (기본 center) */
358
400
  .stn-table th.stn-table__th--align-left,
359
401
  .stn-table td.stn-table__td--align-left {
@@ -118,7 +118,7 @@
118
118
  .stn-tabs.sm .stn-tab {
119
119
  height: var(--stn-size-32, 32px);
120
120
  padding: 0 var(--stn-space-12, 12px);
121
- font-size: var(--stn-font-size-12, 12px);
121
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-12, 12px));
122
122
  border-radius: var(--stn-radius-sm, 6px);
123
123
  }
124
124
 
@@ -127,7 +127,7 @@
127
127
  .stn-tabs:not(.sm):not(.lg) .stn-tab {
128
128
  height: var(--stn-size-38, 38px);
129
129
  padding: 0 var(--stn-space-16, 16px);
130
- font-size: var(--stn-font-size-13, 13px);
130
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
131
131
  border-radius: var(--stn-radius-md, 8px);
132
132
  }
133
133
 
@@ -135,7 +135,7 @@
135
135
  .stn-tabs.lg .stn-tab {
136
136
  height: var(--stn-size-44, 44px);
137
137
  padding: 0 var(--stn-space-20, 20px);
138
- font-size: var(--stn-font-size-14, 14px);
138
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
139
139
  border-radius: var(--stn-radius-md, 8px);
140
140
  }
141
141
 
@@ -203,7 +203,7 @@
203
203
 
204
204
  /* SM: 소형 (높이 20px, 폰트 11px) */
205
205
  .stn-tooltip.sm {
206
- --stn-tooltip-font-size: var(--stn-font-size-11);
206
+ --stn-tooltip-font-size: var(--stn-text-caption-small-size, var(--stn-font-size-11, 11px));
207
207
  --stn-tooltip-pad-y: var(--stn-space-2);
208
208
  --stn-tooltip-pad-x: var(--stn-space-6);
209
209
  --stn-tooltip-min-height: var(--stn-size-20);
@@ -268,9 +268,9 @@
268
268
  }
269
269
 
270
270
  /* Widget title size modifiers */
271
- .stn-widget .stn-widget__title.sm { font-size: var(--stn-font-size-14, 14px); }
272
- .stn-widget .stn-widget__title.md { font-size: var(--stn-font-size-16, 16px); }
273
- .stn-widget .stn-widget__title.lg { font-size: var(--stn-font-size-18, 18px); }
271
+ .stn-widget .stn-widget__title.sm { font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px)); }
272
+ .stn-widget .stn-widget__title.md { font-size: var(--stn-text-title-small-size, var(--stn-font-size-16, 16px)); }
273
+ .stn-widget .stn-widget__title.lg { font-size: var(--stn-text-title-medium-size, var(--stn-font-size-18, 18px)); }
274
274
 
275
275
  /* Widget title weight modifiers */
276
276
  .stn-widget .stn-widget__title.regular { font-weight: var(--stn-font-weight-regular, 400); }
@@ -148,7 +148,7 @@
148
148
  border: var(--stn-size-1) solid transparent;
149
149
  background: transparent;
150
150
  color: var(--stn-text-secondary);
151
- font-size: var(--stn-font-size-13);
151
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
152
152
  font-weight: var(--stn-font-weight-medium);
153
153
  cursor: pointer;
154
154
  transition: color 0.15s ease;
@@ -294,7 +294,7 @@
294
294
  .stn-alert-card__title {
295
295
  flex: 1;
296
296
  min-width: 0;
297
- font-size: var(--stn-font-size-15);
297
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-15, 15px));
298
298
  font-weight: var(--stn-font-weight-bold);
299
299
  color: var(--stn-text-primary);
300
300
  letter-spacing: -0.01em;
@@ -302,7 +302,7 @@
302
302
 
303
303
  /* 작업/공사 타입 라벨 공통 */
304
304
  .stn-alert-card__type-label {
305
- font-size: var(--stn-font-size-14);
305
+ font-size: var(--stn-text-body-medium-size, var(--stn-font-size-14, 14px));
306
306
  font-weight: var(--stn-font-weight-bold);
307
307
  color: var(--stn-text-primary);
308
308
  }
@@ -329,7 +329,7 @@
329
329
  .stn-alert-card__desc {
330
330
  flex: 1;
331
331
  min-width: 0;
332
- font-size: var(--stn-font-size-13);
332
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
333
333
  color: var(--stn-text-secondary);
334
334
  line-height: var(--stn-line-height-reading);
335
335
  }
@@ -429,7 +429,7 @@
429
429
 
430
430
  /* 시간 텍스트 */
431
431
  .stn-alert-card__time {
432
- font-size: var(--stn-font-size-13);
432
+ font-size: var(--stn-text-caption-medium-size, var(--stn-font-size-13, 13px));
433
433
  color: var(--stn-text-secondary);
434
434
  white-space: nowrap;
435
435
  }
@@ -446,7 +446,7 @@
446
446
  align-items: center;
447
447
  gap: var(--stn-space-4);
448
448
  color: var(--stn-text-secondary);
449
- font-size: var(--stn-font-size-13);
449
+ font-size: var(--stn-text-body-small-size, var(--stn-font-size-13, 13px));
450
450
  font-weight: var(--stn-font-weight-medium);
451
451
  text-decoration: none;
452
452
  cursor: pointer;
@@ -83,7 +83,7 @@
83
83
  justify-self: start;
84
84
  width: max-content;
85
85
  max-width: 100%;
86
- overflow: hidden;
86
+ overflow: visible;
87
87
  }
88
88
 
89
89
  .stn-header__right {
@@ -287,8 +287,8 @@
287
287
  flex-shrink: 0;
288
288
  }
289
289
 
290
- /* Center(시계/타이틀)가 있는 경우 Left(Breadcrumb/칩 등)를 숨겨 중앙 및 우측 툴바 공간 확보 (단, Page Header는 페이지 타이틀이 핵심이므로 제외) */
291
- .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left {
290
+ /* Center(시계/타이틀)가 있는 경우 햄버거 버튼을 제외한 Left 서브 텍스트만 숨겨 중앙 공간 확보 */
291
+ .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left > *:not(.stn-side-nav__mobile-trigger) {
292
292
  display: none;
293
293
  }
294
294
 
@@ -303,7 +303,7 @@
303
303
  width: auto;
304
304
  min-width: 0;
305
305
  max-width: 100%;
306
- overflow: hidden;
306
+ overflow: visible;
307
307
  flex: 1 1 auto;
308
308
  }
309
309
 
@@ -381,8 +381,8 @@
381
381
  flex-shrink: 0;
382
382
  }
383
383
 
384
- /* Center(시계/타이틀)가 있는 경우 Left(Breadcrumb/칩 등)를 숨겨 중앙 및 우측 툴바 공간 확보 (단, Page Header는 페이지 타이틀이 핵심이므로 제외) */
385
- .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left {
384
+ /* Center(시계/타이틀)가 있는 경우 햄버거 버튼을 제외한 Left 서브 텍스트만 숨겨 중앙 공간 확보 */
385
+ .stn-header:not(.stn-header--page):has(> .stn-header__center) > .stn-header__left > *:not(.stn-side-nav__mobile-trigger) {
386
386
  display: none !important;
387
387
  }
388
388
 
@@ -397,7 +397,7 @@
397
397
  width: auto !important;
398
398
  min-width: 0 !important;
399
399
  max-width: 100% !important;
400
- overflow: hidden !important;
400
+ overflow: visible !important;
401
401
  flex: 1 1 auto !important;
402
402
  }
403
403
 
@@ -21,13 +21,14 @@
21
21
  overflow: hidden;
22
22
  }
23
23
 
24
- /* translucent variant — 반투명 블러 글래스모피즘 외형 */
24
+ /* translucent variant — 반투명 블러 글래스모피즘 외형 (테두리 및 그림자 없음) */
25
25
  .stn-section-side.translucent,
26
26
  .stn-section-side--translucent {
27
27
  background: var(--stn-section-side-bg-translucent);
28
28
  backdrop-filter: blur(var(--stn-section-side-translucent-blur, 8px));
29
29
  -webkit-backdrop-filter: blur(var(--stn-section-side-translucent-blur, 8px));
30
- border-color: var(--stn-section-side-border-translucent, var(--stn-border-subtle));
30
+ border-color: var(--stn-section-side-border-translucent);
31
+ box-shadow: none;
31
32
  }
32
33
 
33
34
  /* fullWidth prop 또는 부모 LNB 컨테이너 안에서 가로 100% 확장 지원 */
@@ -45,6 +45,7 @@
45
45
  @import './components/stn-side-nav.css';
46
46
  @import './components/stn-header-title.css';
47
47
  @import './components/stn-popup.css';
48
+ @import './components/stn-drawer.css';
48
49
  @import './components/stn-table.css';
49
50
  @import './components/stn-pagination.css';
50
51
  @import './components/stn-slider.css';
@@ -15,16 +15,4 @@
15
15
  --stn-bp-md: 1024px;
16
16
  --stn-bp-lg: 1280px;
17
17
  --stn-bp-xl: 1440px;
18
-
19
- /* Semantic Layout & Responsive Aliases */
20
- --stn-layout-list-split-breakpoint: var(--stn-bp-md);
21
- --stn-layout-list-tree-top-max-height: 240px;
22
- --stn-table-footer-collapse-breakpoint: var(--stn-bp-sm);
23
-
24
- /* Pagination — 좁은 화면 컴팩트 모드 (@media 480px 기준; CSS @media에서는 리터럴 사용) */
25
- --stn-pagination-compact-breakpoint: 480px;
26
- --stn-pagination-compact-size: var(--stn-size-28, 28px);
27
- --stn-pagination-compact-padding: var(--stn-space-6, 6px);
28
- --stn-pagination-compact-font-size: var(--stn-font-size-12, 12px);
29
- --stn-pagination-compact-gap: var(--stn-space-4, 4px);
30
18
  }
@@ -51,6 +51,7 @@
51
51
  --stn-elevation-surface-1: var(--stn-opacity-black-0);
52
52
  --stn-elevation-surface-2: var(--stn-gray-800);
53
53
  --stn-elevation-surface-widget: var(--stn-gray-850);
54
+ --stn-drawer-bg: var(--stn-gray-750);
54
55
  --stn-dim-bg: color-mix(in srgb, var(--stn-gray-950) 50%, transparent);
55
56
  --stn-dim-blur: 4px;
56
57
  --stn-input-bg: var(--stn-gray-900);
@@ -126,7 +127,7 @@
126
127
  --stn-scroll-thumb: var(--stn-gray-650);
127
128
  --stn-section-side-bg: var(--stn-gray-900);
128
129
  --stn-section-side-bg-translucent: var(--stn-opacity-black-50);
129
- --stn-section-side-border-translucent: var(--stn-border-subtle);
130
+ --stn-section-side-border-translucent: transparent;
130
131
  --stn-section-side-border: var(--stn-gray-800);
131
132
  --stn-section-side-radius: 10px;
132
133
  --stn-section-side-shadow: none;
@@ -146,7 +147,7 @@
146
147
  --stn-table-row-hover: var(--stn-gray-900);
147
148
  --stn-table-td-fg: var(--stn-gray-50);
148
149
  --stn-table-th-bg: var(--stn-gray-800);
149
- --stn-table-th-fg: var(--stn-gray-350);
150
+ --stn-table-th-fg: var(--stn-gray-250);
150
151
  --stn-table-th-radius: 8px;
151
152
  --stn-pagination-active-bg: var(--stn-opacity-white-10);
152
153
  --stn-pagination-active-color: var(--stn-gray-50);
@@ -187,7 +188,7 @@
187
188
  --stn-header-toolbar-icon: var(--stn-blue-250);
188
189
  --stn-header-toolbar-outline-border: var(--stn-blue-600);
189
190
  --stn-header-toolbar-outline-fg: var(--stn-gray-50);
190
- --stn-nav-menu-active-bg: color-mix(in srgb, var(--stn-static-black) 85%, transparent);
191
+ --stn-nav-menu-active-bg: var(--stn-opacity-black-10);
191
192
  --stn-nav-menu-active-border: var(--stn-blue-350);
192
193
  --stn-nav-menu-active-shadow-depth: color-mix(in srgb, var(--stn-static-black) 95%, transparent);
193
194
  --stn-nav-menu-active-shadow-highlight: color-mix(in srgb, var(--stn-static-white) 25%, transparent);
@@ -201,7 +202,7 @@
201
202
  --stn-side-nav-border: var(--stn-gray-800);
202
203
  --stn-side-nav-divider: var(--stn-gray-800);
203
204
  --stn-side-nav-shadow: 1px 1px 10px 0 var(--stn-gray-850);
204
- --stn-side-nav-toggle-bg: var(--stn-gray-950);
205
+ --stn-side-nav-toggle-bg: var(--stn-opacity-black-50);
205
206
  --stn-side-nav-toggle-border: var(--stn-gray-800);
206
207
  --stn-side-nav-toggle-fg: var(--stn-static-white);
207
208
  --stn-side-nav-toggle-shadow: -1px -1px 3px 0 color-mix(in srgb, var(--stn-static-white) 12%, transparent), 1px 1px 4px 0 color-mix(in srgb, var(--stn-static-black) 70%, transparent);
@@ -219,9 +220,9 @@
219
220
  --stn-side-nav-sub-btn-hover-border: var(--stn-opacity-white-20);
220
221
  --stn-btn-disabled-bg: var(--stn-gray-750);
221
222
  --stn-btn-disabled-fg: var(--stn-gray-400);
222
- --stn-btn-ghost-bg: color-mix(in srgb, var(--stn-static-white) 5%, transparent);
223
- --stn-btn-ghost-bg-hover: color-mix(in srgb, var(--stn-static-white) 10%, transparent);
224
- --stn-btn-ghost-bg-pressed: color-mix(in srgb, var(--stn-static-white) 15%, transparent);
223
+ --stn-btn-ghost-bg: var(--stn-opacity-white-5);
224
+ --stn-btn-ghost-bg-hover: var(--stn-opacity-white-10);
225
+ --stn-btn-ghost-bg-pressed: var(--stn-opacity-white-15);
225
226
  --stn-btn-ghost-fg: var(--stn-gray-100);
226
227
  --stn-btn-outlined-border: var(--stn-blue-250);
227
228
  --stn-btn-outlined-border-hover: var(--stn-blue-350);
@@ -390,7 +391,7 @@
390
391
  --stn-scroll-thumb-muted: var(--stn-gray-600);
391
392
  --stn-scroll-thumb-muted-hover: var(--stn-gray-500);
392
393
  --stn-chip-teal: var(--stn-teal-400);
393
- --stn-chip-neutral: var(--stn-gray-400);
394
+ --stn-chip-neutral: var(--stn-gray-200);
394
395
  --stn-chip-fg-contrast: var(--stn-gray-950);
395
396
  --stn-chip-accent-mint: var(--stn-teal-300);
396
397
  --stn-chip-accent-sky: var(--stn-blue-300);
@@ -443,9 +444,9 @@
443
444
  --stn-side-nav-glass-bg: var(--stn-opacity-black-25);
444
445
  --stn-side-nav-glass-shadow: 1px 1px 10px 0 var(--stn-gray-850);
445
446
  --stn-side-nav-glass-border: color-mix(in srgb, var(--stn-static-white) 6%, transparent);
446
- --stn-side-nav-mobile-trigger-bg: var(--stn-gray-900);
447
- --stn-side-nav-mobile-trigger-border: var(--stn-gray-700);
448
- --stn-side-nav-mobile-trigger-fg: var(--stn-static-white);
447
+ --stn-side-nav-mobile-trigger-bg: color-mix(in srgb, var(--stn-gray-900) 65%, transparent);
448
+ --stn-side-nav-mobile-trigger-border: color-mix(in srgb, var(--stn-static-white) 14%, transparent);
449
+ --stn-side-nav-mobile-trigger-fg: var(--stn-gray-100);
449
450
  --stn-side-nav-mobile-backdrop: var(--stn-opacity-black-65);
450
451
  --stn-side-nav-drawer-shadow: 8px 0 32px var(--stn-opacity-black-45);
451
452
  --stn-side-nav-trigger-shadow: 0 4px 16px var(--stn-opacity-black-30);
@@ -659,6 +660,7 @@
659
660
  --stn-elevation-surface-1: var(--stn-opacity-black-0);
660
661
  --stn-elevation-surface-2: var(--stn-static-white);
661
662
  --stn-elevation-surface-widget: var(--stn-static-white);
663
+ --stn-drawer-bg: var(--stn-static-white);
662
664
  --stn-dim-bg: color-mix(in srgb, var(--stn-gray-900) 20%, transparent);
663
665
  --stn-dim-blur: 2px;
664
666
  --stn-input-bg: var(--stn-static-white);
@@ -734,7 +736,7 @@
734
736
  --stn-scroll-thumb: var(--stn-gray-200);
735
737
  --stn-section-side-bg: var(--stn-static-white);
736
738
  --stn-section-side-bg-translucent: var(--stn-opacity-white-50);
737
- --stn-section-side-border-translucent: var(--stn-border-subtle);
739
+ --stn-section-side-border-translucent: transparent;
738
740
  --stn-section-side-border: var(--stn-gray-25);
739
741
  --stn-section-side-radius: 8px;
740
742
  --stn-section-side-shadow: 0 3px 10px var(--stn-gray-75);
@@ -1000,7 +1002,7 @@
1000
1002
  --stn-scroll-thumb-muted: var(--stn-gray-600);
1001
1003
  --stn-scroll-thumb-muted-hover: var(--stn-gray-500);
1002
1004
  --stn-chip-teal: var(--stn-teal-500);
1003
- --stn-chip-neutral: var(--stn-gray-400);
1005
+ --stn-chip-neutral: var(--stn-gray-500);
1004
1006
  --stn-chip-fg-contrast: var(--stn-gray-950);
1005
1007
  --stn-chip-accent-mint: var(--stn-teal-300);
1006
1008
  --stn-chip-accent-sky: var(--stn-blue-300);
@@ -1053,8 +1055,8 @@
1053
1055
  --stn-side-nav-glass-bg: var(--stn-opacity-white-40);
1054
1056
  --stn-side-nav-glass-shadow: 1px 1px 10px 0 var(--stn-gray-150);
1055
1057
  --stn-side-nav-glass-border: var(--stn-gray-150);
1056
- --stn-side-nav-mobile-trigger-bg: var(--stn-static-white);
1057
- --stn-side-nav-mobile-trigger-border: var(--stn-gray-200);
1058
+ --stn-side-nav-mobile-trigger-bg: color-mix(in srgb, var(--stn-static-white) 75%, transparent);
1059
+ --stn-side-nav-mobile-trigger-border: color-mix(in srgb, var(--stn-gray-900) 12%, transparent);
1058
1060
  --stn-side-nav-mobile-trigger-fg: var(--stn-gray-900);
1059
1061
  --stn-side-nav-mobile-backdrop: var(--stn-opacity-white-65);
1060
1062
  --stn-side-nav-drawer-shadow: 8px 0 32px var(--stn-opacity-black-20);
@@ -1224,3 +1226,11 @@
1224
1226
  --stn-status-dot-bordered-border: var(--stn-border-subtle);
1225
1227
  --stn-status-dot-bordered-bg: var(--stn-elevation-surface-2);
1226
1228
  }
1229
+
1230
+ [data-theme='blue'][data-mode='dark'] {
1231
+ --stn-table-th-bg: var(--stn-blue-750);
1232
+ }
1233
+
1234
+ [data-theme='blue'][data-mode='light'] {
1235
+ --stn-table-th-bg: var(--stn-blue-100);
1236
+ }
@@ -4,10 +4,14 @@
4
4
  * Regenerate: npm run generate:tokens
5
5
  */
6
6
 
7
- /* STN Design System — Elevation (Z-Index Hierarchy: Level 0–2) */
7
+ /* STN Design System — Elevation (Z-Index Hierarchy: Level 0–3) */
8
8
 
9
9
  :root {
10
10
  --stn-elevation-z-0: 0;
11
11
  --stn-elevation-z-1: 100;
12
+ --stn-elevation-z-banner: 120;
13
+ --stn-elevation-z-dropdown: 150;
14
+ --stn-elevation-z-drawer: 180;
12
15
  --stn-elevation-z-2: 200;
16
+ --stn-elevation-z-toast: 300;
13
17
  }
@@ -54,7 +54,7 @@
54
54
  --stn-side-nav-sub-item-radius: var(--stn-radius-4);
55
55
  --stn-side-nav-footer-curved-radius: var(--stn-radius-40);
56
56
  --stn-side-nav-dropdown-radius: var(--stn-radius-8);
57
- --stn-side-nav-mobile-trigger-radius: var(--stn-radius-8);
57
+ --stn-side-nav-mobile-trigger-radius: var(--stn-radius-circle);
58
58
  --stn-side-nav-drawer-close-radius: var(--stn-radius-6);
59
59
  --stn-side-nav-scroll-radius: var(--stn-radius-2);
60
60
  --stn-scroll-radius: var(--stn-radius-4);
@@ -254,4 +254,12 @@
254
254
  --stn-tree-focus-ring-width: var(--stn-size-2);
255
255
  --stn-tree-focus-ring-offset: var(--stn-size-1);
256
256
  --stn-tree-collapsed-row-height: var(--stn-size-28);
257
+ --stn-breadcrumb-icon-size-sm: var(--stn-size-14);
258
+ --stn-breadcrumb-icon-size-md: var(--stn-size-16);
259
+ --stn-breadcrumb-icon-size-lg: var(--stn-size-18);
260
+ --stn-breadcrumb-sep-size-sm: var(--stn-size-10);
261
+ --stn-breadcrumb-sep-size-md: var(--stn-size-12);
262
+ --stn-breadcrumb-sep-size-lg: var(--stn-size-14);
263
+ --stn-event-banner-btn-height: var(--stn-size-28);
264
+ --stn-event-banner-icon-size: var(--stn-size-24);
257
265
  }
@@ -75,6 +75,18 @@
75
75
  --stn-icon-box-padding-md: var(--stn-space-6);
76
76
  --stn-icon-box-padding-lg: var(--stn-space-8);
77
77
  --stn-icon-box-padding-xl: var(--stn-space-10);
78
+ --stn-drawer-padding-none: 0px;
79
+ --stn-drawer-padding-xs: var(--stn-space-8);
80
+ --stn-drawer-padding-sm: var(--stn-space-12);
81
+ --stn-drawer-padding-md: var(--stn-space-16);
82
+ --stn-drawer-padding-lg: var(--stn-space-20);
83
+ --stn-drawer-padding-xl: var(--stn-space-24);
84
+ --stn-drawer-gap-none: 0px;
85
+ --stn-drawer-gap-xs: var(--stn-space-8);
86
+ --stn-drawer-gap-sm: var(--stn-space-12);
87
+ --stn-drawer-gap-md: var(--stn-space-16);
88
+ --stn-drawer-gap-lg: var(--stn-space-20);
89
+ --stn-drawer-gap-xl: var(--stn-space-24);
78
90
  --stn-segmented-padding: var(--stn-space-4);
79
91
  --stn-segmented-gap: var(--stn-space-4);
80
92
  --stn-segmented-item-padding-x: var(--stn-space-16);
@@ -244,4 +256,17 @@
244
256
  --stn-search-requirement-compact-gap: var(--stn-space-12);
245
257
  --stn-search-requirement-divider-margin-x: var(--stn-space-4);
246
258
  --stn-tree-collapsed-row-padding-block: var(--stn-space-2);
259
+ --stn-breadcrumb-gap-sm: var(--stn-space-8);
260
+ --stn-breadcrumb-gap-md: var(--stn-space-16);
261
+ --stn-breadcrumb-gap-lg: var(--stn-space-24);
262
+ --stn-breadcrumb-segment-gap-sm: var(--stn-space-4);
263
+ --stn-breadcrumb-segment-gap-md: var(--stn-space-8);
264
+ --stn-breadcrumb-segment-gap-lg: var(--stn-space-12);
265
+ --stn-breadcrumb-chip-pad-x-sm: var(--stn-space-6);
266
+ --stn-breadcrumb-chip-pad-x-md: var(--stn-space-8);
267
+ --stn-breadcrumb-chip-pad-x-lg: var(--stn-space-12);
268
+ --stn-event-banner-text-gap: var(--stn-space-4);
269
+ --stn-event-banner-actions-gap: var(--stn-space-8);
270
+ --stn-event-banner-btn-padding-inline: var(--stn-space-14);
271
+ --stn-event-banner-btn-padding-block: var(--stn-space-4);
247
272
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnChip.ts"],"sourcesContent":["import { STN_GRADE_SOURCE, type StnGradeKind } from './stnGradeColors'\n\nexport { STN_GRADE_SOURCE }\n\n/** 등급 칩 — 알림센터 `.tag` · equip-search `.tag` · `error_tag` 와 동일 토큰 */\nexport type StnChipGrade = StnGradeKind\n\n/** 테이블 `border_chip` accent (등급과 별도) */\nexport type StnChipBorderAccent = 'mint' | 'sky' | 'violet' | 'orange' | 'yellow' | 'gray'\n\nexport const STN_CHIP_BORDER_ACCENTS: readonly {\n accent: StnChipBorderAccent\n descKo: string\n cssBorder: string\n cssText: string\n}[] = [\n { accent: 'mint', descKo: '민트', cssBorder: 'var(--stn-teal-300)', cssText: 'var(--stn-teal-300)' },\n { accent: 'sky', descKo: '스카이', cssBorder: 'var(--stn-blue-300)', cssText: 'var(--stn-blue-300)' },\n { accent: 'violet', descKo: '바이올렛', cssBorder: 'var(--stn-purple-300)', cssText: 'var(--stn-purple-300)' },\n {\n accent: 'orange',\n descKo: '오렌지',\n cssBorder: 'var(--stn-yellow-300)',\n cssText: 'var(--stn-yellow-300)',\n },\n {\n accent: 'yellow',\n descKo: '옐로',\n cssBorder: 'var(--stn-yellow-300)',\n cssText: 'var(--stn-yellow-300)',\n },\n { accent: 'gray', descKo: '그레이', cssBorder: 'var(--stn-gray-350)', cssText: 'var(--stn-gray-350)' },\n] as const\n\n/** Pub HTML 레거시 modifier (`critic` = critical) */\nexport type StnChipLegacyGradeClass = 'critic' | 'major' | 'minor' | 'warning'\n\nexport const STN_CHIP_GRADE_LEGACY_CLASS: Record<StnChipGrade, StnChipLegacyGradeClass> = {\n critical: 'critic',\n major: 'major',\n minor: 'minor',\n warning: 'warning',\n}\n\nexport const STN_CHIP_INTRO =\n '짧은 상태·등급·속성 라벨용 뱃지입니다. `variant=\"filled\"`는 등급 배경색(알림센터 `.tag`), `variant=\"border\"`는 테이블 `border_chip`처럼 테두리만 있는 뱃지입니다. filled·border 모두 `--stn-badge-*` 토큰(11px·16px 높이·4px radius)으로 맞춥니다. 가로 너비는 글자 길이에 따라 늘어나며 `sideLabel`로 옆 설명을 붙일 수 있습니다.'\n\n/** Badge shell metrics — `stn-badge.css` */\nexport const STN_CHIP_METRICS = [\n { token: '--stn-badge-font-size', value: '11px (gnb alert tag)' },\n { token: '--stn-badge-height', value: '16px' },\n { token: '--stn-badge-radius', value: '4px (--stn-radius-4)' },\n { token: '--stn-badge-padding-x', value: '6px (세로 0 — grid 중앙 정렬)' },\n { token: '--stn-badge-line-height', value: '16px (= height)' },\n] as const\n\nexport type StnChipUsageRow = {\n context: string\n pubMarkup: string\n note?: string\n}\n\nexport const STN_CHIP_USAGE_ROWS: StnChipUsageRow[] = [\n {\n context: 'GNB 알림센터',\n pubMarkup: '<span class=\"stn-badge stn-badge--filled tag critic\">CR</span>',\n note: '`.stn-gnb` 알림 목록 — `tag` 유지 시 레이아웃 호환',\n },\n {\n context: '노드 다이얼로그 · equip-search col1',\n pubMarkup: '<span class=\"stn-badge stn-badge--filled tag major\">MJ</span>',\n note: '`.layer_pop.node_dialog .equip-search-table`',\n },\n {\n context: '검색 필터 · error_tag',\n pubMarkup:\n '<span class=\"stn-badge stn-badge--filled stn-badge--critical error_tag grade-critical tag critic\">CR</span>',\n note: '등급 filled + 레거시 `error_tag`',\n },\n {\n context: '테이블 border chip',\n pubMarkup:\n '<span class=\"border_chip orange stn-badge stn-badge--border\"><span class=\"label\">ETH</span><span class=\"value\">100G</span></span>',\n note: '`.value` = 칩 옆 글자 (`sideLabel`)',\n },\n]\n\nexport const STN_CHIP_GRADE_ROWS = (Object.keys(STN_GRADE_SOURCE) as StnChipGrade[]).map(\n (grade) => ({\n grade,\n label: STN_GRADE_SOURCE[grade].label,\n descKo: STN_GRADE_SOURCE[grade].descKo,\n cssVar: STN_GRADE_SOURCE[grade].pubVar,\n legacyClass: STN_CHIP_GRADE_LEGACY_CLASS[grade],\n canonicalClass: `stn-badge--${grade}`,\n }),\n)\n"],"mappings":";;;;;AAUO,IAAM,0BAKP;AAAA,EACJ,EAAE,QAAQ,QAAQ,QAAQ,gBAAM,WAAW,uBAAuB,SAAS,sBAAsB;AAAA,EACjG,EAAE,QAAQ,OAAO,QAAQ,sBAAO,WAAW,uBAAuB,SAAS,sBAAsB;AAAA,EACjG,EAAE,QAAQ,UAAU,QAAQ,4BAAQ,WAAW,yBAAyB,SAAS,wBAAwB;AAAA,EACzG;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,EAAE,QAAQ,QAAQ,QAAQ,sBAAO,WAAW,uBAAuB,SAAS,sBAAsB;AACpG;AAKO,IAAM,8BAA6E;AAAA,EACxF,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;AAEO,IAAM,iBACX;AAGK,IAAM,mBAAmB;AAAA,EAC9B,EAAE,OAAO,yBAAyB,OAAO,uBAAuB;AAAA,EAChE,EAAE,OAAO,sBAAsB,OAAO,OAAO;AAAA,EAC7C,EAAE,OAAO,sBAAsB,OAAO,uBAAuB;AAAA,EAC7D,EAAE,OAAO,yBAAyB,OAAO,6DAA0B;AAAA,EACnE,EAAE,OAAO,2BAA2B,OAAO,kBAAkB;AAC/D;AAQO,IAAM,sBAAyC;AAAA,EACpD;AAAA,IACE,SAAS;AAAA,IACT,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,WAAW;AAAA,IACX,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,WACE;AAAA,IACF,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,WACE;AAAA,IACF,MAAM;AAAA,EACR;AACF;AAEO,IAAM,sBAAuB,OAAO,KAAK,gBAAgB,EAAqB;AAAA,EACnF,CAAC,WAAW;AAAA,IACV;AAAA,IACA,OAAO,iBAAiB,KAAK,EAAE;AAAA,IAC/B,QAAQ,iBAAiB,KAAK,EAAE;AAAA,IAChC,QAAQ,iBAAiB,KAAK,EAAE;AAAA,IAChC,aAAa,4BAA4B,KAAK;AAAA,IAC9C,gBAAgB,cAAc,KAAK;AAAA,EACrC;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnTextField.ts"],"sourcesContent":["/**\n * Pub text input — Infomap `input` (Figma 40000042:186898)\n * @see common.css form inputs · StnTextField\n */\n\n/** S 24px · M 32px · L 40px · XL 56px */\nexport type StnTextFieldSize = 'S' | 'M' | 'L' | 'XL'\n\nexport const STN_TEXT_FIELD_FIGMA = '40000042:186898'\n\nexport const STN_TEXT_FIELD_INTRO =\n \"Infomap 검색·필터용 **텍스트 입력**입니다. **outlined**(박스, 기본) · **filled**(면) · **standard**(하단 라인). Light filled = gray-50. Dark filled = gray-750. helperText는 하단 왼쪽 캡션. React `StnTextField` · Pub `.stn-text-field`.\"\n\nexport const STN_TEXT_FIELD_SIZE_ROWS: readonly {\n size: StnTextFieldSize\n height: string\n radius: string\n fontSize: string\n paddingX: string\n typicalWidth: string\n pubClass: string\n usedIn: string\n}[] = [\n {\n size: 'S',\n height: '24px',\n radius: '4px (radius-4)',\n fontSize: '13px',\n paddingX: '10px',\n typicalWidth: 'width 프리셋 · 기본 140px · fullWidth=100%',\n pubClass: 'stn-text-field sm',\n usedIn: '테이블 셀 · 좁은 검색',\n },\n {\n size: 'M',\n height: '32px',\n radius: '4px (radius-4)',\n fontSize: '13px',\n paddingX: '10px',\n typicalWidth: 'width 프리셋 · 기본 140px · fullWidth=100%',\n pubClass: 'stn-text-field md',\n usedIn: '검색영역 · 필터 값',\n },\n {\n size: 'L',\n height: '40px',\n radius: '6px (radius-6)',\n fontSize: '14px',\n paddingX: '12px',\n typicalWidth: 'width 프리셋 · 기본 140px · fullWidth=100%',\n pubClass: 'stn-text-field lg',\n usedIn: '강조 검색 · 넓은 라벨 열',\n },\n {\n size: 'XL',\n height: '56px',\n radius: '16px (radius-16)',\n fontSize: '14px',\n paddingX: '16px',\n typicalWidth: 'fullWidth=100%',\n pubClass: 'stn-text-field xl',\n usedIn: '넓은 검색 · 강조 입력',\n },\n] as const\n\nexport const STN_TEXT_FIELD_STATES = [\n { id: 'default', label: 'Default', note: 'border `--stn-input-border` · bg `--stn-input-bg`' },\n { id: 'focus', label: 'Focus', note: 'border `--stn-input-focus` (2px)' },\n { id: 'placeholder', label: 'Placeholder', note: 'color `--stn-input-placeholder`' },\n { id: 'disabled', label: 'Disabled', note: 'opacity 0.55 · not-allowed' },\n { id: 'invalid', label: 'Invalid', note: 'border `--stn-feedback-error` · `aria-invalid` 또는 `invalid` prop' },\n] as const\n\nexport const STN_TEXT_FIELD_USAGE = \"import { StnTextField } from '@stn-uiux/pub-ui-react'\\n\\n<StnTextField variant=\\\"outlined\\\" placeholder=\\\"검색\\\" />\\n<StnTextField variant=\\\"filled\\\" placeholder=\\\"입력\\\" />\\n<StnTextField variant=\\\"standard\\\" placeholder=\\\"입력\\\" helperText=\\\"도움말\\\" />\"\n\nexport const STN_TEXT_FIELD_HTML = `<input\n type=\"text\"\n class=\"stn-text-field md\"\n value=\"전체\"\n aria-label=\"필터\"\n/>`\n"],"mappings":";AAQO,IAAM,uBAAuB;AAE7B,IAAM,uBACX;AAEK,IAAM,2BASP;AAAA,EACJ;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,wBAAwB;AAAA,EACnC,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,uDAAoD;AAAA,EAC7F,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,mCAAmC;AAAA,EACxE,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,kCAAkC;AAAA,EACnF,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,gCAA6B;AAAA,EACxE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gFAAmE;AAC9G;AAEO,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAE7B,IAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}