@stn-uiux/pub-ui 0.1.63 → 0.1.64

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 (38) hide show
  1. package/dist/{chunk-Q4QXONXL.js → chunk-4QTBT6OB.js} +2 -33
  2. package/dist/chunk-4QTBT6OB.js.map +1 -0
  3. package/dist/chunk-AVICAV6Z.js +1 -0
  4. package/dist/{chunk-XQ7UUG7Y.js → chunk-BTVWG4GB.js} +2 -2
  5. package/dist/{chunk-3RYAWLME.js → chunk-ESH5VDHX.js} +2 -2
  6. package/dist/{chunk-NHYZ7AWK.js → chunk-JHXSF7FS.js} +2 -2
  7. package/dist/{chunk-NHYZ7AWK.js.map → chunk-JHXSF7FS.js.map} +1 -1
  8. package/dist/{chunk-YMWHZNBT.js → chunk-N4GLOJTF.js} +2 -2
  9. package/dist/chunk-VNQUWGQ7.js +81 -0
  10. package/dist/chunk-VNQUWGQ7.js.map +1 -0
  11. package/dist/cli.js +3 -3
  12. package/dist/data/index.d.ts +1 -0
  13. package/dist/data/index.js +18 -6
  14. package/dist/data/stnBreadcrumb.js +3 -3
  15. package/dist/data/stnHeader.js +3 -3
  16. package/dist/data/stnSideNavItem.js +3 -3
  17. package/dist/data/stnSystemIcons.js +2 -2
  18. package/dist/data/stnSystemIconsData.generated.js +1 -1
  19. package/dist/data/stnTextArea.d.ts +46 -0
  20. package/dist/data/stnTextArea.js +15 -0
  21. package/dist/data/stnTextArea.js.map +1 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.js +18 -6
  24. package/package.json +1 -1
  25. package/styles/@assets/svg/system/fill/alert1.svg +2 -2
  26. package/styles/components/stn-chip.css +6 -0
  27. package/styles/components/stn-status.css +13 -11
  28. package/styles/components/stn-text-area.css +375 -0
  29. package/styles/components/stn-tooltip.css +11 -26
  30. package/styles/layouts/stn-layer1-content.css +25 -0
  31. package/styles/style-pub.css +1 -0
  32. package/styles/tokens/stn-colors-semantic.css +46 -0
  33. package/dist/chunk-A5KLX6NX.js +0 -1
  34. package/dist/chunk-Q4QXONXL.js.map +0 -1
  35. /package/dist/{chunk-A5KLX6NX.js.map → chunk-AVICAV6Z.js.map} +0 -0
  36. /package/dist/{chunk-XQ7UUG7Y.js.map → chunk-BTVWG4GB.js.map} +0 -0
  37. /package/dist/{chunk-3RYAWLME.js.map → chunk-ESH5VDHX.js.map} +0 -0
  38. /package/dist/{chunk-YMWHZNBT.js.map → chunk-N4GLOJTF.js.map} +0 -0
