@stn-uiux/pub-ui 0.1.58 → 0.1.60

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 (92) hide show
  1. package/dist/{chunk-7ASY5YJ6.js → chunk-2ZYBBVBT.js} +53 -28
  2. package/dist/chunk-2ZYBBVBT.js.map +1 -0
  3. package/dist/{chunk-EQVFEZEQ.js → chunk-3RYAWLME.js} +5 -5
  4. package/dist/chunk-3RYAWLME.js.map +1 -0
  5. package/dist/chunk-A5KLX6NX.js +1 -0
  6. package/dist/{chunk-UPXSNRIJ.js → chunk-AOS3IX4T.js} +2 -2
  7. package/dist/chunk-AOS3IX4T.js.map +1 -0
  8. package/dist/{chunk-XNGYRPZI.js → chunk-CHJATVOT.js} +4 -4
  9. package/dist/{chunk-XNGYRPZI.js.map → chunk-CHJATVOT.js.map} +1 -1
  10. package/dist/{chunk-DNMZJS65.js → chunk-IOBNIUK3.js} +2 -2
  11. package/dist/{chunk-DNMZJS65.js.map → chunk-IOBNIUK3.js.map} +1 -1
  12. package/dist/{chunk-TDLGKV4C.js → chunk-NHYZ7AWK.js} +2 -14
  13. package/dist/chunk-NHYZ7AWK.js.map +1 -0
  14. package/dist/{chunk-PVF77NHZ.js → chunk-Q4QXONXL.js} +4 -17
  15. package/dist/chunk-Q4QXONXL.js.map +1 -0
  16. package/dist/chunk-SQJPE6HH.js +12 -0
  17. package/dist/chunk-SQJPE6HH.js.map +1 -0
  18. package/dist/{chunk-J46EPVSY.js → chunk-XQ7UUG7Y.js} +2 -2
  19. package/dist/{chunk-EDXSK54U.js → chunk-YMWHZNBT.js} +2 -2
  20. package/dist/cli.js +10 -10
  21. package/dist/data/index.d.ts +1 -0
  22. package/dist/data/index.js +24 -20
  23. package/dist/data/stnBreadcrumb.js +3 -3
  24. package/dist/data/stnHeader.d.ts +2 -2
  25. package/dist/data/stnHeader.js +3 -3
  26. package/dist/data/stnLayout.d.ts +3 -3
  27. package/dist/data/stnLayout.js +1 -1
  28. package/dist/data/stnScroll.d.ts +1 -1
  29. package/dist/data/stnScroll.js +1 -1
  30. package/dist/data/stnSideNavItem.js +3 -3
  31. package/dist/data/stnStatus.d.ts +11 -0
  32. package/dist/data/stnStatus.js +7 -0
  33. package/dist/data/stnStatus.js.map +1 -0
  34. package/dist/data/stnSystemIcons.d.ts +1 -1
  35. package/dist/data/stnSystemIcons.js +2 -2
  36. package/dist/data/stnSystemIconsData.generated.js +1 -1
  37. package/dist/data/stnTable.d.ts +1 -1
  38. package/dist/data/stnTable.js +1 -1
  39. package/dist/data/stnTree.d.ts +1 -1
  40. package/dist/data/stnTree.js +1 -1
  41. package/dist/index.d.ts +1 -0
  42. package/dist/index.js +24 -20
  43. package/package.json +1 -1
  44. package/styles/@assets/svg/system/line/chevron-left.svg +3 -0
  45. package/styles/components/stn-btn.css +9 -0
  46. package/styles/components/stn-dropdown.css +11 -4
  47. package/styles/components/stn-label-prefix.css +38 -0
  48. package/styles/components/stn-pagination.css +113 -5
  49. package/styles/components/stn-popup.css +1 -1
  50. package/styles/components/stn-scroll.css +51 -66
  51. package/styles/components/stn-segmented.css +3 -1
  52. package/styles/components/stn-status.css +851 -0
  53. package/styles/components/stn-table.css +106 -13
  54. package/styles/components/stn-text-field.css +30 -35
  55. package/styles/components/stn-widget.css +16 -8
  56. package/styles/layouts/stn-container.css +13 -9
  57. package/styles/layouts/stn-layer1-content.css +83 -1
  58. package/styles/patterns/stn-alert-center.css +29 -4
  59. package/styles/patterns/stn-header.css +7 -145
  60. package/styles/patterns/stn-section-side.css +50 -0
  61. package/styles/patterns/stn-tree.css +139 -82
  62. package/styles/style-pub.css +1 -1
  63. package/styles/tokens/stn-breakpoint.css +12 -0
  64. package/styles/tokens/stn-colors-semantic.css +5 -5
  65. package/styles/tokens/stn-radius-semantic.css +12 -1
  66. package/styles/tokens/stn-size-semantic.css +31 -4
  67. package/styles/tokens/stn-size.css +2 -0
  68. package/styles/tokens/stn-spacing-semantic.css +7 -3
  69. package/styles/tokens/stn-typography-semantic.css +10 -0
  70. package/dist/chunk-7ASY5YJ6.js.map +0 -1
  71. package/dist/chunk-EQVFEZEQ.js.map +0 -1
  72. package/dist/chunk-LHV26PEP.js +0 -1
  73. package/dist/chunk-PVF77NHZ.js.map +0 -1
  74. package/dist/chunk-TDLGKV4C.js.map +0 -1
  75. package/dist/chunk-UPXSNRIJ.js.map +0 -1
  76. package/styles/@assets/svg/system/3d/print.png +0 -0
  77. package/styles/@assets/svg/system/3d/print_1.png +0 -0
  78. package/styles/@assets/svg/system/3d/server1.png +0 -0
  79. package/styles/@assets/svg/system/3d/server1_1.png +0 -0
  80. package/styles/@assets/svg/system/3d/server2.png +0 -0
  81. package/styles/@assets/svg/system/3d/server2_1.png +0 -0
  82. package/styles/@assets/svg/system/3d/signal.png +0 -0
  83. package/styles/@assets/svg/system/3d/signal_1.png +0 -0
  84. package/styles/@assets/svg/system/3d/wifi.png +0 -0
  85. package/styles/@assets/svg/system/3d/wifi_1.png +0 -0
  86. package/styles/@assets/svg/system/ai_agent.png +0 -0
  87. package/styles/@assets/svg/system/line/input.svg +0 -3
  88. package/styles/@assets/svg/system/line/radio.svg +0 -3
  89. package/styles/components/stn-severity-badge.css +0 -227
  90. /package/dist/{chunk-LHV26PEP.js.map → chunk-A5KLX6NX.js.map} +0 -0
  91. /package/dist/{chunk-J46EPVSY.js.map → chunk-XQ7UUG7Y.js.map} +0 -0
  92. /package/dist/{chunk-EDXSK54U.js.map → chunk-YMWHZNBT.js.map} +0 -0
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  STN_UI_COMPONENTS,
4
4
  STN_UI_FOUNDATIONS
