@t3q-ui/design-system 0.0.0-stage → 1.56.0

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.
package/dist/index.css ADDED
@@ -0,0 +1,332 @@
1
+ /* src/components/parameterTable/parameterTable.css */
2
+ .t3q-parameter-table {
3
+ width: 100%;
4
+ position: relative;
5
+ }
6
+ .t3q-pt-cell {
7
+ user-select: none;
8
+ position: relative;
9
+ vertical-align: middle;
10
+ border-bottom: 1px solid var(--color-sys-divider-subtle);
11
+ }
12
+ tr:last-child > .t3q-pt-cell {
13
+ border-bottom: none;
14
+ }
15
+ .t3q-pt-cell--error {
16
+ background-color: var(--color-danger-o10);
17
+ }
18
+ .t3q-pt-cell--selected {
19
+ background-color: var(--color-sys-table-select);
20
+ }
21
+ .t3q-pt-cell--editing {
22
+ background-color: var(--color-sys-background);
23
+ outline: 2px solid var(--color-sys-focus-ring-bold);
24
+ outline-offset: -2px;
25
+ z-index: 1;
26
+ }
27
+ .t3q-pt-cell-display {
28
+ height: 28px;
29
+ line-height: 1.4;
30
+ display: flex;
31
+ align-items: center;
32
+ }
33
+ .t3q-pt-cell-display--editing {
34
+ visibility: hidden;
35
+ }
36
+ .t3q-parameter-table--compact .t3q-pt-cell-display {
37
+ height: 24px;
38
+ font-size: 13px;
39
+ }
40
+ .t3q-parameter-table--normal .t3q-pt-cell-display {
41
+ height: 32px;
42
+ }
43
+ .t3q-parameter-table--disabled .t3q-pt-cell {
44
+ cursor: default;
45
+ }
46
+ .t3q-pt-floating-input {
47
+ position: absolute;
48
+ margin: 0;
49
+ border: 0;
50
+ padding: 6px 12px;
51
+ background: transparent;
52
+ color: var(--color-sys-text-main);
53
+ font: inherit;
54
+ line-height: 1.4;
55
+ outline: none;
56
+ opacity: 0;
57
+ pointer-events: none;
58
+ z-index: 2;
59
+ }
60
+ .t3q-parameter-table--compact .t3q-pt-floating-input {
61
+ font-size: 13px;
62
+ }
63
+ .t3q-pt-floating-input--editing {
64
+ opacity: 1;
65
+ pointer-events: auto;
66
+ }
67
+
68
+ /* src/components/agGridTable/style.css */
69
+ .ag-grid-container {
70
+ width: 100%;
71
+ height: 100%;
72
+ }
73
+ .ag-grid-container [class*=ag-theme-] {
74
+ --ag-font-family: var(--font-sans);
75
+ --ag-header-background-color: var(--color-sys-table-header-background);
76
+ --ag-border-color: var(--color-sys-divider-subtle);
77
+ --ag-wrapper-border: solid 1px var(--color-sys-divider-subtle);
78
+ --ag-wrapper-border-radius: var(--radius-medium);
79
+ --ag-header-row-border: solid 1px var(--color-sys-divider-subtle);
80
+ --ag-row-border: solid 1px var(--color-sys-divider-subtle);
81
+ --ag-header-column-border: none;
82
+ --ag-spacing: 8px;
83
+ --ag-cell-horizontal-padding: calc( var(--ag-spacing) * 2 * var(--ag-cell-horizontal-padding-scale) );
84
+ --ag-foreground-color: var(--color-sys-text-normal);
85
+ --ag-background-color: var(--color-sys-background);
86
+ --ag-header-foreground-color: var(--color-sys-table-header-text);
87
+ --ag-row-hover-color: var(--color-sys-table-hover);
88
+ --ag-selected-row-background-color: var(--color-sys-table-select);
89
+ --ag-header-column-resize-handle-color: var(--color-sys-border);
90
+ --ag-header-column-resize-handle-height: 30%;
91
+ --ag-header-column-resize-handle-width: 2px;
92
+ }
93
+ .ag-grid-container .ag-root-wrapper {
94
+ overflow: hidden;
95
+ }
96
+ .ag-grid-container .ag-header-cell-resize::after {
97
+ opacity: 0;
98
+ transition: opacity 120ms ease;
99
+ }
100
+ .ag-grid-container .ag-header-cell:hover .ag-header-cell-resize::after {
101
+ opacity: 1;
102
+ }
103
+ .ag-grid-container .ag-row.ag-row-last {
104
+ border-bottom: none;
105
+ }
106
+ .ag-grid-container .ag-row-clickable {
107
+ cursor: pointer;
108
+ }
109
+ .ag-grid-container .ag-cell-primary {
110
+ color: var(--color-sys-text-main);
111
+ font-weight: var(--font-weight-semibold);
112
+ }
113
+ .ag-grid-container .ag-row-clickable:hover .ag-cell-primary:not(:has([data-slot=cell-primary])),
114
+ .ag-grid-container .ag-row-clickable:hover .ag-cell-primary [data-slot=cell-primary] {
115
+ text-decoration: underline;
116
+ }
117
+ .ag-grid-container .ag-cell,
118
+ .ag-grid-container .ag-cell-wrapper,
119
+ .ag-grid-container .ag-cell-value {
120
+ min-width: 0;
121
+ }
122
+ .ag-grid-container .ag-cell:not(.ag-cell-wrap-text) .ag-cell-value:not(.ag-allow-overflow) {
123
+ overflow: hidden;
124
+ text-overflow: ellipsis;
125
+ white-space: nowrap;
126
+ }
127
+ .ag-grid-container .ag-cell.ag-cell-value:not(:has(> *)):not(.ag-right-aligned-cell):not(.ag-cell-wrap-text) {
128
+ display: block !important;
129
+ align-content: center;
130
+ }
131
+ .ag-grid-container .ag-cell.ag-right-aligned-cell {
132
+ justify-content: flex-end;
133
+ text-align: right;
134
+ font-variant-numeric: tabular-nums;
135
+ }
136
+ .ag-grid-container .ag-header-cell.ag-right-aligned-header .ag-header-cell-label {
137
+ flex-direction: row;
138
+ justify-content: flex-end;
139
+ }
140
+ .ag-grid-container .ag-cell.ag-right-aligned-cell.ag-cell-sort-offset {
141
+ padding-right: calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-spacing) + var(--ag-icon-size));
142
+ }
143
+ .ag-grid-container .ag-row.ag-row-active {
144
+ background-color: var(--color-sys-table-select);
145
+ }
146
+ .ag-grid-container[data-is-empty=false] .ag-center-cols-viewport {
147
+ min-height: unset !important;
148
+ }
149
+ .ag-grid-container .ag-header {
150
+ position: relative;
151
+ z-index: 1;
152
+ }
153
+ .ag-grid-container .ag-column-last .ag-header-cell-resize {
154
+ display: none;
155
+ }
156
+ .ag-grid-container .width_full .ag-cell-wrapper {
157
+ width: 100%;
158
+ }
159
+ .ag-grid-container .width_full .ag-cell-value {
160
+ width: 100%;
161
+ }
162
+ .ag-grid-container .width_full.ag-cell {
163
+ width: 100%;
164
+ }
165
+ .ag-grid-container .ag-column-first {
166
+ display: flex;
167
+ align-items: center;
168
+ }
169
+ .ag-checkbox-input-wrapper,
170
+ .ag-radio-button-input-wrapper {
171
+ transform: scale(1.3);
172
+ }
173
+ .ag-cell-focus:not(.ag-cell-range-selected):focus-within,
174
+ .ag-cell-range-single-cell,
175
+ .ag-cell-range-single-cell.ag-cell-range-handle,
176
+ .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),
177
+ .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group {
178
+ border-color: transparent;
179
+ }
180
+ .ag-grid-container .ag-cell-focus:not(.ag-cell-range-selected) {
181
+ border-color: transparent !important;
182
+ }
183
+ .ag-overlay-no-rows-wrapper {
184
+ position: absolute;
185
+ top: 40px;
186
+ height: calc(100% - 40px);
187
+ background-color: var(--color-sys-background);
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: center;
191
+ }
192
+ .ag-overlay-no-rows-center {
193
+ background-color: var(--color-sys-background);
194
+ color: var(--color-sys-text-subtle);
195
+ }
196
+ .ag-overlay-loading-wrapper {
197
+ background-color: var(--color-sys-background);
198
+ }
199
+ .ag-overlay-loading-center {
200
+ background-color: var(--color-sys-background);
201
+ color: var(--color-sys-text-normal);
202
+ }
203
+ .ag-grid-container .ag-row:active {
204
+ background-color: var(--color-sys-table-press) !important;
205
+ }
206
+ .ag-grid-container .ag-row-selected.ag-row-hover {
207
+ background-color: var(--color-sys-table-press);
208
+ }
209
+ .checkbox-column-cell {
210
+ padding: 0 !important;
211
+ display: flex !important;
212
+ justify-content: center !important;
213
+ align-items: center !important;
214
+ }
215
+ .checkbox-column-cell .ag-react-container {
216
+ width: 100%;
217
+ height: 100%;
218
+ }
219
+ [data-theme=dark] .ag-popup,
220
+ [data-theme=dark] .ag-menu,
221
+ [data-theme=dark] .ag-filter {
222
+ background-color: var(--color-sys-background);
223
+ border: 1px solid var(--color-sys-divider-subtler);
224
+ }
225
+ [data-theme=dark] .ag-filter-toolpanel-header,
226
+ [data-theme=dark] .ag-filter-air-mode,
227
+ [data-theme=dark] .ag-filter-list-panel,
228
+ [data-theme=dark] .ag-filter-apply-panel {
229
+ background-color: var(--color-sys-background);
230
+ }
231
+ [data-theme=dark] .ag-input-field-input {
232
+ background-color: var(--color-sys-background);
233
+ color: var(--color-sys-text-main);
234
+ border: 1px solid var(--color-sys-divider-main);
235
+ border-radius: 6px;
236
+ height: 36px;
237
+ }
238
+ [data-theme=dark] .ag-input-field-input:focus {
239
+ outline: 2px solid var(--color-sys-focus-ring-bold);
240
+ border-color: var(--color-sys-focus-ring-bold);
241
+ }
242
+ [data-theme=dark] .ag-input-field-input::placeholder {
243
+ color: var(--color-sys-text-subtler);
244
+ }
245
+ [data-theme=dark] .ag-input-wrapper::before,
246
+ [data-theme=dark] .ag-input-wrapper::after,
247
+ [data-theme=dark] .ag-picker-field-icon .ag-icon::before,
248
+ [data-theme=dark] .ag-picker-field-icon .ag-icon::after {
249
+ background-color: var(--color-sys-text-subtle) !important;
250
+ color: var(--color-sys-text-subtle) !important;
251
+ }
252
+ [data-theme=dark] .ag-picker-field-icon {
253
+ background-color: transparent !important;
254
+ color: var(--color-sys-text-subtle) !important;
255
+ }
256
+ [data-theme=dark] .ag-icon {
257
+ color: var(--color-sys-text-subtle) !important;
258
+ }
259
+ [data-theme=dark] .ag-picker-field-wrapper {
260
+ background-color: var(--color-sys-background);
261
+ border: 1px solid var(--color-sys-divider-main);
262
+ border-radius: 6px;
263
+ min-height: 36px;
264
+ }
265
+ [data-theme=dark] .ag-picker-field-display {
266
+ color: var(--color-sys-text-main);
267
+ margin-left: 4px;
268
+ }
269
+ [data-theme=dark] .ag-rich-select-list,
270
+ [data-theme=dark] .ag-select-list,
271
+ [data-theme=dark] .ag-picker-field-wrapper .ag-picker-expanded {
272
+ background-color: var(--color-sys-background);
273
+ border: 1px solid var(--color-sys-divider-subtler);
274
+ box-shadow: 0 4px 16px var(--color-grayscale-s30);
275
+ }
276
+ [data-theme=dark] .ag-rich-select-row,
277
+ [data-theme=dark] .ag-select-list-item {
278
+ color: var(--color-sys-text-normal);
279
+ }
280
+ [data-theme=dark] .ag-rich-select-row.ag-rich-select-row-selected,
281
+ [data-theme=dark] .ag-select-list-item:hover,
282
+ [data-theme=dark] .ag-select-list-item.ag-select-list-item-highlighted {
283
+ background-color: var(--color-sys-table-select);
284
+ }
285
+ [data-theme=dark] .ag-checkbox-input-wrapper {
286
+ background-color: transparent !important;
287
+ box-shadow: none !important;
288
+ transform: scale(1.3);
289
+ }
290
+ [data-theme=dark] .ag-checkbox-input-wrapper::after {
291
+ color: white;
292
+ }
293
+ [data-theme=dark] .ag-radio-button .ag-radio-button-input-wrapper {
294
+ background-color: transparent;
295
+ border: 1.5px solid var(--color-sys-divider-main);
296
+ border-radius: 50%;
297
+ box-sizing: border-box;
298
+ transition: all 0.1s ease;
299
+ background-image: none !important;
300
+ mask-image: none !important;
301
+ }
302
+ [data-theme=dark] .ag-radio-button:not(.ag-checked) .ag-radio-button-input-wrapper {
303
+ border-color: var(--color-sys-divider-main);
304
+ }
305
+ [data-theme=dark] .ag-radio-button:not(.ag-checked) .ag-radio-button-input-wrapper::after {
306
+ content: none;
307
+ }
308
+ [data-theme=dark] .ag-radio-button .ag-radio-button-input-wrapper.ag-checked {
309
+ background-color: var(--color-primary30);
310
+ border-color: var(--color-primary30);
311
+ border-width: 0px;
312
+ background-image: none !important;
313
+ mask-image: none !important;
314
+ }
315
+ [data-theme=dark] .ag-radio-button .ag-radio-button-input-wrapper.ag-checked::after {
316
+ content: "";
317
+ display: block;
318
+ width: 100%;
319
+ height: 100%;
320
+ background-color: var(--color-sys-background) !important;
321
+ border-radius: 50%;
322
+ transform: scale(0.4);
323
+ background-image: none !important;
324
+ mask-image: none !important;
325
+ box-shadow: none !important;
326
+ border: none !important;
327
+ }
328
+ [data-theme=dark] .ag-checkbox-label,
329
+ [data-theme=dark] .ag-radio-button-label {
330
+ color: var(--color-sys-text-main);
331
+ }
332
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/parameterTable/parameterTable.css","../src/components/agGridTable/style.css"],"sourcesContent":["/* Parameter Table — Google Sheets 스타일 셀 모드 시각 스타일.\n active/selected/editing 상태는 ParameterTableRow 에서 data-* 속성으로 표시.\n\n 편집 input 은 단일 floating input 으로 root 안에 absolute positioning. 활성 cell\n 위에 띄워서 cell 위치를 따라간다 — IME composition 중 input element 가\n unmount/remount 되지 않으므로 한국어 자모 분리 문제가 발생하지 않는다. */\n\n.t3q-parameter-table {\n width: 100%;\n position: relative; /* floating input absolute 기준점 */\n}\n\n/* 셀 기본. text 선택 차단 + cursor-cell (셀 선택 UX 힌트). */\n.t3q-pt-cell {\n user-select: none;\n position: relative;\n vertical-align: middle;\n border-bottom: 1px solid var(--color-sys-divider-subtle); /* Table 행 선과 같은 토큰 (2026-10-17 이슈 47 4차) */\n}\n\n/* 마지막 행의 선은 Table 의 둥근 바깥 테두리와 겹치지 않게 지운다 */\ntr:last-child > .t3q-pt-cell {\n border-bottom: none;\n}\n\n/* 외부 검증 실패 셀. layout 영향 없이 연한 빨강 배경으로 강조.\n sys-alert-danger-background 와 동일 토큰(danger-o10) — opacity 기반이라 hover/selection\n tint 위에서도 자연스럽게 합성된다. 아래 .t3q-pt-cell--selected / --editing 이 CSS\n cascade 에서 뒤에 정의돼 사용자 인터랙션 중인 셀은 selection/editing 배경이 우선. */\n.t3q-pt-cell--error {\n background-color: var(--color-danger-o10);\n}\n\n/* 선택 범위 안의 셀. 배경에 옅은 primary tint. */\n.t3q-pt-cell--selected {\n background-color: var(--color-sys-table-select);\n}\n\n/* 편집 중 셀. 흰 배경 + 활성 outline. CSS 변수 fallback 안전한 outline 색. */\n.t3q-pt-cell--editing {\n background-color: var(--color-sys-background);\n outline: 2px solid var(--color-sys-focus-ring-bold);\n outline-offset: -2px;\n z-index: 1;\n}\n\n/* 비편집 상태의 셀 display 영역. 셀 안 텍스트 유무와 무관하게 행 높이가 동일하도록\n 고정 height + 명시적 line-height. min-height 가 floor 일 뿐이라 inline content 의\n font line box 가 박스 높이를 미세하게 변경시키는 문제를 차단. */\n.t3q-pt-cell-display {\n height: 28px;\n line-height: 1.4;\n display: flex;\n align-items: center;\n}\n\n/* 편집 중인 셀의 display 영역은 floating input 이 그 위를 덮으므로 visually hidden.\n 레이아웃은 유지해 (text node 그대로 둠) cell 의 line-height/height 측정에 영향 X. */\n.t3q-pt-cell-display--editing {\n visibility: hidden;\n}\n\n/* compact spacing 보정. */\n.t3q-parameter-table--compact .t3q-pt-cell-display {\n height: 24px;\n font-size: 13px;\n}\n\n.t3q-parameter-table--normal .t3q-pt-cell-display {\n height: 32px;\n}\n\n/* disabled. */\n.t3q-parameter-table--disabled .t3q-pt-cell {\n cursor: default;\n}\n\n/* 단일 floating input — 활성 cell 위에 absolute positioning. 비편집 모드에서는\n off-screen 아니라 활성 cell 위에 두지만 opacity:0 + pointer-events:none 으로 숨김.\n focus 는 항상 이 input 에 있어 한국어/일본어/중국어 IME 가 자연스럽게 composition\n 을 받는다. cell 별로 input 을 mount/unmount 하지 않으므로 composition 이\n 끊기지 않는다.\n\n background: transparent — 셀의 outline / background / selected tint 같은 모든 시각\n 단서는 cell 이 표현하고, floating input 은 단지 caret + text + selection 만 그 위에\n 덧그리는 invisible layer 역할. 불투명 background 였을 때는 cell editing 의 outline\n (outline-offset -2px 로 셀 안쪽에 그려짐) 이 가려져 안 보이는 문제가 있었다. */\n.t3q-pt-floating-input {\n position: absolute;\n margin: 0;\n border: 0;\n padding: 6px 12px;\n background: transparent;\n color: var(--color-sys-text-main);\n font: inherit;\n line-height: 1.4;\n outline: none;\n /* default: cell 위치에 두지만 안 보이고 mouse interaction 안 받음 */\n opacity: 0;\n pointer-events: none;\n z-index: 2;\n}\n\n/* compact spacing — cell display 와 동일한 폰트 크기 */\n.t3q-parameter-table--compact .t3q-pt-floating-input {\n font-size: 13px;\n}\n\n/* 편집 모드: 셀 위에 visible. */\n.t3q-pt-floating-input--editing {\n opacity: 1;\n pointer-events: auto;\n}\n",".ag-grid-container {\n width: 100%;\n height: 100%;\n}\n\n/*\n AG Grid legacy base rule `[class*=\"ag-theme-\"]` has higher specificity than\n v33 `:where(.ag-theme-params-*)` rules in some environments.\n Re-apply core table tokens here with stronger specificity.\n*/\n.ag-grid-container [class*='ag-theme-'] {\n --ag-font-family: var(--font-sans);\n --ag-header-background-color: var(--color-sys-table-header-background);\n /* 선 하나의 규칙(2026-10-17 이슈 47 4차): 바깥 둥근 테두리·헤더 아래 선·행 선이 모두 같은 1px sys-divider-subtle.\n 원문 심판이 \"채운 헤더 띠 vs 테두리 없는 행\", \"헤더에만 있는 열 구분선\" 을 감점했고, 사용자가 표를 감싸는 둥근 테두리를 요청 */\n --ag-border-color: var(--color-sys-divider-subtle);\n --ag-wrapper-border: solid 1px var(--color-sys-divider-subtle);\n --ag-wrapper-border-radius: var(--radius-medium);\n --ag-header-row-border: solid 1px var(--color-sys-divider-subtle);\n --ag-row-border: solid 1px var(--color-sys-divider-subtle);\n\n --ag-header-column-border: none;\n --ag-spacing: 8px;\n --ag-cell-horizontal-padding: calc(\n var(--ag-spacing) * 2 * var(--ag-cell-horizontal-padding-scale)\n );\n\n /*\n themeQuartz.withParams()는 CSS var() 레퍼런스를 색상으로 파싱하지 못해 기본값으로 폴백.\n CSS 오버라이드 방식으로 브라우저가 var()를 해석하도록 강제.\n */\n --ag-foreground-color: var(--color-sys-text-normal);\n --ag-background-color: var(--color-sys-background);\n --ag-header-foreground-color: var(--color-sys-table-header-text);\n --ag-row-hover-color: var(--color-sys-table-hover);\n --ag-selected-row-background-color: var(--color-sys-table-select);\n\n /* 헤더 컬럼 resize handle: CSS 변수로 다크모드 대응. 평소엔 숨기고 헤더 셀 hover 때만 보인다(아래) */\n --ag-header-column-resize-handle-color: var(--color-sys-border);\n --ag-header-column-resize-handle-height: 30%;\n --ag-header-column-resize-handle-width: 2px;\n}\n\n/* 둥근 테두리 안에서 헤더 모서리가 잘리도록. 테두리 자체는 --ag-wrapper-border 가 그린다 */\n.ag-grid-container .ag-root-wrapper {\n overflow: hidden;\n}\n\n/* 리사이즈 핸들은 hover 때만 — 늘 보이면 헤더에만 세로선이 있는 것처럼 읽힌다 */\n.ag-grid-container .ag-header-cell-resize::after {\n opacity: 0;\n transition: opacity 120ms ease;\n}\n.ag-grid-container .ag-header-cell:hover .ag-header-cell-resize::after {\n opacity: 1;\n}\n\n/* 마지막 행의 선은 바깥 테두리와 겹쳐 2px 가 되므로 지운다 */\n.ag-grid-container .ag-row.ag-row-last {\n border-bottom: none;\n}\n\n/* ============================================================================\n agGridTable/index.tsx에서 마이그레이션된 스타일\n ============================================================================ */\n\n/* onRowClicked 옵션 사용 시 마우스 커서 변경 */\n.ag-grid-container .ag-row-clickable {\n cursor: pointer;\n}\n\n/* 열 타입 'primary' (AgGridTable columnTypes): 주 식별자 열. 위계는 굵기로(본문 색, dl-ui-v3 목록의 이름 열과 같음),\n 클릭 가능하다는 표시는 행 hover 배경 + 이름 밑줄로. 파란 링크색은 쓰지 않는다 — 행 전체가 눌리는 표에서\n \"이름만 링크\" 로 읽히기 때문 (2026-10-09 결정) */\n.ag-grid-container .ag-cell-primary {\n color: var(--color-sys-text-main);\n font-weight: var(--font-weight-semibold);\n}\n/* hover 밑줄은 이름 글자에만 — 두 줄 셀(TwoLineCellRenderer)에서는 보조 줄까지 밑줄이 번지지 않게 첫 줄([data-slot='cell-primary'])만\n (2026-10-18 13차 ⑥). text-decoration 은 자손에게 전파되어 자손이 끌 수 없으므로 :has 로 대상을 나눈다 */\n.ag-grid-container .ag-row-clickable:hover .ag-cell-primary:not(:has([data-slot='cell-primary'])),\n.ag-grid-container .ag-row-clickable:hover .ag-cell-primary [data-slot='cell-primary'] {\n text-decoration: underline;\n}\n\n/* 셀 말줄임 (2026-10-18 13차): defaultColDef.cellStyle 이 display:flex 라 .ag-cell-value 가 flex 자식이 되고, flex 자식은 min-width:auto 라\n 줄어들지 않아 ag-grid 의 말줄임(overflow:hidden; text-overflow:ellipsis)이 죽는다 — 글자가 셀 끝에서 뚝 잘렸다\n (한 줄 판 12차 목록 9쌍 중 7쌍 \"clipped mid-word with no ellipsis\"). min-width:0 을 주면 줄어들며 말줄임표가 산다.\n wrapText 를 켠 열(.ag-cell-wrap-text)과 ag-allow-overflow 는 건드리지 않는다 */\n.ag-grid-container .ag-cell,\n.ag-grid-container .ag-cell-wrapper,\n.ag-grid-container .ag-cell-value {\n min-width: 0;\n}\n.ag-grid-container .ag-cell:not(.ag-cell-wrap-text) .ag-cell-value:not(.ag-allow-overflow) {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* 평문 셀 말줄임 (2026-10-26 22차): 체크박스·행 끌기 열이 없는 표에서 ag-grid 는 .ag-cell-wrapper 를 만들지 않고 .ag-cell 자체에\n ag-cell-value 를 붙인다(toggleCss(\"ag-cell-value\", !usingWrapper)). valueFormatter 만 쓴 평문 열은 그 안이 글자 노드 하나인데\n defaultColDef.cellStyle 의 인라인 display:flex 가 들어가 글자가 익명 flex 항목이 되고 ellipsis 가 그려지지 않는다 — 위 규칙은 자손\n 선택자라 같은 요소에 닿지 않는다(21차 1-B: 'a100-prod-cluste' 뚝 잘림, 두 줄 판 알림 규칙 목록 2/3 run). 자식 요소가 없는 값 셀만\n block 으로 되돌린다(인라인 스타일을 이기려면 !important). 세로 가운데는 align-content. renderer 가 있는 셀(flex 정렬이 필요)·\n 숫자 열(.ag-right-aligned-cell, justify-content:flex-end 유지)·wrapText 열은 그대로 */\n.ag-grid-container\n .ag-cell.ag-cell-value:not(:has(> *)):not(.ag-right-aligned-cell):not(.ag-cell-wrap-text) {\n display: block !important;\n align-content: center;\n}\n\n/* 열 타입 'number' (AgGridTable columnTypes): 숫자 열. defaultColDef.cellStyle 이 display:flex 라 ag-grid 의 text-align:right 가\n 먹지 않으므로 justify-content 로 오른쪽 정렬. 제목은 글자를 오른쪽, 정렬 아이콘을 왼쪽에(row-reverse). 숫자 폭은 고정(tabular-nums)\n — 원문 심판이 \"숫자 열이 왼쪽 정렬\" 을 51쌍에서 20회 감점 (2026-10-16 이슈 47) */\n.ag-grid-container .ag-cell.ag-right-aligned-cell {\n justify-content: flex-end;\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n.ag-grid-container .ag-header-cell.ag-right-aligned-header .ag-header-cell-label {\n /* 글자만 오른쪽으로, 정렬 아이콘은 다른 열처럼 글자 뒤. ag-grid 기본 테마가 숫자 열 헤더에 row-reverse 를 걸어 아이콘이 왼쪽으로 가므로\n 명시적으로 되돌린다 (2026-10-17 5차: \"아이콘 자리가 다르다\" 감점) */\n flex-direction: row;\n justify-content: flex-end;\n}\n/* 정렬 아이콘이 늘 보이는 숫자 열(withSortIconOffset): 위 제목은 글자 뒤에 아이콘(간격 --ag-spacing + 아이콘 --ag-icon-size)이 있어 글자가\n 값보다 그만큼 왼쪽에서 끝난다. 값 셀의 오른쪽 여백을 같은 폭만큼 늘려 제목 글자 끝 = 값 끝으로 맞춘다\n (2026-10-30 홀드아웃 17 세트 2: \"right-aligned numeric values under left-aligned column headers\") */\n.ag-grid-container .ag-cell.ag-right-aligned-cell.ag-cell-sort-offset {\n /* ag-grid 셀 여백 식(셀 테두리 1px 를 뺀 값)에 아이콘 폭을 더한다 — 1px 를 빼지 않으면 값이 제목보다 1px 안쪽(2026-10-30 실측) */\n padding-right: calc(\n var(--ag-cell-horizontal-padding) - 1px + var(--ag-spacing) + var(--ag-icon-size)\n );\n}\n\n/* 상세가 열린 행 (ListPage activeRowId → rowClassRules 'ag-row-active'). 선택 행과 같은 색 */\n.ag-grid-container .ag-row.ag-row-active {\n background-color: var(--color-sys-table-select);\n}\n\n/*\n domLayout: 'autoHeight' 일 때 기본 높이 제거 (단, 데이터가 없는 경우 기본 높이 유지)\n https://www.ag-grid.com/react-data-grid/grid-size/#min-height-with-auto-height\n */\n.ag-grid-container[data-is-empty='false'] .ag-center-cols-viewport {\n min-height: unset !important;\n}\n\n/* 헤더는 바깥 둥근 테두리가 모서리를 맡으므로 자체 라운드 없음 */\n.ag-grid-container .ag-header {\n position: relative;\n z-index: 1;\n}\n\n/* 마지막 컬럼 크기 조절 버튼 숨김 */\n.ag-grid-container .ag-column-last .ag-header-cell-resize {\n display: none;\n}\n\n/* cellClass 옵션에 추가 시 cell width 100%으로 적용 */\n.ag-grid-container .width_full .ag-cell-wrapper {\n width: 100%;\n}\n\n.ag-grid-container .width_full .ag-cell-value {\n width: 100%;\n}\n\n.ag-grid-container .width_full.ag-cell {\n width: 100%;\n}\n\n.ag-grid-container .ag-column-first {\n display: flex;\n align-items: center;\n}\n\n/* 체크박스 크기 복원 (v33 Theming API에서 기본으로 작아짐 방지) */\n.ag-checkbox-input-wrapper,\n.ag-radio-button-input-wrapper {\n transform: scale(1.3);\n}\n\n/* focus 시 보여지는 border-color 초기화 */\n.ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n.ag-cell-range-single-cell,\n.ag-cell-range-single-cell.ag-cell-range-handle,\n.ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n.ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group {\n border-color: transparent;\n}\n\n/* AG Grid v33: 마우스 클릭 시 focus-within 없이 ag-cell-focus만 붙는 케이스 대응 */\n.ag-grid-container .ag-cell-focus:not(.ag-cell-range-selected) {\n border-color: transparent !important;\n}\n\n/* 빈 상태 오버레이 지원 */\n.ag-overlay-no-rows-wrapper {\n position: absolute;\n top: 40px;\n height: calc(100% - 40px);\n background-color: var(--color-sys-background);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.ag-overlay-no-rows-center {\n background-color: var(--color-sys-background);\n color: var(--color-sys-text-subtle);\n}\n\n/* 로딩 오버레이 지원 */\n.ag-overlay-loading-wrapper {\n background-color: var(--color-sys-background);\n}\n\n.ag-overlay-loading-center {\n background-color: var(--color-sys-background);\n color: var(--color-sys-text-normal);\n}\n\n/* 행 클릭 시 눌림 효과 */\n.ag-grid-container .ag-row:active {\n background-color: var(--color-sys-table-press) !important;\n}\n\n/* 선택된 행 hover 상태 */\n.ag-grid-container .ag-row-selected.ag-row-hover {\n background-color: var(--color-sys-table-press);\n}\n\n/* Checkbox Column Fix: Remove padding to allow full cell click area */\n.checkbox-column-cell {\n padding: 0 !important;\n display: flex !important;\n justify-content: center !important;\n align-items: center !important;\n}\n\n.checkbox-column-cell .ag-react-container {\n width: 100%;\n height: 100%;\n}\n\n/* ============================================================================\n 다크모드 AG Grid 오버라이드\n AG Grid 팝업(ag-popup, ag-menu)은 body 포털로 렌더링되므로\n .ag-grid-container 스코프 없이 [data-theme='dark']로만 처리\n ============================================================================ */\n\n/* 팝업 / 메뉴 / 필터 배경 */\n[data-theme='dark'] .ag-popup,\n[data-theme='dark'] .ag-menu,\n[data-theme='dark'] .ag-filter {\n background-color: var(--color-sys-background);\n border: 1px solid var(--color-sys-divider-subtler);\n}\n\n[data-theme='dark'] .ag-filter-toolpanel-header,\n[data-theme='dark'] .ag-filter-air-mode,\n[data-theme='dark'] .ag-filter-list-panel,\n[data-theme='dark'] .ag-filter-apply-panel {\n background-color: var(--color-sys-background);\n}\n\n/* 텍스트 입력창 (Search) */\n[data-theme='dark'] .ag-input-field-input {\n background-color: var(--color-sys-background);\n color: var(--color-sys-text-main);\n border: 1px solid var(--color-sys-divider-main);\n border-radius: 6px;\n height: 36px;\n}\n\n[data-theme='dark'] .ag-input-field-input:focus {\n outline: 2px solid var(--color-sys-focus-ring-bold);\n border-color: var(--color-sys-focus-ring-bold);\n}\n\n[data-theme='dark'] .ag-input-field-input::placeholder {\n color: var(--color-sys-text-subtler);\n}\n\n[data-theme='dark'] .ag-input-wrapper::before,\n[data-theme='dark'] .ag-input-wrapper::after,\n[data-theme='dark'] .ag-picker-field-icon .ag-icon::before,\n[data-theme='dark'] .ag-picker-field-icon .ag-icon::after {\n background-color: var(--color-sys-text-subtle) !important;\n color: var(--color-sys-text-subtle) !important;\n}\n\n[data-theme='dark'] .ag-picker-field-icon {\n background-color: transparent !important;\n color: var(--color-sys-text-subtle) !important;\n}\n\n[data-theme='dark'] .ag-icon {\n color: var(--color-sys-text-subtle) !important;\n}\n\n/* 셀렉트 박스 */\n[data-theme='dark'] .ag-picker-field-wrapper {\n background-color: var(--color-sys-background);\n border: 1px solid var(--color-sys-divider-main);\n border-radius: 6px;\n min-height: 36px;\n}\n\n[data-theme='dark'] .ag-picker-field-display {\n color: var(--color-sys-text-main);\n margin-left: 4px;\n}\n\n[data-theme='dark'] .ag-rich-select-list,\n[data-theme='dark'] .ag-select-list,\n[data-theme='dark'] .ag-picker-field-wrapper .ag-picker-expanded {\n background-color: var(--color-sys-background);\n border: 1px solid var(--color-sys-divider-subtler);\n box-shadow: 0 4px 16px var(--color-grayscale-s30);\n}\n\n[data-theme='dark'] .ag-rich-select-row,\n[data-theme='dark'] .ag-select-list-item {\n color: var(--color-sys-text-normal);\n}\n\n[data-theme='dark'] .ag-rich-select-row.ag-rich-select-row-selected,\n[data-theme='dark'] .ag-select-list-item:hover,\n[data-theme='dark'] .ag-select-list-item.ag-select-list-item-highlighted {\n background-color: var(--color-sys-table-select);\n}\n\n/* 체크박스: 글로우/배경 제거 */\n[data-theme='dark'] .ag-checkbox-input-wrapper {\n background-color: transparent !important;\n box-shadow: none !important;\n transform: scale(1.3);\n}\n\n[data-theme='dark'] .ag-checkbox-input-wrapper::after {\n color: white;\n}\n\n/* 라디오 버튼: Masked Donut 전략 */\n[data-theme='dark'] .ag-radio-button .ag-radio-button-input-wrapper {\n background-color: transparent;\n border: 1.5px solid var(--color-sys-divider-main);\n border-radius: 50%;\n box-sizing: border-box;\n transition: all 0.1s ease;\n background-image: none !important;\n mask-image: none !important;\n}\n\n[data-theme='dark'] .ag-radio-button:not(.ag-checked) .ag-radio-button-input-wrapper {\n border-color: var(--color-sys-divider-main);\n}\n\n[data-theme='dark'] .ag-radio-button:not(.ag-checked) .ag-radio-button-input-wrapper::after {\n content: none;\n}\n\n[data-theme='dark'] .ag-radio-button .ag-radio-button-input-wrapper.ag-checked {\n background-color: var(--color-primary30);\n border-color: var(--color-primary30);\n border-width: 0px;\n background-image: none !important;\n mask-image: none !important;\n}\n\n[data-theme='dark'] .ag-radio-button .ag-radio-button-input-wrapper.ag-checked::after {\n content: '';\n display: block;\n width: 100%;\n height: 100%;\n background-color: var(--color-sys-background) !important;\n border-radius: 50%;\n transform: scale(0.4);\n background-image: none !important;\n mask-image: none !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n/* 체크박스 / 라디오 레이블 */\n[data-theme='dark'] .ag-checkbox-label,\n[data-theme='dark'] .ag-radio-button-label {\n color: var(--color-sys-text-main);\n}\n"],"mappings":"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","names":[]}