@@ -0,0 +1,375 @@
1
+ @charset "utf-8";
2
+ /**
3
+ * STN Pub TextArea (Figma Infomap multi-line input)
4
+ *
5
+ * StnTextField의 디자인 토큰과 스타일을 100% 계승하여 완벽한 시각적 일관성을 제공합니다.
6
+ *
7
+ * Variant: `.outlined` · `.filled` · `.standard` · `.transparent`
8
+ * Size: `.xs` · `.sm` · `.md` · `.lg` · `.xl`
9
+ * Width: `.w80` · `.w100` · `.w120` · `.w140` · `.w160` · `.w180` · `.w200` · `.full`
10
+ * Color: `.success` · `.error` · `.warning` · `.info`
11
+ * Resize: `.resize-none` · `.resize-vertical` · `.resize-horizontal` · `.resize-both`
12
+ * Wrap & Footer: `.stn-text-area-wrap` · `.stn-text-area__label` · `.stn-text-area__footer` · `.stn-text-area__helper` · `.stn-text-area__count`
13
+ */
14
+
15
+ .stn-text-area {
16
+ box-sizing: border-box;
17
+ display: inline-block;
18
+ margin: 0;
19
+ width: var(--stn-text-area-width, 100%);
20
+ min-width: var(--stn-text-area-min-width, 0);
21
+ max-width: 100%;
22
+ min-height: var(--stn-text-area-min-height, 80px);
23
+ padding: var(--stn-text-area-padding-y, var(--stn-space-8)) var(--stn-text-area-padding-x, var(--stn-space-10));
24
+ border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
25
+ border-radius: var(--stn-text-area-radius, var(--stn-radius-input-md));
26
+ background-color: var(--stn-input-bg);
27
+ color: var(--stn-input-fg);
28
+ font-family: var(--stn-font-body, inherit);
29
+ font-size: var(--stn-text-area-font-size, var(--stn-text-body-small-size));
30
+ font-weight: var(--stn-font-weight-medium);
31
+ line-height: var(--stn-text-area-line-height, var(--stn-line-height-px-22));
32
+ outline: none;
33
+ resize: vertical;
34
+ appearance: none;
35
+ -webkit-appearance: none;
36
+ transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
37
+ }
38
+
39
+ .stn-text-area::placeholder {
40
+ color: var(--stn-input-placeholder);
41
+ font-weight: var(--stn-font-weight-medium);
42
+ }
43
+
44
+ .stn-text-area:focus:not([readonly]) {
45
+ border: var(--stn-input-focus);
46
+ background-color: var(--stn-input-focus-bg, var(--stn-input-bg));
47
+ color: var(--stn-input-focus-fg, var(--stn-input-fg));
48
+ }
49
+
50
+ .stn-text-area[readonly] {
51
+ cursor: default;
52
+ }
53
+
54
+ .stn-text-area[readonly]:focus-visible {
55
+ outline: var(--stn-focus-ring-width, var(--stn-size-2)) solid var(--stn-focus-ring);
56
+ outline-offset: var(--stn-focus-ring-offset, var(--stn-size-2));
57
+ }
58
+
59
+ .stn-text-area:disabled {
60
+ cursor: not-allowed;
61
+ opacity: var(--stn-input-disabled-opacity);
62
+ }
63
+
64
+ /* ── 1. Variants ── */
65
+ .stn-text-area.outlined {
66
+ border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
67
+ background-color: var(--stn-input-bg);
68
+ }
69
+
70
+ .stn-text-area.filled {
71
+ border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-filled-border, transparent);
72
+ background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
73
+ }
74
+
75
+ .stn-text-area.filled:focus:not([readonly]) {
76
+ border: var(--stn-input-focus);
77
+ background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
78
+ color: var(--stn-input-focus-fg, var(--stn-input-fg));
79
+ }
80
+
81
+ .stn-text-area.standard {
82
+ border: none;
83
+ border-bottom: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
84
+ border-radius: var(--stn-radius-0);
85
+ background-color: transparent;
86
+ padding-inline: 0;
87
+ }
88
+
89
+ .stn-text-area.standard:focus:not([readonly]) {
90
+ border: none;
91
+ border-bottom: var(--stn-input-focus);
92
+ background-color: transparent;
93
+ color: var(--stn-input-focus-fg, var(--stn-input-fg));
94
+ }
95
+
96
+ .stn-text-area.transparent {
97
+ border: none;
98
+ background-color: transparent;
99
+ padding: 0;
100
+ }
101
+
102
+ .stn-text-area.transparent:focus:not([readonly]) {
103
+ border: none;
104
+ background-color: transparent;
105
+ }
106
+
107
+ /* ── 2. Invalid State ── */
108
+ .stn-text-area[aria-invalid='true'],
109
+ .stn-text-area.invalid {
110
+ border-color: var(--stn-feedback-error);
111
+ }
112
+
113
+ .stn-text-area.standard[aria-invalid='true'],
114
+ .stn-text-area.standard.invalid {
115
+ border-color: transparent;
116
+ border-bottom-color: var(--stn-feedback-error);
117
+ }
118
+
119
+ .stn-text-area.transparent[aria-invalid='true'],
120
+ .stn-text-area.transparent.invalid {
121
+ border-bottom: var(--stn-size-1, 1px) solid var(--stn-feedback-error);
122
+ }
123
+
124
+ .stn-text-area:is(.invalid, [aria-invalid='true']) {
125
+ --stn-input-focus: var(--stn-input-focus-width, var(--stn-size-1)) solid var(--stn-feedback-error);
126
+ --stn-input-focus-fg: var(--stn-feedback-error);
127
+ }
128
+
129
+ /* ── 3. Color Tokens ── */
130
+ .stn-text-area.success {
131
+ --stn-text-area-accent: var(--stn-feedback-success);
132
+ }
133
+
134
+ .stn-text-area.error {
135
+ --stn-text-area-accent: var(--stn-feedback-error);
136
+ }
137
+
138
+ .stn-text-area.warning {
139
+ --stn-text-area-accent: var(--stn-feedback-warning);
140
+ }
141
+
142
+ .stn-text-area.info {
143
+ --stn-text-area-accent: var(--stn-feedback-info);
144
+ }
145
+
146
+ .stn-text-area:is(.success, .error, .warning, .info) {
147
+ --stn-input-border: var(--stn-text-area-accent);
148
+ --stn-input-filled-border: var(--stn-text-area-accent);
149
+ --stn-input-focus: var(--stn-input-focus-width, var(--stn-size-1)) solid var(--stn-text-area-accent);
150
+ --stn-input-focus-fg: var(--stn-text-area-accent);
151
+ }
152
+
153
+ /* ── 4. Width Presets (GEMINI.md Rule 3) ── */
154
+ :is(.stn-text-area, .stn-text-area-wrap).w80 {
155
+ --stn-text-area-width: var(--stn-size-80, 80px);
156
+ width: var(--stn-size-80, 80px);
157
+ }
158
+
159
+ :is(.stn-text-area, .stn-text-area-wrap).w100 {
160
+ --stn-text-area-width: var(--stn-size-100, 100px);
161
+ width: var(--stn-size-100, 100px);
162
+ }
163
+
164
+ :is(.stn-text-area, .stn-text-area-wrap).w120 {
165
+ --stn-text-area-width: var(--stn-size-120, 120px);
166
+ width: var(--stn-size-120, 120px);
167
+ }
168
+
169
+ :is(.stn-text-area, .stn-text-area-wrap).w140 {
170
+ --stn-text-area-width: var(--stn-size-140, 140px);
171
+ width: var(--stn-size-140, 140px);
172
+ }
173
+
174
+ :is(.stn-text-area, .stn-text-area-wrap).w160 {
175
+ --stn-text-area-width: var(--stn-size-160, 160px);
176
+ width: var(--stn-size-160, 160px);
177
+ }
178
+
179
+ :is(.stn-text-area, .stn-text-area-wrap).w180 {
180
+ --stn-text-area-width: var(--stn-size-180, 180px);
181
+ width: var(--stn-size-180, 180px);
182
+ }
183
+
184
+ :is(.stn-text-area, .stn-text-area-wrap).w200 {
185
+ --stn-text-area-width: var(--stn-size-200, 200px);
186
+ width: var(--stn-size-200, 200px);
187
+ }
188
+
189
+ :is(.stn-text-area, .stn-text-area-wrap).full {
190
+ --stn-text-area-width: 100%;
191
+ width: 100%;
192
+ }
193
+
194
+ /* ── 5. Size Presets (GEMINI.md Rule 1) ── */
195
+ .stn-text-area.xs {
196
+ --stn-text-area-min-height: 56px;
197
+ --stn-text-area-padding-y: var(--stn-space-4);
198
+ --stn-text-area-padding-x: var(--stn-space-8);
199
+ --stn-text-area-radius: var(--stn-radius-input-sm, var(--stn-radius-4));
200
+ --stn-text-area-font-size: var(--stn-text-caption-medium-size);
201
+ --stn-text-area-line-height: var(--stn-line-height-px-18);
202
+ }
203
+
204
+ .stn-text-area.sm {
205
+ --stn-text-area-min-height: 64px;
206
+ --stn-text-area-padding-y: var(--stn-space-6);
207
+ --stn-text-area-padding-x: var(--stn-text-field-padding-x-sm, var(--stn-space-10));
208
+ --stn-text-area-radius: var(--stn-radius-input-sm, var(--stn-radius-4));
209
+ --stn-text-area-font-size: var(--stn-text-body-small-size);
210
+ --stn-text-area-line-height: var(--stn-line-height-px-20);
211
+ }
212
+
213
+ .stn-text-area.md {
214
+ --stn-text-area-min-height: 80px;
215
+ --stn-text-area-padding-y: var(--stn-space-8);
216
+ --stn-text-area-padding-x: var(--stn-text-field-padding-x-md, var(--stn-space-10));
217
+ --stn-text-area-radius: var(--stn-radius-input-md, var(--stn-radius-4));
218
+ --stn-text-area-font-size: var(--stn-text-body-small-size);
219
+ --stn-text-area-line-height: var(--stn-line-height-px-22);
220
+ }
221
+
222
+ .stn-text-area.lg {
223
+ --stn-text-area-min-height: 100px;
224
+ --stn-text-area-padding-y: var(--stn-space-10);
225
+ --stn-text-area-padding-x: var(--stn-text-field-padding-x-lg, var(--stn-space-12));
226
+ --stn-text-area-radius: var(--stn-radius-input-lg, var(--stn-radius-6));
227
+ --stn-text-area-font-size: var(--stn-text-body-medium-size);
228
+ --stn-text-area-line-height: var(--stn-line-height-px-24);
229
+ }
230
+
231
+ .stn-text-area.xl {
232
+ --stn-text-area-min-height: 120px;
233
+ --stn-text-area-padding-y: var(--stn-space-12);
234
+ --stn-text-area-padding-x: var(--stn-text-field-padding-x-xl, var(--stn-space-16));
235
+ --stn-text-area-radius: var(--stn-radius-input-xl, var(--stn-radius-16));
236
+ --stn-text-area-font-size: var(--stn-text-body-small-size);
237
+ --stn-text-area-line-height: var(--stn-line-height-px-24);
238
+ }
239
+
240
+ /* ── 6. Resize Options ── */
241
+ .stn-text-area.resize-none {
242
+ resize: none;
243
+ }
244
+
245
+ .stn-text-area.resize-vertical {
246
+ resize: vertical;
247
+ }
248
+
249
+ .stn-text-area.resize-horizontal {
250
+ resize: horizontal;
251
+ }
252
+
253
+ .stn-text-area.resize-both {
254
+ resize: both;
255
+ }
256
+
257
+ /* ── 7. Wrap & Label & Footer Layout ── */
258
+ .stn-text-area-wrap {
259
+ box-sizing: border-box;
260
+ display: inline-flex;
261
+ flex-direction: column;
262
+ align-items: stretch;
263
+ flex-shrink: 0;
264
+ width: var(--stn-text-area-width, 100%);
265
+ min-width: var(--stn-text-area-min-width, 0);
266
+ max-width: 100%;
267
+ vertical-align: top;
268
+ }
269
+
270
+ .stn-text-area-wrap .stn-text-area {
271
+ width: 100%;
272
+ min-width: 0;
273
+ max-width: 100%;
274
+ }
275
+
276
+ .stn-text-area__label {
277
+ box-sizing: border-box;
278
+ display: inline-flex;
279
+ align-items: center;
280
+ gap: var(--stn-space-4);
281
+ font-family: var(--stn-font-body, inherit);
282
+ font-size: var(--stn-text-body-small-size);
283
+ font-weight: var(--stn-font-weight-medium);
284
+ color: var(--stn-text-primary);
285
+ line-height: var(--stn-line-height-default);
286
+ white-space: nowrap;
287
+ user-select: none;
288
+ cursor: pointer;
289
+ flex-shrink: 0;
290
+ }
291
+
292
+ .stn-text-area__label-icon {
293
+ display: inline-flex;
294
+ align-items: center;
295
+ justify-content: center;
296
+ color: var(--stn-text-secondary);
297
+ }
298
+
299
+ .stn-text-area__required {
300
+ color: var(--stn-feedback-error);
301
+ font-weight: var(--stn-font-weight-bold);
302
+ line-height: var(--stn-line-height-tight);
303
+ }
304
+
305
+ /* Top Label (기본 Column 배치) */
306
+ .stn-text-area-wrap--col {
307
+ flex-direction: column;
308
+ gap: var(--stn-space-6);
309
+ }
310
+
311
+ .stn-text-area-wrap--col .stn-text-area-wrap__body {
312
+ display: inline-flex;
313
+ flex-direction: column;
314
+ width: 100%;
315
+ }
316
+
317
+ /* Left / Right Label (Row 배치: 여러 줄 입력이므로 align-items: flex-start) */
318
+ .stn-text-area-wrap--row {
319
+ flex-direction: row;
320
+ align-items: flex-start;
321
+ gap: var(--stn-space-12);
322
+ }
323
+
324
+ .stn-text-area-wrap--row .stn-text-area__label {
325
+ padding-top: var(--stn-space-8);
326
+ }
327
+
328
+ .stn-text-area-wrap--row .stn-text-area-wrap__body {
329
+ display: inline-flex;
330
+ flex-direction: column;
331
+ flex: 1 1 auto;
332
+ min-width: 0;
333
+ }
334
+
335
+ /* Footer: Helper Text (좌측) + Character Counter (우측) */
336
+ .stn-text-area__footer {
337
+ box-sizing: border-box;
338
+ display: flex;
339
+ align-items: center;
340
+ justify-content: space-between;
341
+ gap: var(--stn-space-8);
342
+ margin: var(--stn-space-4) 0 0;
343
+ padding: 0;
344
+ width: 100%;
345
+ }
346
+
347
+ .stn-text-area__helper {
348
+ box-sizing: border-box;
349
+ margin: 0;
350
+ padding: 0;
351
+ font-family: var(--stn-font-body, inherit);
352
+ font-size: var(--stn-text-caption-medium-size);
353
+ font-weight: var(--stn-font-weight-regular);
354
+ line-height: var(--stn-text-caption-medium-line-height);
355
+ color: var(--stn-text-secondary);
356
+ text-align: left;
357
+ word-break: break-word;
358
+ }
359
+
360
+ .stn-text-area__helper--error {
361
+ color: var(--stn-feedback-error);
362
+ }
363
+
364
+ .stn-text-area__count {
365
+ box-sizing: border-box;
366
+ margin: 0 0 0 auto;
367
+ padding: 0;
368
+ font-family: var(--stn-font-body, inherit);
369
+ font-size: var(--stn-text-caption-medium-size);
370
+ font-weight: var(--stn-font-weight-regular);
371
+ line-height: var(--stn-text-caption-medium-line-height);
372
+ color: var(--stn-text-secondary);
373
+ white-space: nowrap;
374
+ user-select: none;
375
+ }
@@ -18,28 +18,6 @@
18
18
  * - `.stn-tooltip.no-arrow`: 말풍선 꼬리 숨김
