@ninebone/table 0.1.41 → 0.1.43

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