@ninebone/table 0.1.32 → 0.1.33

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 (62) hide show
  1. package/dist/css/layout.css +466 -240
  2. package/dist/nine-table.js +1 -1
  3. package/dist/nine-table.umd.js +1 -1
  4. package/package.json +1 -1
  5. package/dist/css/_common.css +0 -11
  6. package/dist/css/ai.css +0 -609
  7. package/dist/css/aiMessage.css +0 -18
  8. package/dist/css/ideAssi.css +0 -616
  9. package/dist/css/ideDiff.css +0 -124
  10. package/dist/css/ngButton.css +0 -40
  11. package/dist/css/ngCheckBox.css +0 -81
  12. package/dist/css/ngColExpand.css +0 -17
  13. package/dist/css/ngCombo.css +0 -75
  14. package/dist/css/ngComboPanel.css +0 -102
  15. package/dist/css/ngExpandButton.css +0 -71
  16. package/dist/css/ngExpandCheck.css +0 -34
  17. package/dist/css/ngExpandIcon.css +0 -36
  18. package/dist/css/ngFilterPanel.css +0 -94
  19. package/dist/css/ngFlexBox.css +0 -7
  20. package/dist/css/ngFoot.css +0 -109
  21. package/dist/css/ngHScrollBar.css +0 -85
  22. package/dist/css/ngHead.css +0 -86
  23. package/dist/css/ngImg.css +0 -22
  24. package/dist/css/ngInfo.css +0 -54
  25. package/dist/css/ngInputColor.css +0 -77
  26. package/dist/css/ngInputDate.css +0 -74
  27. package/dist/css/ngInputText.css +0 -65
  28. package/dist/css/ngMaximize.css +0 -26
  29. package/dist/css/ngProgress.css +0 -40
  30. package/dist/css/ngRadio.css +0 -61
  31. package/dist/css/ngRenderer.css +0 -59
  32. package/dist/css/ngRowDetail.css +0 -26
  33. package/dist/css/ngRowDrag.css +0 -13
  34. package/dist/css/ngRowExpand.css +0 -20
  35. package/dist/css/ngRowIndicator.css +0 -111
  36. package/dist/css/ngRowPin.css +0 -30
  37. package/dist/css/ngRowState.css +0 -16
  38. package/dist/css/ngSvg.css +0 -22
  39. package/dist/css/ngTextArea.css +0 -64
  40. package/dist/css/ngTreeItem.css +0 -133
  41. package/dist/css/ngVScrollBar.css +0 -85
  42. package/dist/css/ninegrid.css +0 -1212
  43. package/dist/css/nxAlert.css +0 -142
  44. package/dist/css/nxButtons.css +0 -33
  45. package/dist/css/nxCollapse.css +0 -67
  46. package/dist/css/nxConfirm.css +0 -143
  47. package/dist/css/nxDialog.css +0 -606
  48. package/dist/css/nxDiv.css +0 -120
  49. package/dist/css/nxEditor.css +0 -171
  50. package/dist/css/nxForm.css +0 -67
  51. package/dist/css/nxModal.css +0 -627
  52. package/dist/css/nxPanel.css +0 -129
  53. package/dist/css/nxSideMenu.css +0 -62
  54. package/dist/css/nxSideMenuBody.css +0 -8
  55. package/dist/css/nxSideMenuFoot.css +0 -78
  56. package/dist/css/nxSideMenuHead.css +0 -82
  57. package/dist/css/nxSideMenuItem.css +0 -203
  58. package/dist/css/nxSplitter.css +0 -63
  59. package/dist/css/nxTab.css +0 -193
  60. package/dist/css/nxTitle.css +0 -210
  61. package/dist/css/nxTitle2.css +0 -33
  62. package/dist/index.html +0 -60
@@ -1,241 +1,467 @@
1
1
 
