@stn-uiux/pub-ui 0.1.82 → 0.1.85

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 (103) hide show
  1. package/dist/{chunk-6FEWLKVE.js → chunk-2TRZNWCA.js} +32 -2
  2. package/dist/chunk-2TRZNWCA.js.map +1 -0
  3. package/dist/{chunk-AJLP3Y53.js → chunk-2VSSPMZ3.js} +2 -2
  4. package/dist/{chunk-AJLP3Y53.js.map → chunk-2VSSPMZ3.js.map} +1 -1
  5. package/dist/chunk-5QPBSOJ6.js +9 -0
  6. package/dist/chunk-5QPBSOJ6.js.map +1 -0
  7. package/dist/{chunk-AOS3IX4T.js → chunk-65B7YUTE.js} +2 -1
  8. package/dist/{chunk-AOS3IX4T.js.map → chunk-65B7YUTE.js.map} +1 -1
  9. package/dist/chunk-APXT43OG.js +232 -0
  10. package/dist/chunk-APXT43OG.js.map +1 -0
  11. package/dist/chunk-ERZPIKPF.js +1 -0
  12. package/dist/chunk-FLKGJJD5.js +45 -0
  13. package/dist/chunk-FLKGJJD5.js.map +1 -0
  14. package/dist/{chunk-N46UQH6L.js → chunk-K6TWXWIO.js} +11 -2
  15. package/dist/chunk-K6TWXWIO.js.map +1 -0
  16. package/dist/chunk-N4PVFFKV.js +38 -0
  17. package/dist/chunk-N4PVFFKV.js.map +1 -0
  18. package/dist/chunk-NYZMUDVK.js +12 -0
  19. package/dist/chunk-NYZMUDVK.js.map +1 -0
  20. package/dist/chunk-QJN2Z6RG.js +160 -0
  21. package/dist/chunk-QJN2Z6RG.js.map +1 -0
  22. package/dist/chunk-W7K3FSAX.js +24 -0
  23. package/dist/chunk-W7K3FSAX.js.map +1 -0
  24. package/dist/cli.js +17 -17
  25. package/dist/components.d.ts +1 -1
  26. package/dist/components.js +1 -1
  27. package/dist/data/index.d.ts +7 -2
  28. package/dist/data/index.js +142 -92
  29. package/dist/data/stnCard.d.ts +1 -1
  30. package/dist/data/stnCard.js +1 -1
  31. package/dist/data/stnDatePicker.d.ts +41 -10
  32. package/dist/data/stnDatePicker.js +9 -3
  33. package/dist/data/stnEmptyState.d.ts +35 -0
  34. package/dist/data/stnEmptyState.js +19 -0
  35. package/dist/data/stnEmptyState.js.map +1 -0
  36. package/dist/data/stnPackageVersion.d.ts +2 -2
  37. package/dist/data/stnPackageVersion.js +1 -1
  38. package/dist/data/stnPopover.d.ts +18 -0
  39. package/dist/data/stnPopover.js +9 -0
  40. package/dist/data/stnPopover.js.map +1 -0
  41. package/dist/data/stnSplitView.d.ts +16 -0
  42. package/dist/data/stnSplitView.js +11 -0
  43. package/dist/data/stnSplitView.js.map +1 -0
  44. package/dist/data/stnStepCards.d.ts +32 -0
  45. package/dist/data/stnStepCards.js +7 -0
  46. package/dist/data/stnStepCards.js.map +1 -0
  47. package/dist/data/stnStepper.d.ts +78 -0
  48. package/dist/data/stnStepper.js +7 -0
  49. package/dist/data/stnStepper.js.map +1 -0
  50. package/dist/data/stnTree.d.ts +3 -0
  51. package/dist/data/stnTree.js +1 -1
  52. package/dist/data/stnTypography.d.ts +17 -1
  53. package/dist/data/stnTypography.js +7 -1
  54. package/dist/index.d.ts +7 -2
  55. package/dist/index.js +143 -93
  56. package/package.json +1 -1
  57. package/styles/@assets/images/empty-state/forbidden.png +0 -0
  58. package/styles/@assets/images/empty-state/load-failed.png +0 -0
  59. package/styles/@assets/images/empty-state/maintenance.png +0 -0
  60. package/styles/@assets/images/empty-state/network.png +0 -0
  61. package/styles/@assets/images/empty-state/no-data.png +0 -0
  62. package/styles/@assets/images/empty-state/not-found.png +0 -0
  63. package/styles/@assets/images/empty-state/search-empty.png +0 -0
  64. package/styles/@assets/images/empty-state/server-error.png +0 -0
  65. package/styles/@assets/images/empty-state/timeout.png +0 -0
  66. package/styles/@assets/images/empty-state/unauthorized.png +0 -0
  67. package/styles/components/stn-card.css +49 -13
  68. package/styles/components/stn-checkbox.css +1 -1
  69. package/styles/components/stn-date-picker.css +252 -45
  70. package/styles/components/stn-date-range-field.css +2 -2
  71. package/styles/components/stn-drawer.css +2 -2
  72. package/styles/components/stn-dropdown.css +2 -2
  73. package/styles/components/stn-empty-state.css +238 -0
  74. package/styles/components/stn-popover.css +52 -0
  75. package/styles/components/stn-radio.css +1 -1
  76. package/styles/components/stn-slider.css +1 -1
  77. package/styles/components/stn-stepper.css +570 -0
  78. package/styles/components/stn-switch.css +1 -1
  79. package/styles/components/stn-table.css +39 -1
  80. package/styles/components/stn-text-field.css +5 -1
  81. package/styles/components/stn-tooltip.css +1 -1
  82. package/styles/layouts/stn-container.css +8 -0
  83. package/styles/layouts/stn-layer0-bg.css +18 -17
  84. package/styles/patterns/stn-login-card.css +6 -0
  85. package/styles/patterns/stn-split-view.css +130 -0
  86. package/styles/patterns/stn-step-cards.css +60 -0
  87. package/styles/patterns/stn-tree.css +9 -0
  88. package/styles/style-pub.css +5 -0
  89. package/styles/tokens/stn-colors-semantic.css +54 -0
  90. package/styles/tokens/stn-elevation.css +1 -0
  91. package/styles/tokens/stn-size-semantic.css +37 -0
  92. package/styles/tokens/stn-size.css +1 -0
  93. package/styles/tokens/stn-spacing-semantic.css +11 -0
  94. package/styles/tokens/stn-typography-semantic.css +7 -1
  95. package/styles/tokens/stn-typography.css +16 -0
  96. package/dist/chunk-6FEWLKVE.js.map +0 -1
  97. package/dist/chunk-N46UQH6L.js.map +0 -1
  98. package/dist/chunk-THTVXGTK.js +0 -9
  99. package/dist/chunk-THTVXGTK.js.map +0 -1
  100. package/dist/chunk-WKQLAHIG.js +0 -1
  101. package/dist/chunk-YBNEQ5LB.js +0 -75
  102. package/dist/chunk-YBNEQ5LB.js.map +0 -1
  103. /package/dist/{chunk-WKQLAHIG.js.map → chunk-ERZPIKPF.js.map} +0 -0
