@stn-uiux/pub-ui 0.1.58 → 0.1.59

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 (81) hide show
  1. package/dist/{chunk-7ASY5YJ6.js → chunk-36BAGMYT.js} +3 -3
  2. package/dist/chunk-36BAGMYT.js.map +1 -0
  3. package/dist/chunk-A5KLX6NX.js +1 -0
  4. package/dist/{chunk-UPXSNRIJ.js → chunk-AOS3IX4T.js} +2 -2
  5. package/dist/chunk-AOS3IX4T.js.map +1 -0
  6. package/dist/{chunk-XNGYRPZI.js → chunk-CHJATVOT.js} +4 -4
  7. package/dist/{chunk-XNGYRPZI.js.map → chunk-CHJATVOT.js.map} +1 -1
  8. package/dist/{chunk-TDLGKV4C.js → chunk-EQTZA7I2.js} +1 -14
  9. package/dist/chunk-EQTZA7I2.js.map +1 -0
  10. package/dist/{chunk-EDXSK54U.js → chunk-H4ZJQ5YW.js} +2 -2
  11. package/dist/{chunk-EQVFEZEQ.js → chunk-JPILTFLI.js} +5 -5
  12. package/dist/chunk-JPILTFLI.js.map +1 -0
  13. package/dist/{chunk-J46EPVSY.js → chunk-SKZOEF3H.js} +2 -2
  14. package/dist/chunk-SQJPE6HH.js +12 -0
  15. package/dist/chunk-SQJPE6HH.js.map +1 -0
  16. package/dist/{chunk-PVF77NHZ.js → chunk-XEG4WDUD.js} +4 -17
  17. package/dist/chunk-XEG4WDUD.js.map +1 -0
  18. package/dist/cli.js +9 -9
  19. package/dist/data/index.d.ts +1 -0
  20. package/dist/data/index.js +23 -19
  21. package/dist/data/stnBreadcrumb.js +3 -3
  22. package/dist/data/stnHeader.d.ts +2 -2
  23. package/dist/data/stnHeader.js +3 -3
  24. package/dist/data/stnLayout.d.ts +1 -1
  25. package/dist/data/stnLayout.js +1 -1
  26. package/dist/data/stnScroll.d.ts +1 -1
  27. package/dist/data/stnScroll.js +1 -1
  28. package/dist/data/stnSideNavItem.js +3 -3
  29. package/dist/data/stnStatus.d.ts +11 -0
  30. package/dist/data/stnStatus.js +7 -0
  31. package/dist/data/stnStatus.js.map +1 -0
  32. package/dist/data/stnSystemIcons.d.ts +1 -1
  33. package/dist/data/stnSystemIcons.js +2 -2
  34. package/dist/data/stnSystemIconsData.generated.js +1 -1
  35. package/dist/data/stnTree.d.ts +1 -1
  36. package/dist/data/stnTree.js +1 -1
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.js +23 -19
  39. package/package.json +1 -1
  40. package/styles/components/stn-btn.css +9 -0
  41. package/styles/components/stn-dropdown.css +11 -4
  42. package/styles/components/stn-label-prefix.css +37 -0
  43. package/styles/components/stn-pagination.css +113 -5
  44. package/styles/components/stn-scroll.css +51 -66
  45. package/styles/components/stn-segmented.css +3 -1
  46. package/styles/components/stn-status.css +853 -0
  47. package/styles/components/stn-table.css +32 -5
  48. package/styles/components/stn-text-field.css +30 -35
  49. package/styles/layouts/stn-container.css +9 -0
  50. package/styles/layouts/stn-layer1-content.css +105 -0
  51. package/styles/patterns/stn-alert-center.css +29 -4
  52. package/styles/patterns/stn-header.css +7 -145
  53. package/styles/patterns/stn-section-side.css +64 -0
  54. package/styles/patterns/stn-tree.css +73 -39
  55. package/styles/style-pub.css +1 -1
  56. package/styles/tokens/stn-breakpoint.css +12 -0
  57. package/styles/tokens/stn-colors-semantic.css +6 -6
  58. package/styles/tokens/stn-radius-semantic.css +1 -1
  59. package/dist/chunk-7ASY5YJ6.js.map +0 -1
  60. package/dist/chunk-EQVFEZEQ.js.map +0 -1
  61. package/dist/chunk-LHV26PEP.js +0 -1
  62. package/dist/chunk-PVF77NHZ.js.map +0 -1
  63. package/dist/chunk-TDLGKV4C.js.map +0 -1
  64. package/dist/chunk-UPXSNRIJ.js.map +0 -1
  65. package/styles/@assets/svg/system/3d/print.png +0 -0
  66. package/styles/@assets/svg/system/3d/print_1.png +0 -0
  67. package/styles/@assets/svg/system/3d/server1.png +0 -0
  68. package/styles/@assets/svg/system/3d/server1_1.png +0 -0
  69. package/styles/@assets/svg/system/3d/server2.png +0 -0
  70. package/styles/@assets/svg/system/3d/server2_1.png +0 -0
  71. package/styles/@assets/svg/system/3d/signal.png +0 -0
  72. package/styles/@assets/svg/system/3d/signal_1.png +0 -0
  73. package/styles/@assets/svg/system/3d/wifi.png +0 -0
  74. package/styles/@assets/svg/system/3d/wifi_1.png +0 -0
  75. package/styles/@assets/svg/system/ai_agent.png +0 -0
  76. package/styles/@assets/svg/system/line/input.svg +0 -3
  77. package/styles/@assets/svg/system/line/radio.svg +0 -3
  78. package/styles/components/stn-severity-badge.css +0 -227
  79. /package/dist/{chunk-LHV26PEP.js.map → chunk-A5KLX6NX.js.map} +0 -0
  80. /package/dist/{chunk-EDXSK54U.js.map → chunk-H4ZJQ5YW.js.map} +0 -0
  81. /package/dist/{chunk-J46EPVSY.js.map → chunk-SKZOEF3H.js.map} +0 -0
@@ -35,8 +35,11 @@
35
35
  min-height: 24px;
36
36
  width: 100%;
37
37
  border-radius: var(--stn-radius-4, 4px);
38
+ border: 1px solid transparent;
39
+ box-sizing: border-box;
38
40
  cursor: pointer;
39
41
  user-select: none;
42
+ transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
40
43
  }
41
44
 