2
- :host {
3
- display: flex;
4
- flex-direction: column;
5
- position: relative;
6
- overflow: hidden;
7
-
8
- background: #fff;
9
- }
10
-
11
- :host([theme="simple"]) {
12
- /* 1. 불필요한 패널 및 컴포넌트 숨기기 */
13
- .ng-part-header, .ng-part-footer,
14
- nine-table-toolbar,
15
- nine-table-sheets-footer,
16
- nine-table-vscrollbar,
17
- nine-table-hscrollbar,
18
- nine-table-sheet .ng-scroll-edge {
19
- display: none;
20
- }
21
-
22
- .col-indicator-rowgroup {
23
- display: none;
24
- }
25
- tr {
26
- height: 32px;
27
- }
28
-
29
- /* 2. 💡 [핵심] 스크롤바용 우측 16px 빈 공간을 제거하고 1열(1fr)로 꽉 채우기 */
30
- nine-table-sheet {
31
- border: none;
32
- overflow: hidden;
33
- grid-template-columns: 1fr;
34
- grid-template-rows: 1fr;
35
- }
36
-
37
- nine-table-sheet tr th,
38
- nine-table-sheet tr td {
39
- border: none;
40
- padding: 0 8px;
41
- }
42
-
43
- nine-table-sheet tr td {
44
- text-align: left;
45
- }
46
-
47
- /* 4. 브라우저 기본 네이티브 스크롤바를 콘텐츠 위에 자연스럽게 오버레이(Overlay) */
48
- nine-table-sheet .ng-sheet-body {
49
- overflow-y: auto;
50
- overflow-x: hidden;
51
- scrollbar-width: thin;
52
- scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
53
- }
54
-
55
- nine-table-sheet .ng-sheet-body::-webkit-scrollbar {
56
- display: block;
57
- width: 6px;
58
- height: 6px;
59
- }
60
-
61
- nine-table-sheet .ng-sheet-body::-webkit-scrollbar-track {
62
- background: transparent;
63
- }
64
-
65
- nine-table-sheet .ng-sheet-body::-webkit-scrollbar-thumb {
66
- background: rgba(0, 0, 0, 0.15);
67
- border-radius: 3px;
68
- }
69
-
70
- nine-table-sheet .ng-sheet-body::-webkit-scrollbar-thumb:hover {
71
- background: rgba(0, 0, 0, 0.3);
72
- }
73
-
74
- nine-table-sheet .ng-container-body {
75
- --overflow: visible;
76
- }
77
-
78
- }
79
-
80
- /* 🎯 Toolbar 숨김 제어 */
81
- :host([theme="simple"]) nine-table-toolbar,
82
- :host([show-header="false"]) nine-table-toolbar {
83
- display: none;
84
- }
85
-
86
- /* 🎯 Footer(StatusBar) 숨김 제어 (show-statusbar="false") */
87
- :host([theme="simple"]) nine-table-sheets-footer,
88
- :host([show-statusbar="false"]) nine-table-sheets-footer {
89
- display: none;
90
- }
91
-
92
- :host([theme="simple"]) {
93
- col[data-col="0"], th[data-col="0"], td[data-col="0"] {
94
- display: none;
95
- }
96
- .ng-container-right {
97
- display: none;
98
- }
99
- tr {
100
- height: 26px;
101
- }
102
- }
103
-
104
- /* 3분할된 tr들이 동시에 hover 상태가 되었을 때의 배경색 */
105
- nine-table-sheet tr.hover th,
106
- nine-table-sheet tr.hover td {
107
- background-color: rgba(37, 99, 235, 0.06);
108
- }
109
-
110
- tr.col-indicator-rowgroup {
111
- th,td {
112
- padding: 0;
113
- }
114
- }
115
-
116
- .col-indicator-rowgroup.expand {
117
- height: 20px;
118
- }
119
- .col-indicator-rowgroup.collapse {
120
- height: 2px;
121
-
122
- }
123
- .col-indicator-rowgroup.expand th {
124
- background-color: #eee;
125
- border-right-color: #ccc;
126
- border-top: 2px solid #666;
127
- }
128
- .col-indicator-rowgroup.collapse th {
129
- background-color: #666;
130
- border: none;
131
- }
132
- .col-indicator-rowgroup.collapse div {
133
- display: unset;
134
- }
135
- .col-indicator-rowgroup.collapse div {
136
- display: none;
137
- }
138
-
139
- nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }
140
- nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }
141
- --nine-splitter:not([data-split-index]) { width: 4px; background: #e5e7eb; cursor: col-resize; flex-shrink: 0; }
142
- nine-table-analysis { display: none; }
143
- nine-table-footer { display: none; }
144
-
145
- nine-table-sheets {
146
- flex: 1;
147
- display: flex;
148
- flex-direction: column;
149
- overflow: hidden;
150
- position: relative;
151
- background: #fff;
152
- }
153
- nine-table-sheets-body {
154
- flex: 1;
155
- overflow: hidden;
156
- position: relative;
157
- display: flex;
158
- flex-direction: row;
159
- }
160
-
161
-
162
-
163
- nine-table-sheet .ng-nodata-overlay {
164
- display: none;
165
- position: absolute;
166
- left: 0;
167
- right: 0;
168
- background: #ffffff;
169
- z-index: 0;
170
- align-items: center;
171
- justify-content: center;
172
- font-size: 12px;
173
- color: #9ca3af;
174
- }
175
-
176
- nine-table-sheets.nodata {
177
- .ng-nodata-overlay {
178
- display: flex;
179
- }
180
-
181
- .ng-scroll-content {
182
- table {
183
- display: none;
184
- }
185
- .ng-virtual-spacer {
186
- display: none;
187
- }
188
- }
189
- }
190
-
191
- :host(.loading) {
192
- .ng-loading-bar {
193
- display: block;
194
- }
195
- }
196
-
197
-
198
- .ng-loading-bar {
199
- position: absolute;
200
- top: 0;
201
- left: 0;
202
- right: 0;
203
- height: 2px;
204
- background: rgba(255, 255, 255, 0.08); /* 은은한 화이트 트랙 배경 */
205
- z-index: 10000;
206
- display: none;
207
- overflow: hidden;
208
- }
209
-
210
- /* 🎯 아주 좁고 쨍한 빛 조각 형태로 압축 */
211
- .ng-loading-bar::after {
212
- content: '';
213
- position: absolute;
214
- top: 0;
215
- left: 0;
216
- bottom: 0;
217
- width: 12%; /* 바의 전체 길이를 12%로 대폭 축소 */
218
- background: linear-gradient(
219
- 90deg,
220
- transparent 0%,
221
- rgba(255, 255, 255, 0.4) 20%,
222
- #ffffff 50%,
223
- rgba(255, 255, 255, 0.4) 80%,
224
- transparent 100%
225
- );
226
- box-shadow: 0 0 10px rgba(255, 255, 255, 0.9);
227
- animation: ng-loading-slide 0.9s ease-in-out infinite;
228
- }
229
-
230
-
231
-
232
-
233
-
234
- @keyframes ng-loading-slide {
235
- 0% {
236
- transform: translateX(-150%);
237
- }
238
- 100% {
239
- transform: translateX(850%); /* 폭이 좁아진 만큼 이동 거리 확장 */
240
- }
241
- }
2
+ nine-table-filter-panel, cell-combo-panel {
3
+ z-index: 2;
4
+ position: absolute;
5
+ width: 250px;
6
+ height: 250px;
7
+ border: 1px solid #999;
8
+ background-color: white;
9
+ overflow: hidden;
10
+ box-shadow: 0 4px 12px rgba(0,0,0,0.15);
11
+ display: none;
12
+ flex-direction: column;
13
+ padding: 0;
14
+ margin: 0;
15
+ font-size: 12px;
16
+ resize: both;
17
+ }
18
+
19
+ nine-table-filter-panel.loading,
20
+ cell-combo-panel.loading {
21
+
22
+ nine-table-simple {
23
+ visibility: hidden;
24
+ }
25
+ }
26
+
27
+ nine-table-filter-panel.loading::after,
28
+ cell-combo-panel.loading::after {
29
+ content: "";
30
+ position: absolute;
31
+ inset: 0;
32
+ background: rgba(255, 255, 255, 0.3);
33
+ z-index: 10;
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ }
38
+
39
+ nine-table-filter-panel.loading::before,
40
+ cell-combo-panel.loading::before {
41
+ content: "";
42
+ position: absolute;
43
+ top: 50%;
44
+ left: 50%;
45
+ width: 24px;
46
+ height: 24px;
47
+ margin: -12px 0 0 -12px;
48
+ border: 3px solid #e5e7eb;
49
+ border-top-color: #2563eb;
50
+ border-radius: 50%;
51
+ animation: nine-spin 0.6s linear infinite;
52
+ z-index: 999999911;
53
+ }
54
+ @keyframes nine-spin {
55
+ to {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
60
+ .empty-value {
61
+ color: #999;
62
+ }
63
+
64
+ input[type="checkbox"] {
65
+ appearance: none;
66
+ -webkit-appearance: none;
67
+ width: 14px;
68
+ height: 14px;
69
+ background-color: #ffffff; /* 미체크 시 배경 */
70
+ border: 1px solid #9ca3af;
71
+ border-radius: 3px;
72
+ outline: none;
73
+ cursor: pointer;
74
+ margin: 0;
75
+ display: inline-flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ transition: background-color 0.15s ease, border-color 0.15s ease;
79
+ }
80
+ input[type="checkbox"]:checked {
81
+ background-color: #2563eb; /* 체크 시 파란색 배경 */
82
+ border-color: #2563eb;
83
+ background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>');
84
+ background-repeat: no-repeat;
85
+ background-position: center;
86
+ }
87
+
88
+ thead tr {
89
+ height: 48px;
90
+ }
91
+
92
+ tbody tr {
93
+ height: 32px;
94
+ }
95
+
96
+
97
+
98
+ /* 3분할된 tr들이 동시에 hover 상태가 되었을 때의 배경색 */
99
+ nine-table-sheet tr.hover th,
100
+ nine-table-sheet tr.hover td {
101
+ background-color: rgba(37, 99, 235, 0.06);
102
+ }
103
+
104
+ tr.col-indicator-rowgroup {
105
+ th,td {
106
+ padding: 0;
107
+ }
108
+ }
109
+
110
+ .col-indicator-rowgroup.expand {
111
+ height: 20px;
112
+ }
113
+ .col-indicator-rowgroup.collapse {
114
+ height: 2px;
115
+ }
116
+ .col-indicator-rowgroup.expand th {
117
+ background-color: #eee;
118
+ border-right-color: #ccc;
119
+ border-top: 2px solid #666;
120
+ }
121
+ .col-indicator-rowgroup.collapse th {
122
+ background-color: #666;
123
+ border: none;
124
+ }
125
+ .col-indicator-rowgroup.collapse div {
126
+ display: unset;
127
+ }
128
+ .col-indicator-rowgroup.collapse div {
129
+ display: none;
130
+ }
131
+
132
+ nine-table-body { display: flex; flex-direction: row; flex: 1; overflow: hidden; position: relative; }
133
+ nine-table-summary { display: none; width: 250px; flex-shrink: 0; border-right: 1px solid #e5e7eb; }
134
+ nine-table-analysis { display: none; }
135
+ nine-table-footer { display: none; }
136
+
137
+
138
+ nine-table-toolbar {
139
+ --display: flex;
140
+ display: none;
141
+ align-items: center;
142
+ justify-content: space-between;
143
+ height: 40px;
144
+ padding: 0 12px;
145
+ --border-bottom: 1px solid #e5e7eb;
146
+ background: #ffffff;
147
+ box-sizing: border-box;
148
+ user-select: none;
149
+ flex-shrink: 0;
150
+
151
+
152
+ .ng-toolbar-left {
153
+ display: flex;
154
+ align-items: center;
155
+ gap: 8px;
156
+ }
157
+ .ng-toolbar-title {
158
+ font-size: 13px;
159
+ font-weight: 600;
160
+ color: #111827;
161
+ cursor: pointer;
162
+ }
163
+ .ng-toolbar-menu-btn {
164
+ display: inline-flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ cursor: pointer;
168
+ background: none;
169
+ border: none;
170
+ padding: 4px;
171
+ border-radius: 4px;
172
+ }
173
+ .ng-toolbar-menu-btn:hover {
174
+ background-color: #f3f4f6;
175
+ }
176
+ .ng-toolbar-custom {
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 6px;
180
+ }
181
+ }
182
+
183
+ nine-table-toolbar[show-menu="false"] .ng-toolbar-menu-btn {
184
+ display: none;
185
+ }
186
+
187
+
188
+
189
+
190
+
191
+ nine-table-sheets {
192
+ flex: 1;
193
+ display: flex;
194
+ flex-direction: column;
195
+ overflow: hidden;
196
+ position: relative;
197
+ background: #fff;
198
+
199
+ nine-table-sheets-body {
200
+ flex: 1;
201
+ overflow: hidden;
202
+ position: relative;
203
+ display: flex;
204
+ flex-direction: row;
205
+ }
206
+
207
+
208
+ }
209
+
210
+ nine-table-sheets-footer {
211
+ display: flex;
212
+ height: 26px;
213
+ --background: #f3f4f6;
214
+ border-top: 1px solid #e5e7eb;
215
+ align-items: center;
216
+ justify-content: space-between;
217
+ padding: 0 8px;
218
+ flex-shrink: 0;
219
+
220
+ .sheets-counter {
221
+ font-size: 12px;
222
+ color: #6b7280;
223
+ padding-left: 12px;
224
+ flex-shrink: 0;
225
+
226
+ span#row-count {
227
+ font-weight: 700;
228
+ }
229
+ }
230
+
231
+
232
+
233
+ .nine-tab-bar {
234
+ display: flex;
235
+ align-items: flex-start;
236
+ gap: 2px;
237
+ overflow-x: auto;
238
+ flex: 1;
239
+ height: 100%;
240
+
241
+
242
+
243
+ nt-sheets-tab-item {
244
+ padding: 4px 12px;
245
+ cursor: pointer;
246
+ font-size: 12px;
247
+ color: #4b5563;
248
+ background: #f9fafb;
249
+ border: 1px solid #e5e7eb;
250
+ border-top: none;
251
+ border-radius: 0 0 3px 3px;
252
+ user-select: none;
253
+ height: 100%;
254
+ box-sizing: border-box;
255
+ display: flex;
256
+ align-items: center;
257
+ }
258
+
259
+ nt-sheets-tab-item.active {
260
+ background: white;
261
+ color: #111827;
262
+ font-weight: 600;
263
+ border-bottom: 2px solid green;
264
+ }
265
+ }
266
+ }
267
+
268
+
269
+ nine-table-sheet .ng-nodata-overlay {
270
+ display: none;
271
+ position: absolute;
272
+ left: 0;
273
+ right: 0;
274
+ background: #ffffff;
275
+ z-index: 0;
276
+ align-items: center;
277
+ justify-content: center;
278
+ font-size: 12px;
279
+ color: #9ca3af;
280
+ }
281
+
282
+ nine-table-sheets.nodata {
283
+ .ng-nodata-overlay {
284
+ display: flex;
285
+ }
286
+
287
+ .ng-scroll-content {
288
+ table {
289
+ display: none;
290
+ }
291
+ .ng-virtual-spacer {
292
+ display: none;
293
+ }
294
+ }
295
+ }
296
+
297
+ :host(.loading) {
298
+ .ng-loading-bar {
299
+ display: block;
300
+ }
301
+ }
302
+
303
+
304
+ .ng-loading-bar {
305
+ position: absolute;
306
+ top: 0;
307
+ left: 0;
308
+ right: 0;
309
+ height: 2px;
310
+ background: rgba(255, 255, 255, 0.08); /* 은은한 화이트 트랙 배경 */
311
+ z-index: 10000;
312
+ display: none;
313
+ overflow: hidden;
314
+ }
315
+
316
+ /* 🎯 아주 좁고 쨍한 빛 조각 형태로 압축 */
317
+ .ng-loading-bar::after {
318
+ content: '';
319
+ position: absolute;
320
+ top: 0;
321
+ left: 0;
322
+ bottom: 0;
323
+ width: 12%; /* 바의 전체 길이를 12%로 대폭 축소 */
324
+ background: linear-gradient(
325
+ 90deg,
326
+ transparent 0%,
327
+ rgba(255, 255, 255, 0.4) 20%,
328
+ #ffffff 50%,
329
+ rgba(255, 255, 255, 0.4) 80%,
330
+ transparent 100%
331
+ );
332
+ box-shadow: 0 0 10px rgba(255, 255, 255, 0.9);
333
+ animation: ng-loading-slide 0.9s ease-in-out infinite;
334
+ }
335
+
336
+
337
+
338
+
339
+ :host {
340
+ display: flex;
341
+ flex-direction: column;
342
+ position: relative;
343
+ overflow: hidden;
344
+
345
+ background: #fff;
346
+ }
347
+
348
+ :host([theme="simple"]) {
349
+ /* 1. 불필요한 패널 및 컴포넌트 숨기기 */
350
+ .ng-part-header, .ng-part-footer,
351
+ nine-table-toolbar,
352
+ nine-table-sheets-footer,
353
+ nine-table-vscrollbar,
354
+ nine-table-hscrollbar,
355
+ nine-table-sheet .ng-scroll-edge {
356
+ display: none;
357
+ }
358
+
359
+ .col-indicator-rowgroup {
360
+ display: none;
361
+ }
362
+
363
+ tr {
364
+ height: 32px;
365
+ }
366
+
367
+ /* 2. 💡 [핵심] 스크롤바용 우측 16px 빈 공간을 제거하고 1열(1fr)로 꽉 채우기 */
368
+ nine-table-sheet {
369
+ border: none;
370
+ overflow: hidden;
371
+ grid-template-columns: 1fr;
372
+ grid-template-rows: 1fr;
373
+ }
374
+
375
+ nine-table-sheet tr th,
376
+ nine-table-sheet tr td {
377
+ border: none;
378
+ padding: 0 8px;
379
+ }
380
+
381
+ nine-table-sheet tr td {
382
+ text-align: left;
383
+ }
384
+
385
+ /* 4. 브라우저 기본 네이티브 스크롤바를 콘텐츠 위에 자연스럽게 오버레이(Overlay) */
386
+ nine-table-sheet .ng-sheet-body {
387
+ overflow-y: auto;
388
+ overflow-x: hidden;
389
+ scrollbar-width: thin;
390
+ scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
391
+ }
392
+
393
+ nine-table-sheet .ng-sheet-body::-webkit-scrollbar {
394
+ display: block;
395
+ width: 6px;
396
+ height: 6px;
397
+ }
398
+
399
+ nine-table-sheet .ng-sheet-body::-webkit-scrollbar-track {
400
+ background: transparent;
401
+ }
402
+
403
+ nine-table-sheet .ng-sheet-body::-webkit-scrollbar-thumb {
404
+ background: rgba(0, 0, 0, 0.15);
405
+ border-radius: 3px;
406
+ }
407
+
408
+ nine-table-sheet .ng-sheet-body::-webkit-scrollbar-thumb:hover {
409
+ background: rgba(0, 0, 0, 0.3);
410
+ }
411
+ }
412
+
413
+ /* 🎯 Toolbar 숨김 제어 */
414
+ :host([theme="simple"]) nine-table-toolbar,
415
+ :host([show-header="false"]) nine-table-toolbar {
416
+ display: none;
417
+ }
418
+
419
+ /* 🎯 Footer(StatusBar) 숨김 제어 (show-statusbar="false") */
420
+ :host([theme="simple"]) nine-table-sheets-footer,
421
+ :host([show-statusbar="false"]) nine-table-sheets-footer {
422
+ display: none;
423
+ }
424
+
425
+ :host([theme="simple"]) {
426
+ col[data-col="0"], th[data-col="0"], td[data-col="0"] {
427
+ display: none;
428
+ }
429
+ .ng-container-right {
430
+ display: none;
431
+ }
432
+ tr {
433
+ height: 26px;
434
+ }
435
+ }
436
+
437
+
438
+ @keyframes ng-loading-slide {
439
+ 0% {
440
+ transform: translateX(-150%);
441
+ }
442
+ 100% {
443
+ transform: translateX(850%); /* 폭이 좁아진 만큼 이동 거리 확장 */
444
+ }
445
+ }
446
+
447
+
448
+ cell-renderer { /* Custom element host layout */
449
+ display: block;
450
+ span {
451
+ display: block;
452
+ width: 100%;
453
+ overflow: hidden;
454
+ text-overflow: ellipsis;
455
+ white-space: nowrap; /* 줄바꿈 방지 */
456
+ }
457
+ }
458
+
459
+ .CELL-RENDERER { /* Parent cell hook */
460
+ text-align: left;
461
+ }
462
+ .CELL-RENDERER[text-align="center"] {
463
+ text-align: center;
464
+ }
465
+ .CELL-RENDERER[text-align="right"] {
466
+ text-align: right;
467
+ }