5
5
  } from "./chunk-N46UQH6L.js";
6
- import "./chunk-LHV26PEP.js";
6
+ import "./chunk-A5KLX6NX.js";
7
7
  import {
8
8
  STN_TOGGLE_BUTTON_PLAYGROUND_DEFAULT,
9
9
  STN_TOGGLE_BUTTON_PLAYGROUND_INTRO,
@@ -34,6 +34,9 @@ import {
34
34
  STN_SPACING_USECASE_INTRO,
35
35
  STN_SPACING_USECASE_ROWS
36
36
  } from "./chunk-AFDRRCY6.js";
37
+ import {
38
+ STN_STATUS_DEMO_STEPS
39
+ } from "./chunk-SQJPE6HH.js";
37
40
  import {
38
41
  STN_TEXT_COLOR_ROWS
39
42
  } from "./chunk-4HUY6TN4.js";
@@ -42,7 +45,7 @@ import {
42
45
  STN_SIDE_NAV_ITEM_INTRO,
43
46
  STN_SIDE_NAV_ITEM_STATES,
44
47
  STN_SIDE_NAV_SUB_ICON
45
- } from "./chunk-EDXSK54U.js";
48
+ } from "./chunk-YMWHZNBT.js";
46
49
  import {
47
50
  STN_SIZE_INTRO,
48
51
  STN_SIZE_ROWS,
@@ -285,6 +288,16 @@ import {
285
288
  STN_GRADE_SEMANTIC_ROWS,
286
289
  STN_GRADE_SOURCE
287
290
  } from "./chunk-E26XJXQY.js";
291
+ import {
292
+ STN_TOAST_DEMO_MSG,
293
+ STN_TOAST_ICON_SLUG,
294
+ STN_TOAST_INTRO,
295
+ STN_TOAST_KINDS,
296
+ STN_TOAST_REACT_USAGE,
297
+ STN_TOAST_SETUP,
298
+ STN_TOAST_TOKEN_ROWS,
299
+ STN_TOAST_USAGE_HTML
300
+ } from "./chunk-SOEBXG3T.js";
288
301
  import {
289
302
  STN_TREE_DEMO,
290
303
  STN_TREE_FIGMA,
@@ -296,7 +309,7 @@ import {
296
309
  STN_TREE_SECTION_SIDE_FIGMA,
297
310
  STN_TREE_USAGE_HTML,
298
311
  describeTreePatternReact
299
- } from "./chunk-UPXSNRIJ.js";
312
+ } from "./chunk-AOS3IX4T.js";
300
313
  import {
301
314
  STN_ALERT_CENTER_DASHBOARD_USAGE,
302
315
  STN_ALERT_CENTER_DASHBOARD_WIDGETS,
@@ -344,7 +357,7 @@ import {
344
357
  STN_TABLE_TH_CHECK_EXAMPLE,
345
358
  STN_TABLE_TH_CHECK_FIGMA,
346
359
  STN_TABLE_TH_LABEL_FIGMA
347
- } from "./chunk-DNMZJS65.js";
360
+ } from "./chunk-IOBNIUK3.js";
348
361
  import {
349
362
  STN_TEXT_FIELD_FIGMA,
350
363
  STN_TEXT_FIELD_HTML,
@@ -353,16 +366,6 @@ import {
353
366
  STN_TEXT_FIELD_STATES,
354
367
  STN_TEXT_FIELD_USAGE
355
368
  } from "./chunk-NB4NJQYE.js";
356
- import {
357
- STN_TOAST_DEMO_MSG,
358
- STN_TOAST_ICON_SLUG,
359
- STN_TOAST_INTRO,
360
- STN_TOAST_KINDS,
361
- STN_TOAST_REACT_USAGE,
362
- STN_TOAST_SETUP,
363
- STN_TOAST_TOKEN_ROWS,
364
- STN_TOAST_USAGE_HTML
365
- } from "./chunk-SOEBXG3T.js";
366
369
  import {
367
370
  STN_SIDE_NAVIGATION_INTRO,
368
371
  STN_SIDE_NAVIGATION_USAGE,
@@ -374,7 +377,7 @@ import {
374
377
  STN_SCROLL_SPEC,
375
378
  STN_SCROLL_USAGE,
376
379
  STN_SCROLL_USAGE_HTML
377
- } from "./chunk-XNGYRPZI.js";
380
+ } from "./chunk-CHJATVOT.js";
378
381
  import {
379
382
  STN_SEARCH_REQUIREMENT_DEMO_FIELDS,
380
383
  STN_SEARCH_REQUIREMENT_FIGMA,
@@ -452,7 +455,7 @@ import {
452
455
  applyLnbSideToModifiers,
453
456
  pubContentAreaClasses,
454
457
  pubLayoutRegionClass
455
- } from "./chunk-7ASY5YJ6.js";
458
+ } from "./chunk-2ZYBBVBT.js";
456
459
  import {
457
460
  STN_LOADING_SKELETON_COLORS,
458
461
  STN_LOADING_SKELETON_INTRO,
@@ -478,7 +481,7 @@ import {
478
481
  STN_HEADER_USAGE_HTML,
479
482
  STN_HEADER_VARIANT_ROWS,
480
483
  STN_SYSTEM_CHIP_DEMO
481
- } from "./chunk-EQVFEZEQ.js";
484
+ } from "./chunk-3RYAWLME.js";
482
485
  import {
483
486
  STN_FEEDBACK_BY_KIND,
484
487
  STN_FEEDBACK_SEMANTIC_ROWS,
@@ -528,17 +531,17 @@ import {
528
531
  STN_BREADCRUMB_ICON_SRC,
529
532
  STN_BREADCRUMB_INTRO,
530
533
  STN_BREADCRUMB_PARTS
531
- } from "./chunk-J46EPVSY.js";
534
+ } from "./chunk-XQ7UUG7Y.js";
532
535
  import {
533
536
  STN_SYSTEM_ICON_INTRO,
534
537
  STN_SYSTEM_ICON_ROWS,
535
538
  resolveSystemIconSrcFromName,
536
539
  systemIconPublicPath,
537
540
  systemIconSrc
538
- } from "./chunk-PVF77NHZ.js";
541
+ } from "./chunk-Q4QXONXL.js";
539
542
  import {
540
543
  SYSTEM_ICON_DATA_URLS
541
- } from "./chunk-TDLGKV4C.js";
544
+ } from "./chunk-NHYZ7AWK.js";
542
545
  import {
543
546
  STN_BREAKPOINT_INTRO,
544
547
  STN_BREAKPOINT_MEDIA,
@@ -828,6 +831,7 @@ export {
828
831
  STN_SPACING_USECASE_INTRO,
829
832
  STN_SPACING_USECASE_ROWS,
830
833
  STN_STATIC,
834
+ STN_STATUS_DEMO_STEPS,
831
835
  STN_SYSTEM_CHIP_DEMO,
832
836
  STN_SYSTEM_ICON_INTRO,
833
837
  STN_SYSTEM_ICON_ROWS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stn-uiux/pub-ui",
3
- "version": "0.1.58",
3
+ "version": "0.1.60",
4
4
  "description": "STN Pub design system — tokens, specs, and CSS for product HTML / React apps",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M15.55 5.4L8.45 12L15.55 18.6" stroke="#40474F" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -185,6 +185,15 @@
185
185
  min-width: 0;
186
186
  }
187
187
 
188
+ /* Width Presets (.w80 ~ .w200) — min-width 기반 */
189
+ .stn-btn.w80 { min-width: var(--stn-size-80, 80px); }
190
+ .stn-btn.w100 { min-width: var(--stn-size-100, 100px); }
191
+ .stn-btn.w120 { min-width: var(--stn-size-120, 120px); }
192
+ .stn-btn.w140 { min-width: var(--stn-size-140, 140px); }
193
+ .stn-btn.w160 { min-width: var(--stn-size-160, 160px); }
194
+ .stn-btn.w180 { min-width: var(--stn-size-180, 180px); }
195
+ .stn-btn.w200 { min-width: var(--stn-size-200, 200px); }
196
+
188
197
  /* —— Shapes (Radius) —— */
189
198
  .stn-btn.square {
190
199
  border-radius: var(--stn-radius-btn-square);
@@ -616,16 +616,23 @@
616
616
  }
617
617
 
618
618
  /* 9-2. Z-Index & Elevation Safeguards */
619
- .search_area:has(.stn-dropdown.on) {
619
+ .search_area:has(.stn-dropdown.on),
620
+ .stn-page-scaffold__search:has(.stn-dropdown.on) {
620
621
  position: relative;
621
622
  z-index: var(--stn-dropdown-menu-z, 150) !important;
622
623
  }
623
624
 
624
- .stn-search-requirement:has(.stn-dropdown.on) {
625
- overflow: visible;
625
+ .stn-search-requirement:has(.stn-dropdown.on),
626
+ .stn-search-requirement__fields:has(.stn-dropdown.on),
627
+ .stn-label-prefix:has(.stn-dropdown.on) {
628
+ overflow: visible !important;
629
+ position: relative;
630
+ z-index: var(--stn-dropdown-menu-z, 150) !important;
626
631
  }
627
632
 
628
- .stn-content-area>.stn-page-scaffold:has(> .search_area .stn-dropdown.on)>.content_box {
633
+ .stn-content-area>.stn-page-scaffold:has(> .search_area .stn-dropdown.on)>.content_box,
634
+ .stn-list-page-content-stack:has(.stn-dropdown.on) > .content_box,
635
+ .stn-list-view__content-stack:has(.stn-dropdown.on) > .content_box {
629
636
  pointer-events: none;
630
637
  }
631
638
 
@@ -31,6 +31,7 @@
31
31
  1. Base Layout
32
32
  ========================================================================== */
33
33
  .stn-label-prefix {
34
+ position: relative;
34
35
  display: inline-flex;
35
36
  align-items: stretch;
36
37
  box-sizing: border-box;
@@ -40,6 +41,29 @@
40
41
  transition: border-color var(--stn-motion-duration-fast, 150ms) ease;
41
42
  }
42
43
 
44
+ /* 팝업/드롭다운이 열렸을 때 overflow를 해제하여 메뉴 목록이 잘리지 않도록 보장 */
45
+ .stn-label-prefix:has(.stn-dropdown.on),
46
+ .stn-label-prefix:has(.stn-date-picker-popup),
47
+ .stn-label-prefix:focus-within:has(.select_option) {
48
+ overflow: visible !important;
49
+ }
50
+
51
+ /* StnLabelPrefix 내부 드롭다운: 컨트롤 영역 기준으로 팝업 정렬 (방안 1) */
52
+ .stn-label-prefix > .stn-label-prefix__control > .stn-dropdown {
53
+ position: relative;
54
+ }
55
+
56
+ .stn-label-prefix .stn-dropdown > .select_option {
57
+ top: 100%;
58
+ border-top: none;
59
+ border-radius: 0 0 var(--stn-radius-input-md, 4px) var(--stn-radius-input-md, 4px);
60
+ }
61
+
62
+ .stn-label-prefix:has(.stn-dropdown.on) {
63
+ border-bottom-left-radius: 0 !important;
64
+ border-bottom-right-radius: 0 !important;
65
+ }
66
+
43
67
  /* ==========================================================================
44
68
  2. Label Area
45
69
  ========================================================================== */
@@ -57,6 +81,14 @@
57
81
  user-select: none;
58
82
  }
59
83
 
84
+ .stn-label-prefix__checkbox {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ justify-content: center;
88
+ flex-shrink: 0;
89
+ margin-inline-end: calc(-1 * var(--stn-space-8));
90
+ }
91
+
60
92
  .stn-label-prefix__icon {
61
93
  display: inline-flex;
62
94
  align-items: center;
@@ -102,6 +134,7 @@
102
134
  width: 100%;
103
135
  }
104
136
 
137
+
105
138
  /* ==========================================================================
106
139
  5. Size (sm · md · lg)
107
140
  ========================================================================== */
@@ -253,6 +286,11 @@
253
286
  pointer-events: none;
254
287
  }
255
288
 
289
+ .stn-label-prefix.is-control-disabled .stn-label-prefix__control {
290
+ opacity: var(--stn-input-disabled-opacity, 0.45);
291
+ pointer-events: none;
292
+ }
293
+
256
294
  /* ==========================================================================
257
295
  12. Feedback / Status Colors & Error State
258
296
  ========================================================================== */
@@ -43,7 +43,9 @@
43
43
 
44
44
  .stn-pagination__page,
45
45
  .stn-pagination__prev,
46
- .stn-pagination__next {
46
+ .stn-pagination__next,
47
+ .stn-pagination__first,
48
+ .stn-pagination__last {
47
49
  box-sizing: border-box;
48
50
  display: inline-flex;
49
51
  flex-direction: column;
@@ -55,7 +57,7 @@
55
57
  width: var(--stn-pagination-size);
56
58
  height: var(--stn-pagination-size);
57
59
  border: none;
58
- border-radius: var(--stn-pagination-radius-idle);
60
+ border-radius: var(--stn-pagination-radius-active, var(--stn-radius-circle));
59
61
  background: transparent;
60
62
  color: var(--stn-pagination-color);
61
63
  font-family: var(--stn-font-body);
@@ -68,11 +70,14 @@
68
70
  -webkit-appearance: none;
69
71
  box-shadow: none !important;
70
72
  vertical-align: middle;
73
+ transition: all 0.15s ease;
71
74
  }
72
75
 
73
76
  .stn-pagination__page:hover:not(:disabled):not(.is-active),
74
77
  .stn-pagination__prev:hover:not(:disabled),
75
- .stn-pagination__next:hover:not(:disabled) {
78
+ .stn-pagination__next:hover:not(:disabled),
79
+ .stn-pagination__first:hover:not(:disabled),
80
+ .stn-pagination__last:hover:not(:disabled) {
76
81
  background: color-mix(in srgb, var(--stn-pagination-active-bg) 70%, transparent);
77
82
  color: var(--stn-pagination-color);
78
83
  }
@@ -93,7 +98,9 @@
93
98
  }
94
99
 
95
100
  .stn-pagination__prev:disabled,
96
- .stn-pagination__next:disabled {
101
+ .stn-pagination__next:disabled,
102
+ .stn-pagination__first:disabled,
103
+ .stn-pagination__last:disabled {
97
104
  opacity: var(--stn-pagination-disabled-opacity);
98
105
  cursor: default;
99
106
  color: var(--stn-pagination-color);
@@ -101,11 +108,88 @@
101
108
  }
102
109
 
103
110
  .stn-pagination__prev:disabled:hover,
104
- .stn-pagination__next:disabled:hover {
111
+ .stn-pagination__next:disabled:hover,
112
+ .stn-pagination__first:disabled:hover,
113
+ .stn-pagination__last:disabled:hover {
105
114
  background: transparent;
106
115
  opacity: var(--stn-pagination-disabled-opacity);
107
116
  }
108
117
 
118
+ /* Size variations (STN 규격: sm · md · lg) */
119
+ .stn-pagination--sm {
120
+ --stn-pagination-size: var(--stn-size-28, 28px);
121
+ --stn-pagination-font-size: var(--stn-font-size-12, 12px);
122
+ --stn-pagination-gap: var(--stn-space-4, 4px);
123
+ --stn-pagination-arrow-gap: var(--stn-space-8, 8px);
124
+ }
125
+
126
+ .stn-pagination--md {
127
+ --stn-pagination-size: var(--stn-size-32, 32px);
128
+ --stn-pagination-font-size: var(--stn-font-size-13, 13px);
129
+ --stn-pagination-gap: var(--stn-space-8, 8px);
130
+ --stn-pagination-arrow-gap: var(--stn-space-12, 12px);
131
+ }
132
+
133
+ .stn-pagination--lg {
134
+ --stn-pagination-size: var(--stn-size-36, 36px);
135
+ --stn-pagination-font-size: var(--stn-font-size-14, 14px);
136
+ --stn-pagination-gap: var(--stn-space-8, 8px);
137
+ --stn-pagination-arrow-gap: var(--stn-space-16, 16px);
138
+ }
139
+
140
+ /* Variant: outlined (선택된 페이지만 outline 테두리 적용, 다른 번호 및 이동 버튼은 박스 없음) */
141
+ .stn-pagination--outlined .stn-pagination__page,
142
+ .stn-pagination--outlined .stn-pagination__prev,
143
+ .stn-pagination--outlined .stn-pagination__next,
144
+ .stn-pagination--outlined .stn-pagination__first,
145
+ .stn-pagination--outlined .stn-pagination__last {
146
+ border: none;
147
+ background: transparent;
148
+ }
149
+
150
+ .stn-pagination--outlined .stn-pagination__page.is-active,
151
+ .stn-pagination--outlined .stn-pagination__page[aria-current='page'] {
152
+ border: 1px solid var(--stn-pagination-active-bg, var(--stn-primary));
153
+ background: transparent;
154
+ color: var(--stn-pagination-active-bg, var(--stn-primary));
155
+ }
156
+
157
+ .stn-pagination--outlined .stn-pagination__page.is-active:hover,
158
+ .stn-pagination--outlined .stn-pagination__page[aria-current='page']:hover {
159
+ background: color-mix(in srgb, var(--stn-pagination-active-bg, var(--stn-primary)) 10%, transparent);
160
+ }
161
+
162
+ /* outlined 기본(컬러 미지정) 활성 페이지 */
163
+ .stn-pagination--outlined:not(.stn-pagination--primary):not(.stn-pagination--secondary) .stn-pagination__page.is-active,
164
+ .stn-pagination--outlined:not(.stn-pagination--primary):not(.stn-pagination--secondary) .stn-pagination__page[aria-current='page'] {
165
+ border: 1px solid var(--stn-gray-400, #94a3b8);
166
+ background: transparent;
167
+ color: var(--stn-text-primary, #ffffff);
168
+ }
169
+
170
+ [data-theme='light'] .stn-pagination--outlined:not(.stn-pagination--primary):not(.stn-pagination--secondary) .stn-pagination__page.is-active,
171
+ .light .stn-pagination--outlined:not(.stn-pagination--primary):not(.stn-pagination--secondary) .stn-pagination__page.is-active {
172
+ border-color: var(--stn-gray-500, #64748b);
173
+ color: var(--stn-gray-800, #1e293b);
174
+ }
175
+
176
+ /* Color variations */
177
+ .stn-pagination--primary {
178
+ --stn-pagination-active-bg: var(--stn-primary, var(--stn-blue-500));
179
+ --stn-pagination-active-color: var(--stn-static-white, #ffffff);
180
+ }
181
+
182
+ .stn-pagination--secondary {
183
+ --stn-pagination-active-bg: var(--stn-secondary, var(--stn-purple-500));
184
+ --stn-pagination-active-color: var(--stn-static-white, #ffffff);
185
+ }
186
+
187
+ /* Disabled state */
188
+ .stn-pagination.is-disabled {
189
+ opacity: 0.4;
190
+ pointer-events: none;
191
+ }
192
+
109
193
  .stn-pagination__icon {
110
194
  display: block;
111
195
  width: var(--stn-pagination-chevron-w);
@@ -140,3 +224,27 @@
140
224
  width: auto;
141
225
  flex: 0 0 auto;
142
226
  }
227
+
228
+ /* 모바일 좁은 화면 컴팩트 최적화
229
+ * 브레이크포인트: --stn-pagination-compact-breakpoint (480px)
230
+ * CSS @media에서 var() 사용 불가이므로 리터럴 유지; 치수는 시멘틱 토큰 참조.
231
+ */
232
+ @media (max-width: 480px) {
233
+ .stn-pagination {
234
+ gap: var(--stn-pagination-compact-gap);
235
+ }
236
+
237
+ .stn-pagination__list {
238
+ gap: var(--stn-pagination-compact-gap);
239
+ }
240
+
241
+ .stn-pagination__page,
242
+ .stn-pagination__prev,
243
+ .stn-pagination__next {
244
+ min-width: var(--stn-pagination-compact-size);
245
+ width: var(--stn-pagination-compact-size);
246
+ height: var(--stn-pagination-compact-size);
247
+ padding: var(--stn-pagination-compact-padding);
248
+ font-size: var(--stn-pagination-compact-font-size);
249
+ }
250
+ }
@@ -180,7 +180,7 @@
180
180
  }
181
181
 
182
182
  .stn-pop--xs {
183
- --stn-pop-active-width: var(--stn-pop-width-xs, 400px);
183
+ --stn-pop-active-width: var(--stn-pop-width-xs);
184
184
  }
185
185
 
186
186
  .stn-pop--sm {
@@ -12,6 +12,13 @@
12
12
  :root {
13
13
  --stn-scroll-width: 8px;
14
14
  --stn-scroll-radius: 4px;
15
+ /* 두께 프리셋 (thin · default · thick) */
16
+ --stn-scroll-width-thin: 4px;
17
+ --stn-scroll-radius-thin: 2px;
18
+ --stn-scroll-width-default: 8px;
19
+ --stn-scroll-radius-default: 4px;
20
+ --stn-scroll-width-thick: 12px;
21
+ --stn-scroll-radius-thick: 6px;
15
22
  }
16
23
 
17
24
  /* ===== 2. Unified Scrollbar Base (.stn-scroll 단일화) ===== */
@@ -22,23 +29,19 @@
22
29
  scrollbar-color: var(--stn-scroll-thumb) var(--stn-scroll-track);
23
30
  }
24
31
 
25
- .stn-scroll.thick,
26
- .stn-scroll--thick {
32
+ .stn-scroll.thick {
27
33
  scrollbar-width: auto;
28
34
  }
29
35
 
30
- .stn-scroll.primary,
31
- .stn-scroll--primary {
36
+ .stn-scroll.primary {
32
37
  scrollbar-color: var(--stn-scroll-thumb-primary) var(--stn-scroll-track);
33
38
  }
34
39
 
35
- .stn-scroll.secondary,
36
- .stn-scroll--secondary {
40
+ .stn-scroll.secondary {
37
41
  scrollbar-color: var(--stn-scroll-thumb-secondary) var(--stn-scroll-track);
38
42
  }
39
43
 
40
- .stn-scroll.muted,
41
- .stn-scroll--muted {
44
+ .stn-scroll.muted {
42
45
  scrollbar-color: var(--stn-scroll-thumb-muted) var(--stn-scroll-track);
43
46
  }
44
47
  }
@@ -77,65 +80,55 @@
77
80
  overflow: hidden;
78
81
  }
79
82
 
80
- .stn-scroll.vertical,
81
- .stn-scroll--vertical {
83
+ .stn-scroll.vertical {
82
84
  overflow-y: auto;
83
85
  overflow-x: hidden;
84
86
  }
85
87
 
86
- .stn-scroll.horizontal,
87
- .stn-scroll--horizontal {
88
+ .stn-scroll.horizontal {
88
89
  overflow-x: auto;
89
90
  overflow-y: hidden;
90
91
  }
91
92
 
92
- .stn-scroll.both,
93
- .stn-scroll--both {
93
+ .stn-scroll.both {
94
94
  overflow: auto;
95
95
  }
96
96
 
97
97
  /* ===== 4. Width Variants (너비) ===== */
98
98
  /* Thin (4px) */
99
- .stn-scroll.thin,
100
- .stn-scroll--thin {
99
+ .stn-scroll.thin {
101
100
  --stn-scroll-width: 4px;
102
101
  --stn-scroll-radius: 2px;
103
102
  }
104
103
 
105
- .stn-scroll.thin::-webkit-scrollbar,
106
- .stn-scroll--thin::-webkit-scrollbar {
104
+ .stn-scroll.thin::-webkit-scrollbar {
107
105
  width: 4px;
108
106
  height: 4px;
109
107
  }
110
108
 
111
- .stn-scroll.thin::-webkit-scrollbar-thumb,
112
- .stn-scroll--thin::-webkit-scrollbar-thumb {
109
+ .stn-scroll.thin::-webkit-scrollbar-thumb {
113
110
  border-radius: 2px;
114
111
  }
115
112
 
116
113
  /* Default (8px) */
117
- .stn-scroll.default,
118
- .stn-scroll--default {
114
+ .stn-scroll.default {
119
115
  --stn-scroll-width: 8px;
120
116
  --stn-scroll-radius: 4px;
121
117
  }
122
118
 
123
119
  /* Thick (12px) */
124
- .stn-scroll.thick,
125
- .stn-scroll--thick {
120
+ .stn-scroll.thick {
126
121
  scrollbar-width: auto;
127
122
  --stn-scroll-width: 12px;
128
123
  --stn-scroll-radius: 6px;
129
124
  }
130
125
 
131
- .stn-scroll.thick::-webkit-scrollbar,
132
- .stn-scroll--thick::-webkit-scrollbar {
126
+ .stn-scroll.thick::-webkit-scrollbar {
133
127
  width: 12px;
134
128
  height: 12px;
135
129
  }
136
130
 
137
- .stn-scroll.thick::-webkit-scrollbar-thumb,
138
- .stn-scroll--thick::-webkit-scrollbar-thumb {
131
+ .stn-scroll.thick::-webkit-scrollbar-thumb {
139
132
  border-radius: 6px;
140
133
  }
141
134
 
@@ -147,19 +140,19 @@
147
140
 
148
141
  /* 화살표가 있는 스크롤 셸 내부 트랙:
149
142
  스크롤 썸(thumb)이 화살표 버튼을 덮지 않고, 화살표 바로 아래/사이에서만 움직이도록 트랙 상하/좌우에 margin 지정 */
150
- .stn-scroll-shell--vertical .stn-scroll::-webkit-scrollbar-track,
151
- .stn-scroll-shell:has(.stn-scroll__arrow--up) .stn-scroll::-webkit-scrollbar-track {
143
+ .stn-scroll-shell.vertical .stn-scroll::-webkit-scrollbar-track,
144
+ .stn-scroll-shell:has(.stn-scroll__arrow.up) .stn-scroll::-webkit-scrollbar-track {
152
145
  margin-top: 17px;
153
146
  margin-bottom: 17px;
154
147
  }
155
148
 
156
- .stn-scroll-shell--horizontal .stn-scroll::-webkit-scrollbar-track,
157
- .stn-scroll-shell:has(.stn-scroll__arrow--left) .stn-scroll::-webkit-scrollbar-track {
149
+ .stn-scroll-shell.horizontal .stn-scroll::-webkit-scrollbar-track,
150
+ .stn-scroll-shell:has(.stn-scroll__arrow.left) .stn-scroll::-webkit-scrollbar-track {
158
151
  margin-left: 17px;
159
152
  margin-right: 17px;
160
153
  }
161
154
 
162
- .stn-scroll-shell--both .stn-scroll::-webkit-scrollbar-track {
155
+ .stn-scroll-shell.both .stn-scroll::-webkit-scrollbar-track {
163
156
  margin: 17px;
164
157
  }
165
158
 
@@ -204,83 +197,75 @@
204
197
  }
205
198
 
206
199
  /* 수직 스크롤 화살표 (위/아래) */
207
- .stn-scroll-shell--vertical .stn-scroll__arrow--up,
208
- .stn-scroll-shell--vertical .stn-scroll__arrow--down,
209
- .stn-scroll-shell--both .stn-scroll__arrow--up,
210
- .stn-scroll-shell--both .stn-scroll__arrow--down {
200
+ .stn-scroll-shell.vertical .stn-scroll__arrow.up,
201
+ .stn-scroll-shell.vertical .stn-scroll__arrow.down,
202
+ .stn-scroll-shell.both .stn-scroll__arrow.up,
203
+ .stn-scroll-shell.both .stn-scroll__arrow.down {
211
204
  right: 0;
212
205
  width: var(--stn-scroll-width, 8px);
213
206
  height: 14px;
214
207
  }
215
208
 
216
- .stn-scroll-shell--vertical .stn-scroll__arrow--up,
217
- .stn-scroll-shell--both .stn-scroll__arrow--up {
209
+ .stn-scroll-shell.vertical .stn-scroll__arrow.up,
210
+ .stn-scroll-shell.both .stn-scroll__arrow.up {
218
211
  top: 1px;
219
212
  }
220
213
 
221
- .stn-scroll-shell--vertical .stn-scroll__arrow--down,
222
- .stn-scroll-shell--both .stn-scroll__arrow--down {
214
+ .stn-scroll-shell.vertical .stn-scroll__arrow.down,
215
+ .stn-scroll-shell.both .stn-scroll__arrow.down {
223
216
  bottom: 1px;
224
217
  }
225
218
 
226
219
  /* 가로 스크롤 화살표 (좌/우) */
227
- .stn-scroll-shell--horizontal .stn-scroll__arrow--left,
228
- .stn-scroll-shell--horizontal .stn-scroll__arrow--right,
229
- .stn-scroll-shell--both .stn-scroll__arrow--left,
230
- .stn-scroll-shell--both .stn-scroll__arrow--right {
220
+ .stn-scroll-shell.horizontal .stn-scroll__arrow.left,
221
+ .stn-scroll-shell.horizontal .stn-scroll__arrow.right,
222
+ .stn-scroll-shell.both .stn-scroll__arrow.left,
223
+ .stn-scroll-shell.both .stn-scroll__arrow.right {
231
224
  bottom: 0;
232
225
  width: 14px;
233
226
  height: var(--stn-scroll-width, 8px);
234
227
  }
235
228
 
236
- .stn-scroll-shell--horizontal .stn-scroll__arrow--left,
237
- .stn-scroll-shell--both .stn-scroll__arrow--left {
229
+ .stn-scroll-shell.horizontal .stn-scroll__arrow.left,
230
+ .stn-scroll-shell.both .stn-scroll__arrow.left {
238
231
  left: 1px;
239
232
  }
240
233
 
241
- .stn-scroll-shell--horizontal .stn-scroll__arrow--right,
242
- .stn-scroll-shell--both .stn-scroll__arrow--right {
234
+ .stn-scroll-shell.horizontal .stn-scroll__arrow.right,
235
+ .stn-scroll-shell.both .stn-scroll__arrow.right {
243
236
  right: 1px;
244
237
  }
245
238
 
246
- /* ===== 5. Color Variants (색상) ===== */
239
+ /* ===== 6. Color Variants (색상) ===== */
247
240
  /* Primary */
248
- .stn-scroll.primary::-webkit-scrollbar-thumb,
249
- .stn-scroll--primary::-webkit-scrollbar-thumb {
241
+ .stn-scroll.primary::-webkit-scrollbar-thumb {
250
242
  background: var(--stn-scroll-thumb-primary);
251
243
  }
252
- .stn-scroll.primary::-webkit-scrollbar-thumb:hover,
253
- .stn-scroll--primary::-webkit-scrollbar-thumb:hover {
244
+ .stn-scroll.primary::-webkit-scrollbar-thumb:hover {
254
245
  background: var(--stn-scroll-thumb-primary-hover);
255
246
  }
256
247
 
257
248
  /* Secondary */
258
- .stn-scroll.secondary::-webkit-scrollbar-thumb,
259
- .stn-scroll--secondary::-webkit-scrollbar-thumb {
249
+ .stn-scroll.secondary::-webkit-scrollbar-thumb {
260
250
  background: var(--stn-scroll-thumb-secondary);
261
251
  }
262
- .stn-scroll.secondary::-webkit-scrollbar-thumb:hover,
263
- .stn-scroll--secondary::-webkit-scrollbar-thumb:hover {
252
+ .stn-scroll.secondary::-webkit-scrollbar-thumb:hover {
264
253
  background: var(--stn-scroll-thumb-secondary-hover);
265
254
  }
266
255
 
267
256
  /* Muted */
268
- .stn-scroll.muted::-webkit-scrollbar-thumb,
269
- .stn-scroll--muted::-webkit-scrollbar-thumb {
257
+ .stn-scroll.muted::-webkit-scrollbar-thumb {
270
258
  background: var(--stn-scroll-thumb-muted);
271
259
  }
272
- .stn-scroll.muted::-webkit-scrollbar-thumb:hover,
273
- .stn-scroll--muted::-webkit-scrollbar-thumb:hover {
260
+ .stn-scroll.muted::-webkit-scrollbar-thumb:hover {
274
261
  background: var(--stn-scroll-thumb-muted-hover);
275
262
  }
276
263
 
277
264
  /* Fade on Hover */
278
- .stn-scroll.fade::-webkit-scrollbar-thumb,
279
- .stn-scroll--fade::-webkit-scrollbar-thumb {
265
+ .stn-scroll.fade::-webkit-scrollbar-thumb {
280
266
  background: transparent;
281
267
  transition: background 0.2s ease;
282
268
  }
283
- .stn-scroll.fade:hover::-webkit-scrollbar-thumb,
284
- .stn-scroll--fade:hover::-webkit-scrollbar-thumb {
269
+ .stn-scroll.fade:hover::-webkit-scrollbar-thumb {
285
270
  background: var(--stn-scroll-thumb);
286
271
  }