19
19
  */
20
20
 
21
- :root,
22
- [data-theme='dark'] {
23
- --stn-tooltip-bg-neutral: var(--stn-gray-700);
24
- --stn-tooltip-fg-neutral: var(--stn-static-white);
25
- --stn-tooltip-border-neutral: var(--stn-gray-600);
26
- --stn-tooltip-outlined-fg-neutral: var(--stn-gray-100);
27
- --stn-tooltip-shadow: var(--stn-shadow-3);
28
- --stn-tooltip-radius: var(--stn-radius-tooltip, var(--stn-radius-6));
29
- --stn-tooltip-border-width: var(--stn-size-1);
30
- --stn-tooltip-z-index: 1000;
31
- --stn-tooltip-blur: var(--stn-space-8);
32
- --stn-tooltip-outlined-bg: var(--stn-opacity-black-60);
33
- }
34
-
35
- [data-theme='light'] {
36
- --stn-tooltip-bg-neutral: var(--stn-gray-600);
37
- --stn-tooltip-fg-neutral: var(--stn-static-white);
38
- --stn-tooltip-border-neutral: var(--stn-gray-600);
39
- --stn-tooltip-outlined-fg-neutral: var(--stn-gray-600);
40
- --stn-tooltip-outlined-bg: var(--stn-opacity-white-60);
41
- }
42
-
43
21
  /* ==========================================================================
44
22
  1. Trigger Wrapper
45
23
  ========================================================================== */
