@stn-uiux/pub-ui 0.1.77 → 0.1.79

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 (51) hide show
  1. package/dist/{chunk-2ZYBBVBT.js → chunk-36QC3ZAD.js} +2 -2
  2. package/dist/{chunk-2ZYBBVBT.js.map → chunk-36QC3ZAD.js.map} +1 -1
  3. package/dist/{chunk-75GHU6VI.js → chunk-G4SOYIHZ.js} +11 -7
  4. package/dist/chunk-G4SOYIHZ.js.map +1 -0
  5. package/dist/{chunk-3CYSR7V4.js → chunk-QGC3IK52.js} +2 -2
  6. package/dist/{chunk-3CYSR7V4.js.map → chunk-QGC3IK52.js.map} +1 -1
  7. package/dist/{chunk-7YKAIENZ.js → chunk-RVYQ7WL3.js} +2 -7
  8. package/dist/{chunk-7YKAIENZ.js.map → chunk-RVYQ7WL3.js.map} +1 -1
  9. package/dist/chunk-SGILJA4O.js +9 -0
  10. package/dist/chunk-SGILJA4O.js.map +1 -0
  11. package/dist/{chunk-FSSMH6VS.js → chunk-TEK632EJ.js} +9 -46
  12. package/dist/chunk-TEK632EJ.js.map +1 -0
  13. package/dist/chunk-W54SOSHJ.js +24 -0
  14. package/dist/chunk-W54SOSHJ.js.map +1 -0
  15. package/dist/chunk-WKQLAHIG.js +1 -0
  16. package/dist/cli.js +10 -10
  17. package/dist/data/index.d.ts +2 -1
  18. package/dist/data/index.js +84 -76
  19. package/dist/data/stnDivider.d.ts +9 -0
  20. package/dist/data/stnDivider.js +13 -0
  21. package/dist/data/stnDivider.js.map +1 -0
  22. package/dist/data/stnLayer0Background.d.ts +9 -43
  23. package/dist/data/stnLayer0Background.js +1 -3
  24. package/dist/data/stnLayout.d.ts +1 -1
  25. package/dist/data/stnLayout.js +1 -1
  26. package/dist/data/stnLogin.d.ts +1 -1
  27. package/dist/data/stnLogin.js +1 -1
  28. package/dist/data/stnPackageVersion.d.ts +2 -2
  29. package/dist/data/stnPackageVersion.js +1 -1
  30. package/dist/data/stnPopup.d.ts +8 -8
  31. package/dist/data/stnPopup.js +1 -1
  32. package/dist/data/stnSectionSide.d.ts +1 -5
  33. package/dist/data/stnSectionSide.js +1 -1
  34. package/dist/index.d.ts +2 -1
  35. package/dist/index.js +84 -76
  36. package/package.json +1 -1
  37. package/styles/components/stn-divider.css +153 -0
  38. package/styles/components/stn-label-prefix.css +4 -2
  39. package/styles/components/stn-popup.css +44 -104
  40. package/styles/layouts/stn-layer0-bg.css +92 -26
  41. package/styles/patterns/stn-section-side.css +1 -9
  42. package/styles/style-pub.css +1 -0
  43. package/styles/tokens/stn-colors-semantic.css +10 -1
  44. package/styles/tokens/stn-size-semantic.css +8 -0
  45. package/styles/tokens/stn-spacing-semantic.css +15 -0
  46. package/dist/chunk-75GHU6VI.js.map +0 -1
  47. package/dist/chunk-FSSMH6VS.js.map +0 -1
  48. package/dist/chunk-O77GW7PM.js +0 -1
  49. package/dist/chunk-RSKMNZIS.js +0 -9
  50. package/dist/chunk-RSKMNZIS.js.map +0 -1
  51. /package/dist/{chunk-O77GW7PM.js.map → chunk-WKQLAHIG.js.map} +0 -0
@@ -17,8 +17,8 @@
17
17
  box-sizing: border-box;
18
18
  }
19
19
 
20
- .stn-pop--open {
21
- display: flex !important;
20
+ .stn-pop.stn-pop--open {
21
+ display: flex;
22
22
  align-items: center;
23
23
  justify-content: center;
24
24
  }
@@ -41,8 +41,8 @@
41
41
  overflow: hidden;
42
42
  box-sizing: border-box;
43
43
  background-color: var(--stn-pop-surface);
44
- border: 1px solid var(--stn-pop-border);
45
- border-radius: var(--stn-radius-pop-wrap, var(--stn-radius-8));
44
+ border: var(--stn-pop-border-width) solid var(--stn-pop-border);
45
+ border-radius: var(--stn-radius-pop-wrap);
46
46
  box-shadow: var(--stn-pop-shadow);
47
47
  }
48
48
 
@@ -50,19 +50,28 @@
50
50
  .stn-pop__head {
51
51
  box-sizing: border-box;
52
52
  display: flex;
53
- flex-direction: column;
54
- justify-content: center;
55
- min-height: var(--stn-pop-header-height, var(--stn-size-56));
53
+ align-items: center;
54
+ justify-content: space-between;
55
+ gap: var(--stn-pop-head-gap);
56
+ min-height: var(--stn-pop-header-height);
56
57
  height: auto;
57
- padding: 12px 48px 12px 20px;
58
+ padding: var(--stn-pop-head-padding-y) var(--stn-pop-head-padding-x);
58
59
  margin: 0;
59
- border-bottom: 1px solid var(--stn-pop-divider);
60
+ border-bottom: var(--stn-pop-border-width) solid var(--stn-pop-divider);
61
+ }
62
+
63
+ .stn-pop__head-start {
64
+ display: flex;
65
+ flex-direction: column;
66
+ justify-content: center;
67
+ min-width: 0;
68
+ flex: 1 1 auto;
60
69
  }
61
70
 
62
71
  .stn-pop__head-row {
63
72
  display: flex;
64
73
  align-items: center;
65
- gap: var(--stn-space-8, 8px);
74
+ gap: var(--stn-pop-head-row-gap);
66
75
  flex-wrap: wrap;
67
76
  }
68
77
 
@@ -71,24 +80,24 @@
71
80
  color: var(--stn-pop-title);
72
81
  font-family: var(--stn-font-body);
73
82
  font-size: var(--stn-text-title-medium-size);
74
- line-height: var(--stn-line-height-tight, 1.25);
83
+ line-height: var(--stn-line-height-tight);
75
84
  font-weight: var(--stn-font-weight-semibold);
76
85
  letter-spacing: 0;
77
86
  }