@@ -0,0 +1,238 @@
1
+ @charset "utf-8";
2
+ /**
3
+ * StnEmptyState
4
+ * 공통 빈·오류 상태 표면. 아이콘 · 제목 · 설명 · 액션.
5
+ * 색·타이포·버튼은 기존 Pub 토큰 / StnIcon · StnText · StnButton에 위임.
6
+ */
7
+
8
+ :root {
9
+ --stn-empty-state-gap: var(--stn-empty-state-gap-md);
10
+ --stn-empty-state-body-gap: var(--stn-empty-state-body-gap);
11
+ --stn-empty-state-actions-gap: var(--stn-empty-state-actions-gap);
12
+ --stn-empty-state-max-width: var(--stn-empty-state-max-width-md);
13
+ --stn-empty-state-padding: var(--stn-empty-state-padding-md);
14
+ --stn-empty-state-icon-size: var(--stn-empty-state-icon-size-md);
15
+ --stn-empty-state-graphic-width: var(--stn-empty-state-graphic-width-md);
16
+ --stn-empty-state-graphic-height: var(--stn-empty-state-graphic-height-md);
17
+ --stn-empty-state-icon-color: var(--stn-text-tertiary);
18
+ --stn-empty-state-title-color: var(--stn-text-primary);
19
+ --stn-empty-state-description-color: var(--stn-text-secondary);
20
+ --stn-empty-state-code-color: var(--stn-text-tertiary);
21
+ --stn-empty-state-code-font-size: var(--stn-text-caption-size);
22
+ --stn-empty-state-code-font-weight: var(--stn-font-weight-semibold);
23
+ --stn-empty-state-page-padding-y: var(--stn-empty-state-page-padding-y);
24
+ }
25
+
26
+ .stn-empty-state {
27
+ box-sizing: border-box;
28
+ display: flex;
29
+ flex-direction: column;
30
+ align-items: center;
31
+ justify-content: center;
32
+ gap: var(--stn-empty-state-gap);
33
+ width: 100%;
34
+ max-width: var(--stn-empty-state-max-width);
35
+ margin-inline: auto;
36
+ padding: var(--stn-empty-state-padding);
37
+ text-align: center;
38
+ color: var(--stn-empty-state-title-color);
39
+ }
40
+
41
+ /* 전체 페이지 / 레이아웃 본문 중앙 */
42
+ .stn-empty-state.page {
43
+ max-width: none;
44
+ min-height: min(100%, 60vh);
45
+ flex: 1 1 auto;
46
+ padding-block: var(--stn-empty-state-page-padding-y);
47
+ }
48
+
49
+ .stn-empty-state.page > .stn-empty-state__body,
50
+ .stn-empty-state.page > .stn-empty-state__actions {
51
+ max-width: var(--stn-empty-state-max-width);
52
+ }
53
+
54
+ /* Size 규격 (xs · sm · md · lg · xl) */
55
+ .stn-empty-state.sm {
56
+ --stn-empty-state-gap: var(--stn-empty-state-gap-sm);
57
+ --stn-empty-state-icon-size: var(--stn-empty-state-icon-size-sm);
58
+ --stn-empty-state-padding: var(--stn-empty-state-padding-sm);
59
+ --stn-empty-state-max-width: var(--stn-empty-state-max-width-sm);
60
+ --stn-empty-state-graphic-width: var(--stn-empty-state-graphic-width-sm);
61
+ --stn-empty-state-graphic-height: var(--stn-empty-state-graphic-height-sm);
62
+ }
63
+
64
+ .stn-empty-state.md {
65
+ --stn-empty-state-gap: var(--stn-empty-state-gap-md);
66
+ --stn-empty-state-icon-size: var(--stn-empty-state-icon-size-md);
67
+ --stn-empty-state-padding: var(--stn-empty-state-padding-md);
68
+ --stn-empty-state-max-width: var(--stn-empty-state-max-width-md);
69
+ --stn-empty-state-graphic-width: var(--stn-empty-state-graphic-width-md);
70
+ --stn-empty-state-graphic-height: var(--stn-empty-state-graphic-height-md);
71
+ }
72
+
73
+ .stn-empty-state.lg {
74
+ --stn-empty-state-gap: var(--stn-empty-state-gap-lg);
75
+ --stn-empty-state-icon-size: var(--stn-empty-state-icon-size-lg);
76
+ --stn-empty-state-padding: var(--stn-empty-state-padding-lg);
77
+ --stn-empty-state-max-width: var(--stn-empty-state-max-width-lg);
78
+ --stn-empty-state-graphic-width: var(--stn-empty-state-graphic-width-lg);
79
+ --stn-empty-state-graphic-height: var(--stn-empty-state-graphic-height-lg);
80
+ }
81
+
82
+ /* Tone → 아이콘 색 (feedback / text 시맨틱) */
83
+ .stn-empty-state.tone-neutral {
84
+ --stn-empty-state-icon-color: var(--stn-text-tertiary);
85
+ }
86
+
87
+ .stn-empty-state.tone-info {
88
+ --stn-empty-state-icon-color: var(--stn-feedback-info);
89
+ }
90
+
91
+ .stn-empty-state.tone-warning {
92
+ --stn-empty-state-icon-color: var(--stn-feedback-warning);
93
+ }
94
+
95
+ .stn-empty-state.tone-error {
96
+ --stn-empty-state-icon-color: var(--stn-feedback-error);
97
+ }
98
+
99
+ .stn-empty-state.tone-success {
100
+ --stn-empty-state-icon-color: var(--stn-feedback-success);
101
+ }
102
+
103
+ /* 3D Graphic (Illustration) */
104
+ .stn-empty-state__graphic {
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ flex-shrink: 0;
109
+ line-height: 0;
110
+ max-width: 100%;
111
+ }
112
+
113
+ .stn-empty-state__img {
114
+ display: block;
115
+ width: auto;
116
+ height: auto;
117
+ max-width: var(--stn-empty-state-graphic-width);
118
+ max-height: var(--stn-empty-state-graphic-height);
119
+ object-fit: contain;
120
+ filter: drop-shadow(0 10px 20px color-mix(in srgb, var(--stn-static-black) 16%, transparent));
121
+ user-select: none;
122
+ pointer-events: none;
123
+ }
124
+
125
+ /* Graphic sizes (~75% compact scale: sm, md, lg) */
126
+ .stn-empty-state.sm .stn-empty-state__img {
127
+ max-width: var(--stn-empty-state-graphic-width-sm);
128
+ max-height: var(--stn-empty-state-graphic-height-sm);
129
+ }
130
+
131
+ .stn-empty-state.md .stn-empty-state__img {
132
+ max-width: var(--stn-empty-state-graphic-width-md);
133
+ max-height: var(--stn-empty-state-graphic-height-md);
134
+ }
135
+
136
+ .stn-empty-state.lg .stn-empty-state__img {
137
+ max-width: var(--stn-empty-state-graphic-width-lg);
138
+ max-height: var(--stn-empty-state-graphic-height-lg);
139
+ }
140
+
141
+ .stn-empty-state__icon {
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ flex-shrink: 0;
146
+ width: var(--stn-empty-state-icon-size);
147
+ height: var(--stn-empty-state-icon-size);
148
+ color: var(--stn-empty-state-icon-color);
149
+ }
150
+
151
+ .stn-empty-state__icon > .stn-icon,
152
+ .stn-empty-state__icon > svg {
153
+ width: 100%;
154
+ height: 100%;
155
+ }
156
+
157
+ /* masked 아이콘이 currentColor를 쓰도록 */
158
+ .stn-empty-state__icon > .stn-icon.stn-icon--masked {
159
+ background-color: var(--stn-empty-state-icon-color);
160
+ }
161
+
162
+ .stn-empty-state__code {
163
+ margin: 0;
164
+ color: var(--stn-empty-state-code-color);
165
+ font-size: var(--stn-empty-state-code-font-size);
166
+ font-weight: var(--stn-empty-state-code-font-weight);
167
+ letter-spacing: 0.04em;
168
+ text-transform: uppercase;
169
+ }
170
+
171
+ .stn-empty-state__body {
172
+ display: flex;
173
+ flex-direction: column;
174
+ align-items: center;
175
+ gap: var(--stn-empty-state-body-gap);
176
+ width: 100%;
177
+ min-width: 0;
178
+ }
179
+
180
+ .stn-empty-state__title {
181
+ margin: 0;
182
+ color: var(--stn-empty-state-title-color);
183
+ font-family: var(--stn-font-body);
184
+ font-size: var(--stn-text-title-medium-size);
185
+ font-weight: var(--stn-font-weight-semibold);
186
+ line-height: var(--stn-text-title-medium-line-height);
187
+ word-break: keep-all;
188
+ }
189
+
190
+ .stn-empty-state__description {
191
+ margin: 0;
192
+ color: var(--stn-empty-state-description-color);
193
+ font-family: var(--stn-font-body);
194
+ font-size: var(--stn-text-body-medium-size);
195
+ font-weight: var(--stn-font-weight-regular);
196
+ line-height: var(--stn-text-body-medium-line-height);
197
+ word-break: keep-all;
198
+ }
199
+
200
+ /* Typography scale per size */
201
+ .stn-empty-state.sm .stn-empty-state__title {
202
+ font-size: var(--stn-text-title-small-size);
203
+ line-height: var(--stn-text-title-small-line-height);
204
+ }
205
+
206
+ .stn-empty-state.sm .stn-empty-state__description {
207
+ font-size: var(--stn-text-caption-size);
208
+ line-height: var(--stn-text-caption-line-height);
209
+ }
210
+
211
+ .stn-empty-state.md .stn-empty-state__title {
212
+ font-size: var(--stn-text-title-medium-size);
213
+ line-height: var(--stn-text-title-medium-line-height);
214
+ }
215
+
216
+ .stn-empty-state.md .stn-empty-state__description {
217
+ font-size: var(--stn-text-body-medium-size);
218
+ line-height: var(--stn-text-body-medium-line-height);
219
+ }
220
+
221
+ .stn-empty-state.lg .stn-empty-state__title {
222
+ font-size: var(--stn-text-title-large-size);
223
+ line-height: var(--stn-text-title-large-line-height);
224
+ }
225
+
226
+ .stn-empty-state.lg .stn-empty-state__description {
227
+ font-size: var(--stn-text-body-medium-large-size);
228
+ line-height: var(--stn-text-body-medium-large-line-height);
229
+ }
230
+
231
+ .stn-empty-state__actions {
232
+ display: flex;
233
+ flex-wrap: wrap;
234
+ align-items: center;
235
+ justify-content: center;
236
+ gap: var(--stn-empty-state-actions-gap);
237
+ width: 100%;
238
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * StnPopover — STN Design System Standard Floating Popover Overlay
3
+ *
4
+ * .stn-popover
5
+ * .stn-popover__backdrop (클릭 아웃사이드 감지용 투명 백드롭)
6
+ * .stn-popover__paper (플로팅 카드 본체)
7
+ */
8
+
9
+ .stn-popover {
10
+ position: fixed;
11
+ inset: 0;
12
+ z-index: var(--stn-elevation-z-popover, 250);
13
+ pointer-events: none;
14
+ }
15
+
16
+ .stn-popover.is-open {
17
+ pointer-events: auto;
18
+ }
19
+
20
+ /* 1. 투명 백드롭 — 배경을 가리지 않고 외부 클릭을 감지 */
21
+ .stn-popover__backdrop {
22
+ position: fixed;
23
+ inset: 0;
24
+ z-index: -1;
25
+ background-color: transparent;
26
+ -webkit-tap-highlight-color: transparent;
27
+ }
28
+
29
+ /* 2. 플로팅 페이퍼 카드 */
30
+ .stn-popover__paper {
31
+ position: fixed;
32
+ z-index: 1;
33
+ background-color: var(--stn-dropdown-menu-bg, var(--stn-pop-surface));
34
+ color: var(--stn-text-primary);
35
+ border: var(--stn-size-1, 1px) solid var(--stn-dropdown-menu-border, var(--stn-border-strong));
36
+ border-radius: var(--stn-radius-8);
37
+ box-shadow: var(--stn-dropdown-menu-shadow, var(--stn-shadow-modal));
38
+ outline: none;
39
+ box-sizing: border-box;
40
+ max-width: calc(100vw - var(--stn-popover-margin, var(--stn-space-16)) * 2);
41
+ max-height: calc(100vh - var(--stn-popover-margin, var(--stn-space-16)) * 2);
42
+ overflow-x: hidden;
43
+ overflow-y: auto;
44
+ --stn-scroll-width: var(--stn-scroll-width-thin, 4px);
45
+ --stn-scroll-radius: var(--stn-scroll-radius-thin, 2px);
46
+ will-change: top, left, transform;
47
+ }
48
+
49
+ .stn-popover__paper:focus-visible {
50
+ outline: var(--stn-focus-ring-width, 2px) solid var(--stn-focus-ring, var(--stn-primary));
51
+ outline-offset: calc(var(--stn-focus-ring-width, 2px) * -1);
52
+ }
@@ -104,7 +104,7 @@
104
104
  .stn-radio.lg {
105
105
  --stn-radio-size: var(--stn-radio-size-lg, 22px);
106
106
  --stn-radio-dot-size: var(--stn-radio-dot-size-lg, 8px);
107
- font-size: var(--stn-text-body-size, 15px);
107
+ font-size: var(--stn-text-body-medium-large-size);
108
108
  }
109
109
 
110
110
  /* Colors / Semantic Tones (단일 클래스 - 점 및 활성 테두리 색상) */
@@ -164,7 +164,7 @@
164
164
  --stn-slider-pad-x: var(--stn-slider-pad-x-lg, var(--stn-space-10, 10px));
165
165
  }
166
166
  .stn-slider.lg .stn-slider__label {
167
- font-size: var(--stn-text-body-size, 15px);
167
+ font-size: var(--stn-text-body-medium-large-size);
168
168
  }
169
169
  .stn-slider.lg .stn-slider__value {
170
170
  min-width: var(--stn-size-32, 32px);