@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,374 +1,396 @@
1
- @charset "utf-8";
2
- /**
3
- * STN Pub TextField — Infomap input (Figma 40000042:186898)
4
- * Variant: `.outlined` / `--outlined` (box) · `.filled` / `--filled` (fill) · `.standard` / `--standard` (underline)
5
- * Classes: `.stn-text-field` · `--size-s|m|l|xl` · `--width-*` · `--full` · `--with-prefix` · `--with-icon`
6
- * Color: `.success` / `.error` / `.warning` / `.info` (feedback tokens)
7
- * Wrap: `.stn-text-field-wrap` + `.stn-text-field__helper` when helper text is present
8
- * React: `<StnTextField variant="outlined"|"filled"|"standard" color="success" icon="line/search" iconPosition="left">`
9
- */
10
-
11
- .stn-text-field {
12
- box-sizing: border-box;
13
- display: inline-block;
14
- margin: 0;
15
- width: var(--stn-text-field-width);
16
- min-width: var(--stn-text-field-min-width);
17
- max-width: 100%;
18
- height: var(--stn-text-field-height, var(--stn-text-field-height-md)) !important;
19
- max-height: var(--stn-text-field-height, var(--stn-text-field-height-md)) !important;
20
- min-height: var(--stn-text-field-height, var(--stn-text-field-height-md)) !important;
21
- padding: 0 var(--stn-text-field-padding-x, var(--stn-text-field-padding-x-md));
22
- border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
23
- border-radius: var(--stn-text-field-radius, var(--stn-radius-input-md));
24
- background-color: var(--stn-input-bg);
25
- color: var(--stn-input-fg);
26
- font-family: var(--stn-font-body, inherit);
27
- font-size: var(--stn-text-field-font-size, var(--stn-text-body-small-size));
28
- font-weight: var(--stn-font-weight-medium);
29
- line-height: var(--stn-text-field-line-height, var(--stn-line-height-px-30));
30
- outline: none;
31
- appearance: none;
32
- -webkit-appearance: none;
33
- }
34
-
35
- .stn-text-field::placeholder {
36
- color: var(--stn-input-placeholder);
37
- font-weight: var(--stn-font-weight-medium);
38
- }
39
-
40
- .stn-text-field:focus:not([readonly]) {
41
- border: var(--stn-input-focus);
42
- background-color: var(--stn-input-focus-bg, var(--stn-input-bg));
43
- color: var(--stn-input-focus-fg, var(--stn-input-fg));
44
- }
45
-
46
- .stn-text-field[readonly] {
47
- cursor: default;
48
- }
49
-
50
- .stn-text-field[readonly]:focus-visible {
51
- outline: var(--stn-focus-ring-width, var(--stn-size-2)) solid var(--stn-focus-ring);
52
- outline-offset: var(--stn-focus-ring-offset, var(--stn-size-2));
53
- }
54
-
55
- .stn-text-field:disabled {
56
- cursor: not-allowed;
57
- opacity: var(--stn-input-disabled-opacity);
58
- }
59
-
60
- .stn-text-field:is(.outlined, .stn-text-field--outlined) {
61
- border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
62
- background-color: var(--stn-input-bg);
63
- }
64
-
65
- .stn-text-field:is(.filled, .stn-text-field--filled) {
66
- border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-filled-border, transparent);
67
- background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
68
- }
69
-
70
- .stn-text-field:is(.filled, .stn-text-field--filled):focus:not([readonly]) {
71
- border: var(--stn-input-focus);
72
- background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
73
- color: var(--stn-input-focus-fg, var(--stn-input-fg));
74
- }
75
-
76
- .stn-text-field:is(.standard, .stn-text-field--standard) {
77
- border: none;
78
- border-bottom: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
79
- border-radius: var(--stn-radius-0);
80
- background-color: transparent;
81
- }
82
-
83
- .stn-text-field:is(.standard, .stn-text-field--standard):focus:not([readonly]) {
84
- border: none;
85
- border-bottom: var(--stn-input-focus);
86
- background-color: transparent;
87
- color: var(--stn-input-focus-fg, var(--stn-input-fg));
88
- }
89
-
90
- .stn-text-field[aria-invalid='true'],
91
- .stn-text-field.stn-text-field--invalid {
92
- border-color: var(--stn-feedback-error);
93
- }
94
-
95
- .stn-text-field:is(.standard, .stn-text-field--standard)[aria-invalid='true'],
96
- .stn-text-field:is(.standard, .stn-text-field--standard).stn-text-field--invalid {
97
- border-color: transparent;
98
- border-bottom-color: var(--stn-feedback-error);
99
- }
100
-
101
- /* —— Color (button-like feedback tokens) —— */
102
- .stn-text-field:is(.success, .stn-text-field--success) {
103
- --stn-text-field-accent: var(--stn-feedback-success);
104
- }
105
-
106
- .stn-text-field:is(.error, .stn-text-field--error) {
107
- --stn-text-field-accent: var(--stn-feedback-error);
108
- }
109
-
110
- .stn-text-field:is(.warning, .stn-text-field--warning) {
111
- --stn-text-field-accent: var(--stn-feedback-warning);
112
- }
113
-
114
- .stn-text-field:is(.info, .stn-text-field--info) {
115
- --stn-text-field-accent: var(--stn-feedback-info);
116
- }
117
-
118
- .stn-text-field:is(.success, .error, .warning, .info, .stn-text-field--success, .stn-text-field--error, .stn-text-field--warning, .stn-text-field--info) {
119
- --stn-input-border: var(--stn-text-field-accent);
120
- --stn-input-filled-border: var(--stn-text-field-accent);
121
- --stn-input-focus: var(--stn-input-focus-width, var(--stn-size-1)) solid var(--stn-text-field-accent);
122
- --stn-input-focus-fg: var(--stn-text-field-accent);
123
- }
124
-
125
- .stn-text-field:is(.stn-text-field--invalid, [aria-invalid='true']) {
126
- --stn-input-focus: var(--stn-input-focus-width, var(--stn-size-1)) solid var(--stn-feedback-error);
127
- --stn-input-focus-fg: var(--stn-feedback-error);
128
- }
129
-
130
- /* —— Width (size와 독립, .stn-text-field 및 .stn-text-field-wrap 공통 지원) —— */
131
- :is(.stn-text-field, .stn-text-field-wrap).w80 {
132
- --stn-text-field-width: var(--stn-size-80, 80px);
133
- }
134
-
135
- :is(.stn-text-field, .stn-text-field-wrap).w100 {
136
- --stn-text-field-width: var(--stn-size-100, 100px);
137
- }
138
-
139
- :is(.stn-text-field, .stn-text-field-wrap).w120 {
140
- --stn-text-field-width: var(--stn-size-120, 120px);
141
- }
142
-
143
- :is(.stn-text-field, .stn-text-field-wrap).w140 {
144
- --stn-text-field-width: var(--stn-size-140, 140px);
145
- }
146
-
147
- :is(.stn-text-field, .stn-text-field-wrap).w160 {
148
- --stn-text-field-width: var(--stn-size-160, 160px);
149
- }
150
-
151
- :is(.stn-text-field, .stn-text-field-wrap).w180 {
152
- --stn-text-field-width: var(--stn-size-180, 180px);
153
- }
154
-
155
- :is(.stn-text-field, .stn-text-field-wrap).w200 {
156
- --stn-text-field-width: var(--stn-size-200, 200px);
157
- }
158
-
159
- :is(.stn-text-field, .stn-text-field-wrap).full {
160
- --stn-text-field-width: 100%;
161
- width: 100%;
162
- }
163
-
164
- /* —— Size (sm / md / lg / xl) —— */
165
- .stn-text-field.sm {
166
- --stn-text-field-height: var(--stn-text-field-height-sm);
167
- --stn-text-field-padding-x: var(--stn-text-field-padding-x-sm);
168
- --stn-text-field-radius: var(--stn-radius-input-sm);
169
- --stn-text-field-font-size: var(--stn-text-body-small-size);
170
- --stn-text-field-line-height: var(--stn-line-height-px-22);
171
- }
172
-
173
- .stn-text-field.md {
174
- --stn-text-field-height: var(--stn-text-field-height-md);
175
- --stn-text-field-padding-x: var(--stn-text-field-padding-x-md);
176
- --stn-text-field-radius: var(--stn-radius-input-md);
177
- --stn-text-field-font-size: var(--stn-text-body-small-size);
178
- --stn-text-field-line-height: var(--stn-line-height-px-30);
179
- }
180
-
181
- .stn-text-field.lg {
182
- --stn-text-field-height: var(--stn-text-field-height-lg);
183
- --stn-text-field-padding-x: var(--stn-text-field-padding-x-lg);
184
- --stn-text-field-radius: var(--stn-radius-input-lg);
185
- --stn-text-field-font-size: var(--stn-text-body-medium-size);
186
- --stn-text-field-line-height: var(--stn-line-height-px-38);
187
- min-width: var(--stn-text-field-min-width-lg);
188
- }
189
-
190
- .stn-text-field.xl {
191
- --stn-text-field-height: var(--stn-text-field-height-xl);
192
- --stn-text-field-padding-x: var(--stn-text-field-padding-x-xl);
193
- --stn-text-field-radius: var(--stn-radius-input-xl);
194
- --stn-text-field-font-size: var(--stn-text-body-small-size);
195
- --stn-text-field-line-height: var(--stn-line-height-px-30);
196
- }
197
-
198
- /* —— Icon slots (left prefix · right suffix) —— */
199
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon) {
200
- display: inline-flex;
201
- align-items: center;
202
- gap: var(--stn-text-field-prefix-gap, var(--stn-space-16));
203
- padding-inline: var(--stn-text-field-padding-x, var(--stn-text-field-padding-x-md));
204
- }
205
-
206
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon):focus-within:not(:has(.stn-text-field__control[readonly])) {
207
- border: var(--stn-input-focus);
208
- background-color: var(--stn-input-focus-bg, var(--stn-input-bg));
209
- color: var(--stn-input-focus-fg, var(--stn-input-fg));
210
- }
211
-
212
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon):is(.filled, .stn-text-field--filled):focus-within:not(:has(.stn-text-field__control[readonly])) {
213
- border: var(--stn-input-focus);
214
- background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
215
- }
216
-
217
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon):is(.standard, .stn-text-field--standard):focus-within:not(:has(.stn-text-field__control[readonly])) {
218
- border: none;
219
- border-bottom: var(--stn-input-focus);
220
- background-color: transparent;
221
- }
222
-
223
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon):has(.stn-text-field__control[readonly]:focus-visible) {
224
- outline: var(--stn-focus-ring-width, var(--stn-size-2)) solid var(--stn-focus-ring);
225
- outline-offset: var(--stn-focus-ring-offset, var(--stn-size-2));
226
- }
227
-
228
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon).stn-text-field--invalid,
229
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon):has([aria-invalid='true']) {
230
- border-color: var(--stn-feedback-error);
231
- }
232
-
233
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon):is(.standard, .stn-text-field--standard).stn-text-field--invalid,
234
- .stn-text-field:is(.stn-text-field--with-prefix, .stn-text-field--with-icon):is(.standard, .stn-text-field--standard):has([aria-invalid='true']) {
235
- border-color: transparent;
236
- border-bottom-color: var(--stn-feedback-error);
237
- }
238
-
239
- .stn-text-field__prefix,
240
- .stn-text-field__suffix {
241
- display: inline-flex;
242
- flex-shrink: 0;
243
- align-items: center;
244
- justify-content: center;
245
- }
246
-
247
- .stn-text-field__icon-box {
248
- display: flex;
249
- align-items: center;
250
- justify-content: center;
251
- box-sizing: border-box;
252
- }
253
-
254
- .stn-text-field__control {
255
- box-sizing: border-box;
256
- flex: 1 1 auto;
257
- min-width: 0;
258
- width: 100%;
259
- height: 100%;
260
- margin: 0;
261
- padding: 0;
262
- border: none;
263
- background: transparent;
264
- color: inherit;
265
- font-family: inherit;
266
- font-size: inherit;
267
- font-weight: inherit;
268
- line-height: inherit;
269
- outline: none;
270
- appearance: none;
271
- -webkit-appearance: none;
272
- }
273
-
274
- .stn-text-field__control::placeholder {
275
- color: var(--stn-input-placeholder);
276
- font-weight: var(--stn-font-weight-medium);
277
- }
278
-
279
- /* —— Helper text (bottom-left caption) —— */
280
- .stn-text-field-wrap {
281
- box-sizing: border-box;
282
- display: inline-flex;
283
- flex-direction: column;
284
- align-items: stretch;
285
- flex-shrink: 0;
286
- width: var(--stn-text-field-width);
287
- min-width: var(--stn-text-field-min-width);
288
- max-width: 100%;
289
- vertical-align: top;
290
- }
291
-
292
- .stn-text-field-wrap .stn-text-field,
293
- .stn-text-field-wrap > .stn-text-field {
294
- width: 100%;
295
- min-width: 0;
296
- max-width: 100%;
297
- }
298
-
299
- .stn-text-field-wrap.stn-text-field--full,
300
- .stn-text-field-wrap.w100p {
301
- --stn-text-field-width: 100%;
302
- width: 100%;
303
- }
304
-
305
- .stn-text-field__helper {
306
- box-sizing: border-box;
307
- margin: var(--stn-text-field-helper-gap, var(--stn-space-4)) 0 0;
308
- padding: 0;
309
- font-family: var(--stn-font-body, inherit);
310
- font-size: var(--stn-text-field-helper-size, var(--stn-text-caption-medium-size));
311
- font-weight: var(--stn-text-field-helper-weight, var(--stn-font-weight-regular));
312
- line-height: var(--stn-text-field-helper-line-height, var(--stn-text-caption-medium-line-height));
313
- color: var(--stn-text-secondary);
314
- text-align: left;
315
- word-break: break-word;
316
- }
317
-
318
- .stn-text-field__helper--error {
319
- color: var(--stn-feedback-error);
320
- }
321
-
322
- /* —— Label & Wrap Layout —— */
323
- .stn-text-field__label {
324
- box-sizing: border-box;
325
- display: inline-flex;
326
- align-items: center;
327
- gap: var(--stn-text-field-label-gap, var(--stn-space-4));
328
- font-family: var(--stn-font-body, inherit);
329
- font-size: var(--stn-text-field-label-size, var(--stn-text-field-font-size, var(--stn-text-body-small-size)));
330
- font-weight: var(--stn-text-field-label-weight, var(--stn-font-weight-medium));
331
- color: var(--stn-text-primary);
332
- line-height: var(--stn-text-field-label-line-height, var(--stn-line-height-default));
333
- white-space: nowrap;
334
- user-select: none;
335
- cursor: pointer;
336
- flex-shrink: 0;
337
- }
338
-
339
- .stn-text-field__required {
340
- color: var(--stn-feedback-error);
341
- font-weight: var(--stn-font-weight-bold);
342
- line-height: var(--stn-line-height-tight);
343
- }
344
-
345
- /* 가로(Row) 배치: 왼쪽 또는 오른쪽 라벨 */
346
- .stn-text-field-wrap--row {
347
- flex-direction: row;
348
- align-items: center;
349
- gap: var(--stn-text-field-wrap-row-gap, var(--stn-space-12));
350
- }
351
-
352
- .stn-text-field-wrap--row .stn-text-field-wrap__body {
353
- display: inline-flex;
354
- flex-direction: column;
355
- flex: 1 1 auto;
356
- min-width: 0;
357
- }
358
-
359
- .stn-text-field-wrap--row .stn-text-field {
360
- width: 100%;
361
- min-width: 0;
362
- }
363
-
364
- /* 세로(Column) 배치: 상단 라벨 */
365
- .stn-text-field-wrap--col {
366
- flex-direction: column;
367
- gap: var(--stn-text-field-wrap-col-gap, var(--stn-space-6));
368
- }
369
-
370
- .stn-text-field-wrap--col .stn-text-field-wrap__body {
371
- display: inline-flex;
372
- flex-direction: column;
373
- width: 100%;
374
- }
1
+ @charset "utf-8";
2
+ /**
3
+ * STN Pub TextField ??Infomap input (Figma 40000042:186898)
4
+ * Variant: `.outlined` / `--outlined` (box) 쨌 `.filled` / `--filled` (fill) 쨌 `.standard` / `--standard` (underline)
5
+ * Classes: `.stn-text-field` · `--size-s|m|l|xl` · `--width-*` · `--full` · `--with-icon`
6
+ * Color: `.success` / `.error` / `.warning` / `.info` (feedback tokens)
7
+ * Wrap: `.stn-text-field-wrap` + `.stn-text-field__helper` when helper text is present
8
+ * React: `<StnTextField variant="outlined"|"filled"|"standard" color="success" icon="line/search" iconPosition="left">`
9
+ */
10
+
11
+ .stn-text-field {
12
+ box-sizing: border-box;
13
+ display: inline-block;
14
+ margin: 0;
15
+ width: var(--stn-text-field-width);
16
+ min-width: var(--stn-text-field-min-width);
17
+ max-width: 100%;
18
+ height: var(--stn-text-field-height, var(--stn-text-field-height-md));
19
+ max-height: var(--stn-text-field-height, var(--stn-text-field-height-md));
20
+ min-height: var(--stn-text-field-height, var(--stn-text-field-height-md));
21
+ padding: 0 var(--stn-text-field-padding-x, var(--stn-text-field-padding-x-md));
22
+ border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
23
+ border-radius: var(--stn-text-field-radius, var(--stn-radius-input-md));
24
+ background-color: var(--stn-input-bg);
25
+ color: var(--stn-input-fg);
26
+ font-family: var(--stn-font-body, inherit);
27
+ font-size: var(--stn-text-field-font-size, var(--stn-text-body-small-size));
28
+ font-weight: var(--stn-font-weight-medium);
29
+ line-height: var(--stn-text-field-line-height, var(--stn-line-height-px-30));
30
+ outline: none;
31
+ appearance: none;
32
+ -webkit-appearance: none;
33
+ }
34
+
35
+ .stn-text-field::placeholder {
36
+ color: var(--stn-input-placeholder);
37
+ font-weight: var(--stn-font-weight-medium);
38
+ }
39
+
40
+ .stn-text-field:focus:not([readonly]) {
41
+ border: var(--stn-input-focus);
42
+ background-color: var(--stn-input-focus-bg, var(--stn-input-bg));
43
+ color: var(--stn-input-focus-fg, var(--stn-input-fg));
44
+ }
45
+
46
+ .stn-text-field[readonly] {
47
+ cursor: default;
48
+ }
49
+
50
+ .stn-text-field[readonly]:focus-visible {
51
+ outline: var(--stn-focus-ring-width, var(--stn-size-2)) solid var(--stn-focus-ring);
52
+ outline-offset: var(--stn-focus-ring-offset, var(--stn-size-2));
53
+ }
54
+
55
+ .stn-text-field:disabled {
56
+ cursor: not-allowed;
57
+ opacity: var(--stn-input-disabled-opacity);
58
+ }
59
+
60
+ .stn-text-field.outlined {
61
+ border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
62
+ background-color: var(--stn-input-bg);
63
+ }
64
+
65
+ .stn-text-field.filled {
66
+ border: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-filled-border, transparent);
67
+ background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
68
+ }
69
+
70
+ .stn-text-field.filled:focus:not([readonly]) {
71
+ border: var(--stn-input-focus);
72
+ background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
73
+ color: var(--stn-input-focus-fg, var(--stn-input-fg));
74
+ }
75
+
76
+ .stn-text-field.standard {
77
+ border: none;
78
+ border-bottom: var(--stn-input-border-width, var(--stn-size-1)) solid var(--stn-input-border);
79
+ border-radius: var(--stn-radius-0);
80
+ background-color: transparent;
81
+ }
82
+
83
+ .stn-text-field.standard:focus:not([readonly]) {
84
+ border: none;
85
+ border-bottom: var(--stn-input-focus);
86
+ background-color: transparent;
87
+ color: var(--stn-input-focus-fg, var(--stn-input-fg));
88
+ }
89
+
90
+ .stn-text-field.transparent {
91
+ border: none;
92
+ background-color: transparent;
93
+ }
94
+
95
+ .stn-text-field.transparent:focus:not([readonly]) {
96
+ border: none;
97
+ background-color: transparent;
98
+ }
99
+
100
+ .stn-text-field.with-icon.transparent:focus-within:not(:has(.stn-text-field__control[readonly])) {
101
+ border: none;
102
+ background-color: transparent;
103
+ }
104
+
105
+ .stn-text-field.transparent[aria-invalid='true'],
106
+ .stn-text-field.transparent.invalid {
107
+ border-bottom: var(--stn-size-1, 1px) solid var(--stn-feedback-error);
108
+ }
109
+
110
+ .stn-text-field[aria-invalid='true'],
111
+ .stn-text-field.invalid {
112
+ border-color: var(--stn-feedback-error);
113
+ }
114
+
115
+ .stn-text-field.standard[aria-invalid='true'],
116
+ .stn-text-field.standard.invalid {
117
+ border-color: transparent;
118
+ border-bottom-color: var(--stn-feedback-error);
119
+ }
120
+
121
+ /* Color (button-like feedback tokens) */
122
+ .stn-text-field.success {
123
+ --stn-text-field-accent: var(--stn-feedback-success);
124
+ }
125
+
126
+ .stn-text-field.error {
127
+ --stn-text-field-accent: var(--stn-feedback-error);
128
+ }
129
+
130
+ .stn-text-field.warning {
131
+ --stn-text-field-accent: var(--stn-feedback-warning);
132
+ }
133
+
134
+ .stn-text-field.info {
135
+ --stn-text-field-accent: var(--stn-feedback-info);
136
+ }
137
+
138
+ .stn-text-field:is(.success, .error, .warning, .info) {
139
+ --stn-input-border: var(--stn-text-field-accent);
140
+ --stn-input-filled-border: var(--stn-text-field-accent);
141
+ --stn-input-focus: var(--stn-input-focus-width, var(--stn-size-1)) solid var(--stn-text-field-accent);
142
+ --stn-input-focus-fg: var(--stn-text-field-accent);
143
+ }
144
+
145
+ .stn-text-field:is(.invalid, [aria-invalid='true']) {
146
+ --stn-input-focus: var(--stn-input-focus-width, var(--stn-size-1)) solid var(--stn-feedback-error);
147
+ --stn-input-focus-fg: var(--stn-feedback-error);
148
+ }
149
+
150
+ /* ?붴€?Width (size?€ ?낅┰, .stn-text-field 諛?.stn-text-field-wrap 怨듯넻 吏€?? ?붴€?*/
151
+ :is(.stn-text-field, .stn-text-field-wrap).w80 {
152
+ --stn-text-field-width: var(--stn-size-80, 80px);
153
+ }
154
+
155
+ :is(.stn-text-field, .stn-text-field-wrap).w100 {
156
+ --stn-text-field-width: var(--stn-size-100, 100px);
157
+ }
158
+
159
+ :is(.stn-text-field, .stn-text-field-wrap).w120 {
160
+ --stn-text-field-width: var(--stn-size-120, 120px);
161
+ }
162
+
163
+ :is(.stn-text-field, .stn-text-field-wrap).w140 {
164
+ --stn-text-field-width: var(--stn-size-140, 140px);
165
+ }
166
+
167
+ :is(.stn-text-field, .stn-text-field-wrap).w160 {
168
+ --stn-text-field-width: var(--stn-size-160, 160px);
169
+ }
170
+
171
+ :is(.stn-text-field, .stn-text-field-wrap).w180 {
172
+ --stn-text-field-width: var(--stn-size-180, 180px);
173
+ }
174
+
175
+ :is(.stn-text-field, .stn-text-field-wrap).w200 {
176
+ --stn-text-field-width: var(--stn-size-200, 200px);
177
+ }
178
+
179
+ :is(.stn-text-field, .stn-text-field-wrap).full {
180
+ --stn-text-field-width: 100%;
181
+ width: 100%;
182
+ }
183
+
184
+ /* ?붴€?Size (sm / md / lg / xl) ?붴€?*/
185
+ .stn-text-field.sm {
186
+ --stn-text-field-height: var(--stn-text-field-height-sm);
187
+ --stn-text-field-padding-x: var(--stn-text-field-padding-x-sm);
188
+ --stn-text-field-radius: var(--stn-radius-input-sm);
189
+ --stn-text-field-font-size: var(--stn-text-body-small-size);
190
+ --stn-text-field-line-height: var(--stn-line-height-px-22);
191
+ }
192
+
193
+ .stn-text-field.md {
194
+ --stn-text-field-height: var(--stn-text-field-height-md);
195
+ --stn-text-field-padding-x: var(--stn-text-field-padding-x-md);
196
+ --stn-text-field-radius: var(--stn-radius-input-md);
197
+ --stn-text-field-font-size: var(--stn-text-body-small-size);
198
+ --stn-text-field-line-height: var(--stn-line-height-px-30);
199
+ }
200
+
201
+ .stn-text-field.lg {
202
+ --stn-text-field-height: var(--stn-text-field-height-lg);
203
+ --stn-text-field-padding-x: var(--stn-text-field-padding-x-lg);
204
+ --stn-text-field-radius: var(--stn-radius-input-lg);
205
+ --stn-text-field-font-size: var(--stn-text-body-medium-size);
206
+ --stn-text-field-line-height: var(--stn-line-height-px-38);
207
+ min-width: var(--stn-text-field-min-width-lg);
208
+ }
209
+
210
+ .stn-text-field.xl {
211
+ --stn-text-field-height: var(--stn-text-field-height-xl);
212
+ --stn-text-field-padding-x: var(--stn-text-field-padding-x-xl);
213
+ --stn-text-field-radius: var(--stn-radius-input-xl);
214
+ --stn-text-field-font-size: var(--stn-text-body-small-size);
215
+ --stn-text-field-line-height: var(--stn-line-height-px-30);
216
+ }
217
+
218
+ /* —— Icon slots (.with-icon / __icon-left · __icon-right) —— */
219
+ .stn-text-field.with-icon {
220
+ display: inline-flex;
221
+ align-items: center;
222
+ gap: var(--stn-text-field-icon-gap, var(--stn-space-16));
223
+ padding-inline: var(--stn-text-field-padding-x, var(--stn-text-field-padding-x-md));
224
+ }
225
+
226
+ .stn-text-field.with-icon:focus-within:not(:has(.stn-text-field__control[readonly])) {
227
+ border: var(--stn-input-focus);
228
+ background-color: var(--stn-input-focus-bg, var(--stn-input-bg));
229
+ color: var(--stn-input-focus-fg, var(--stn-input-fg));
230
+ }
231
+
232
+ .stn-text-field.with-icon.filled:focus-within:not(:has(.stn-text-field__control[readonly])) {
233
+ border: var(--stn-input-focus);
234
+ background-color: var(--stn-input-filled-bg, var(--stn-input-bg));
235
+ }
236
+
237
+ .stn-text-field.with-icon.standard:focus-within:not(:has(.stn-text-field__control[readonly])) {
238
+ border: none;
239
+ border-bottom: var(--stn-input-focus);
240
+ background-color: transparent;
241
+ }
242
+
243
+ .stn-text-field.with-icon:has(.stn-text-field__control[readonly]:focus-visible) {
244
+ outline: var(--stn-focus-ring-width, var(--stn-size-2)) solid var(--stn-focus-ring);
245
+ outline-offset: var(--stn-focus-ring-offset, var(--stn-size-2));
246
+ }
247
+
248
+ .stn-text-field.with-icon.invalid,
249
+ .stn-text-field.with-icon:has([aria-invalid='true']) {
250
+ border-color: var(--stn-feedback-error);
251
+ }
252
+
253
+ .stn-text-field.with-icon.standard.invalid,
254
+ .stn-text-field.with-icon.standard:has([aria-invalid='true']) {
255
+ border-color: transparent;
256
+ border-bottom-color: var(--stn-feedback-error);
257
+ }
258
+
259
+ .stn-text-field__icon-left,
260
+ .stn-text-field__icon-right {
261
+ display: inline-flex;
262
+ flex-shrink: 0;
263
+ align-items: center;
264
+ justify-content: center;
265
+ }
266
+
267
+ .stn-text-field__icon-box {
268
+ display: flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ box-sizing: border-box;
272
+ }
273
+
274
+ .stn-text-field__control {
275
+ box-sizing: border-box;
276
+ flex: 1 1 auto;
277
+ min-width: 0;
278
+ width: 100%;
279
+ height: 100%;
280
+ margin: 0;
281
+ padding: 0;
282
+ border: none;
283
+ background: transparent;
284
+ color: inherit;
285
+ font-family: inherit;
286
+ font-size: inherit;
287
+ font-weight: inherit;
288
+ line-height: inherit;
289
+ outline: none;
290
+ appearance: none;
291
+ -webkit-appearance: none;
292
+ }
293
+
294
+ .stn-text-field__control::placeholder {
295
+ color: var(--stn-input-placeholder);
296
+ font-weight: var(--stn-font-weight-medium);
297
+ }
298
+
299
+ /* ?붴€?Helper text (bottom-left caption) ?붴€?*/
300
+ .stn-text-field-wrap {
301
+ box-sizing: border-box;
302
+ display: inline-flex;
303
+ flex-direction: column;
304
+ align-items: stretch;
305
+ flex-shrink: 0;
306
+ width: var(--stn-text-field-width);
307
+ min-width: var(--stn-text-field-min-width);
308
+ max-width: 100%;
309
+ vertical-align: top;
310
+ }
311
+
312
+ .stn-text-field-wrap .stn-text-field,
313
+ .stn-text-field-wrap > .stn-text-field {
314
+ width: 100%;
315
+ min-width: 0;
316
+ max-width: 100%;
317
+ }
318
+
319
+
320
+ .stn-text-field__helper {
321
+ box-sizing: border-box;
322
+ margin: var(--stn-text-field-helper-gap, var(--stn-space-4)) 0 0;
323
+ padding: 0;
324
+ font-family: var(--stn-font-body, inherit);
325
+ font-size: var(--stn-text-field-helper-size, var(--stn-text-caption-medium-size));
326
+ font-weight: var(--stn-text-field-helper-weight, var(--stn-font-weight-regular));
327
+ line-height: var(--stn-text-field-helper-line-height, var(--stn-text-caption-medium-line-height));
328
+ color: var(--stn-text-secondary);
329
+ text-align: left;
330
+ word-break: break-word;
331
+ }
332
+
333
+ .stn-text-field__helper--error {
334
+ color: var(--stn-feedback-error);
335
+ }
336
+
337
+ /* ?붴€?Label & Wrap Layout ?붴€?*/
338
+ .stn-text-field__label {
339
+ box-sizing: border-box;
340
+ display: inline-flex;
341
+ align-items: center;
342
+ gap: var(--stn-text-field-label-gap, var(--stn-space-4));
343
+ font-family: var(--stn-font-body, inherit);
344
+ font-size: var(--stn-text-field-label-size, var(--stn-text-field-font-size, var(--stn-text-body-small-size)));
345
+ font-weight: var(--stn-text-field-label-weight, var(--stn-font-weight-medium));
346
+ color: var(--stn-text-primary);
347
+ line-height: var(--stn-text-field-label-line-height, var(--stn-line-height-default));
348
+ white-space: nowrap;
349
+ user-select: none;
350
+ cursor: pointer;
351
+ flex-shrink: 0;
352
+ }
353
+
354
+ .stn-text-field__label-icon {
355
+ display: inline-flex;
356
+ align-items: center;
357
+ justify-content: center;
358
+ color: var(--stn-text-secondary);
359
+ }
360
+
361
+ .stn-text-field__required {
362
+ color: var(--stn-feedback-error);
363
+ font-weight: var(--stn-font-weight-bold);
364
+ line-height: var(--stn-line-height-tight);
365
+ }
366
+
367
+ /* 媛€濡?Row) 諛곗튂: ?쇱そ ?먮뒗 ?ㅻⅨ履??쇰꺼 */
368
+ .stn-text-field-wrap--row {
369
+ flex-direction: row;
370
+ align-items: center;
371
+ gap: var(--stn-text-field-wrap-row-gap, var(--stn-space-12));
372
+ }
373
+
374
+ .stn-text-field-wrap--row .stn-text-field-wrap__body {
375
+ display: inline-flex;
376
+ flex-direction: column;
377
+ flex: 1 1 auto;
378
+ min-width: 0;
379
+ }
380
+
381
+ .stn-text-field-wrap--row .stn-text-field {
382
+ width: 100%;
383
+ min-width: 0;
384
+ }
385
+
386
+ /* ?몃줈(Column) 諛곗튂: ?곷떒 ?쇰꺼 */
387
+ .stn-text-field-wrap--col {
388
+ flex-direction: column;
389
+ gap: var(--stn-text-field-wrap-col-gap, var(--stn-space-6));
390
+ }
391
+
392
+ .stn-text-field-wrap--col .stn-text-field-wrap__body {
393
+ display: inline-flex;
394
+ flex-direction: column;
395
+ width: 100%;
396
+ }