78
87
 
79
88
  .stn-pop__subtitle {
80
- margin: 4px 0 0 0;
89
+ margin: var(--stn-pop-subtitle-margin-top) 0 0 0;
81
90
  font-family: var(--stn-font-body);
82
91
  font-size: var(--stn-text-body-small-size);
83
92
  color: var(--stn-text-subtle);
84
- line-height: var(--stn-line-height-normal, 1.5);
93
+ line-height: var(--stn-line-height-normal);
85
94
  }
86
95
 
87
96
  /* Body */
88
97
  .stn-pop__body {
89
98
  flex: 1 1 auto;
90
99
  min-height: 0;
91
- padding: var(--stn-space-20, 20px);
100
+ padding: var(--stn-pop-body-padding);
92
101
  overflow: auto;
93
102
  -webkit-overflow-scrolling: touch;
94
103
  background: transparent;
@@ -103,75 +112,8 @@
103
112
  /* 본문 레이아웃 — 배경은 .stn-pop__panel 만 (내부 투명) */
104
113
  .stn-pop__body .box_area,
105
114
  .stn-pop__body .box_area .box {
106
- background: transparent !important;
107
- background-color: transparent !important;
108
- background-image: none !important;
109
- box-shadow: none !important;
110
- }
111
-
112
- /* Close button — centered vertically in 56px header (top 14, right 16) */
113
- .stn-pop__close {
114
- position: absolute;
115
- top: 14px;
116
- right: 16px;
117
- box-sizing: border-box;
118
- width: var(--stn-pop-close-size) !important;
119
- height: var(--stn-pop-close-size) !important;
120
- min-width: var(--stn-pop-close-size);
121
- min-height: var(--stn-pop-close-size);
122
- padding: 0;
123
- border: none;
124
- border-radius: var(--stn-radius-sm);
125
- background-color: transparent;
126
- background-image: none;
127
- opacity: 1;
128
- color: var(--stn-pop-title);
129
- transition: background-color 0.15s ease, color 0.15s ease;
130
- }
131
-
132
- .stn-pop__close::before,
133
- .stn-pop__close::after {
134
- content: none;
135
- display: none;
136
- }
137
-
138
- /* Legacy HTML close (no React glyph) — Figma icon/line/x mask */
139
- .stn-pop__close:not(.icon, .stn-btn--icon):not(.stn-icon-btn--with-glyph) {
140
- background-color: transparent;
141
- background-image: none;
142
- -webkit-mask: none;
143
- mask: none;
144
- color: var(--stn-pop-title);
145
- }
146
-
147
- .stn-pop__close:not(.icon, .stn-btn--icon):not(.stn-icon-btn--with-glyph)::before {
148
- content: '';
149
- display: block;
150
- position: absolute;
151
- top: 50%;
152
- left: 50%;
153
- width: var(--stn-pop-close-icon);
154
- height: var(--stn-pop-close-icon);
155
- margin: calc(var(--stn-pop-close-icon) / -2) 0 0 calc(var(--stn-pop-close-icon) / -2);
156
- background-color: currentColor;
157
- mask-image: url('../@assets/svg/system/line/x.svg');
158
- mask-position: center;
159
- mask-size: contain;
160
- mask-repeat: no-repeat;
161
- -webkit-mask-image: url('../@assets/svg/system/line/x.svg');
162
- -webkit-mask-position: center;
163
- -webkit-mask-size: contain;
164
- -webkit-mask-repeat: no-repeat;
165
- }
166
-
167
- .stn-pop__close:not(.icon, .stn-btn--icon):not(.stn-icon-btn--with-glyph)::after {
168
- content: none;
169
- display: none;
170
- }
171
-
172
- .stn-pop__close:hover {
173
- background-color: var(--stn-pop-close-hover-bg);
174
- color: var(--stn-pop-close-hover-fg);
115
+ background: transparent;
116
+ box-shadow: none;
175
117
  }
176
118
 
177
119
  /* —— Size modifiers — active width on .stn-pop —— */
@@ -216,7 +158,7 @@
216
158
 
217
159
  /* 문서·패턴 프리뷰 — 인라인 시연 */
218
160
  .stn-pop-uc-inline.stn-pop {
219
- display: flex !important;
161
+ display: flex;
220
162
  position: relative;
221
163
  top: auto;
222
164
  right: auto;
@@ -230,7 +172,7 @@
230
172
  .stn-pop-stack {
231
173
  position: fixed;
232
174
  inset: 0;
233
- z-index: var(--stn-elevation-z-2, 200);
175
+ z-index: var(--stn-elevation-z-2);
234
176
  pointer-events: none;
235
177
  }
236
178
 
@@ -284,7 +226,7 @@
284
226
  .stn-pop-stack--inline {
285
227
  position: absolute;
286
228
  inset: 0;
287
- z-index: var(--stn-elevation-z-2, 200);
229
+ z-index: var(--stn-elevation-z-2);
288
230
  min-height: 0;
289
231
  pointer-events: auto;
290
232
  }
@@ -292,24 +234,24 @@
292
234
  .stn-pop-stack--inline > .stn-layer-dim {
293
235
  position: absolute;
294
236
  inset: 0;
295
- z-index: var(--stn-elevation-z-2, 200);
237
+ z-index: var(--stn-elevation-z-2);
296
238
  border-radius: inherit;
297
239
  }
298
240
 
299
241
  .stn-pop-stack--inline > .stn-layer-2 {
300
242
  position: absolute;
301
243
  inset: 0;
302
- z-index: calc(var(--stn-elevation-z-2, 200) + 1);
244
+ z-index: calc(var(--stn-elevation-z-2) + 1);
303
245
  display: flex;
304
246
  align-items: center;
305
247
  justify-content: center;
306
- padding: var(--stn-pop-gutter, 16px);
248
+ padding: var(--stn-pop-gutter);
307
249
  box-sizing: border-box;
308
250
  pointer-events: none;
309
251
  }
310
252
 
311
253
  .stn-pop-stack--inline > .stn-layer-2 > .stn-pop {
312
- display: flex !important;
254
+ display: flex;
313
255
  pointer-events: auto;
314
256
  }
315
257
 
@@ -319,12 +261,12 @@
319
261
  flex-wrap: wrap;
320
262
  align-items: center;
321
263
  justify-content: flex-end;
322
- gap: var(--stn-space-8, 8px);
264
+ gap: var(--stn-pop-actions-gap);
323
265
  box-sizing: border-box;
324
- min-height: var(--stn-pop-footer-height, var(--stn-size-56));
266
+ min-height: var(--stn-pop-footer-height);
325
267
  margin-top: 0;
326
- padding: 12px 20px;
327
- border-top: 1px solid var(--stn-pop-divider);
268
+ padding: var(--stn-pop-actions-padding-y) var(--stn-pop-actions-padding-x);
269
+ border-top: var(--stn-pop-border-width) solid var(--stn-pop-divider);
328
270
  background-color: var(--stn-pop-surface);
329
271
  }
330
272
 
@@ -343,19 +285,19 @@
343
285
  /* —— Master-Detail Split Layout (.stn-pop-split) —— */
344
286
  .stn-pop-split {
345
287
  display: flex;
346
- gap: var(--stn-space-20, 20px);
347
- min-height: 400px;
288
+ gap: var(--stn-pop-split-gap);
289
+ min-height: var(--stn-pop-split-min-height);
348
290
  height: 100%;
349
291
  box-sizing: border-box;
350
292
  }
351
293
 
352
294
  .stn-pop-split__aside {
353
- width: var(--stn-pop-split-aside-width, 280px);
354
- min-width: var(--stn-pop-split-aside-width, 280px);
355
- max-width: 320px;
295
+ width: var(--stn-pop-split-aside-width);
296
+ min-width: var(--stn-pop-split-aside-width);
297
+ max-width: var(--stn-pop-split-aside-max-width);
356
298
  flex-shrink: 0;
357
- border-right: 1px solid var(--stn-pop-divider);
358
- padding-right: var(--stn-space-16, 16px);
299
+ border-right: var(--stn-pop-border-width) solid var(--stn-pop-divider);
300
+ padding-right: var(--stn-pop-split-aside-padding-right);
359
301
  display: flex;
360
302
  flex-direction: column;
361
303
  overflow-y: auto;
@@ -367,9 +309,7 @@
367
309
  min-width: 0;
368
310
  display: flex;
369
311
  flex-direction: column;
370
- gap: var(--stn-space-16, 16px);
312
+ gap: var(--stn-pop-split-main-gap);
371
313
  overflow-y: auto;
372
314
  box-sizing: border-box;
373
315
  }
374
-
375
-
@@ -1,10 +1,56 @@
1
1
  @charset "utf-8";
2
2
  /**
3
3
  * STN Layout — L0 Background Layer (z-index: 0)
4
- * HTML: `class="stn-layer0-bg color default"` · `class="stn-layer0-bg image"`
5
- * modifier는 `.stn-layer0-bg.color` / `.stn-layer0-bg.image`로만 매칭
4
+ *
5
+ * 순수 CSS 토큰(Token-driven) 아키텍처:
6
+ * 테마(Default/Blue) 및 모드(Light/Dark)에 따른 배경 이미지를 CSS 변수(--stn-l0-*-bg)로 선언하여,
7
+ * 컴포넌트는 단 한 줄의 background-image: var(...) 만으로 테마 전환을 자동 처리합니다.
6
8
  */
7
9
 
10
+ /* ==========================================================================
11
+ 1. L0 Background Image Tokens (CDN)
12
+ ========================================================================== */
13
+
14
+ /* 1-1. Default Theme — Light Mode */
15
+ [data-mode='light'],
16
+ [data-theme='default'][data-mode='light'] {
17
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/dashboard-light.png');
18
+ --stn-l0-list-bg: var(--stn-gradient-l0-background);
19
+ --stn-l0-showroom-a-bg: url('https://stn-design.vercel.app/images/layer0/showroom-a-light.png');
20
+ --stn-l0-showroom-b-bg: url('https://stn-design.vercel.app/images/layer0/showroom-b-light.png');
21
+ --stn-l0-map-light-bg: url('https://stn-design.vercel.app/images/layer0/map-light.png');
22
+ --stn-l0-login-bg: url('https://stn-design.vercel.app/images/layer0/login-light.png');
23
+ }
24
+
25
+ /* 1-2. Default Theme — Dark Mode */
26
+ :root,
27
+ [data-mode='dark'],
28
+ [data-theme='default'][data-mode='dark'] {
29
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/dashboard-dark.png');
30
+ --stn-l0-list-bg: var(--stn-gradient-l0-background);
31
+ --stn-l0-showroom-a-bg: url('https://stn-design.vercel.app/images/layer0/showroom-a-dark.png');
32
+ --stn-l0-showroom-b-bg: url('https://stn-design.vercel.app/images/layer0/showroom-b-dark.png');
33
+ --stn-l0-map-light-bg: url('https://stn-design.vercel.app/images/layer0/map-dark.png');
34
+ --stn-l0-login-bg: url('https://stn-design.vercel.app/images/layer0/login-dark.png');
35
+ }
36
+
37
+ /* 1-3. Blue Theme — Light Mode */
38
+ [data-theme='blue'][data-mode='light'] {
39
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/infomap-light.png');
40
+ --stn-l0-list-bg: url('https://stn-design.vercel.app/images/layer0/infomap-light-none.png');
41
+ }
42
+
43
+ /* 1-4. Blue Theme — Dark Mode */
44
+ [data-theme='blue'][data-mode='dark'] {
45
+ --stn-l0-dashboard-bg: url('https://stn-design.vercel.app/images/layer0/infomap-dark.png');
46
+ --stn-l0-list-bg: url('https://stn-design.vercel.app/images/layer0/infomap-dark-none.png');
47
+ }
48
+
49
+
50
+ /* ==========================================================================
51
+ 2. Base Layer 0 Shell
52
+ ========================================================================== */
53
+
8
54
  .stn-layer0-bg {
9
55
  position: absolute;
10
56
  inset: 0;
@@ -13,30 +59,63 @@
13
59
  z-index: var(--stn-elevation-z-0, 0);
14
60
  overflow: hidden;
15
61
  pointer-events: none;
62
+ background-size: cover;
63
+ background-position: center;
64
+ background-repeat: no-repeat;
16
65
  }
17
66
 
18
- /* 1. Color preset — named look은 `.default` (다크/라이트 모두 순수 단색 바닥면) */
67
+ /* Color preset */
19
68
  .stn-layer0-bg.color,
20
69
  .stn-layer0-bg.color.default {
21
70
  background-color: var(--stn-elevation-surface-0);
22
71
  background-image: none;
23
72
  }
24
73
 
25
- /* 2. Gradient preset — 공식 앰비언트 그라데이션 바닥면 (다크/라이트 자동 전환) */
74
+ /* Gradient preset */
26
75
  .stn-layer0-bg.gradient {
27
76
  background-color: var(--stn-elevation-surface-0);
28
77
  background-image: var(--stn-gradient-l0-background);
29
- background-size: cover;
30
- background-position: center;
31
- background-repeat: no-repeat;
32
78
  }
33
79
 
34
- /* Image preset */
35
- .stn-layer0-bg.image {
80
+ /* List preset — 테마 반응형 바닥면 (Default: 그라데이션, Blue: 3D infomap-none) */
81
+ .stn-layer0-bg.list {
82
+ background-color: var(--stn-elevation-surface-0);
83
+ background-image: var(--stn-l0-list-bg);
84
+ }
85
+
86
+ /* Dashboard preset — 테마 반응형 바닥면 (Default: 웨이브, Blue: 3D infomap) */
87
+ .stn-layer0-bg.dashboard {
36
88
  background-color: var(--stn-elevation-surface-0);
89
+ background-image: var(--stn-l0-dashboard-bg);
37
90
  }
38
91
 
92
+ /* 기타 이미지 프리셋 */
93
+ .stn-layer0-bg.showroom-a {
94
+ background-image: var(--stn-l0-showroom-a-bg);
95
+ }
96
+
97
+ .stn-layer0-bg.showroom-b {
98
+ background-image: var(--stn-l0-showroom-b-bg);
99
+ }
100
+
101
+ .stn-layer0-bg.map-light {
102
+ background-image: var(--stn-l0-map-light-bg);
103
+ }
104
+
105
+ .stn-layer0-bg.login {
106
+ background-image: var(--stn-l0-login-bg);
107
+ }
108
+
109
+ /* 레거시/호환용 프리셋 */
110
+ .stn-layer0-bg.infomap {
111
+ background-image: var(--stn-l0-dashboard-bg);
112
+ }
113
+
114
+ .stn-layer0-bg.infomap-none {
115
+ background-image: var(--stn-l0-list-bg);
116
+ }
39
117
 
118
+ /* 커스텀 이미지 URL을 src로 직접 전달한 경우 호환용 미디어 영역 */
40
119
  .stn-layer0-bg__media {
41
120
  position: absolute;
42
121
  inset: 0;
@@ -51,15 +130,6 @@
51
130
  object-position: center;
52
131
  }
53
132
 
54
- /* Dark/Light image switching */
55
- .stn-layer0-bg__img.light {
56
- display: none;
57
- }
58
-
59
- .stn-layer0-bg__img.dark {
60
- display: block;
61
- }
62
-
63
133
  [data-mode='dark'] .stn-layer0-bg__img.light {
64
134
  display: none;
65
135
  }
@@ -92,15 +162,11 @@
92
162
  display: block;
93
163
  }
94
164
 
95
- .stn-layer0-bg__overlay.radial {
165
+ [data-mode='dark'] .stn-layer0-bg__overlay.radial {
96
166
  display: block;
97
167
  background: radial-gradient(
98
- 50% 50% at 50% 50%,
99
- color-mix(in srgb, var(--stn-layer0-radial) 100%, transparent) 26.442%,
100
- color-mix(in srgb, var(--stn-layer0-radial) 30%, transparent) 100%
168
+ ellipse 70% 60% at 50% 45%,
169
+ transparent 0%,
170
+ color-mix(in srgb, var(--stn-static-black) 72%, transparent) 100%
101
171
  );
102
172
  }
103
-
104
- [data-mode='light'] .stn-layer0-bg__overlay.radial {
105
- display: none;
106
- }
@@ -21,15 +21,7 @@
21
21
  overflow: hidden;
22
22
  }
23
23
 
24
- /* translucent variant — 반투명 블러 글래스모피즘 외형 (테두리 및 그림자 없음) */
25
- .stn-section-side.translucent,
26
- .stn-section-side--translucent {
27
- background: var(--stn-section-side-bg-translucent);
28
- backdrop-filter: blur(var(--stn-section-side-translucent-blur, 8px));
29
- -webkit-backdrop-filter: blur(var(--stn-section-side-translucent-blur, 8px));
30
- border-color: var(--stn-section-side-border-translucent);
31
- box-shadow: none;
32
- }
24
+
33
25
 
34
26
  /* fullWidth prop 또는 부모 LNB 컨테이너 안에서 가로 100% 확장 지원 */
35
27
  .stn-section-side.is-full-width,
@@ -73,6 +73,7 @@
73
73
  @import './components/stn-topology.css';
74
74
  @import './components/stn-status.css';
75
75
  @import './components/stn-tabs.css';
76
+ @import './components/stn-divider.css';
76
77
 
77
78
  /* --- 5. Patterns (Composite UI Recipes) --- */
78
79
  @import './patterns/stn-section-side.css';
@@ -51,7 +51,7 @@
51
51
  --stn-elevation-surface-1: var(--stn-opacity-black-0);
52
52
  --stn-elevation-surface-2: var(--stn-gray-800);
53
53
  --stn-elevation-surface-widget: var(--stn-gray-850);
54
- --stn-drawer-bg: var(--stn-gray-750);
54
+ --stn-drawer-bg: var(--stn-gray-850);
55
55
  --stn-dim-bg: color-mix(in srgb, var(--stn-gray-950) 50%, transparent);
56
56
  --stn-dim-blur: 4px;
57
57
  --stn-input-bg: var(--stn-gray-900);
@@ -423,6 +423,7 @@
423
423
  --stn-pop-close-hover-bg: color-mix(in srgb, var(--stn-static-white) 10%, transparent);
424
424
  --stn-pop-close-hover-fg: var(--stn-static-white);
425
425
  --stn-pop-divider: var(--stn-gray-700);
426
+ --stn-divider-border: var(--stn-gray-750);
426
427
  --stn-progress-gradient-main: var(--stn-gradient-main);
427
428
  --stn-progress-gradient-primary: var(--stn-gradient-primary);
428
429
  --stn-progress-gradient-secondary: var(--stn-gradient-secondary);
@@ -1034,6 +1035,7 @@
1034
1035
  --stn-pop-close-hover-bg: color-mix(in srgb, var(--stn-gray-100) 80%, transparent);
1035
1036
  --stn-pop-close-hover-fg: var(--stn-gray-700);
1036
1037
  --stn-pop-divider: var(--stn-gray-200);
1038
+ --stn-divider-border: var(--stn-gray-200);
1037
1039
  --stn-progress-gradient-main: var(--stn-gradient-main);
1038
1040
  --stn-progress-gradient-primary: var(--stn-gradient-primary);
1039
1041
  --stn-progress-gradient-secondary: var(--stn-gradient-secondary);
@@ -1229,8 +1231,15 @@
1229
1231
 
1230
1232
  [data-theme='blue'][data-mode='dark'] {
1231
1233
  --stn-table-th-bg: var(--stn-blue-750);
1234
+ --stn-section-side-bg: var(--stn-opacity-black-25);
1235
+ --stn-section-side-border: var(--stn-border-subtle);
1236
+ --stn-input-border: var(--stn-gray-800);
1237
+ --stn-input-bg: var(--stn-opacity-black-25);
1238
+ --stn-search-requirement-bg: var(--stn-opacity-black-25);
1232
1239
  }
1233
1240
 
1234
1241
  [data-theme='blue'][data-mode='light'] {
1235
1242
  --stn-table-th-bg: var(--stn-blue-100);
1243
+ --stn-section-side-bg: var(--stn-opacity-white-25);
1244
+ --stn-section-side-border: var(--stn-border-subtle);
1236
1245
  }
@@ -62,6 +62,11 @@
62
62
  --stn-icon-box-size-xl: var(--stn-size-44);
63
63
  --stn-pop-header-height: var(--stn-size-56);
64
64
  --stn-pop-footer-height: var(--stn-size-56);
65
+ --stn-pop-border-width: var(--stn-size-1);
66
+ --stn-pop-split-min-height: var(--stn-size-400);
67
+ --stn-pop-split-aside-width: var(--stn-size-280);
68
+ --stn-pop-split-aside-max-width: var(--stn-size-320);
69
+ --stn-pop-max-height: calc(100vh - var(--stn-pop-gutter) * 2);
65
70
  --stn-segmented-item-height: var(--stn-size-32);
66
71
  --stn-segmented-item-height-sm: var(--stn-size-26);
67
72
  --stn-segmented-item-height-lg: var(--stn-size-40);
@@ -208,6 +213,9 @@
208
213
  --stn-badge-prominent-size: var(--stn-size-18);
209
214
  --stn-stack-divider-thickness: var(--stn-size-1);
210
215
  --stn-stack-divider-length: var(--stn-size-16);
216
+ --stn-divider-thickness: var(--stn-size-1);
217
+ --stn-divider-vertical-height: var(--stn-size-16);
218
+ --stn-divider-text-offset: var(--stn-size-24);
211
219
  --stn-skeleton-line-h: var(--stn-size-12);
212
220
  --stn-skeleton-block-min-h: var(--stn-size-48);
213
221
  --stn-skeleton-circle-size: var(--stn-size-40);
@@ -59,6 +59,18 @@
59
59
  --stn-chip-gap: var(--stn-space-4);
60
60
  --stn-chip-padding-y: var(--stn-space-0);
61
61
  --stn-pop-gutter: var(--stn-space-20);
62
+ --stn-pop-head-padding-y: var(--stn-space-12);
63
+ --stn-pop-head-padding-x: var(--stn-space-20);
64
+ --stn-pop-head-gap: var(--stn-space-12);
65
+ --stn-pop-head-row-gap: var(--stn-space-8);
66
+ --stn-pop-subtitle-margin-top: var(--stn-space-4);
67
+ --stn-pop-body-padding: var(--stn-space-20);
68
+ --stn-pop-actions-padding-y: var(--stn-space-12);
69
+ --stn-pop-actions-padding-x: var(--stn-space-20);
70
+ --stn-pop-actions-gap: var(--stn-space-8);
71
+ --stn-pop-split-gap: var(--stn-space-20);
72
+ --stn-pop-split-aside-padding-right: var(--stn-space-16);
73
+ --stn-pop-split-main-gap: var(--stn-space-16);
62
74
  --stn-text-field-padding-x-xl: var(--stn-space-16);
63
75
  --stn-text-field-padding-x-lg: var(--stn-space-12);
64
76
  --stn-text-field-padding-x-md: var(--stn-space-10);
@@ -255,6 +267,9 @@
255
267
  --stn-search-requirement-compact-padding-x: var(--stn-space-12);
256
268
  --stn-search-requirement-compact-gap: var(--stn-space-12);
257
269
  --stn-search-requirement-divider-margin-x: var(--stn-space-4);
270
+ --stn-divider-inset-margin: var(--stn-space-72);
271
+ --stn-divider-middle-margin: var(--stn-space-16);
272
+ --stn-divider-text-gap: var(--stn-space-16);
258
273
  --stn-tree-collapsed-row-padding-block: var(--stn-space-2);
259
274
  --stn-breadcrumb-gap-sm: var(--stn-space-8);
260
275
  --stn-breadcrumb-gap-md: var(--stn-space-16);
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnPopup.ts"],"sourcesContent":["/**\n * Pub HTML Popup (.stn-pop) — StnPopup shell · sizes · pattern\n */\n\nexport const STN_POPUP_INTRO =\n '사용자의 주의를 환기시키거나 추가 입력을 받는 팝업/모달 패턴입니다. React에서는 `<StnPopup>` 컴포넌트 하나만 사용하면 내부에서 배경 딤(Overlay)과 레이어 층을 자동으로 내장 처리해 줍니다.'\n\nexport const STN_POPUP_STACK_HTML = `<div class=\"stn-pop-stack\">\n <div\n class=\"stn-layer stn-elev-3 stn-elev--shell stn-elev--dim stn-pop-stack__dim\"\n data-stn-layer=\"3\"\n data-stn-layer-role=\"dim\"\n data-stn-layer-surface=\"dim\"\n >\n <button type=\"button\" class=\"stn-layer__dim-hit\" aria-label=\"닫기\"></button>\n </div>\n <div\n class=\"stn-layer stn-elev-4 stn-elev--shell stn-pop-stack__modal\"\n data-stn-layer=\"4\"\n data-stn-layer-role=\"modal\"\n data-stn-layer-surface=\"transparent\"\n >\n <!-- .stn-pop — 패널 셸 -->\n </div>\n</div>`\n\nexport const STN_POPUP_USAGE_HTML = `${STN_POPUP_STACK_HTML.replace(' <!-- .stn-pop — 패널 셸 -->', `<div class=\"stn-pop stn-pop--md stn-pop--open\">\n <div class=\"stn-pop__cont\">\n <div class=\"stn-pop__panel\">\n <div class=\"stn-pop__head\">\n <h4>제목</h4>\n </div>\n <button type=\"button\" class=\"stn-pop__close\" aria-label=\"닫기\"></button>\n <div class=\"stn-pop__body\"><!-- 본문 --></div>\n <div class=\"stn-pop__actions\"><!-- StnButton primary · secondary --></div>\n </div>\n </div>\n </div>`)}`\n\nexport const STN_POPUP_USAGE = `import { StnButton, StnPopup } from '@stn-uiux/pub-ui-react'\nimport { useState } from 'react'\n\nconst [open, setOpen] = useState(false)\n\n<StnButton size=\"M\" variant=\"contained\" onClick={() => setOpen(true)}>열기</StnButton>\n<StnPopup\n open={open}\n onClose={() => setOpen(false)}\n size=\"md\"\n title=\"제목\"\n actions={\n <StnButton size=\"S\" variant=\"contained\" onClick={() => setOpen(false)}>\n 확인\n </StnButton>\n }\n>\n 본문\n</StnPopup>`\n\nexport const STN_POPUP_RESPONSIVE_NOTE =\n '가로: `width: min(var(--stn-pop-active-width), calc(100vw - var(--stn-pop-gutter) * 2))` · `--full`: `calc(100vw - gutter×2)`. 세로: `.pop_con` overflow + `--stn-pop-max-height`.'\n\nexport const STN_POPUP_SHELL_PARTIAL =\n '01 PC_HTML_Revision/html/_partials/popup-shell.partial.html'\n\nexport const STN_POPUP_SYNC_CSS = [\n 'packages/stn-pub-ui/css/stn-pub-popup.css',\n '01 PC_HTML_Revision/resource/css/stn-pub-popup.css',\n 'style-pub.css · style.css → @import stn-popup.css',\n] as const\n\nexport const STN_POPUP_SIZES = [\n {\n id: 'xs',\n label: 'Extra Small',\n className: 'stn-pop--xs',\n width: '400px',\n token: '--stn-pop-width-xs',\n usage: '단순 확인 · 삭제/경고 확인 얼럿 · 상태 변경',\n },\n {\n id: 'sm',\n label: 'Small',\n className: 'stn-pop--sm',\n width: '520px',\n token: '--stn-pop-width-sm',\n usage: '1~2개 입력 숏 폼 · 단축 검색 · 명칭 변경',\n },\n {\n id: 'md',\n label: 'Medium',\n className: 'stn-pop--md',\n width: '680px',\n token: '--stn-pop-width-md',\n usage: '단일 입력 폼 · 사용자 설정 · 저장 확인 (권장 기본)',\n },\n {\n id: 'lg',\n label: 'Large',\n className: 'stn-pop--lg',\n width: '920px',\n token: '--stn-pop-width-lg',\n usage: '복합 필터 · 2열 폼 · 짧은 테이블 목록',\n },\n {\n id: 'xl',\n label: 'XL',\n className: 'stn-pop--xl',\n width: '1200px',\n token: '--stn-pop-width-xl',\n usage: '대형 데이터 테이블 · 다열 프로비저닝 폼 · 대형 상세',\n },\n {\n id: 'full',\n label: 'Full',\n className: 'stn-pop--full',\n width: 'calc(100vw − 40px)',\n token: '(viewport − gutter)',\n usage: '전체 화면 대시보드 설정 및 토폴로지 매핑',\n },\n] as const\n\nexport type StnPopupSizeId = (typeof STN_POPUP_SIZES)[number]['id']\n\n/** 레거시 `content.css` 고정 px → 권장 modifier (마이그레이션 참고) */\nexport function resolveStnPopupSizeFromWidth(px: number): StnPopupSizeId {\n if (px <= 400) return 'xs'\n if (px <= 480) return 'sm'\n if (px <= 640) return 'md'\n if (px <= 960) return 'lg'\n if (px <= 1200) return 'xl'\n return 'full'\n}\n\nexport const STN_POPUP_LEGACY_WIDTH_SAMPLES = [\n { popClass: 'batch_equip_pop', widthPx: 1780, suggested: 'full' as const },\n { popClass: 'template_history_pop', widthPx: 1565, suggested: 'full' as const },\n { popClass: 'real_time_view_pop', widthPx: 1500, suggested: 'full' as const },\n { popClass: 'select_equip_pop', widthPx: 1412, suggested: 'xl' as const },\n { popClass: 'equip_regist_pop', widthPx: 1070, suggested: 'xl' as const },\n { popClass: 'fail_measure_pop', widthPx: 1100, suggested: 'xl' as const },\n] as const\n\nexport const STN_POPUP_PARTS = [\n { part: 'Stack', selector: '.stn-pop-stack', note: 'Dim + Modal 래퍼 · StnLayer.Modal (L2)' },\n { part: 'Dim', selector: '.stn-layer-dim · .stn-elev--dim', note: 'L2 내장 scrim · blur · dim-hit 클릭 닫기' },\n { part: 'Modal host', selector: '.stn-pop', note: 'L2 모달 도화지 · 중앙 정렬' },\n { part: 'Width host', selector: '.stn-pop__cont', note: 'size modifier · responsive min()' },\n {\n part: 'Panel',\n selector: '.stn-pop__panel',\n note: 'surface · border · radius 8 · shadow · overflow',\n },\n {\n part: 'Header',\n selector: '.stn-pop__head',\n note: '56px · h4 16 SemiBold · theme title token',\n },\n {\n part: 'Close',\n selector: '.stn-pop__close',\n note: 'StnButton icon=\"line/x\" size=sm · top 14 / right 16',\n },\n { part: 'Body', selector: '.stn-pop__body', note: 'padding 20px · overflow auto · 화면별 슬롯' },\n {\n part: 'Actions',\n selector: '.stn-pop__actions',\n note: '56px · right/center · gap 8 · StnButton',\n },\n] as const\n\nexport const STN_POPUP_TOKEN_ROWS = [\n { token: '--stn-pop-gutter', resolvesTo: '20px', usage: '좌우·portal padding' },\n { token: '--stn-pop-width-xs', resolvesTo: '400px', usage: '.stn-pop--xs · 단순 확인/얼럿' },\n { token: '--stn-pop-width-sm', resolvesTo: '480px', usage: '.stn-pop--sm · 1~2개 입력 폼' },\n { token: '--stn-pop-width-md', resolvesTo: '640px', usage: '.stn-pop--md · 기본 표준' },\n { token: '--stn-pop-width-lg', resolvesTo: '960px', usage: '.stn-pop--lg · 2단 분할/상세' },\n { token: '--stn-pop-width-xl', resolvesTo: '1200px', usage: '.stn-pop--xl · 대형 테이블/그리드' },\n { token: '.stn-pop--full', resolvesTo: '100vw − gutter×2', usage: '전체화면 모달' },\n { token: '--stn-pop-max-height', resolvesTo: 'min(85dvh, …)', usage: '.stn-pop 본문 스크롤' },\n { token: '--stn-pop-header-height', resolvesTo: '56px', usage: '.stn-pop__head min-height' },\n { token: '--stn-pop-footer-height', resolvesTo: '56px', usage: '.stn-pop__actions' },\n { token: '--stn-pop-close-size', resolvesTo: 'icon-size.xsmall (16px)', usage: '.stn-pop__close hit' },\n { token: '--stn-pop-close-icon', resolvesTo: 'icon-size.xsmall (16px)', usage: '.stn-pop__close glyph' },\n { token: '--stn-pop-surface', resolvesTo: 'gray.850 (dark) · white (light)', usage: '.stn-pop__panel background' },\n { token: '--stn-pop-border', resolvesTo: 'gray.700 (dark) · gray.100 (light)', usage: '.stn-pop__panel border' },\n { token: '--stn-pop-title', resolvesTo: 'static.white (dark) · gray.650 (light)', usage: '.stn-pop__head h4' },\n { token: '--stn-pop-shadow', resolvesTo: '0 0 10px black (dark) · 0 4px 10px / 25% (light)', usage: '팝업 패널' },\n { token: '--stn-radius-pop-wrap', resolvesTo: 'radius.10', usage: '.stn-pop__panel border-radius' },\n {\n token: '--stn-dim-bg',\n resolvesTo: 'Dark gray-950/50 · Light gray-900/20',\n usage: 'StnLayer.Dim scrim',\n },\n {\n token: '--stn-dim-blur',\n resolvesTo: 'Dark 4px · Light 2px',\n usage: 'backdrop-filter on scrim',\n },\n] as const\n\nexport const STN_POPUP_INVENTORY_ROWS = [\n {\n pattern: 'Popup panel shell',\n pubClass: '.stn-pop .stn-pop__panel',\n size: 'radius 10 · 934 xl',\n status: 'implemented' as const,\n },\n {\n pattern: 'Size SM–Full',\n pubClass: '.stn-pop--sm … --full',\n size: 'responsive min(토큰, 100vw−40px)',\n status: 'implemented' as const,\n },\n {\n pattern: '화면별 width',\n pubClass: '.equip_regist_pop .stn-pop__cont 등',\n size: 'content.css override → xxl/2xl/full로 이전 권장',\n status: 'partial' as const,\n },\n {\n pattern: 'MUI Dialog (migrated)',\n pubClass: '.stn-pop',\n size: 'sm–full',\n status: 'implemented' as const,\n },\n] as const\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnLayer0Background.ts"],"sourcesContent":["/**\n * Infomap Layer 0 background pattern\n * Light: 41267 · 186876 · 186860 · 202895\n * Dark: 80488 · 35369 · 84014 · 91183\n * @see StnLayer0Background · layouts/stn-layer0-bg.css\n */\n\nexport const STN_LAYER0_BACKGROUND_FIGMA = {\n none: '40000040:41267',\n noneDark: '40000040:80488',\n showroomA: '40000042:186876',\n showroomADark: '40002117:35369',\n showroomB: '40000042:186860',\n showroomBDark: '40000040:84014',\n mapLight: '40000042:202895',\n mapDark: '40000040:91183',\n login: '40004209:78293',\n loginDark: '40004209:78293',\n dashboard: '40004209:78300',\n dashboardDark: '40004209:78300',\n} as const\n\nexport type StnLayer0BackgroundKind = 'color' | 'gradient' | 'image'\n\n/** Figma 예제 프리셋 — color 1종 · gradient 1종 · image 7종 (light/dark 자동 전환) */\nexport type StnLayer0BackgroundPreset = 'none' | 'gradient' | 'showroom-a' | 'showroom-b' | 'map-light' | 'login' | 'dashboard' | 'infomap' | 'infomap-none'\n\n/** Doc site · Pub HTML 기준 경로 — 앱에서는 동일 경로 또는 자산 URL로 교체 */\nexport {\n STN_LAYER0_BACKGROUND_ASSET_PATHS,\n STN_LAYER0_BACKGROUND_DEMO_IMAGES,\n} from './stnLayer0BackgroundAssets'\n\nexport const STN_LAYER0_BACKGROUND_INTRO =\n '페이지 최하단 레벨(Level 0)에 위치하는 시스템 바닥면 배경 패턴입니다. 단색 컬러 및 맵·토폴로지 캔버스 배경 이미지를 `StnLayer0BackgroundPreset`으로 손쉽게 적용할 수 있습니다.'\n\nexport const STN_LAYER0_BACKGROUND_VARIANT_ROWS = [\n {\n preset: 'none',\n kind: 'color',\n figma: STN_LAYER0_BACKGROUND_FIGMA.none,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.noneDark,\n note: 'Light gradient · Dark elevation surface-0 (gray-950)',\n },\n {\n preset: 'dashboard',\n kind: 'image',\n figma: STN_LAYER0_BACKGROUND_FIGMA.dashboard,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.dashboardDark,\n note: 'Dashboard · light/dark pair',\n },\n {\n preset: 'infomap',\n kind: 'image',\n figma: STN_LAYER0_BACKGROUND_FIGMA.dashboard,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.dashboardDark,\n note: 'Infomap 3D Graphic · light/dark pair',\n },\n {\n preset: 'infomap-none',\n kind: 'image',\n figma: STN_LAYER0_BACKGROUND_FIGMA.dashboard,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.dashboardDark,\n note: 'Infomap 3D Graphic (None/텍스트 없음) · light/dark pair',\n },\n {\n preset: 'showroom-a',\n kind: 'image',\n figma: STN_LAYER0_BACKGROUND_FIGMA.showroomA,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.showroomADark,\n note: 'Showroom A · dark logo stage',\n },\n {\n preset: 'showroom-b',\n kind: 'image',\n figma: STN_LAYER0_BACKGROUND_FIGMA.showroomB,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.showroomBDark,\n note: 'Showroom B · dark + radial vignette',\n },\n {\n preset: 'map-light',\n kind: 'image',\n figma: STN_LAYER0_BACKGROUND_FIGMA.mapLight,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.mapDark,\n note: 'Map light(+20% white) · Map dark',\n },\n {\n preset: 'login',\n kind: 'image',\n figma: STN_LAYER0_BACKGROUND_FIGMA.login,\n figmaDark: STN_LAYER0_BACKGROUND_FIGMA.loginDark,\n note: 'Login · light/dark pair',\n },\n] as const satisfies ReadonlyArray<{\n preset: StnLayer0BackgroundPreset\n kind: StnLayer0BackgroundKind\n figma: string\n figmaDark: string\n note: string\n}>\n\nexport const STN_LAYER0_BACKGROUND_USAGE = `import {\n StnLayer,\n StnLayer0Background,\n StnLayer0BackgroundPreset,\n DashboardPageScaffold,\n} from '@stn-uiux/pub-ui-react'\n\n/** Map / Topology — wrapClassName만 (맵 배경은 elevation CSS) */\n<DashboardPageScaffold\n shell=\"layer\"\n wrapClassName=\"stn-page--map-bg\"\n gnb={…}\n header={…}\n/>\n\n/** 일반 페이지 — L0 color (default = elevation-surface-0) */\n<StnLayer.Background>\n <StnLayer0Background color=\"default\" />\n <StnLayer.Content>{/* 본문 */}</StnLayer.Content>\n</StnLayer.Background>\n\n/** Figma image 프리셋 — showroom · map · login */\n<StnLayer.Background>\n <StnLayer0BackgroundPreset variant=\"map-light\" />\n <StnLayer.Content>{/* 본문 */}</StnLayer.Content>\n</StnLayer.Background>\n\n<StnLayer.Background>\n <StnLayer0BackgroundPreset variant=\"login\" />\n <StnLayer.Content>{/* 본문 */}</StnLayer.Content>\n</StnLayer.Background>\n\n/** 직접 조합 — light/dark 이미지 */\n<StnLayer.Background>\n <StnLayer0Background\n kind=\"image\"\n src=\"/assets/bg-light.png\"\n srcDark=\"/assets/bg-dark.png\"\n />\n <StnLayer.Content>…</StnLayer.Content>\n</StnLayer.Background>`\n\nexport const STN_LAYER0_BACKGROUND_USAGE_HTML = `<!-- L0 background — color / image -->\n<div class=\"stn-elev-0 stn-layer0-bg\">\n <!-- color -->\n <div class=\"stn-layer0-bg color default\" aria-hidden=\"true\"></div>\n\n <!-- 또는 image -->\n <div\n class=\"stn-layer0-bg image\"\n style=\"--stn-layer0-bg-image: url('/assets/bg-light.png')\"\n aria-hidden=\"true\"\n ></div>\n\n <main class=\"stn-elev-1\"><!-- L1 content --></main>\n</div>`\n\nexport const STN_LAYER0_MAP_LIGHT_OVERLAY = 0.2\n\n/** Patterns → Background playground 프리셋 (UI 라벨 · 내부 variant) */\nexport type StnLayer0BackgroundPlaygroundPresetId =\n | 'dashboard'\n | 'infomap'\n | 'infomap-none'\n | 'color'\n | 'gradient'\n | 'map'\n | 'topology'\n | 'none'\n\nexport const STN_LAYER0_BACKGROUND_PLAYGROUND_PRESETS: {\n id: StnLayer0BackgroundPlaygroundPresetId\n label: string\n asset: string\n variant?: StnLayer0BackgroundPreset\n}[] = [\n { id: 'dashboard', label: 'dashboard', asset: '대시보드 배경 (dashboard-light / dark)', variant: 'dashboard' },\n { id: 'infomap', label: 'infomap', asset: '인포맵 3D 배경 (infomap-light / dark)', variant: 'infomap' },\n { id: 'infomap-none', label: 'infomap-none', asset: '인포맵 3D (None/텍스트 없음)', variant: 'infomap-none' },\n { id: 'color', label: 'color', asset: '단색 테마 배경 (solid default)', variant: 'none' },\n { id: 'gradient', label: 'gradient', asset: '공식 앰비언트 그라데이션 (워시/심도)', variant: 'gradient' },\n { id: 'map', label: 'map', asset: 'GIS 지도 배경 (map-light)', variant: 'map-light' },\n { id: 'topology', label: 'topology', asset: '토폴로지 배경 (showroom-b)', variant: 'showroom-b' },\n { id: 'none', label: 'none', asset: 'L0 배경 없음 (외부 캔버스 전용)', variant: 'none' },\n]\n"],"mappings":";AAOO,IAAM,8BAA8B;AAAA,EACzC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,WAAW;AAAA,EACX,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AACjB;AAaO,IAAM,8BACX;AAEK,IAAM,qCAAqC;AAAA,EAChD;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO,4BAA4B;AAAA,IACnC,WAAW,4BAA4B;AAAA,IACvC,MAAM;AAAA,EACR;AACF;AAQO,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CpC,IAAM,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAezC,IAAM,+BAA+B;AAarC,IAAM,2CAKP;AAAA,EACJ,EAAE,IAAI,aAAa,OAAO,aAAa,OAAO,kEAAoC,SAAS,YAAY;AAAA,EACvG,EAAE,IAAI,WAAW,OAAO,WAAW,OAAO,6DAAoC,SAAS,UAAU;AAAA,EACjG,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,OAAO,gEAAwB,SAAS,eAAe;AAAA,EACpG,EAAE,IAAI,SAAS,OAAO,SAAS,OAAO,0DAA4B,SAAS,OAAO;AAAA,EAClF,EAAE,IAAI,YAAY,OAAO,YAAY,OAAO,oGAAyB,SAAS,WAAW;AAAA,EACzF,EAAE,IAAI,OAAO,OAAO,OAAO,OAAO,6CAAyB,SAAS,YAAY;AAAA,EAChF,EAAE,IAAI,YAAY,OAAO,YAAY,OAAO,sDAAwB,SAAS,aAAa;AAAA,EAC1F,EAAE,IAAI,QAAQ,OAAO,QAAQ,OAAO,+EAAwB,SAAS,OAAO;AAC9E;","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-O77GW7PM.js.map
@@ -1,9 +0,0 @@
1
- // src/data/stnPackageVersion.ts
2
- var STN_UI_VERSION = "0.1.77";
3
- var STN_UI_VERSION_LABEL = "v0.1.77";
4
-
5
- export {
6
- STN_UI_VERSION,
7
- STN_UI_VERSION_LABEL
8
- };
9
- //# sourceMappingURL=chunk-RSKMNZIS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/data/stnPackageVersion.ts"],"sourcesContent":["/** Package version constants */\nexport const STN_UI_VERSION = '0.1.77'\nexport const STN_UI_VERSION_LABEL = 'v0.1.77'\n"],"mappings":";AACO,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;","names":[]}