@stn-uiux/pub-ui 0.1.57 → 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 (130) hide show
  1. package/dist/{chunk-L7DYM4V7.js → chunk-2FHXIAM3.js} +10 -28
  2. package/dist/{chunk-L7DYM4V7.js.map → chunk-2FHXIAM3.js.map} +1 -1
  3. package/dist/chunk-2WKT7X65.js +407 -0
  4. package/dist/chunk-2WKT7X65.js.map +1 -0
  5. package/dist/{chunk-7ASY5YJ6.js → chunk-36BAGMYT.js} +3 -3
  6. package/dist/chunk-36BAGMYT.js.map +1 -0
  7. package/dist/{chunk-THCCTVUM.js → chunk-5F63CMM7.js} +11 -1
  8. package/dist/chunk-5F63CMM7.js.map +1 -0
  9. package/dist/{chunk-Q3W7QA7N.js → chunk-75GHU6VI.js} +24 -43
  10. package/dist/chunk-75GHU6VI.js.map +1 -0
  11. package/dist/chunk-A5KLX6NX.js +1 -0
  12. package/dist/{chunk-4C7ABT2K.js → chunk-AE4CKAEK.js} +3 -3
  13. package/dist/chunk-AE4CKAEK.js.map +1 -0
  14. package/dist/{chunk-UPXSNRIJ.js → chunk-AOS3IX4T.js} +2 -2
  15. package/dist/chunk-AOS3IX4T.js.map +1 -0
  16. package/dist/{chunk-XNGYRPZI.js → chunk-CHJATVOT.js} +4 -4
  17. package/dist/{chunk-XNGYRPZI.js.map → chunk-CHJATVOT.js.map} +1 -1
  18. package/dist/{chunk-XZ3JOUX2.js → chunk-EQTZA7I2.js} +2 -14
  19. package/dist/chunk-EQTZA7I2.js.map +1 -0
  20. package/dist/{chunk-P5V6SFR7.js → chunk-H4ZJQ5YW.js} +2 -2
  21. package/dist/{chunk-GR76L7M7.js → chunk-JPILTFLI.js} +5 -5
  22. package/dist/chunk-JPILTFLI.js.map +1 -0
  23. package/dist/{chunk-WRGBYWRV.js → chunk-LKVTW54X.js} +1 -1
  24. package/dist/chunk-LKVTW54X.js.map +1 -0
  25. package/dist/{chunk-OMCBVK57.js → chunk-SKZOEF3H.js} +2 -2
  26. package/dist/chunk-SQJPE6HH.js +12 -0
  27. package/dist/chunk-SQJPE6HH.js.map +1 -0
  28. package/dist/{chunk-V7HD6SBG.js → chunk-XEG4WDUD.js} +7 -18
  29. package/dist/chunk-XEG4WDUD.js.map +1 -0
  30. package/dist/chunk-XPARWRVD.js +9 -0
  31. package/dist/chunk-XPARWRVD.js.map +1 -0
  32. package/dist/{chunk-S4YA4H2S.js → chunk-YBNEQ5LB.js} +2 -2
  33. package/dist/cli.js +15 -15
  34. package/dist/data/index.d.ts +2 -1
  35. package/dist/data/index.js +31 -27
  36. package/dist/data/stnAlertCenter.d.ts +4 -3
  37. package/dist/data/stnAlertCenter.js +1 -1
  38. package/dist/data/stnBreadcrumb.js +3 -3
  39. package/dist/data/stnDatePicker.js +2 -2
  40. package/dist/data/stnDateRangeField.d.ts +1 -1
  41. package/dist/data/stnDateRangeField.js +1 -1
  42. package/dist/data/stnDropdown.d.ts +1 -1
  43. package/dist/data/stnDropdown.js +1 -1
  44. package/dist/data/stnHeader.d.ts +2 -2
  45. package/dist/data/stnHeader.js +3 -3
  46. package/dist/data/stnLayout.d.ts +1 -1
  47. package/dist/data/stnLayout.js +1 -1
  48. package/dist/data/stnPackageVersion.d.ts +2 -2
  49. package/dist/data/stnPackageVersion.js +1 -1
  50. package/dist/data/stnPopup.d.ts +19 -41
  51. package/dist/data/stnPopup.js +1 -1
  52. package/dist/data/stnScroll.d.ts +1 -1
  53. package/dist/data/stnScroll.js +1 -1
  54. package/dist/data/stnSearchRequirement.d.ts +4 -4
  55. package/dist/data/stnSearchRequirement.js +1 -1
  56. package/dist/data/stnSideNavItem.js +3 -3
  57. package/dist/data/stnSizeSemantic.js +1 -1
  58. package/dist/data/stnStatus.d.ts +11 -0
  59. package/dist/data/stnStatus.js +7 -0
  60. package/dist/data/stnStatus.js.map +1 -0
  61. package/dist/data/stnSystemIcons.d.ts +1 -1
  62. package/dist/data/stnSystemIcons.js +2 -2
  63. package/dist/data/stnSystemIconsData.generated.js +1 -1
  64. package/dist/data/stnTree.d.ts +1 -1
  65. package/dist/data/stnTree.js +1 -1
  66. package/dist/index.d.ts +2 -1
  67. package/dist/index.js +31 -27
  68. package/package.json +1 -1
  69. package/styles/@assets/svg/system/line/eye-off.svg +5 -0
  70. package/styles/components/stn-btn.css +10 -1
  71. package/styles/components/stn-date-picker.css +13 -5
  72. package/styles/components/stn-date-range-field.css +153 -16
  73. package/styles/components/stn-dropdown.css +161 -42
  74. package/styles/components/stn-label-prefix.css +356 -0
  75. package/styles/components/stn-pagination.css +113 -5
  76. package/styles/components/stn-popup.css +78 -132
  77. package/styles/components/stn-scroll.css +51 -66
  78. package/styles/components/stn-search-requirement.css +27 -20
  79. package/styles/components/stn-segmented.css +3 -1
  80. package/styles/components/stn-status.css +853 -0
  81. package/styles/components/stn-table.css +32 -5
  82. package/styles/components/stn-text-field.css +396 -374
  83. package/styles/components/stn-toast.css +17 -0
  84. package/styles/components/stn-toggle-button.css +37 -0
  85. package/styles/layouts/stn-container.css +9 -0
  86. package/styles/layouts/stn-layer1-content.css +105 -0
  87. package/styles/patterns/stn-alert-center.css +114 -4
  88. package/styles/patterns/stn-header.css +7 -145
  89. package/styles/patterns/stn-section-side.css +64 -0
  90. package/styles/patterns/stn-tree.css +193 -2
  91. package/styles/style-pub.css +2 -1
  92. package/styles/tokens/stn-breakpoint.css +12 -0
  93. package/styles/tokens/stn-colors-semantic.css +13 -7
  94. package/styles/tokens/stn-radius-semantic.css +4 -3
  95. package/styles/tokens/stn-size-semantic.css +19 -6
  96. package/styles/tokens/stn-size.css +2 -0
  97. package/styles/tokens/stn-spacing-semantic.css +12 -0
  98. package/styles/tokens/stn-typography.css +1 -0
  99. package/dist/chunk-4C7ABT2K.js.map +0 -1
  100. package/dist/chunk-7ASY5YJ6.js.map +0 -1
  101. package/dist/chunk-GR76L7M7.js.map +0 -1
  102. package/dist/chunk-LHV26PEP.js +0 -1
  103. package/dist/chunk-Q3W7QA7N.js.map +0 -1
  104. package/dist/chunk-QT4HHVZH.js +0 -9
  105. package/dist/chunk-QT4HHVZH.js.map +0 -1
  106. package/dist/chunk-THCCTVUM.js.map +0 -1
  107. package/dist/chunk-UPXSNRIJ.js.map +0 -1
  108. package/dist/chunk-V7HD6SBG.js.map +0 -1
  109. package/dist/chunk-WRGBYWRV.js.map +0 -1
  110. package/dist/chunk-XZ3JOUX2.js.map +0 -1
  111. package/dist/chunk-ZI6EF4XD.js +0 -209
  112. package/dist/chunk-ZI6EF4XD.js.map +0 -1
  113. package/styles/@assets/svg/system/3d/print.png +0 -0
  114. package/styles/@assets/svg/system/3d/print_1.png +0 -0
  115. package/styles/@assets/svg/system/3d/server1.png +0 -0
  116. package/styles/@assets/svg/system/3d/server1_1.png +0 -0
  117. package/styles/@assets/svg/system/3d/server2.png +0 -0
  118. package/styles/@assets/svg/system/3d/server2_1.png +0 -0
  119. package/styles/@assets/svg/system/3d/signal.png +0 -0
  120. package/styles/@assets/svg/system/3d/signal_1.png +0 -0
  121. package/styles/@assets/svg/system/3d/wifi.png +0 -0
  122. package/styles/@assets/svg/system/3d/wifi_1.png +0 -0
  123. package/styles/@assets/svg/system/ai_agent.png +0 -0
  124. package/styles/@assets/svg/system/line/input.svg +0 -3
  125. package/styles/@assets/svg/system/line/radio.svg +0 -3
  126. package/styles/components/stn-severity-badge.css +0 -227
  127. /package/dist/{chunk-LHV26PEP.js.map → chunk-A5KLX6NX.js.map} +0 -0
  128. /package/dist/{chunk-P5V6SFR7.js.map → chunk-H4ZJQ5YW.js.map} +0 -0
  129. /package/dist/{chunk-OMCBVK57.js.map → chunk-SKZOEF3H.js.map} +0 -0
  130. /package/dist/{chunk-S4YA4H2S.js.map → chunk-YBNEQ5LB.js.map} +0 -0