@@ -57,12 +35,19 @@
57
35
  .stn-tooltip {
58
36
  --stn-tooltip-bg: var(--stn-tooltip-bg-neutral);
59
37
  --stn-tooltip-fg: var(--stn-tooltip-fg-neutral);
38
+ --stn-tooltip-shadow: var(--stn-shadow-tooltip, var(--stn-shadow-3));
39
+ --stn-tooltip-radius: var(--stn-radius-tooltip, var(--stn-radius-6));
40
+ --stn-tooltip-border-width: var(--stn-size-1);
41
+ --stn-tooltip-z-index: 1000;
42
+ --stn-tooltip-blur: var(--stn-space-8);
43
+ --stn-tooltip-offset: var(--stn-space-8);
60
44
  --stn-tooltip-font-size: var(--stn-text-caption-medium-size);
61
45
  --stn-tooltip-pad-y: var(--stn-space-4);
62
46
  --stn-tooltip-pad-x: var(--stn-space-8);
63
47
  --stn-tooltip-min-height: var(--stn-size-24);
64
48
  --stn-tooltip-arrow-size: var(--stn-size-6);
65
49
  --stn-tooltip-gap: var(--stn-space-4);
50
+ --stn-tooltip-offset: var(--stn-space-8);
66
51
 
67
52
  position: absolute;
68
53
  z-index: var(--stn-tooltip-z-index);
@@ -137,7 +122,7 @@
137
122
  /* Top (기본): 요소 위쪽, 아래쪽을 가리키는 꼬리 */
138
123
  .stn-tooltip.top,
139
124
  .stn-tooltip:not(.bottom):not(.left):not(.right) {
140
- bottom: calc(100% + var(--stn-space-6));
125
+ bottom: calc(100% + var(--stn-tooltip-offset, var(--stn-space-8)));
141
126
  left: 50%;
142
127
  transform: translateX(-50%) translateY(var(--stn-space-4));
143
128
  }
@@ -160,7 +145,7 @@
160
145
 
161
146
  /* Bottom: 요소 아래쪽, 위쪽을 가리키는 꼬리 */
162
147
  .stn-tooltip.bottom {
163
- top: calc(100% + var(--stn-space-6));
148
+ top: calc(100% + var(--stn-tooltip-offset, var(--stn-space-8)));
164
149
  left: 50%;
165
150
  transform: translateX(-50%) translateY(calc(-1 * var(--stn-space-4)));
166
151
  }
@@ -178,7 +163,7 @@
178
163
 
179
164
  /* Left: 요소 왼쪽, 오른쪽을 가리키는 꼬리 */
180
165
  .stn-tooltip.left {
181
- right: calc(100% + var(--stn-space-6));
166
+ right: calc(100% + var(--stn-tooltip-offset, var(--stn-space-8)));
182
167
  top: 50%;
183
168
  transform: translateY(-50%) translateX(var(--stn-space-4));
184
169
  }
@@ -196,7 +181,7 @@
196
181
 
197
182
  /* Right: 요소 오른쪽, 왼쪽을 가리키는 꼬리 */
198
183
  .stn-tooltip.right {
199
- left: calc(100% + var(--stn-space-6));
184
+ left: calc(100% + var(--stn-tooltip-offset, var(--stn-space-8)));
200
185
  top: 50%;
201
186
  transform: translateY(-50%) translateX(calc(-1 * var(--stn-space-4)));
202
187
  }
@@ -318,6 +318,20 @@
318
318
  /* ==========================================================================
319
319
  6. List view — 모바일/태블릿 반응형 (스크롤 & LNB/테이블 높이)
320
320
  ========================================================================== */
321
+ /* LNB 헤더 행 & 타이틀 기본 공통 규격 (펼침/접힘 모두 space-between 기본 적용) */
322
+ .stn-list-lnb__header-row {
323
+ display: flex;
324
+ align-items: center;
325
+ justify-content: space-between;
326
+ width: 100%;
327
+ }
328
+
329
+ .stn-list-lnb__header-title {
330
+ display: flex;
331
+ align-items: center;
332
+ gap: var(--stn-space-8);
333
+ }
334
+
321
335
  @media (max-width: 1279px) {
322
336
  /* 태블릿/모바일(column)에서는 본문 컨테이너가 스크롤되어 LNB -> 검색바 -> 테이블 순으로 전체 탐색 가능 */
323
337
  .stn-layer-1__body > .stn-container {
@@ -336,6 +350,17 @@
336
350
  flex-shrink: 0;
337
351
  }
338
352
 
353
+ /* 모바일(1280px 미만) 토글 버튼: 세로 아코디언 방향(위/아래)에 맞춰 90도 회전 */
354
+ .stn-list-lnb .stn-list-lnb__toggle-btn {
355
+ transform: rotate(90deg);
356
+ transition: transform 0.2s ease;
357
+ }
358
+
359
+ /* 모바일 펼침/접힘 모두 타이틀(좌측 끝)과 토글 버튼(우측 끝) 정렬 유지 */
360
+ .stn-list-lnb .stn-list-lnb__header-row {
361
+ justify-content: space-between !important;
362
+ }
363
+
339
364
  /* 모바일 접힘 시 아코디언 헤더만 표시 */
340
365
  .stn-list-lnb.is-collapsed {
341
366
  max-height: none;
@@ -56,6 +56,7 @@
56
56
  @import './components/stn-loading-skeleton.css';
57
57
  @import './components/stn-search-requirement.css';
58
58
  @import './components/stn-text-field.css';
59
+ @import './components/stn-text-area.css';
59
60
  @import './components/stn-label-prefix.css';
60
61
  @import './components/stn-segmented.css';
61
62
  @import './components/stn-toast.css';
@@ -67,6 +67,11 @@
67
67
  --stn-input-focus-fg: var(--stn-blue-300);
68
68
  --stn-input-placeholder: var(--stn-gray-600);
69
69
  --stn-label-prefix-label-bg: var(--stn-gray-800);
70
+ --stn-tooltip-bg-neutral: var(--stn-gray-700);
71
+ --stn-tooltip-fg-neutral: var(--stn-static-white);
72
+ --stn-tooltip-border-neutral: var(--stn-gray-600);
73
+ --stn-tooltip-outlined-fg-neutral: var(--stn-gray-100);
74
+ --stn-tooltip-outlined-bg: var(--stn-opacity-black-60);
70
75
  --stn-label-prefix-divider: var(--stn-gray-600);
71
76
  --stn-label-prefix-label-color: var(--stn-gray-400);
72
77
  --stn-input-disabled-opacity: 0.55;
@@ -574,6 +579,24 @@
574
579
  --stn-event-banner-wr-shadow: 0 12px 36px var(--stn-opacity-black-85), inset 0 0 12px color-mix(in srgb, var(--stn-teal-400) 12%, transparent);
575
580
  --stn-event-banner-wr-blink-rest: 0 8px 32px var(--stn-opacity-black-70), inset 0 0 12px color-mix(in srgb, var(--stn-teal-400) 12%, transparent);
576
581
  --stn-event-banner-wr-blink-peak: 0 8px 32px var(--stn-opacity-black-70), inset 0 0 42px color-mix(in srgb, var(--stn-teal-400) 65%, transparent);
582
+ --stn-status-switch-bg: var(--stn-gray-900);
583
+ --stn-status-switch-border: var(--stn-gray-700);
584
+ --stn-status-switch-color: var(--stn-gray-400);
585
+ --stn-status-switch-badge-bg: var(--stn-gray-800);
586
+ --stn-status-switch-badge-color: var(--stn-gray-400);
587
+ --stn-status-switch-thumb-bg: var(--stn-gray-600);
588
+ --stn-status-switch-checked-border: var(--stn-blue-400);
589
+ --stn-status-switch-checked-bg: color-mix(in srgb, var(--stn-blue-500) 18%, var(--stn-gray-950));
590
+ --stn-status-switch-checked-color: var(--stn-blue-200);
591
+ --stn-status-switch-checked-badge-bg: var(--stn-blue-400);
592
+ --stn-status-switch-checked-badge-color: var(--stn-static-white);
593
+ --stn-status-switch-checked-thumb-bg: var(--stn-blue-300);
594
+ --stn-status-switch-checked-thumb-shadow: 0 0 6px var(--stn-blue-400);
595
+ --stn-status-flow-step-bg: var(--stn-gray-850);
596
+ --stn-status-flow-step-border: var(--stn-gray-700);
597
+ --stn-status-flow-step-color: var(--stn-gray-200);
598
+ --stn-status-flow-connector-color: var(--stn-gray-600);
599
+ --stn-status-flow-connector-opacity: 0.6;
577
600
  }
578
601
 
579
602
  [data-theme='light'] {
@@ -638,6 +661,11 @@
638
661
  --stn-label-prefix-label-bg: var(--stn-gray-50);
639
662
  --stn-label-prefix-divider: var(--stn-gray-200);
640
663
  --stn-label-prefix-label-color: var(--stn-gray-500);
664
+ --stn-tooltip-bg-neutral: var(--stn-gray-600);
665
+ --stn-tooltip-fg-neutral: var(--stn-static-white);
666
+ --stn-tooltip-border-neutral: var(--stn-gray-600);
667
+ --stn-tooltip-outlined-fg-neutral: var(--stn-gray-600);
668
+ --stn-tooltip-outlined-bg: var(--stn-opacity-white-60);
641
669
  --stn-input-disabled-opacity: 0.55;
642
670
  --stn-input-filled-bg: var(--stn-gray-50);
643
671
  --stn-input-filled-border: transparent;
@@ -1145,4 +1173,22 @@
1145
1173
  --stn-event-banner-wr-shadow: 0 12px 32px color-mix(in srgb, var(--stn-static-black) 14%, transparent), inset 0 0 16px color-mix(in srgb, var(--stn-teal-450) 12%, transparent);
1146
1174
  --stn-event-banner-wr-blink-rest: 0 8px 32px color-mix(in srgb, var(--stn-static-black) 14%, transparent), inset 0 0 16px color-mix(in srgb, var(--stn-teal-450) 12%, transparent);
1147
1175
  --stn-event-banner-wr-blink-peak: 0 8px 32px color-mix(in srgb, var(--stn-static-black) 14%, transparent), inset 0 0 42px color-mix(in srgb, var(--stn-teal-450) 65%, transparent);
1176
+ --stn-status-switch-bg: var(--stn-gray-100);
1177
+ --stn-status-switch-border: var(--stn-gray-300);
1178
+ --stn-status-switch-color: var(--stn-gray-600);
1179
+ --stn-status-switch-badge-bg: var(--stn-gray-200);
1180
+ --stn-status-switch-badge-color: var(--stn-gray-600);
1181
+ --stn-status-switch-thumb-bg: var(--stn-gray-400);
1182
+ --stn-status-switch-checked-border: var(--stn-blue-500);
1183
+ --stn-status-switch-checked-bg: color-mix(in srgb, var(--stn-blue-500) 10%, var(--stn-static-white));
1184
+ --stn-status-switch-checked-color: var(--stn-blue-600);
1185
+ --stn-status-switch-checked-badge-bg: var(--stn-blue-500);
1186
+ --stn-status-switch-checked-badge-color: var(--stn-static-white);
1187
+ --stn-status-switch-checked-thumb-bg: var(--stn-blue-500);
1188
+ --stn-status-switch-checked-thumb-shadow: 0 0 4px color-mix(in srgb, var(--stn-blue-500) 50%, transparent);
1189
+ --stn-status-flow-step-bg: var(--stn-gray-100);
1190
+ --stn-status-flow-step-border: var(--stn-gray-300);
1191
+ --stn-status-flow-step-color: var(--stn-gray-800);
1192
+ --stn-status-flow-connector-color: var(--stn-gray-400);
1193
+ --stn-status-flow-connector-opacity: 0.7;
1148
1194
  }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-A5KLX6NX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnSystemIcons.ts"],"sourcesContent":["/**\n * Infomap Figma 스타일가이드 — 시스템 아이콘 카탈로그\n * Source: aM4VC49NEejqjOPd7DYkCr / icon component (40002193:30716)\n * Assets: styles/@assets/svg/system/{slug}.{ext}\n */\n\nimport { SYSTEM_ICON_DATA_URLS } from './stnSystemIconsData.generated'\n\nexport type StnSystemIconStyle = 'line' | 'fill' | 'other'\n\nexport type StnSystemIconExt = 'svg' | 'png'\n\n\nexport type StnSystemIconRow = {\n id: string\n name: string\n /** path under /@assets/svg/system/ without extension */\n slug: string\n label: string\n style: StnSystemIconStyle\n ext: StnSystemIconExt\n}\n\nfunction styleFromSlug(slug: string): StnSystemIconStyle {\n if (slug.startsWith('line/')) return 'line'\n if (slug.startsWith('fill/')) return 'fill'\n return 'other'\n}\n\nfunction labelFromName(name: string): string {\n return name.replace(/^icon\\/(line|fill|3d)\\//, '').replace(/^icon\\//, '')\n}\n\nconst RAW: Array<{ id: string; name: string; slug: string; ext?: StnSystemIconExt }> = [\n { id: '40002193:30717', name: 'icon/blank', slug: 'blank' },\n { id: '40002193:30721', name: 'icon/line/server_3', slug: 'line/server_3' },\n { id: '40002193:30732', name: 'icon/line/server_2', slug: 'line/server_2' },\n { id: '40002193:30740', name: 'icon/line/server_1', slug: 'line/server_1' },\n { id: '40002193:30745', name: 'icon/line/home', slug: 'line/home' },\n { id: '40002193:30749', name: 'icon/fill/ractangle_up', slug: 'fill/ractangle_up' },\n { id: '40002193:30752', name: 'icon/fill/ractangle_down', slug: 'fill/ractangle_down' },\n { id: '40002193:30755', name: 'icon/line/arrow right', slug: 'line/arrow-right' },\n { id: '40002193:30757', name: 'icon/line/arrow left', slug: 'line/arrow-left' },\n { id: '40002193:30759', name: 'icon/line/apps', slug: 'line/apps' },\n { id: '40002193:30766', name: 'icon/line/refresh', slug: 'line/refresh' },\n { id: '40002193:30770', name: 'icon/line/battery-4', slug: 'line/battery-4' },\n { id: '40002193:30777', name: 'icon/line/terminal', slug: 'line/terminal' },\n { id: '40002193:30782', name: 'icon/line/bettery_2', slug: 'line/bettery_2' },\n { id: '40002193:30787', name: 'icon/line/settings', slug: 'line/settings' },\n { id: '40002193:30791', name: 'icon/line/plus', slug: 'line/plus' },\n { id: '40002193:30795', name: 'icon/line/activity', slug: 'line/activity' },\n { id: '40002193:30798', name: 'icon/line/clipboard', slug: 'line/clipboard' },\n { id: '40002193:30806', name: 'icon/line/alert-triangle', slug: 'line/alert-triangle' },\n { id: '40002193:30811', name: 'icon/line/chart-histogram', slug: 'line/chart-histogram' },\n { id: '40002193:30815', name: 'icon/line/world', slug: 'line/world' },\n { id: '40002193:30822', name: 'icon/line/detect', slug: 'line/detect' },\n { id: '40002193:30827', name: 'icon/line/detect', slug: 'line/detect-alt' },\n { id: '40002193:30835', name: 'icon/line/package', slug: 'line/package' },\n { id: '40002193:30842', name: 'icon/line/database', slug: 'line/database' },\n { id: '40002193:30847', name: 'icon/fill/exclamation-mark', slug: 'fill/exclamation-mark' },\n { id: '40002193:30851', name: 'icon/line/vertical_line', slug: 'line/vertical_line' },\n { id: '40002193:30854', name: 'icon/line/tree_connector', slug: 'line/tree_connector' },\n { id: '40002193:30857', name: 'icon/line/tree_connector_midium', slug: 'line/tree_connector_midium' },\n { id: '40002193:30860', name: 'icon/line/bell', slug: 'line/bell' },\n { id: '40002193:30864', name: 'icon/line/bell-ring', slug: 'line/bell-ring' },\n { id: '40002193:30870', name: 'icon/line/logout', slug: 'line/logout' },\n { id: '40002193:30875', name: 'icon/line/user', slug: 'line/user' },\n { id: 'stn:line/lock', name: 'icon/line/lock', slug: 'line/lock' },\n { id: '40002193:30879', name: 'icon/line/arrows-up-down', slug: 'line/arrows-up-down' },\n { id: '40002193:30885', name: 'icon/line/search', slug: 'line/search' },\n { id: '40002193:30889', name: 'icon/line/adjustments-horizontal 1', slug: 'line/adjustments-horizontal' },\n { id: '40002193:30900', name: 'icon/line/chart-bar', slug: 'line/chart-bar' },\n { id: '40002193:30906', name: 'icon/line/chart-bar2', slug: 'line/chart-bar2' },\n { id: '40002193:30912', name: 'icon/line/chart-bar-popular', slug: 'line/chart-bar-popular' },\n { id: '40002193:30918', name: 'icon/line/layout-grid', slug: 'line/layout-grid' },\n { id: '40002193:30924', name: 'icon/line/cpu', slug: 'line/cpu' },\n { id: '40002193:30936', name: 'icon/line/arrow-narrow-up', slug: 'line/arrow-narrow-up' },\n { id: '40002193:30941', name: 'icon/line/arrow-narrow-down', slug: 'line/arrow-narrow-down' },\n { id: '40002193:30946', name: 'icon/line/chart-pie 1', slug: 'line/chart-pie' },\n { id: '40002193:30950', name: 'icon/line/pencil-minus', slug: 'line/pencil-minus' },\n { id: 'stn:line/trash', name: 'icon/line/trash', slug: 'line/trash' },\n { id: 'stn:line/dots-vertical', name: 'icon/line/dots-vertical', slug: 'line/dots-vertical' },\n { id: 'stn:line/minimize', name: 'icon/line/minimize', slug: 'line/minimize' },\n { id: 'stn:line/panel-open', name: 'icon/line/panel-open', slug: 'line/panel-open' },\n { id: 'stn:line/wifi', name: 'icon/line/wifi', slug: 'line/wifi' },\n { id: 'stn:line/check-circle', name: 'icon/line/check-circle', slug: 'line/check-circle' },\n { id: '40002193:30955', name: 'icon/line/report', slug: 'line/report' },\n { id: '40002193:30964', name: 'icon/line/file-analytics 1', slug: 'line/file-analytics' },\n { id: '40002193:30971', name: 'icon/line/restore', slug: 'line/restore' },\n { id: '40002193:30976', name: 'icon/fill/server_3', slug: 'fill/server_3' },\n { id: '40002193:30987', name: 'icon/fill/server_2', slug: 'fill/server_2' },\n { id: '40002193:30995', name: 'icon/fill/server_1', slug: 'fill/server_1' },\n { id: '40002193:31000', name: 'icon/fill/folder', slug: 'fill/folder' },\n { id: '40002193:31003', name: 'icon/fill/folder-open', slug: 'fill/folder-open' },\n { id: '40002193:31006', name: 'icon/fill/cloud-data-connection', slug: 'fill/cloud-data-connection' },\n { id: '40002193:31009', name: 'icon/fill/exclamation-circle2', slug: 'fill/exclamation-circle2' },\n { id: '40002193:31016', name: 'icon/fill/exclamation-circle', slug: 'fill/exclamation-circle' },\n { id: '40002193:31023', name: 'icon/fill/type1', slug: 'fill/type1' },\n { id: '40002193:31028', name: 'icon/fill/type2', slug: 'fill/type2' },\n { id: '40002193:31036', name: 'icon/fill/info-hexagon 1', slug: 'fill/info-hexagon' },\n { id: '40002193:31039', name: 'icon/fill/info-hexagon4', slug: 'fill/info-hexagon4' },\n { id: '40002193:31046', name: 'icon/fill/info-hexagon_none', slug: 'fill/info-hexagon_none' },\n { id: '40002193:31049', name: 'icon/fill/info-hexagon1', slug: 'fill/info-hexagon1' },\n { id: '40002193:31056', name: 'icon/fill/info-hexagon3', slug: 'fill/info-hexagon3' },\n { id: '40002193:31063', name: 'icon/fill/info-hexagon2', slug: 'fill/info-hexagon2' },\n { id: '40002193:31071', name: 'icon/fill/exclamation-circle 1', slug: 'fill/exclamation-circle-alt' },\n { id: '40002193:31074', name: 'icon/fill/alert1', slug: 'fill/alert1' },\n { id: '40002193:31082', name: 'icon/fill/circle_none', slug: 'fill/circle_none' },\n { id: '40002193:31085', name: 'icon/line/shield 1', slug: 'line/shield' },\n { id: '40002193:31089', name: 'icon/fill/brightness-up 1', slug: 'fill/brightness-up' },\n { id: '40002193:31100', name: 'icon/fill/system_status_on', slug: 'fill/system_status_on' },\n { id: '40002193:31103', name: 'icon/fill/system_status_off', slug: 'fill/system_status_off' },\n { id: '40002193:31106', name: 'icon/fill/alert4', slug: 'fill/alert4' },\n { id: '40002193:31116', name: 'icon/fill/alert3', slug: 'fill/alert3' },\n { id: '40002193:31124', name: 'icon/fill/alert2', slug: 'fill/alert2' },\n { id: '40002193:31132', name: 'icon/line/shield-check 1', slug: 'line/shield-check' },\n { id: '40002193:31136', name: 'icon/line/volume 1', slug: 'line/volume' },\n { id: '40002193:31141', name: 'icon/fill/circle-dot 1', slug: 'fill/circle-dot' },\n { id: '40002193:31146', name: 'icon/fill/moon 1', slug: 'fill/moon' },\n { id: '40002193:31149', name: 'icon/line/map 1', slug: 'line/map' },\n { id: '40002193:31155', name: 'icon/line/topology-ring-3 1', slug: 'line/topology-ring-3' },\n { id: '40002193:31166', name: 'icon/line/sun-high 1', slug: 'line/sun-high' },\n { id: '40002193:31177', name: 'icon/line/moon (1) 1', slug: 'line/moon' },\n { id: '40002193:31180', name: 'icon/line/chart', slug: 'line/chart' },\n { id: '40002193:31194', name: 'icon/line/bookmark 1', slug: 'line/bookmark' },\n { id: '40002193:31197', name: 'icon/line/calendar-week 1', slug: 'line/calendar-week' },\n { id: '40002193:31210', name: 'icon/line/player-pause (1) 1', slug: 'line/player-pause' },\n { id: '40002193:31214', name: 'icon/fill/player-skip-forward (1) 1', slug: 'fill/player-skip-forward' },\n { id: '40002193:31218', name: 'icon/line/ai-gateway 1', slug: 'line/ai-gateway' },\n { id: '40002193:31225', name: 'icon/line/database (1) 1', slug: 'line/database-alt' },\n { id: '40002193:31230', name: 'icon/fill/player-pause 1', slug: 'fill/player-pause' },\n { id: '40002193:31234', name: 'icon/fill/player-play (1) 1', slug: 'fill/player-play' },\n { id: '40002193:31237', name: 'icon/line/network 1', slug: 'line/network' },\n { id: '40002193:31247', name: 'icon/line/player-skip-forward 1', slug: 'line/player-skip-forward' },\n { id: '40002193:31251', name: 'icon/line/player-play 1', slug: 'line/player-play' },\n { id: '40002193:31254', name: 'icon/line/affiliate 1', slug: 'line/affiliate' },\n { id: '40002193:31262', name: 'icon/line/pin', slug: 'line/pin' },\n { id: '40002193:31267', name: 'icon/line/eye', slug: 'line/eye' },\n { id: '40002193:31271', name: 'icon/fill/square-rounded-letter-n 1', slug: 'fill/square-rounded-letter-n' },\n { id: '40002193:31274', name: 'icon/fill/square-rounded-letter-n 2', slug: 'fill/square-rounded-letter-n-alt' },\n { id: '40002193:31278', name: 'icon/line/clock 1', slug: 'line/clock' },\n { id: '40002193:31281', name: 'icon/line/gamma', slug: 'line/gamma' },\n { id: '40002193:31287', name: 'icon/line/brightness-2 1', slug: 'line/brightness-2' },\n { id: '40002193:31318', name: 'icon/line/x 1', slug: 'line/x' },\n { id: '40002193:31322', name: 'icon/fill/sparkles-2 (1) 1', slug: 'fill/sparkles-2' },\n { id: 'stn:fill/dashboard', name: 'icon/fill/dashboard', slug: 'fill/dashboard' },\n { id: 'stn:line/Organization', name: 'icon/line/Organization', slug: 'line/Organization' },\n { id: 'stn:line/antenna-bars-1 1', name: 'icon/line/antenna-bars-1 1', slug: 'line/antenna-bars-1 1' },\n { id: 'stn:line/arrows-diagonal 1', name: 'icon/line/arrows-diagonal 1', slug: 'line/arrows-diagonal 1' },\n { id: 'stn:line/arrows-diagonal 2', name: 'icon/line/arrows-diagonal 2', slug: 'line/arrows-diagonal 2' },\n { id: 'stn:line/arrows-maximize 1', name: 'icon/line/arrows-maximize 1', slug: 'line/arrows-maximize 1' },\n { id: 'stn:line/arrows-minimize 1', name: 'icon/line/arrows-minimize 1', slug: 'line/arrows-minimize 1' },\n { id: 'stn:line/brand-redhat 1', name: 'icon/line/brand-redhat 1', slug: 'line/brand-redhat 1' },\n { id: 'stn:line/brand-windows 1', name: 'icon/line/brand-windows 1', slug: 'line/brand-windows 1' },\n { id: 'stn:line/etc', name: 'icon/line/etc', slug: 'line/etc' },\n { id: 'stn:line/exclamation-circle 6', name: 'icon/line/exclamation-circle 6', slug: 'line/exclamation-circle 6' },\n { id: 'stn:line/input-check-mark', name: 'icon/line/input-check-mark', slug: 'line/input-check-mark' },\n { id: 'stn:line/minus 2', name: 'icon/line/minus 2', slug: 'line/minus 2' },\n { id: 'stn:line/refresh 1', name: 'icon/line/refresh 1', slug: 'line/refresh 1' },\n { id: 'stn:line/rotate-clockwise 1', name: 'icon/line/rotate-clockwise 1', slug: 'line/rotate-clockwise 1' },\n { id: 'stn:line/chevron-down', name: 'icon/line/chevron-down', slug: 'line/chevron-down' },\n { id: 'stn:line/chevron-up', name: 'icon/line/chevron-up', slug: 'line/chevron-up' },\n { id: 'stn:fill/danger', name: 'icon/fill/danger', slug: 'fill/danger' },\n { id: 'stn:fill/detect-knob', name: 'icon/fill/detect-knob', slug: 'fill/detect-knob' },\n { id: 'stn:fill/realtime', name: 'icon/fill/realtime', slug: 'fill/realtime' },\n { id: 'stn:fill/report', name: 'icon/fill/report', slug: 'fill/report' },\n { id: 'stn:fill/server_2_tree_light', name: 'icon/fill/server_2_tree_light', slug: 'fill/server_2_tree_light' },\n { id: 'stn:fill/trend', name: 'icon/fill/trend', slug: 'fill/trend' },\n { id: 'stn:fill/under_alarm', name: 'icon/fill/under_alarm', slug: 'fill/under_alarm' },\n { id: 'stn:fill/under_exit', name: 'icon/fill/under_exit', slug: 'fill/under_exit' },\n { id: 'stn:fill/under_setting', name: 'icon/fill/under_setting', slug: 'fill/under_setting' },\n { id: 'stn:line/help-circle', name: 'icon/line/help-circle', slug: 'line/help-circle' },\n { id: 'stn:line/alert-circle', name: 'icon/line/alert-circle', slug: 'line/alert-circle' },\n { id: 'stn:line/chevron-right', name: 'icon/line/chevron-right', slug: 'line/chevron-right' },\n { id: 'stn:line/star', name: 'icon/line/star', slug: 'line/star' },\n { id: 'stn:line/external-link', name: 'icon/line/external-link', slug: 'line/external-link' },\n { id: 'stn:line/check', name: 'icon/line/check', slug: 'line/check' },\n { id: 'stn:line/eye', name: 'icon/line/eye', slug: 'line/eye' },\n { id: 'stn:line/eye-off', name: 'icon/line/eye-off', slug: 'line/eye-off' },\n]\n\nexport const STN_SYSTEM_ICON_INTRO =\n '시스템 아이콘은 화면에서 주요 기능과 정보를 직관적으로 전달하여 사용자 경험의 일관성을 유지합니다. Figma Infomap 스타일가이드 icon component 세트입니다. npm 패키지는 SVG를 번들하며, 문서 사이트는 /@assets/svg/system/ 정적 경로도 사용합니다.'\n\nexport const STN_SYSTEM_ICON_ROWS: StnSystemIconRow[] = RAW.map((row) => ({\n ...row,\n ext: row.ext ?? 'svg',\n label: labelFromName(row.name),\n style: styleFromSlug(row.slug),\n}))\n\n/** 문서·정적 HTML용 사이트 루트 경로 */\nexport function systemIconPublicPath(slug: string, ext: StnSystemIconExt = 'svg'): string {\n return `/@assets/svg/system/${slug}.${ext}`\n}\n\nfunction normalizeIconSlug(name: string): string {\n return name\n .replace(/^icon\\//, '')\n .replace(/^\\/?(@assets\\/svg\\/system\\/|svg\\/system\\/)/, '')\n .replace(/\\.(svg|png)$/, '')\n}\n\n/**\n * 런타임 src — 기본적으로 번들된 Base64 Data URL을 반환하며, 없을 경우 정적 경로로 폴백\n */\nexport function systemIconSrc(slug: string, ext: StnSystemIconExt = 'svg'): string {\n const norm = normalizeIconSlug(slug)\n return SYSTEM_ICON_DATA_URLS[norm] ?? SYSTEM_ICON_DATA_URLS[slug] ?? systemIconPublicPath(slug, ext)\n}\n\nconst SYSTEM_ICON_BY_SLUG = new Map(STN_SYSTEM_ICON_ROWS.map((row) => [row.slug, row]))\n\n/**\n * Iconography slug → 런타임 src (Base64 Data URL 또는 폴백 경로).\n * - `line/home` · `fill/folder` · `blank` …\n */\nexport function resolveSystemIconSrcFromName(name: string): string | null {\n const norm = normalizeIconSlug(name)\n if (SYSTEM_ICON_DATA_URLS[norm]) return SYSTEM_ICON_DATA_URLS[norm]\n if (SYSTEM_ICON_DATA_URLS[name]) return SYSTEM_ICON_DATA_URLS[name]\n\n const row = SYSTEM_ICON_BY_SLUG.get(name) || SYSTEM_ICON_BY_SLUG.get(norm)\n if (row) return systemIconSrc(row.slug, row.ext)\n if (\n norm.startsWith('line/') ||\n norm.startsWith('fill/')\n ) {\n return systemIconSrc(norm, 'svg')\n }\n return null\n}\n\nexport { SYSTEM_ICON_DATA_URLS }\n"],"mappings":"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","names":[]}