42
45
  .stn-tree__row:focus-visible {
@@ -60,7 +63,8 @@
60
63
  .stn-tree__row.is-selected.is-hover,
61
64
  .stn-tree__row.is-selected:active,
62
65
  .stn-tree__row.is-selected.is-pressed {
63
- background: var(--stn-tree-selected);
66
+ background: color-mix(in srgb, var(--stn-primary) 10%, transparent);
67
+ border-color: var(--stn-nav-menu-active-border);
64
68
  }
65
69
 
66
70
  .stn-tree__cell {
@@ -144,7 +148,6 @@
144
148
  display: block;
145
149
  width: 16px;
146
150
  height: 16px;
147
- background-color: var(--stn-tree-icon-default);
148
151
  mask-position: center;
149
152
  mask-size: contain;
150
153
  mask-repeat: no-repeat;
@@ -196,6 +199,7 @@
196
199
  }
197
200
 
198
201
  .stn-tree__label {
202
+ flex: 1 1 auto;
199
203
  min-width: 0;
200
204
  padding: 0 var(--stn-spacing-tree-label-pad-inline);
201
205
  overflow: hidden;
@@ -248,36 +252,36 @@
248
252
  color: var(--stn-tree-label-folder-nested);
249
253
  }
250
254
 
251
- /* ── 가이드 라인 숨김 수식어 (--no-guides) ──────────────────
255
+ /* ── 가이드 라인 숨김 수식어 (.no-guides) ─────────────────────
252
256
  * 인덴트 공간은 유지하고 연결선(connector · vertical) 글리프만 숨깁니다.
253
- * 사용법: <StnTree guides={false} /> 또는 <StnTree className="stn-tree--no-guides" />
257
+ * 사용법: <StnTree guides={false} /> 또는 <StnTree className="no-guides" />
254
258
  * ──────────────────────────────────────────────────────── */
255
- .stn-tree--no-guides .stn-tree__guide-glyph,
256
- .stn-tree--no-guides .stn-tree__cell--guide .stn-tree__guide-glyph {
259
+ .stn-tree.no-guides .stn-tree__guide-glyph,
260
+ .stn-tree.no-guides .stn-tree__cell--guide .stn-tree__guide-glyph {
257
261
  display: none !important;
258
262
  }
259
263
 
260
- /* ── 너비 규격 수식어 (Tree 권장 표준 규격: w160~w240, full) ──
261
- * width prop → .stn-tree--{w160|w180|w200|w220|w240|full}
264
+ /* ── 너비 규격 수식어 (Tree 권장 표준 규격: w80~w240, full) ──
265
+ * STN 표준 규격: .w80, .w100, .w120, .w140, .w160, .w180, .w200, .w220, .w240, .full
262
266
  * ──────────────────────────────────────────────────────── */
263
- .stn-tree--w80 { width: var(--stn-size-80, 80px); }
264
- .stn-tree--w100 { width: var(--stn-size-100, 100px); }
265
- .stn-tree--w120 { width: var(--stn-size-120, 120px); }
266
- .stn-tree--w140 { width: var(--stn-size-140, 140px); }
267
- .stn-tree--w160 { width: var(--stn-size-160, 160px); }
268
- .stn-tree--w180 { width: var(--stn-size-180, 180px); }
269
- .stn-tree--w200 { width: var(--stn-size-200, 200px); }
270
- .stn-tree--w220 { width: var(--stn-size-220, 220px); }
271
- .stn-tree--w240 { width: var(--stn-size-240, 240px); }
272
- .stn-tree--full { width: 100%; }
267
+ .stn-tree.w80 { width: var(--stn-size-80, 80px); }
268
+ .stn-tree.w100 { width: var(--stn-size-100, 100px); }
269
+ .stn-tree.w120 { width: var(--stn-size-120, 120px); }
270
+ .stn-tree.w140 { width: var(--stn-size-140, 140px); }
271
+ .stn-tree.w160 { width: var(--stn-size-160, 160px); }
272
+ .stn-tree.w180 { width: var(--stn-size-180, 180px); }
273
+ .stn-tree.w200 { width: var(--stn-size-200, 200px); }
274
+ .stn-tree.w220 { width: var(--stn-size-220, 220px); }
275
+ .stn-tree.w240 { width: var(--stn-size-240, 240px); }
276
+ .stn-tree.full { width: 100%; }
273
277
 
274
278
  /* ── 선택/호버 테두리 곡률 수식어 (Border Radius) ────────────
275
- * radius prop → .stn-tree--radius-{none|sm|md|full}
279
+ * radius prop → .radius-none, .radius-sm, .radius-md, .radius-full
276
280
  * ──────────────────────────────────────────────────────── */
277
- .stn-tree--radius-none .stn-tree__row { border-radius: var(--stn-radius-0, 0px); }
278
- .stn-tree--radius-sm .stn-tree__row { border-radius: var(--stn-radius-4, 4px); }
279
- .stn-tree--radius-md .stn-tree__row { border-radius: var(--stn-radius-8, 8px); }
280
- .stn-tree--radius-full .stn-tree__row { border-radius: var(--stn-radius-circle, 9999px); }
281
+ .stn-tree.radius-none .stn-tree__row { border-radius: var(--stn-radius-0, 0px); }
282
+ .stn-tree.radius-sm .stn-tree__row { border-radius: var(--stn-radius-4, 4px); }
283
+ .stn-tree.radius-md .stn-tree__row { border-radius: var(--stn-radius-8, 8px); }
284
+ .stn-tree.radius-full .stn-tree__row { border-radius: var(--stn-radius-circle, 9999px); }
281
285
 
282
286
  /* ── 가시성(눈) 토글 버튼 및 숨김 상태 ──────────────────────
283
287
  * showVisibilityToggle={true} 일 때 행 우측 끝에 표시됩니다.
@@ -331,53 +335,83 @@
331
335
  opacity: 0.38;
332
336
  }
333
337
 
338
+ /* ── 카운트 표시 (Node Count) ──────────────────────────────
339
+ * count prop → 노드 우측에 표시되는 개수 숫자
340
+ * ──────────────────────────────────────────────────────── */
341
+ .stn-tree__count {
342
+ display: inline-flex;
343
+ align-items: center;
344
+ justify-content: center;
345
+ font-family: var(--stn-font-number, var(--stn-font-body));
346
+ font-size: var(--stn-font-size-11, 11px);
347
+ font-weight: var(--stn-font-weight-medium, 500);
348
+ line-height: 1;
349
+ color: var(--stn-text-tertiary, var(--stn-gray-400));
350
+ margin-left: auto;
351
+ margin-right: var(--stn-space-6, 6px);
352
+ flex-shrink: 0;
353
+ }
354
+
355
+ .stn-tree__count + .stn-tree__visibility-btn {
356
+ margin-left: 0;
357
+ }
358
+
359
+ .stn-tree__icon--custom .stn-icon {
360
+ display: flex;
361
+ align-items: center;
362
+ justify-content: center;
363
+ }
334
364
 
335
365
  /* ── 행 높이 크기 수식어 (Row Size) ─────────────────────────
336
- * size prop → .stn-tree--{xs|md|lg|xl} 수식어로 자동 적용.
337
- * 기본값: sm (24px) — 수식어 없음.
366
+ * STN 표준 규격: .xs · .sm · .md · .lg · .xl
367
+ * (기본값: sm 24px)
338
368
  *
339
369
  * Guide cell: align-self:stretch + guide-glyph height:100% 로
340
370
  * 행이 높아져도 vertical 연결선이 끊기지 않게 유지합니다.
341
371
  * ──────────────────────────────────────────────────────── */
342
372
 
343
373
  /* xs — 20px: 초밀집 사이드바 목록 */
344
- .stn-tree--xs .stn-tree__row { min-height: 20px; }
345
- .stn-tree--xs .stn-tree__cell { height: 20px; }
374
+ .stn-tree.xs .stn-tree__row { min-height: 20px; }
375
+ .stn-tree.xs .stn-tree__cell { height: 20px; }
376
+
377
+ /* sm — 24px: 기본 콤팩트 */
378
+ .stn-tree.sm .stn-tree__row { min-height: 24px; }
379
+ .stn-tree.sm .stn-tree__cell { height: 24px; }
346
380
 
347
381
  /* md — 32px: comfortable */
348
- .stn-tree--md .stn-tree__row { min-height: 32px; }
349
- .stn-tree--md .stn-tree__cell { height: 32px; }
350
- .stn-tree--md .stn-tree__cell--guide {
382
+ .stn-tree.md .stn-tree__row { min-height: 32px; }
383
+ .stn-tree.md .stn-tree__cell { height: 32px; }
384
+ .stn-tree.md .stn-tree__cell--guide {
351
385
  align-self: stretch;
352
386
  height: auto;
353
387
  }
354
- .stn-tree--md .stn-tree__cell--guide .stn-tree__guide-glyph {
388
+ .stn-tree.md .stn-tree__cell--guide .stn-tree__guide-glyph {
355
389
  height: 100%;
356
390
  mask-size: 100% 100%;
357
391
  -webkit-mask-size: 100% 100%;
358
392
  }
359
393
 
360
394
  /* lg — 40px: spacious */
361
- .stn-tree--lg .stn-tree__row { min-height: 40px; }
362
- .stn-tree--lg .stn-tree__cell { height: 40px; }
363
- .stn-tree--lg .stn-tree__cell--guide {
395
+ .stn-tree.lg .stn-tree__row { min-height: 40px; }
396
+ .stn-tree.lg .stn-tree__cell { height: 40px; }
397
+ .stn-tree.lg .stn-tree__cell--guide {
364
398
  align-self: stretch;
365
399
  height: auto;
366
400
  }
367
- .stn-tree--lg .stn-tree__cell--guide .stn-tree__guide-glyph {
401
+ .stn-tree.lg .stn-tree__cell--guide .stn-tree__guide-glyph {
368
402
  height: 100%;
369
403
  mask-size: 100% 100%;
370
404
  -webkit-mask-size: 100% 100%;
371
405
  }
372
406
 
373
407
  /* xl — 48px: extra spacious */
374
- .stn-tree--xl .stn-tree__row { min-height: 48px; }
375
- .stn-tree--xl .stn-tree__cell { height: 48px; }
376
- .stn-tree--xl .stn-tree__cell--guide {
408
+ .stn-tree.xl .stn-tree__row { min-height: 48px; }
409
+ .stn-tree.xl .stn-tree__cell { height: 48px; }
410
+ .stn-tree.xl .stn-tree__cell--guide {
377
411
  align-self: stretch;
378
412
  height: auto;
379
413
  }
380
- .stn-tree--xl .stn-tree__cell--guide .stn-tree__guide-glyph {
414
+ .stn-tree.xl .stn-tree__cell--guide .stn-tree__guide-glyph {
381
415
  height: 100%;
382
416
  mask-size: 100% 100%;
383
417
  -webkit-mask-size: 100% 100%;
@@ -42,7 +42,6 @@
42
42
  @import './components/stn-chip.css';
43
43
  @import './components/stn-breadcrumb.css';
44
44
  @import './components/stn-badge.css';
45
- @import './components/stn-severity-badge.css';
46
45
  @import './components/stn-side-nav.css';
47
46
  @import './components/stn-header-title.css';
48
47
  @import './components/stn-popup.css';
@@ -69,6 +68,7 @@
69
68
  @import './components/stn-icon.css';
70
69
  @import './components/stn-card.css';
71
70
  @import './components/stn-topology.css';
71
+ @import './components/stn-status.css';
72
72
 
73
73
  /* --- 5. Patterns (Composite UI Recipes) --- */
74
74
  @import './patterns/stn-section-side.css';
@@ -15,4 +15,16 @@
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);
18
30
  }
@@ -135,16 +135,16 @@
135
135
  --stn-table-pill-shadow: 1px 1px 4px color-mix(in srgb, var(--stn-static-black) 10%, transparent);
136
136
  --stn-table-row-hover: var(--stn-gray-900);
137
137
  --stn-table-td-fg: var(--stn-gray-50);
138
- --stn-table-th-bg: var(--stn-gray-750);
138
+ --stn-table-th-bg: var(--stn-opacity-white-5);
139
139
  --stn-table-th-fg: var(--stn-gray-350);
140
140
  --stn-table-th-radius: 8px;
141
- --stn-pagination-active-bg: color-mix(in srgb, var(--stn-static-white) 5%, transparent);
141
+ --stn-pagination-active-bg: var(--stn-opacity-white-10);
142
142
  --stn-pagination-active-color: var(--stn-gray-50);
143
143
  --stn-pagination-color: var(--stn-gray-50);
144
144
  --stn-pagination-font-size: var(--stn-font-size-13);
145
145
  --stn-pagination-font-weight: var(--stn-font-weight-regular, 400);
146
146
  --stn-search-requirement-bg: transparent;
147
- --stn-search-requirement-border: var(--stn-gray-700);
147
+ --stn-search-requirement-border: var(--stn-gray-750);
148
148
  --stn-search-requirement-export-bg: var(--stn-gray-800);
149
149
  --stn-search-requirement-label: var(--stn-gray-100);
150
150
  --stn-search-requirement-shadow: var(--stn-shadow-1);
@@ -704,11 +704,11 @@
704
704
  --stn-table-pill-shadow: 1px 1px 2px color-mix(in srgb, var(--stn-static-black) 10%, transparent);
705
705
  --stn-table-row-hover: var(--stn-gray-25);
706
706
  --stn-table-td-fg: var(--stn-gray-750);
707
- --stn-table-th-bg: var(--stn-gray-50);
707
+ --stn-table-th-bg: var(--stn-opacity-black-5);
708
708
  --stn-table-th-fg: var(--stn-gray-700);
709
709
  --stn-table-th-radius: 4px;
710
- --stn-pagination-active-bg: var(--stn-gray-50);
711
- --stn-pagination-active-color: var(--stn-gray-700);
710
+ --stn-pagination-active-bg: var(--stn-opacity-black-5);
711
+ --stn-pagination-active-color: var(--stn-gray-900);
712
712
  --stn-pagination-color: var(--stn-gray-700);
713
713
  --stn-pagination-font-size: var(--stn-font-size-14);
714
714
  --stn-pagination-font-weight: var(--stn-font-weight-medium, 500);
@@ -46,7 +46,7 @@
46
46
  --stn-radius-chip-pill: var(--stn-radius-circle);
47
47
  --stn-radius-checkbox: var(--stn-radius-3);
48
48
  --stn-pagination-radius-active: var(--stn-radius-circle);
49
- --stn-pagination-radius-idle: var(--stn-radius-3);
49
+ --stn-pagination-radius-idle: var(--stn-radius-circle);
50
50
  --stn-switch-radius: var(--stn-radius-circle);
51
51
  --stn-progress-radius: var(--stn-radius-circle);
52
52
  --stn-progress-radius-square: var(--stn-radius-0);
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnLayout.ts"],"sourcesContent":["/**\n * Pub page layout — `.stn-wrap` · `.stn-container` · `.stn-content-area` · 대시보드 region\n * @see layout.css · StnLayerShell (@stn-uiux/pub-ui-react)\n */\n\nexport const STN_LAYOUT_INTRO = ''\n\n/** 라이브 예제 탭 — shell 종류 + 대표 화면 레시피 */\nexport const STN_LAYOUT_PLAYGROUND_TABS: readonly {\n id: 'list' | 'dashboard' | 'alert-center'\n label: string\n screen: string\n shellProps: string\n assemble: string\n}[] = [\n {\n id: 'list',\n label: '리스트·상세',\n screen: 'interface_list.html · syslog_status.html',\n shellProps: \"contentModifiers={['has_lnb', 'has_sch']}\",\n assemble: 'ListPageScaffold shell=\"layer\" — gnb · header · lnb · search · table',\n },\n {\n id: 'dashboard',\n label: '맵·대시보드',\n screen: 'basic/map.html · dashboard_map …',\n shellProps: \"bodyWrapper='none'\",\n assemble: 'DashboardPageScaffold · MapPlaceholder + dashboard_right',\n },\n {\n id: 'alert-center',\n label: '알림센터',\n screen: 'basic/alert_center.html',\n shellProps: \"bodyWrapper='none' · network_topology_header · GNB 알림패널\",\n assemble: 'AlertCenterPageScaffold (맵 placeholder + 우측 4위젯)',\n },\n]\n\nexport const STN_LAYOUT_LIST_VIEW_INTRO =\n 'List view는 배경 · Side Navigation·페이지 헤더 · 트리 LNB · 검색 · 표로 구성됩니다. `ListPageScaffold`에 gnb · header · lnb · search · children(표) 슬롯만 넘기면 됩니다. Playground에서 옵션을 고른 뒤 생성된 React/HTML 코드를 복사하세요.'\n\n/** 라이브러리 내부 조립 참고 — 제품 화면은 `STN_LAYOUT_LIST_VIEW_USAGE`(`ListPageScaffold`)만 사용 */\nexport const STN_LAYOUT_LIST_VIEW_BARE_USAGE = `import {\n StnLayerShell,\n StnListViewLayout,\n StnSideNavigation,\n StnHeader,\n StnSearchRequirementBar,\n StnSectionSide,\n StnTable,\n} from '@stn-uiux/pub-ui-react'\n\n/** StnLayerShell 안 — L1 listview 그리드만 (이중 L0/L2 없음) */\nexport function InterfaceListPage() {\n return (\n <StnLayerShell\n gnb={<StnSideNavigation collapsed />}\n header={<StnHeader variant=\"page\" />}\n contentModifiers={['has_lnb', 'has_sch']}\n lnbSide=\"left\"\n >\n <StnListViewLayout\n bare\n sidebar={<StnSectionSide>{/* StnTree */}</StnSectionSide>}\n search={\n <StnSearchRequirementBar>{/* Fields · SearchButton */}</StnSearchRequirementBar>\n }\n >\n <StnTable summary=\"목록\" />\n </StnListViewLayout>\n </StnLayerShell>\n )\n}`\n\n/** List view 문서 탭 */\nexport type StnLayoutListLayerTabId = 'live' | 'l0' | 'l1' | 'l2'\n\nexport const STN_LAYOUT_LIST_LAYER_TABS: {\n id: StnLayoutListLayerTabId\n label: string\n}[] = [\n { id: 'live', label: '전체' },\n { id: 'l0', label: 'L0 Background' },\n { id: 'l1', label: 'L1 Main UI' },\n { id: 'l2', label: 'L2 Modal' },\n]\n\nexport const STN_LAYOUT_LIST_VIEW_USAGE = `import {\n ListPageScaffold,\n StnHeader,\n StnSideNavigation,\n StnSearchRequirementBar,\n StnTable,\n StnPagination,\n StnButton,\n} from '@stn-uiux/pub-ui-react'\n\nexport function InterfaceListPage() {\n return (\n <ListPageScaffold\n shell=\"layer\"\n lnbSide=\"left\"\n gnb={<StnSideNavigation />}\n header={<StnHeader variant=\"page\" />}\n contentModifiers={['has_lnb', 'has_sch']}\n search={\n <StnSearchRequirementBar>{/* Fields · SearchButton */}</StnSearchRequirementBar>\n }\n >\n <StnTable\n summary=\"총 128개 (1 to 20)\"\n footerCenter={<StnPagination page={1} count={8} />}\n footerRight={\n <>\n <StnButton size=\"M\">등록</StnButton>\n <StnButton size=\"M\" variant=\"ghost\">수정</StnButton>\n </>\n }\n >\n <StnTable.Grid>{/* … */}</StnTable.Grid>\n </StnTable>\n </ListPageScaffold>\n )\n}`\n\nexport const STN_LAYOUT_MAP_DASHBOARD_INTRO =\n '대시보드는 L0 배경 · L1(header 크롬 + content 본문 단 하나) · L2 모달입니다. 본문은 `layer1` 슬롯이 아니라 `left`/`right`/`children`으로 조립합니다. `DashboardPageScaffold` (type=\"map\" | \"topology\" | \"widget-grid\").'\n\n/** Map / Dashboard 문서 탭 — List view와 동일 층 모델 */\nexport type StnLayoutMapLayerTabId = StnLayoutListLayerTabId\n\nexport const STN_LAYOUT_MAP_LAYER_TABS: {\n id: StnLayoutMapLayerTabId\n label: string\n}[] = [\n { id: 'live', label: '전체' },\n { id: 'l0', label: 'L0 Background' },\n { id: 'l1', label: 'L1 Main UI' },\n { id: 'l2', label: 'L2 Modal' },\n]\n\nexport const STN_LAYOUT_MAP_DASHBOARD_USAGE = `import { DashboardPageScaffold, StnLayer0Background, StnSideNavigation, StnHeader } from '@stn-uiux/pub-ui-react'\n\nexport function TopologyMapPage() {\n return (\n <DashboardPageScaffold\n type=\"map\"\n shell=\"layer\"\n gnbSide=\"left\"\n layer0={<StnLayer0Background variant=\"map-light\" />}\n gnb={<StnSideNavigation collapsed />}\n header={<StnHeader variant=\"dashboard\" />}\n />\n )\n}`\n\nexport const STN_LAYOUT_MAP_DASHBOARD_HEADER_USAGE = `import {\n DashboardPageScaffold,\n StnHeader,\n StnSideNavigation,\n} from '@stn-uiux/pub-ui-react'\n\nexport function TopologyMapPage() {\n return (\n <DashboardPageScaffold\n type=\"topology\"\n shell=\"layer\"\n gnb={<StnSideNavigation collapsed />}\n header={<StnHeader variant=\"widget\" />}\n mapMessage=\"토폴로지 맵\"\n />\n )\n}`\n\n/** 경우의 수 — 무엇을 쓸지 */\nexport const STN_LAYOUT_WHEN_TO_USE: readonly {\n situation: string\n use: string\n export: string\n}[] = [\n {\n situation: '표준 3단계 층위 기반 페이지 구성',\n use: 'StnLayerShell — L0 Background · L1 Main UI · L2 Modal',\n export: 'StnLayerShell · lnbSide left|right',\n },\n {\n situation: '구역 라벨만 빠르게 (lnb, search, 맵 빈칸)',\n use: 'Shell + StnPageScaffold.Region / MapPlaceholder',\n export: 'StnPageScaffold.*',\n },\n {\n situation: '대표 HTML 한 장을 1단계로 (interface_list, alert_center)',\n use: '화면별 레시피 (내부에서 Shell 이미 포함)',\n export: 'ListPageScaffold · DashboardPageScaffold · AlertCenterPageScaffold',\n },\n {\n situation: 'L3 팝업 본문 자리만 표시',\n use: 'StnLayer + StnPageScaffold.Layer',\n export: 'StnPageScaffold.Layer',\n },\n {\n situation: '위젯·테이블 본문이 API 로딩 중',\n use: 'Components — Loading skeleton (Layout 아님)',\n export: 'StnLoadingSkeleton',\n },\n]\n\nexport type StnLayoutScreenKind =\n | 'list'\n | 'dashboard-map'\n | 'alert-center'\n | 'converged-dashboard'\n | 'popup-overlay'\n | 'widget-board'\n | 'standard'\n\n/** @deprecated StnLayoutScreenKind */\nexport type StnPageScaffoldKind = StnLayoutScreenKind\n\nexport const STN_LAYOUT_SCREEN_RECIPES: readonly {\n id: StnLayoutScreenKind\n label: string\n pubExamples: string\n reactRecipe: string\n layoutTab: 'list' | 'dashboard'\n note: string\n}[] = [\n {\n id: 'list',\n label: '리스트·상세',\n pubExamples: 'interface_list.html · syslog_status.html',\n reactRecipe: 'ListPageScaffold',\n layoutTab: 'list',\n note: 'L0 wrap · L1 .stn-container · L2 GNB',\n },\n {\n id: 'dashboard-map',\n label: '맵·대시보드',\n pubExamples: 'basic/map.html · dashboard_map …',\n reactRecipe: 'DashboardPageScaffold',\n layoutTab: 'dashboard',\n note: 'map(z50) · dashboard_left / dashboard_right',\n },\n {\n id: 'alert-center',\n label: '알림센터',\n pubExamples: 'basic/alert_center.html',\n reactRecipe: 'AlertCenterPageScaffold',\n layoutTab: 'dashboard',\n note: 'GNB 알림 · 맵 placeholder · 우측 4위젯',\n },\n {\n id: 'converged-dashboard',\n label: '융합망 대시',\n pubExamples: 'converged/dashboard_map.html',\n reactRecipe: 'DashboardPageScaffold (converged_header)',\n layoutTab: 'dashboard',\n note: 'wrap-converged',\n },\n {\n id: 'popup-overlay',\n label: '팝·딤',\n pubExamples: 'regist_pop.html · widget_dim.html',\n reactRecipe: 'StnPageScaffold.Layer + StnPopup',\n layoutTab: 'list',\n note: 'L3/L4',\n },\n {\n id: 'widget-board',\n label: '위젯보드',\n pubExamples: 'widgetboard/widget*.html',\n reactRecipe: 'StnWidget shell=board',\n layoutTab: 'dashboard',\n note: 'board-item',\n },\n {\n id: 'standard',\n label: '일반 콘텐츠',\n pubExamples: 'CCTV · node tools …',\n reactRecipe: 'StnLayerShell + Region',\n layoutTab: 'list',\n note: 'head_area · stn-content-area',\n },\n]\n\n/** @deprecated STN_LAYOUT_SCREEN_RECIPES */\nexport const STN_PAGE_SCAFFOLD_KINDS = STN_LAYOUT_SCREEN_RECIPES\n\nexport const STN_LAYOUT_SLOT_USAGE = `import { StnPageScaffold, StnLayer, StnPopup } from '@stn-uiux/pub-ui-react'\n\n/** Shell children 안 — 구역 라벨 */\n<StnLayerShell gnb={<StnSideNavigation />} contentModifiers={['has_lnb', 'has_sch']} header={…}>\n <StnPageScaffold.Region label=\"lnb_box\" hint=\"LNB 트리\" />\n <StnPageScaffold.Region label=\"search_area\" />\n</StnLayerShell>\n\n/** 맵 빈 칸 */\n<StnPageScaffold.MapPlaceholder message=\"맵은 추후 연동\" />\n\n/** 맵 빈 본문 — L0만 보이는 캔버스 (위젯·placeholder 없음) */\n<DashboardPageScaffold bodyEmpty shell=\"layer\" gnb={gnb} layer0={layer0} />\n\n/** L3 팝업 슬롯 */\n<StnLayer level={3} surface=\"transparent\">\n <StnPageScaffold.Layer level={3} label=\"팝업 본문\">\n <StnPopup open>…</StnPopup>\n </StnPageScaffold.Layer>\n</StnLayer>`\n\nexport const STN_LAYOUT_ALERT_CENTER_USAGE = `import { AlertCenterPageScaffold } from '@stn-uiux/pub-ui-react'\n\n<AlertCenterPageScaffold mapMessage=\"맵은 추후 연동\" showFaultPanelPlaceholder />`\n\n/** @deprecated */\nexport const STN_PAGE_SCAFFOLD_COMPOUND_USAGE = STN_LAYOUT_SLOT_USAGE\n\n/** @deprecated */\nexport const STN_ALERT_CENTER_PAGE_SCAFFOLD_USAGE = STN_LAYOUT_ALERT_CENTER_USAGE\n\n/** @deprecated */\nexport const STN_PAGE_SCAFFOLD_INTRO = STN_LAYOUT_INTRO\n\nexport const STN_LAYOUT_RECIPES: readonly {\n id: 'list' | 'dashboard'\n label: string\n screen: string\n shellProps: string\n childrenHint: string\n}[] = [\n {\n id: 'list',\n label: '리스트·상세',\n screen: 'interface_list, syslog_status …',\n shellProps: 'contentModifiers={[\\'has_lnb\\', \\'has_sch\\']} · header=<StnLayoutHeader>',\n childrenHint: 'lnb_box · search_area · stn-table (+ StnTable, StnButton)',\n },\n {\n id: 'dashboard',\n label: '맵·대시보드',\n screen: 'basic/map.html, dashboard_map …',\n shellProps: 'bodyWrapper=\"none\" · chrome=\"network_topology_header\"',\n childrenHint: '.dashboard · .dashboard_left · StnLayoutRegion(region=\"map\")',\n },\n]\n\n/** Pub `.stn-content-area` modifier */\nexport type StnContentAreaModifier =\n | 'has_lnb'\n | 'has_lnb2'\n | 'has_lnb_right'\n | 'has_lnb_right2'\n | 'has_sch'\n | 'has_sch_row2'\n | 'flexible'\n\n/** LNB·트리 열 위치 — `has_lnb*` modifier 와 조합 */\nexport type StnLnbSide = 'left' | 'right'\n\n\n\n/** 대시보드·맵 화면 내 고정 슬롯 */\nexport type StnLayoutRegion =\n | 'top_right'\n | 'dashboard'\n | 'dashboard_left'\n | 'dashboard_right'\n | 'dashboard_body'\n | 'wrap_topology'\n | 'map'\n | 'dash_canvas'\n\nexport const STN_LAYOUT_PAGE_TREE = `.stn-wrap (legacy v1: #wrap)\n├── .stn-side-nav (absolute overlay · StnSideNavigation)\n└── .stn-layer-1 (L1 · 네비 제외 영역)\n ├── .stn-layer-1__header (Header)\n └── .stn-content-area / .stn-stack\n └── .stn-stack …` as const\n\nexport const STN_LAYOUT_LAYER_PAGE_TREE = `.stn-wrap (Root Shell · data-stn-layer-mode=\"v2\")\n├── StnLayer.Background (L0 · layer0-bg)\n├── .stn-side-nav / StnSideNavigation (absolute overlay · wrap 직속)\n├── [data-stn-layer-role=\"utility\"] (toast · audio)\n└── StnLayer.Content (.stn-layer-1) (L1 — 하나)\n ├── .stn-layer-1__header\n └── .stn-content-area / .stn-stack\n └── lnb_box | content_box | .stn-stack` as const\n\nexport const STN_LAYOUT_CONTENT_ROWS: {\n modifier: StnContentAreaModifier\n pubClass: string\n label: string\n note: string\n}[] = [\n {\n modifier: 'has_lnb',\n pubClass: '.stn-content-area.has_lnb',\n label: 'LNB 1열',\n note: 'padding-left: 268px · head_area 동기화',\n },\n {\n modifier: 'has_lnb2',\n pubClass: '.stn-content-area.has_lnb2',\n label: 'LNB 2열 (좌)',\n note: 'padding-left: 536px',\n },\n {\n modifier: 'has_lnb_right',\n pubClass: '.stn-content-area.has_lnb_right',\n label: 'LNB 1열 (우)',\n note: 'padding-right: 268px · lnb_box_right',\n },\n {\n modifier: 'has_lnb_right2',\n pubClass: '.stn-content-area.has_lnb_right2',\n label: 'LNB 2열 (우)',\n note: 'padding-right: 536px',\n },\n {\n modifier: 'has_sch',\n pubClass: '.stn-content-area.has_sch',\n label: '검색 영역',\n note: 'flex column · search_area + content_box',\n },\n {\n modifier: 'has_sch_row2',\n pubClass: '.stn-content-area.has_sch_row2',\n label: '검색 2줄',\n note: 'padding-top: 94px',\n },\n {\n modifier: 'flexible',\n pubClass: '.stn-content-area.flexible',\n label: '가변 높이 테이블',\n note: 'stn-table flex fill',\n },\n]\n\n\nexport const STN_LAYOUT_REGION_ROWS: {\n region: StnLayoutRegion\n pubClass: string\n label: string\n note: string\n}[] = [\n { region: 'top_right', pubClass: '.dash-top-right-widget', label: '우상단 위젯', note: '시스템 감시·테마·시계' },\n { region: 'dashboard', pubClass: '.dashboard', label: '대시보드 루트', note: '맵·위젯 본문' },\n { region: 'dashboard_left', pubClass: '.dashboard_left', label: '좌측 열', note: '토폴로지·맵' },\n { region: 'dashboard_right', pubClass: '.dashboard_right', label: '우측 열', note: '장애·위젯 패널' },\n { region: 'dashboard_body', pubClass: '.dashboard_body', label: '융합망 본문', note: 'converged 레이아웃' },\n { region: 'wrap_topology', pubClass: '.wrap_topology', label: '토폴로지 래퍼', note: 'stn-elev-map' },\n { region: 'map', pubClass: '.map', label: '맵 영역', note: '' },\n { region: 'dash_canvas', pubClass: '.stn-widget.shell-canvas', label: '캔버스', note: '토폴로지/맵 위젯 (variant=\"canvas\")' },\n]\n\nconst CONTENT_CLASS: Record<StnContentAreaModifier, string> = {\n has_lnb: 'has_lnb',\n has_lnb2: 'has_lnb2',\n has_lnb_right: 'has_lnb_right',\n has_lnb_right2: 'has_lnb_right2',\n has_sch: 'has_sch',\n has_sch_row2: 'has_sch_row2',\n flexible: 'flexible',\n}\n\nconst REGION_CLASS: Record<StnLayoutRegion, string> = {\n top_right: 'dash-top-right-widget',\n dashboard: 'dashboard',\n dashboard_left: 'dashboard_left',\n dashboard_right: 'dashboard_right',\n dashboard_body: 'dashboard_body',\n wrap_topology: 'wrap_topology',\n map: 'map',\n dash_canvas: 'stn-widget shell-canvas',\n}\n\nfunction normalizeList<T>(value?: T | T[]): T[] {\n if (value == null) return []\n return Array.isArray(value) ? value : [value]\n}\n\nexport function pubContentAreaClasses(\n modifiers?: StnContentAreaModifier | StnContentAreaModifier[],\n): string[] {\n return normalizeList(modifiers).map((m) => CONTENT_CLASS[m])\n}\n\nexport function pubLayoutRegionClass(region: StnLayoutRegion): string {\n return REGION_CLASS[region]\n}\n\n/** `lnbSide` — `has_lnb` / `has_lnb2` 를 좌·우 modifier 로 치환 */\nexport function applyLnbSideToModifiers(\n modifiers?: StnContentAreaModifier | StnContentAreaModifier[],\n lnbSide: StnLnbSide = 'left',\n): StnContentAreaModifier[] {\n const list = normalizeList(modifiers)\n if (lnbSide === 'left') return list\n return list.map((m) => {\n if (m === 'has_lnb') return 'has_lnb_right'\n if (m === 'has_lnb2') return 'has_lnb_right2'\n return m\n })\n}\n\nexport const STN_LAYER_SHELL_USAGE = `import { StnSideNavigation, StnLayerShell } from '@stn-uiux/pub-ui-react'\n\n/** StnLayer role 페이지 셸 — 컨테이너(.stn-container)를 StnLayer.Content 가 겸함 */\nexport function ListPage({ gnb, title, children }) {\n return (\n <StnLayerShell\n gnb={gnb}\n lnbSide=\"left\"\n contentModifiers={['has_lnb', 'has_sch']}\n header={\n <StnLayoutHeader>\n <h3 className=\"title\">{title}</h3>\n </StnLayoutHeader>\n }\n >\n <aside className=\"lnb_box\">…트리·LNB…</aside>\n <div className=\"content_box\">{children}</div>\n </StnLayerShell>\n )\n}\n\n/** 데이터 구조(트리)를 오른쪽에 */\n<StnLayerShell lnbSide=\"right\" contentModifiers={['has_lnb', 'has_sch']} …>\n <div className=\"content_box\">…</div>\n <aside className=\"lnb_box_right\">…</aside>\n</StnLayerShell>`\n\nexport const STN_LAYOUT_SHELL_USAGE = `import '@stn-uiux/pub-ui/styles.css'\n\nimport { StnSideNavigation, StnHeader, StnLayerShell, StnStack } from '@stn-uiux/pub-ui-react'\n\n/** interface_list 골격 */\nexport function InterfaceListPage({ gnb, title, children }) {\n return (\n <StnLayerShell\n gnb={gnb}\n header={\n <StnHeader variant=\"page\">\n <StnHeader.Left>\n <h3 className=\"title\">{title}</h3>\n </StnHeader.Left>\n </StnHeader>\n }\n >\n {children}\n </StnLayerShell>\n )\n}\n\n/** 대시보드 골격 */\nexport function MapDashboardPage({ gnb, header, children }) {\n return (\n <StnLayerShell gnb={gnb} header={header}>\n <StnStack direction=\"column\">\n {children}\n </StnStack>\n </StnLayerShell>\n )\n}`\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnHeader.ts"],"sourcesContent":["/**\n * Infomap header pattern — Figma 43377 · 43521 · 211938\n * @see StnHeader · patterns/stn-header.css\n */\n\nimport { systemIconSrc } from './stnSystemIcons'\n\nexport type StnHeaderVariant = 'dashboard' | 'widget' | 'page'\nexport type StnHeaderPadding = 'none' | 'sm' | 'md' | 'lg'\nexport type StnHeaderGap = 'none' | 'sm' | 'md' | 'lg'\n\nexport const STN_HEADER_INTRO =\n '페이지 최상단에 배치되어 시스템 상태, 타이틀, 실시간 시계, 툴바 액션, 브레드크럼을 표출하는 상단 헤더 패턴입니다. 좌측(Left) · 중앙(Center) · 우측(Right) 3개 슬롯을 유연하게 조립하여 구성할 수 있으며, Center 슬롯 유무에 따라 반응형 그리드 레이아웃이 자동으로 최적화됩니다. 폭이 줄면 Right만 먼저 축약(≤1280 툴바 아이콘화)되고, Center StnHeaderTitle은 md(32px)에서 sm(≤1280), compact(≤720)으로 점진 축소됩니다.'\n\nexport const STN_HEADER_VARIANT_ROWS = [\n {\n variant: 'dashboard',\n layout: 'Left(1fr · hug) · Center(auto) · Right(1fr · hug)',\n example: 'Alert status + Header title + System chips',\n },\n {\n variant: 'widget',\n layout: 'Left(1fr · hug) · Center(auto clock) · Right(1fr · hug)',\n example: 'Breadcrumb + Clock + Action buttons',\n },\n {\n variant: 'page',\n layout: 'Left title · Right',\n example: 'Page title + Breadcrumb',\n },\n] as const\n\nexport const STN_HEADER_USAGE = `import {\n StnSystemChip,\n StnHeader,\n StnBreadcrumb,\n StnButton,\n StnHeaderTitle,\n StnHeaderToolbar,\n StnIcon,\n} from '@stn-uiux/pub-ui-react'\n\n<StnHeader>\n <StnHeader.Left>\n <StnSystemChip items={[{ id: 'c', tone: 'critical', count: 0 }, ...]} />\n </StnHeader.Left>\n <StnHeader.Center>\n <StnHeaderTitle>통합 관제 솔루션</StnHeaderTitle>\n </StnHeader.Center>\n <StnHeader.Right>\n <StnHeaderToolbar>\n <StnButton size=\"M\" variant=\"ghost\" icon={<StnIcon name=\"fill/system_status_on\" size={16} className=\"stn-icon--color\" />}>\n 시스템 감시\n </StnButton>\n <StnButton size=\"M\" variant=\"ghost\" icon={<StnIcon name=\"line/sun-high\" size={16} />}>\n 라이트모드\n </StnButton>\n </StnHeaderToolbar>\n </StnHeader.Right>\n</StnHeader>`\n\nexport const STN_HEADER_USAGE_HTML = `<!-- Left · Center · Right 슬롯 조립 -->\n<header class=\"stn-header\">\n <div class=\"stn-header__left\">\n <!-- StnSystemChip / .stn-system-chip -->\n </div>\n <div class=\"stn-header__center\">\n <div class=\"stn-header-title\">\n <span class=\"stn-header-title__text\">통합 관제 솔루션</span>\n </div>\n </div>\n <div class=\"stn-header__right\">\n <div class=\"stn-header-toolbar\">\n <!-- system monitor · theme buttons -->\n </div>\n </div>\n</header>`\n\nexport const STN_SYSTEM_CHIP_DEMO = [\n { id: 'critical', tone: 'critical' as const, count: 0 },\n { id: 'major', tone: 'major' as const, count: 12 },\n { id: 'minor', tone: 'minor' as const, count: 2 },\n { id: 'info', tone: 'info' as const, count: 3 },\n]\n\nexport const STN_HEADER_PAGE_TITLE_DEMO = '장애코드 관리'\n\n/** Figma map toolbar 40000040:75034 — leading icon + label */\nexport const STN_HEADER_TOOLBAR_DEMO_ACTIONS = [\n {\n id: 'reset',\n label: '기본값으로 초기화',\n iconSrc: systemIconSrc('line/refresh'),\n tertiaryStyle: 'outline' as const,\n },\n {\n id: 'edit',\n label: '편집',\n iconSrc: systemIconSrc('line/pencil-minus'),\n tertiaryStyle: 'ghost' as const,\n },\n {\n id: 'prev-day',\n label: '전일 현황',\n iconSrc: systemIconSrc('line/report'),\n tertiaryStyle: 'ghost' as const,\n },\n] as const\n"],"mappings":";;;;;AAWO,IAAM,mBACX;AAEK,IAAM,0BAA0B;AAAA,EACrC;AAAA,IACE,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AACF;AAEO,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BzB,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB9B,IAAM,uBAAuB;AAAA,EAClC,EAAE,IAAI,YAAY,MAAM,YAAqB,OAAO,EAAE;AAAA,EACtD,EAAE,IAAI,SAAS,MAAM,SAAkB,OAAO,GAAG;AAAA,EACjD,EAAE,IAAI,SAAS,MAAM,SAAkB,OAAO,EAAE;AAAA,EAChD,EAAE,IAAI,QAAQ,MAAM,QAAiB,OAAO,EAAE;AAChD;AAEO,IAAM,6BAA6B;AAGnC,IAAM,kCAAkC;AAAA,EAC7C;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,SAAS,cAAc,cAAc;AAAA,IACrC,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,SAAS,cAAc,mBAAmB;AAAA,IAC1C,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,SAAS,cAAc,aAAa;AAAA,IACpC,eAAe;AAAA,EACjB;AACF;","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-LHV26PEP.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:31144', name: 'icon/ai_agent', slug: 'ai_agent', ext: 'png' },\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:31290', name: 'icon/3d/print', slug: '3d/print', ext: 'png' },\n { id: '40002193:31292', name: 'icon/3d/wifi', slug: '3d/wifi', ext: 'png' },\n { id: '40002193:31295', name: 'icon/3d/server1', slug: '3d/server1', ext: 'png' },\n { id: '40002193:31298', name: 'icon/3d/server2', slug: '3d/server2', ext: 'png' },\n { id: '40002193:31301', name: 'icon/3d/signal', slug: '3d/signal', ext: 'png' },\n { id: '40002193:31304', name: 'icon/3d/print_1', slug: '3d/print_1', ext: 'png' },\n { id: '40002193:31306', name: 'icon/3d/wif_1', slug: '3d/wifi_1', ext: 'png' },\n { id: '40002193:31309', name: 'icon/3d/werver2_1', slug: '3d/server2_1', ext: 'png' },\n { id: '40002193:31312', name: 'icon/3d/signal_1', slug: '3d/signal_1', ext: 'png' },\n { id: '40002193:31315', name: 'icon/3d/server1_1', slug: '3d/server1_1', ext: 'png' },\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', name: 'icon/line/input', slug: 'line/input' },\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/radio', name: 'icon/line/radio', slug: 'line/radio' },\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` · `3d/print` · `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 norm.startsWith('3d/')\n ) {\n return systemIconSrc(norm, norm.startsWith('3d/') ? 'png' : 'svg')\n }\n return null\n}\n\nexport { SYSTEM_ICON_DATA_URLS }\n"],"mappings":"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","names":[]}