@@ -1,209 +0,0 @@
1
- // src/data/stnAlertCenter.ts
2
- var STN_ALERT_CENTER_INTRO = "GNB \uD558\uB2E8 \uC575\uCEE4\uC5D0\uC11C \uB808\uC774\uC5B4\uB85C \uD45C\uCD9C\uB418\uB294 \uC54C\uB9BC\uC13C\uD130 \uD328\uD134\uC785\uB2C8\uB2E4. \uC2E4\uC2DC\uAC04 \uC7A5\uC560 \uC54C\uB9BC, \uC791\uC5C5 \uD56D\uBAA9, \uBC30\uD3EC \uD604\uD669 \uD0ED \uBC0F \uAC1C\uBCC4 \uD56D\uBAA9 \uC0C1\uC138 \uB2E4\uC774\uC5BC\uB85C\uADF8 \uC5F0\uB3D9\uC744 \uC81C\uACF5\uD569\uB2C8\uB2E4.";
3
- var STN_ALERT_CENTER_TAB_IDS = {
4
- error: "gnb-alert-tab-error",
5
- work: "gnb-alert-tab-work",
6
- deploy: "gnb-alert-tab-deploy"
7
- };
8
- var STN_ALERT_CENTER_TABS = [
9
- { id: "error", label: "\uC7A5\uC560", listWrapClass: "alert_list_wrap" },
10
- { id: "work", label: "\uC791\uC5C5", listWrapClass: "work_list_wrap" },
11
- { id: "deploy", label: "\uACF5\uC0AC", listWrapClass: "deploy_list_wrap" }
12
- ];
13
- var STN_ALERT_CENTER_DEMO_ALERTS = [
14
- {
15
- id: "alert-1",
16
- grade: "critical",
17
- title: "Ping \uC218\uC9D1 \uC7A5\uC560",
18
- description: "101\uACBD\uBE44\uB2E8_UPS 10.15.71.161 / 101\uACBD\uBE44\uB2E8",
19
- occurredAt: "2026-05-29 14:23",
20
- time: "11\uBD84 \uC804",
21
- icon: "line/alert-circle",
22
- unread: true
23
- },
24
- {
25
- id: "alert-2",
26
- grade: "major",
27
- title: "\uC778\uD130\uD398\uC774\uC2A4 OperStatus \uB2E4\uC6B4",
28
- description: "\uC218\uC0AC\uC9C0\uC6D0\uCCAD\uC0AC_\uC5C5\uBB34\uB9DD L3(Stack)#2 50.52.41.2 / \uC548\uBCF4\uC218\uC0AC\uACFC / ...",
29
- time: "3\uC77C \uC804",
30
- icon: "line/arrow-narrow-down",
31
- unread: true
32
- },
33
- {
34
- id: "alert-3",
35
- grade: "warning",
36
- title: "NMS\uAC00 Ping \uC73C\uB85C \uC7A5\uBE44\uC758 \uB124\uD2B8\uC6CC\uD06C \uC0C1\uD0DC\uB97C ...",
37
- description: "85\uAE30\uB3D9\uB300(\uC11C\uBD80)_L2#1 70.70.197.44 / 85\uAE30\uB3D9\uB300(\uB9C8\uD3EC) / ...",
38
- time: "15\uBD84 \uC804",
39
- icon: "line/wifi",
40
- unread: true
41
- },
42
- {
43
- id: "alert-4",
44
- grade: "critical",
45
- title: "BGP \uC138\uC158 \uB2E4\uC6B4 (Neighbor 10.20.1.1)",
46
- description: "\uBCF8\uCCAD \uBC31\uBCF8 \uB77C\uC6B0\uD130 #1 / \uC815\uBCF4\uD1B5\uC2E0\uACFC / \uC8FC\uC694 \uB300\uC5ED \uD68C\uC120 \uC21C\uB2E8",
47
- occurredAt: "2026-05-29 13:50",
48
- time: "44\uBD84 \uC804",
49
- icon: "line/alert-circle",
50
- unread: true
51
- },
52
- {
53
- id: "alert-5",
54
- grade: "major",
55
- title: "\uD3EC\uD2B8 \uB9C1\uD06C \uB2E4\uC6B4 (Te1/0/24)",
56
- description: "\uB0A8\uB300\uBB38\uACBD\uCC30\uC11C_\uBCF4\uC548 L2 \uC2A4\uC704\uCE58 20.12.5.3 / \uC0DD\uD65C\uC548\uC804\uACFC",
57
- time: "5\uC2DC\uAC04 \uC804",
58
- icon: "line/arrow-narrow-down",
59
- unread: false
60
- },
61
- {
62
- id: "alert-6",
63
- grade: "warning",
64
- title: "\uBB34\uC120 AP \uD1B5\uC2E0 \uC9C0\uC5F0 (\uC751\uB2F5\uC2DC\uAC04 350ms \uCD08\uACFC)",
65
- description: "\uC885\uB85C\uACBD\uCC30\uC11C \uBCF8\uAD00 3\uCE35 AP-04 / \uBB34\uC120 \uB124\uD2B8\uC6CC\uD06C \uBD80\uD558 \uBC1C\uC0DD",
66
- time: "1\uC77C \uC804",
67
- icon: "line/wifi",
68
- unread: false
69
- }
70
- ];
71
- var STN_ALERT_CENTER_DEMO_WORK = [
72
- {
73
- typeLabel: "[ \uC791\uC5C5\uC608\uC57D ]",
74
- text: "2026-03-05 16:01:00 \uC815\uAE30 \uC810\uAC80 \uC548\uB0B4 - \uC791\uC5C5\uC601\uC5ED / \uC601\uD5A5\uB3C4 : \uC11C\uBE44\uC2A4 \uC21C\uB2E8 \uBC1C\uC0DD \uAC00\uB2A5 / \uC791\uC5C5\uC790 : \uD64D\uAE38\uB3D9",
75
- time: "11\uB2EC\uC804"
76
- },
77
- {
78
- typeLabel: "[ \uAE34\uAE09\uC791\uC5C5 ]",
79
- text: "\uC7A5\uBE44\uBA85 \uD328\uCE58 \uBC0F \uC7AC\uBD80\uD305 \uC608\uC815 \uC11C\uBE44\uC2A4 \uC601\uD5A5 \uBC94\uC704 \uD655\uC778 \uBC0F \uBCF5\uAD6C \uC791\uC5C5 \uC9C4\uD589 \uC608\uC815",
80
- time: "3\uC77C\uC804"
81
- },
82
- {
83
- typeLabel: "[ \uC791\uC5C5\uC9C4\uD589 ]",
84
- text: "\uBCF8\uCCAD \uBC29\uD654\uBCBD \uC815\uCC45 \uC815\uAE30 \uB3D9\uAE30\uD654 \uC791\uC5C5 \u2014 \uC778\uAC00 \uB300\uC5ED \uC678 \uCC28\uB2E8 \uB8F0 \uAC31\uC2E0",
85
- time: "2\uC2DC\uAC04\uC804"
86
- },
87
- {
88
- typeLabel: "[ \uC791\uC5C5\uC644\uB8CC ]",
89
- text: "\uB9DD\uBD84\uB9AC \uC5F0\uACC4 \uC2A4\uC704\uCE58 \uD38C\uC6E8\uC5B4 v4.12 \uD328\uCE58 \uC644\uB8CC \uBC0F \uBB34\uC911\uB2E8 \uC808\uCCB4 \uC2DC\uD5D8",
90
- time: "\uC5B4\uC81C"
91
- }
92
- ];
93
- var STN_ALERT_CENTER_DEMO_DEPLOY = [
94
- {
95
- typeLabel: "[ \uACF5\uC0AC\uC608\uC57D ]",
96
- text: "2026-03-05 16:01:00 \uC815\uAE30 \uC810\uAC80 \uC548\uB0B4 - \uACF5\uC0AC\uC601\uC5ED / \uC601\uD5A5\uB3C4 : \uC11C\uBE44\uC2A4 \uC21C\uB2E8 \uBC1C\uC0DD \uAC00\uB2A5",
97
- time: "11\uB2EC\uC804"
98
- },
99
- {
100
- typeLabel: "[ \uAE34\uAE09\uACF5\uC0AC ]",
101
- text: "\uC7A5\uBE44\uBA85 \uD328\uCE58 \uBC0F \uC7AC\uBD80\uD305 \uC608\uC815 \u2014 \uC2DC\uC791 : 2026-03-05 16:01:00 / \uC608\uC0C1 \uC18C\uC694\uC2DC\uAC04 : 1\uC2DC\uAC04",
102
- time: "3\uC77C\uC804"
103
- },
104
- {
105
- typeLabel: "[ \uD1B5\uC2E0\uACF5\uC0AC ]",
106
- text: "\uC81C2\uBCC4\uAD00 4\uCE35 \uAD11\uCF00\uC774\uBE14 \uD3EC\uC124 \uBC0F \uB178\uD6C4 \uD328\uCE58\uD328\uB110 \uC804\uBA74 \uAD50\uCCB4 \uACF5\uC0AC",
107
- time: "1\uC8FC\uC77C\uC804"
108
- },
109
- {
110
- typeLabel: "[ \uC804\uC6D0\uACF5\uC0AC ]",
111
- text: "\uC804\uC0B0\uC2E4 \uC218\uBCC0\uC804\uC124\uBE44 \uC815\uAE30 \uC548\uC804 \uC810\uAC80 \uBC0F \uBE44\uC0C1 \uBC1C\uC804\uAE30 \uAC00\uB3D9 \uC2DC\uD5D8",
112
- time: "2\uC8FC\uC77C\uC804"
113
- }
114
- ];
115
- var STN_ALERT_CENTER_INTEGRATION_USAGE = `import {
116
- StnAlertCenterPanel,
117
- StnSideNavigation,
118
- StnLayerShell,
119
- } from '@stn-uiux/pub-ui-react'
120
-
121
- export function AppChrome() {
122
- const [alertOpen, setAlertOpen] = useState(false)
123
-
124
- return (
125
- <StnLayerShell
126
- gnb={
127
- <StnSideNavigation>
128
- <StnSideNavigation.Header>
129
- <StnSideNavigation.Logo />
130
- <StnSideNavigation.Toggle />
131
- </StnSideNavigation.Header>
132
- <StnSideNavigation.Menu>
133
- <StnSideNavigation.Item label="\uB300\uC2DC\uBCF4\uB4DC" active />
134
- </StnSideNavigation.Menu>
135
- <StnSideNavigation.Spacer />
136
- <StnSideNavigation.Footer curved>
137
- <StnSideNavigation.Watermark />
138
- <StnSideNavigation.Item
139
- label="\uC54C\uB9BC"
140
- badge={12}
141
- onClick={() => setAlertOpen(!alertOpen)}
142
- />
143
- </StnSideNavigation.Footer>
144
- </StnSideNavigation>
145
- }
146
- >
147
- <main>\u2026\uBCF8\uBB38\u2026</main>
148
- {alertOpen && (
149
- <StnAlertCenterPanel
150
- alerts={alerts}
151
- workItems={workItems}
152
- deployItems={deployItems}
153
- onClose={() => setAlertOpen(false)}
154
- />
155
- )}
156
- </StnLayerShell>
157
- )
158
- }`;
159
- var STN_GNB_ALERT_INTEGRATION_USAGE = STN_ALERT_CENTER_INTEGRATION_USAGE;
160
- var STN_ALERT_CENTER_USAGE = `import { StnAlertCenterPanel } from '@stn-uiux/pub-ui-react'
161
-
162
- <StnAlertCenterPanel
163
- alerts={alerts}
164
- workItems={workItems}
165
- deployItems={deployItems}
166
- onClose={() => setOpen(false)}
167
- />`;
168
- var STN_ALERT_CENTER_USAGE_HTML = `<!-- Pub stn-alert-center \u2014 GNB \uC606 float -->
169
- <div class="stn-alert-center gnb_alert_modal" id="gnb_alert_modal" style="display: block">
170
- <div class="stn-alert-center__header alert_header">
171
- <div class="stn-alert-center__header-left header_left">
172
- <span class="stn-alert-center__title title">\uC54C\uB9BC\uC13C\uD130</span>
173
- <div class="stn-alert-center__toggle alert_toggle">
174
- <input type="radio" name="gnb-alert-tab" id="gnb-alert-tab-error" checked />
175
- <label for="gnb-alert-tab-error">\uC7A5\uC560</label>
176
- <input type="radio" name="gnb-alert-tab" id="gnb-alert-tab-work" />
177
- <label for="gnb-alert-tab-work">\uC791\uC5C5</label>
178
- <input type="radio" name="gnb-alert-tab" id="gnb-alert-tab-deploy" />
179
- <label for="gnb-alert-tab-deploy">\uACF5\uC0AC</label>
180
- </div>
181
- </div>
182
- <button type="button" class="stn-alert-center__close close_alert_modal" aria-label="\uB2EB\uAE30"></button>
183
- </div>
184
- <div class="stn-alert-center__list-wrap alert_list_wrap">
185
- <ul class="stn-alert-center__list alert_list">
186
- <li class="stn-alert-center__item alert_item">
187
- <span class="stn-alert-center__dot dot" aria-hidden="true"></span>
188
- <span class="stn-badge stn-badge--filled stn-badge--critical">CR</span>
189
- <span class="stn-alert-center__title-cell title_cell">Ping \uC218\uC9D1 \uC7A5\uC560</span>
190
- <span class="stn-alert-center__desc-cell desc_cell">\uC7A5\uBE44 \uC751\uB2F5 \uC5C6\uC74C</span>
191
- <span class="stn-alert-center__time-cell time_cell">11\uB2EC\uC804</span>
192
- </li>
193
- </ul>
194
- </div>
195
- </div>`;
196
-
197
- export {
198
- STN_ALERT_CENTER_INTRO,
199
- STN_ALERT_CENTER_TAB_IDS,
200
- STN_ALERT_CENTER_TABS,
201
- STN_ALERT_CENTER_DEMO_ALERTS,
202
- STN_ALERT_CENTER_DEMO_WORK,
203
- STN_ALERT_CENTER_DEMO_DEPLOY,
204
- STN_ALERT_CENTER_INTEGRATION_USAGE,
205
- STN_GNB_ALERT_INTEGRATION_USAGE,
206
- STN_ALERT_CENTER_USAGE,
207
- STN_ALERT_CENTER_USAGE_HTML
208
- };
209
- //# sourceMappingURL=chunk-ZI6EF4XD.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnAlertCenter.ts"],"sourcesContent":["import type { StnChipGrade } from './stnChip'\n\nexport const STN_ALERT_CENTER_INTRO =\n 'GNB 하단 앵커에서 레이어로 표출되는 알림센터 패턴입니다. 실시간 장애 알림, 작업 항목, 배포 현황 탭 및 개별 항목 상세 다이얼로그 연동을 제공합니다.'\n\nexport type StnAlertCenterTab = 'error' | 'work' | 'deploy'\nexport type StnAlertCenterSize = 'sm' | 'md' | 'lg'\n\n/** Pub CSS `:has(#gnb-alert-tab-*)` 와 호환 — 페이지당 1패널이면 기본값 사용 */\nexport const STN_ALERT_CENTER_TAB_IDS: Record<StnAlertCenterTab, string> = {\n error: 'gnb-alert-tab-error',\n work: 'gnb-alert-tab-work',\n deploy: 'gnb-alert-tab-deploy',\n}\n\nexport const STN_ALERT_CENTER_TABS: readonly {\n id: StnAlertCenterTab\n label: string\n listWrapClass: string\n}[] = [\n { id: 'error', label: '장애', listWrapClass: 'alert_list_wrap' },\n { id: 'work', label: '작업', listWrapClass: 'work_list_wrap' },\n { id: 'deploy', label: '공사', listWrapClass: 'deploy_list_wrap' },\n]\n\nexport type StnAlertCenterAlertItem = {\n id?: string\n grade: StnChipGrade\n title: string\n description: string\n time: string\n icon?: string\n occurredAt?: string\n unread?: boolean\n}\n\nexport type StnAlertCenterWorkItem = {\n id?: string\n typeLabel: string\n text: string\n time: string\n}\n\nexport const STN_ALERT_CENTER_DEMO_ALERTS: StnAlertCenterAlertItem[] = [\n {\n id: 'alert-1',\n grade: 'critical',\n title: 'Ping 수집 장애',\n description: '101경비단_UPS 10.15.71.161 / 101경비단',\n occurredAt: '2026-05-29 14:23',\n time: '11분 전',\n icon: 'line/alert-circle',\n unread: true,\n },\n {\n id: 'alert-2',\n grade: 'major',\n title: '인터페이스 OperStatus 다운',\n description: '수사지원청사_업무망 L3(Stack)#2 50.52.41.2 / 안보수사과 / ...',\n time: '3일 전',\n icon: 'line/arrow-narrow-down',\n unread: true,\n },\n {\n id: 'alert-3',\n grade: 'warning',\n title: 'NMS가 Ping 으로 장비의 네트워크 상태를 ...',\n description: '85기동대(서부)_L2#1 70.70.197.44 / 85기동대(마포) / ...',\n time: '15분 전',\n icon: 'line/wifi',\n unread: true,\n },\n {\n id: 'alert-4',\n grade: 'critical',\n title: 'BGP 세션 다운 (Neighbor 10.20.1.1)',\n description: '본청 백본 라우터 #1 / 정보통신과 / 주요 대역 회선 순단',\n occurredAt: '2026-05-29 13:50',\n time: '44분 전',\n icon: 'line/alert-circle',\n unread: true,\n },\n {\n id: 'alert-5',\n grade: 'major',\n title: '포트 링크 다운 (Te1/0/24)',\n description: '남대문경찰서_보안 L2 스위치 20.12.5.3 / 생활안전과',\n time: '5시간 전',\n icon: 'line/arrow-narrow-down',\n unread: false,\n },\n {\n id: 'alert-6',\n grade: 'warning',\n title: '무선 AP 통신 지연 (응답시간 350ms 초과)',\n description: '종로경찰서 본관 3층 AP-04 / 무선 네트워크 부하 발생',\n time: '1일 전',\n icon: 'line/wifi',\n unread: false,\n },\n]\n\nexport const STN_ALERT_CENTER_DEMO_WORK: StnAlertCenterWorkItem[] = [\n {\n typeLabel: '[ 작업예약 ]',\n text: '2026-03-05 16:01:00 정기 점검 안내 - 작업영역 / 영향도 : 서비스 순단 발생 가능 / 작업자 : 홍길동',\n time: '11달전',\n },\n {\n typeLabel: '[ 긴급작업 ]',\n text: '장비명 패치 및 재부팅 예정 서비스 영향 범위 확인 및 복구 작업 진행 예정',\n time: '3일전',\n },\n {\n typeLabel: '[ 작업진행 ]',\n text: '본청 방화벽 정책 정기 동기화 작업 — 인가 대역 외 차단 룰 갱신',\n time: '2시간전',\n },\n {\n typeLabel: '[ 작업완료 ]',\n text: '망분리 연계 스위치 펌웨어 v4.12 패치 완료 및 무중단 절체 시험',\n time: '어제',\n },\n]\n\nexport const STN_ALERT_CENTER_DEMO_DEPLOY: StnAlertCenterWorkItem[] = [\n {\n typeLabel: '[ 공사예약 ]',\n text: '2026-03-05 16:01:00 정기 점검 안내 - 공사영역 / 영향도 : 서비스 순단 발생 가능',\n time: '11달전',\n },\n {\n typeLabel: '[ 긴급공사 ]',\n text: '장비명 패치 및 재부팅 예정 — 시작 : 2026-03-05 16:01:00 / 예상 소요시간 : 1시간',\n time: '3일전',\n },\n {\n typeLabel: '[ 통신공사 ]',\n text: '제2별관 4층 광케이블 포설 및 노후 패치패널 전면 교체 공사',\n time: '1주일전',\n },\n {\n typeLabel: '[ 전원공사 ]',\n text: '전산실 수변전설비 정기 안전 점검 및 비상 발전기 가동 시험',\n time: '2주일전',\n },\n]\n\nexport const STN_ALERT_CENTER_INTEGRATION_USAGE = `import {\n StnAlertCenterPanel,\n StnSideNavigation,\n StnLayerShell,\n} from '@stn-uiux/pub-ui-react'\n\nexport function AppChrome() {\n const [alertOpen, setAlertOpen] = useState(false)\n\n return (\n <StnLayerShell\n gnb={\n <StnSideNavigation>\n <StnSideNavigation.Header>\n <StnSideNavigation.Logo />\n <StnSideNavigation.Toggle />\n </StnSideNavigation.Header>\n <StnSideNavigation.Menu>\n <StnSideNavigation.Item label=\"대시보드\" active />\n </StnSideNavigation.Menu>\n <StnSideNavigation.Spacer />\n <StnSideNavigation.Footer curved>\n <StnSideNavigation.Watermark />\n <StnSideNavigation.Item\n label=\"알림\"\n badge={12}\n onClick={() => setAlertOpen(!alertOpen)}\n />\n </StnSideNavigation.Footer>\n </StnSideNavigation>\n }\n >\n <main>…본문…</main>\n {alertOpen && (\n <StnAlertCenterPanel\n alerts={alerts}\n workItems={workItems}\n deployItems={deployItems}\n onClose={() => setAlertOpen(false)}\n />\n )}\n </StnLayerShell>\n )\n}`\n\nexport const STN_GNB_ALERT_INTEGRATION_USAGE = STN_ALERT_CENTER_INTEGRATION_USAGE\n\nexport const STN_ALERT_CENTER_USAGE = `import { StnAlertCenterPanel } from '@stn-uiux/pub-ui-react'\n\n<StnAlertCenterPanel\n alerts={alerts}\n workItems={workItems}\n deployItems={deployItems}\n onClose={() => setOpen(false)}\n/>`\n\nexport const STN_ALERT_CENTER_USAGE_HTML = `<!-- Pub stn-alert-center — GNB 옆 float -->\n<div class=\"stn-alert-center gnb_alert_modal\" id=\"gnb_alert_modal\" style=\"display: block\">\n <div class=\"stn-alert-center__header alert_header\">\n <div class=\"stn-alert-center__header-left header_left\">\n <span class=\"stn-alert-center__title title\">알림센터</span>\n <div class=\"stn-alert-center__toggle alert_toggle\">\n <input type=\"radio\" name=\"gnb-alert-tab\" id=\"gnb-alert-tab-error\" checked />\n <label for=\"gnb-alert-tab-error\">장애</label>\n <input type=\"radio\" name=\"gnb-alert-tab\" id=\"gnb-alert-tab-work\" />\n <label for=\"gnb-alert-tab-work\">작업</label>\n <input type=\"radio\" name=\"gnb-alert-tab\" id=\"gnb-alert-tab-deploy\" />\n <label for=\"gnb-alert-tab-deploy\">공사</label>\n </div>\n </div>\n <button type=\"button\" class=\"stn-alert-center__close close_alert_modal\" aria-label=\"닫기\"></button>\n </div>\n <div class=\"stn-alert-center__list-wrap alert_list_wrap\">\n <ul class=\"stn-alert-center__list alert_list\">\n <li class=\"stn-alert-center__item alert_item\">\n <span class=\"stn-alert-center__dot dot\" aria-hidden=\"true\"></span>\n <span class=\"stn-badge stn-badge--filled stn-badge--critical\">CR</span>\n <span class=\"stn-alert-center__title-cell title_cell\">Ping 수집 장애</span>\n <span class=\"stn-alert-center__desc-cell desc_cell\">장비 응답 없음</span>\n <span class=\"stn-alert-center__time-cell time_cell\">11달전</span>\n </li>\n </ul>\n </div>\n</div>`\n"],"mappings":";AAEO,IAAM,yBACX;AAMK,IAAM,2BAA8D;AAAA,EACzE,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AACV;AAEO,IAAM,wBAIP;AAAA,EACJ,EAAE,IAAI,SAAS,OAAO,gBAAM,eAAe,kBAAkB;AAAA,EAC7D,EAAE,IAAI,QAAQ,OAAO,gBAAM,eAAe,iBAAiB;AAAA,EAC3D,EAAE,IAAI,UAAU,OAAO,gBAAM,eAAe,mBAAmB;AACjE;AAoBO,IAAM,+BAA0D;AAAA,EACrE;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,6BAAuD;AAAA,EAClE;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAEO,IAAM,+BAAyD;AAAA,EACpE;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAEO,IAAM,qCAAqC;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6C3C,IAAM,kCAAkC;AAExC,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS/B,IAAM,8BAA8B;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;","names":[]}
@@ -1,3 +0,0 @@
1
- <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect x="0.75" y="0.75" width="16.5" height="16.5" rx="2.25" stroke="#C8D0D9" stroke-width="1.5" stroke-linejoin="round"/>
3
- </svg>
@@ -1,3 +0,0 @@
1
- <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <circle cx="9" cy="9" r="7.5" stroke="#C8D0D9" stroke-width="3"/>
3
- </svg>
@@ -1,227 +0,0 @@
1
- @charset "utf-8";
2
- /**
3
- * StnSeverityBadge — 관제 알람 심각도 뱃지 및 필터
4
- *
5
- * 위험도 클래스: critical · major · minor · warning
6
- * 크기 클래스: sm · md · lg
7
- *
8
- * Modes:
9
- * - `badge`: 상태 표시용 뱃지 (height: var(--stn-severity-badge-height), font: 11px)
10
- * - `filter`: 대시보드 다중 필터 토글용 (width: var(--stn-severity-filter-width), height: var(--stn-severity-filter-height), font: 14px)
11
- *
12
- * 100% 시맨틱 토큰 SSOT 기반 구축
13
- */
14
-
15
- .stn-severity-filter-group {
16
- display: inline-flex;
17
- align-items: center;
18
- gap: var(--stn-space-8, 8px);
19
- flex-wrap: wrap;
20
- }
21
-
22
- .stn-severity-badge {
23
- box-sizing: border-box;
24
- display: inline-flex;
25
- align-items: center;
26
- justify-content: center;
27
- gap: var(--stn-space-2, 2px);
28
- border-radius: var(--stn-radius-4, 4px);
29
- font-family: var(--stn-font-body, Pretendard, sans-serif);
30
- line-height: 1.2;
31
- user-select: none;
32
- vertical-align: middle;
33
- white-space: nowrap;
34
- transition: opacity 0.15s ease, filter 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
35
- }
36
-
37
- /* Shape (기본 4px rounded vs 9999px round 알약형) */
38
- .stn-severity-badge.round,
39
- .stn-severity-badge.rounded-full {
40
- border-radius: var(--stn-radius-circle, 9999px);
41
- }
42
-
43
- /* 1. 기본 뱃지 모드 (Badge - Display: sm / md / lg) */
44
- .stn-severity-badge.badge,
45
- .stn-severity-badge:not(.filter) {
46
- height: var(--stn-severity-badge-height-md, var(--stn-severity-badge-height, var(--stn-size-20, 20px)));
47
- padding: var(--stn-severity-badge-padding-md, var(--stn-severity-badge-padding, var(--stn-space-2, 2px) var(--stn-space-8, 8px)));
48
- font-size: var(--stn-font-size-11, 11px);
49
- font-weight: var(--stn-font-weight-bold, 700);
50
- letter-spacing: -0.1px;
51
- }
52
-
53
- .stn-severity-badge.badge .stn-severity-badge__icon,
54
- .stn-severity-badge:not(.filter) .stn-severity-badge__icon {
55
- width: var(--stn-severity-badge-icon-size-md, var(--stn-severity-badge-icon-size, var(--stn-size-14, 14px)));
56
- height: var(--stn-severity-badge-icon-size-md, var(--stn-severity-badge-icon-size, var(--stn-size-14, 14px)));
57
- }
58
-
59
- /* Sizes: sm (18px) */
60
- .stn-severity-badge.sm {
61
- height: var(--stn-severity-badge-height-sm, var(--stn-size-18, 18px));
62
- padding: var(--stn-severity-badge-padding-sm, var(--stn-space-2, 2px) var(--stn-space-6, 6px));
63
- font-size: var(--stn-font-size-10, 10px);
64
- gap: var(--stn-space-2, 2px);
65
- }
66
-
67
- .stn-severity-badge.sm .stn-severity-badge__icon {
68
- width: var(--stn-severity-badge-icon-size-sm, var(--stn-size-12, 12px));
69
- height: var(--stn-severity-badge-icon-size-sm, var(--stn-size-12, 12px));
70
- }
71
-
72
- /* Sizes: md (20px - 기본) */
73
- .stn-severity-badge.md {
74
- height: var(--stn-severity-badge-height-md, var(--stn-size-20, 20px));
75
- padding: var(--stn-severity-badge-padding-md, var(--stn-space-2, 2px) var(--stn-space-8, 8px));
76
- font-size: var(--stn-font-size-11, 11px);
77
- gap: var(--stn-space-2, 2px);
78
- }
79
-
80
- .stn-severity-badge.md .stn-severity-badge__icon {
81
- width: var(--stn-severity-badge-icon-size-md, var(--stn-size-14, 14px));
82
- height: var(--stn-severity-badge-icon-size-md, var(--stn-size-14, 14px));
83
- }
84
-
85
- /* Sizes: lg (24px) */
86
- .stn-severity-badge.lg {
87
- height: var(--stn-severity-badge-height-lg, var(--stn-size-24, 24px));
88
- padding: var(--stn-severity-badge-padding-lg, var(--stn-space-4, 4px) var(--stn-space-10, 10px));
89
- font-size: var(--stn-font-size-12, 12px);
90
- gap: var(--stn-space-4, 4px);
91
- }
92
-
93
- .stn-severity-badge.lg .stn-severity-badge__icon {
94
- width: var(--stn-severity-badge-icon-size-lg, var(--stn-size-16, 16px));
95
- height: var(--stn-severity-badge-icon-size-lg, var(--stn-size-16, 16px));
96
- }
97
-
98
- /* 2. 아이콘 전용 모드 (Icon-Only - 정사각 4px / 원형 9999px) */
99
- .stn-severity-badge.icon-only {
100
- width: var(--stn-severity-badge-height-md, var(--stn-size-20, 20px));
101
- height: var(--stn-severity-badge-height-md, var(--stn-size-20, 20px));
102
- padding: 0;
103
- gap: 0;
104
- flex-shrink: 0;
105
- }
106
-
107
- .stn-severity-badge.icon-only.sm {
108
- width: var(--stn-severity-badge-height-sm, var(--stn-size-18, 18px));
109
- height: var(--stn-severity-badge-height-sm, var(--stn-size-18, 18px));
110
- padding: 0;
111
- }
112
-
113
- .stn-severity-badge.icon-only.md {
114
- width: var(--stn-severity-badge-height-md, var(--stn-size-20, 20px));
115
- height: var(--stn-severity-badge-height-md, var(--stn-size-20, 20px));
116
- padding: 0;
117
- }
118
-
119
- .stn-severity-badge.icon-only.lg {
120
- width: var(--stn-severity-badge-height-lg, var(--stn-size-24, 24px));
121
- height: var(--stn-severity-badge-height-lg, var(--stn-size-24, 24px));
122
- padding: 0;
123
- }
124
-
125
- .stn-severity-badge.icon-only .stn-severity-badge__label {
126
- display: none;
127
- }
128
-
129
- /* 3. 필터 모드 (Filter Toggle - 52px x 26px) */
130
- .stn-severity-badge.filter {
131
- width: var(--stn-severity-filter-width, var(--stn-size-52, 52px));
132
- height: var(--stn-severity-filter-height, var(--stn-size-26, 26px));
133
- padding: var(--stn-space-4, 4px);
134
- font-size: var(--stn-font-size-14, 14px);
135
- font-weight: var(--stn-font-weight-bold, 700);
136
- cursor: pointer;
137
- background: transparent;
138
- }
139
-
140
- .stn-severity-badge.filter .stn-severity-badge__icon {
141
- width: var(--stn-severity-icon-size, var(--stn-size-16, 16px));
142
- height: var(--stn-severity-icon-size, var(--stn-size-16, 16px));
143
- }
144
-
145
- .stn-severity-badge.filter:hover {
146
- filter: brightness(1.15);
147
- }
148
-
149
- .stn-severity-badge.filter:active {
150
- filter: brightness(0.92);
151
- }
152
-
153
- /* 필터 비활성 상태 */
154
- .stn-severity-badge.filter.is-inactive,
155
- .stn-severity-badge.filter:not(.is-active) {
156
- opacity: 0.35;
157
- filter: grayscale(0.5);
158
- box-shadow: none !important;
159
- }
160
-
161
- .stn-severity-badge.filter.is-inactive:hover,
162
- .stn-severity-badge.filter:not(.is-active):hover {
163
- opacity: 0.65;
164
- filter: grayscale(0.2);
165
- }
166
-
167
- /* 아이콘 래퍼 */
168
- .stn-severity-badge__icon {
169
- display: inline-flex;
170
- align-items: center;
171
- justify-content: center;
172
- flex-shrink: 0;
173
- }
174
-
175
- .stn-severity-badge__icon img,
176
- .stn-severity-badge__icon svg {
177
- display: block;
178
- width: 100%;
179
- height: 100%;
180
- }
181
-
182
- .stn-severity-badge__label {
183
- display: inline-block;
184
- line-height: 1;
185
- }
186
-
187
- /* ==========================================================================
188
- 3. 심각도 등급별 색상 (시맨틱 토큰 연동)
189
- ========================================================================== */
190
-
191
- .stn-severity-badge.critical {
192
- --stn-badge-glow-color: var(--stn-severity-glow);
193
- background: var(--stn-severity-critical-bg);
194
- border: 1px solid var(--stn-severity-critical-border);
195
- color: var(--stn-severity-fg);
196
- }
197
-
198
- .stn-severity-badge.major {
199
- --stn-badge-glow-color: var(--stn-severity-glow-major);
200
- background: var(--stn-severity-major-bg);
201
- border: 1px solid var(--stn-severity-major-border);
202
- color: var(--stn-severity-fg);
203
- }
204
-
205
- .stn-severity-badge.minor {
206
- --stn-badge-glow-color: var(--stn-severity-glow-minor);
207
- background: var(--stn-severity-minor-bg);
208
- border: 1px solid var(--stn-severity-minor-border);
209
- color: var(--stn-severity-fg);
210
- }
211
-
212
- .stn-severity-badge.warning {
213
- --stn-badge-glow-color: var(--stn-severity-glow-warning);
214
- background: var(--stn-severity-warning-bg);
215
- border: 1px solid var(--stn-severity-warning-border);
216
- color: var(--stn-severity-fg);
217
- }
218
-
219
- /* ==========================================================================
220
- 4. Glow 발광 변형 (.glow)
221
- ========================================================================== */
222
-
223
- .stn-severity-badge.glow {
224
- box-shadow: 0 0 var(--stn-space-8, 8px) var(--stn-badge-glow-color);
225
- }
226
-
227
-