@ninebone/table 0.1.41 → 0.1.42

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
- }
@@ -1,540 +0,0 @@
1
- nine-table-sheet {
2
- display: none;
3
- grid-template-columns: 1fr 0px;
4
- grid-template-rows: 1fr 0px;
5
- width: 100%;
6
- height: 100%;
7
- position: relative;
8
- box-sizing: border-box;
9
- background: #ffffff;
10
- overflow: hidden;
11
-
12
- .ng-sheet-body {
13
- display: block;
14
- flex: 1 1 auto;
15
- width: 100%;
16
- height: 100%;
17
- overflow-y: auto;
18
- overflow-x: hidden;
19
- position: relative;
20
- scrollbar-width: none;
21
- &::-webkit-scrollbar { display: none; height: 0px; width: 0px; }
22
- }
23
-
24
- .ng-sheet-body-content {
25
- display: flex;
26
- flex-direction: row;
27
- width: 100%;
28
- height: 100%;
29
- left: 0;
30
- top: 0;
31
- position: sticky;
32
- }
33
-
34
-
35
-
36
- .ng-container-left, .ng-container-body, .ng-container-right {
37
- flex-direction: column;
38
- position: relative;
39
- background: #ffffff;
40
- }
41
- .ng-container-body {
42
- display: flex;
43
- }
44
-
45
- .ng-container-left, .ng-container-right {
46
- border: none;
47
- }
48
-
49
- .ng-scroll-edge {
50
- display: none; /* 평소에는 기본 숨김 */
51
- }
52
- }
53
-
54
- nine-table-sheet.active {
55
- display: grid;
56
- }
57
-
58
- /* --- 세로 스크롤바가 활성화되었을 때만 CSS로 2열 너비 확장 및 요소 표시 --- */
59
- nine-table-sheet.vscroll-visible {
60
- grid-template-columns: 1fr var(--scrollbar-size);
61
-
62
- nine-table-vscrollbar {
63
- display: flex;
64
- }
65
- }
66
-
67
- /* --- 가로 스크롤바가 활성화되었을 때만 CSS로 행 높이 확장 및 요소 표시 --- */
68
- nine-table-sheet.hscroll-visible {
69
- grid-template-rows: 1fr var(--scrollbar-size);
70
-
71
- nine-table-hscrollbar, ng-scroll-edge {
72
- display: flex;
73
- }
74
- }
75
-
76
-
77
-
78
-
79
- nine-table-sheet .ng-container-left {
80
- --border-right: 1px solid #e5e7eb;
81
- flex-shrink: 0;
82
- overflow: hidden !important;
83
- }
84
-
85
- nine-table-sheet .ng-container-body {
86
- flex: 1;
87
- overflow-x: auto;
88
- overflow-y: hidden;
89
- scrollbar-width: none;
90
- &::-webkit-scrollbar { display: none; height: 0px; width: 0px; }
91
- }
92
-
93
- nine-table-sheet .ng-container-right {
94
- flex-shrink: 0;
95
- overflow: hidden;
96
- }
97
- nine-table-sheet .ng-container-left, nine-table-sheet .ng-container-right {
98
- filter: brightness(99%);
99
- }
100
-
101
-
102
-
103
- /* --- 세로 스크롤바 (Grid Row 1, Col 2) --- */
104
- nine-table-vscrollbar {
105
- grid-row: 1;
106
- grid-column: 2;
107
- width: var(--scrollbar-size);
108
- height: 100%;
109
- z-index: 50;
110
- }
111
-
112
- /* --- 가로 스크롤바 (Grid Row 2, Col 1 직속 안착) --- */
113
- nine-table-hscrollbar {
114
- grid-row: 2;
115
- grid-column: 1;
116
- flex-direction: row;
117
- height: var(--scrollbar-size);
118
- min-height: var(--scrollbar-size);
119
- background: #f9fafb;
120
- border-top: 1px solid #e5e7eb;
121
- z-index: 10;
122
- overflow: hidden;
123
- width: 100%;
124
- }
125
-
126
- /* --- 우하단 엣지 (Grid Row 2, Col 2) --- */
127
- nine-table-sheet .ng-scroll-edge {
128
- grid-row: 2;
129
- grid-column: 2;
130
- width: var(--scrollbar-size);
131
- height: var(--scrollbar-size);
132
- background: #f3f4f6;
133
- border-top: 1px solid #e5e7eb;
134
- z-index: 10;
135
- }
136
-
137
- nine-table-sheet col {
138
- width: attr(width px); /* 브라우저가 지원하는 경우 또는 아래 처럼 고정 셀렉터 활용 */
139
- }
140
-
141
- nine-table-sheet table {
142
- border-collapse: separate;
143
- border-spacing: 0;
144
- width: auto;
145
- min-width: 100%;
146
- table-layout: fixed;
147
- box-sizing: border-box;
148
- }
149
- nine-table-sheet[auto-fit-col="true"] table {
150
- width: 100%;
151
- min-width: 100%;
152
- }
153
-
154
- nine-table-sheet th, nine-table-sheet td {
155
- box-sizing: border-box;
156
- overflow: hidden;
157
- white-space: nowrap;
158
- text-overflow: ellipsis;
159
- padding: 0px 4px;
160
- /* 💡 상하좌우 테두리 공간을 1px 고정으로 4방향 모두 잡아줍니다 */
161
- border-top: 1px solid transparent;
162
- border-left: 1px solid transparent;
163
- border-right: 1px solid #e5e7eb;
164
- border-bottom: 1px solid #e5e7eb;
165
- font-size: 12px;
166
- color: #111827;
167
- position: relative;
168
- outline: none;
169
- }
170
-
171
- nine-table-sheet th {
172
- background-color: #f9fafb;
173
- font-weight: 600;
174
- text-align: left;
175
- user-select: none;
176
- }
177
-
178
-
179
-
180
- /* 🎯 셀 선택 영역 스타일 (selected 및 테두리선들) */
181
- /* --- 🎯 셀 선택 및 포커스(시작점) 관련 스타일 (필수 추가) --- */
182
- nine-table-sheet td.selected,
183
- nine-table-sheet th.selected {
184
- background-color: rgba(37, 99, 235, 0.08);
185
- }
186
-
187
- nine-table-sheet td.selected-start,
188
- nine-table-sheet th.selected-start {
189
- background-color: transparent;
190
- }
191
-
192
- nine-table-sheet tr td.selected-top { border-top: 2px solid #2563eb; }
193
- nine-table-sheet tr td.selected-bottom { border-bottom: 2px solid #2563eb; }
194
- nine-table-sheet tr td.selected-left { border-left: 2px solid #2563eb; }
195
- nine-table-sheet tr td.selected-right { border-right: 2px solid #2563eb; }
196
-
197
- /* 🎯 [복원] 컬럼 접기/펼치기 아이콘 컴포넌트 스타일 */
198
- nine-table-col-expand {
199
- position: absolute;
200
- --top: 50%;
201
- right: 2px;
202
- top: 2px;
203
- --transform: translateY(-50%);
204
- width: 12px;
205
- height: 12px;
206
- cursor: pointer;
207
- background-repeat: no-repeat;
208
- background-position: center;
209
- background-size: contain;
210
- z-index: 2;
211
- pointer-events: auto;
212
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="%234b5563" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M6 8a.5.5 0 0 0 .5.5h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L12.293 7.5H6.5A.5.5 0 0 0 6 8m-2.5 7a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5"/></svg>');
213
- }
214
-
215
- nine-table-col-expand.expand {
216
- right: 2px;
217
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="%234b5563" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M12.5 15a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 1 0v13a.5.5 0 0 1-.5.5M10 8a.5.5 0 0 1-.5.5H3.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L3.707 7.5H9.5a.5.5 0 0 1 .5.5"/></svg>');
218
- }
219
-
220
- nine-table-col-expand.collapsed {
221
- left: 50%;
222
- right: auto;
223
- transform: translate(-50%, 0);
224
- }
225
-
226
- nine-table-sheet th:has(nine-table-col-expand),
227
- nine-table-sheet td:has(nine-table-col-expand) {
228
- position: relative;
229
- }
230
-
231
- /* 정렬 아이콘 여백 */
232
- nine-table-sheet thead th.asc::after,
233
- nine-table-sheet thead td.asc::after,
234
- nine-table-sheet thead th.desc::after,
235
- nine-table-sheet thead td.desc::after {
236
- content: "";
237
- display: inline-block;
238
- width: 0;
239
- height: 0;
240
- flex-shrink: 0;
241
- margin-left: 4px;
242
- vertical-align: middle;
243
- }
244
-
245
- nine-table-sheet thead th.asc::after,
246
- nine-table-sheet thead td.asc::after {
247
- border-left: 4px solid transparent;
248
- border-right: 4px solid transparent;
249
- border-bottom: 6px solid #2563eb;
250
- }
251
-
252
- nine-table-sheet thead th.desc::after,
253
- nine-table-sheet thead td.desc::after {
254
- border-left: 4px solid transparent;
255
- border-right: 4px solid transparent;
256
- border-top: 6px solid #dc2626;
257
- }
258
-
259
- nine-table-sheet[filtering="true"] .ng-sheet-header th,
260
- nine-table-sheet[filtering="true"] .ng-sheet-header td {
261
- padding-right: 22px !important;
262
- }
263
-
264
- /* 필터 버튼 아이콘 */
265
- nine-table-filter-button {
266
- position: absolute;
267
- bottom: 2px;
268
- right: 2px;
269
- width: 12px;
270
- height: 12px;
271
- cursor: pointer;
272
- z-index: 2;
273
- background-repeat: no-repeat;
274
- background-position: center;
275
- background-size: contain;
276
- display: inline-block;
277
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 16 16"><path fill="%239ca3af" d="M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5zm1 .5v1.308l4.372 4.858A.5.5 0 0 1 7 8.5v5.306l2-.666V8.5a.5.5 0 0 1 .128-.334L13.5 3.308V2z"/></svg>');
278
- }
279
-
280
- nine-table-filter-button.filtered {
281
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 16 16"><path fill="%232563eb" d="M1.5 1.5A.5.5 0 0 1 2 1h12a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.128.334L10 8.692V13.5a.5.5 0 0 1-.342.474l-3 1A.5.5 0 0 1 6 14.5V8.692L1.628 3.834A.5.5 0 0 1 1.5 3.5z"/></svg>');
282
- }
283
-
284
- nine-table-sheet .ng-nodata-overlay {
285
- display: none;
286
- position: absolute;
287
- top: 0; /* 👈 상단부터 */
288
- left: 0; /* 👈 좌측부터 */
289
- right: 0; /* 👈 우측까지 꽉 채움 */
290
- bottom: 0; /* 👈 하단까지 꽉 채움 (absolute로 전체 영역 커버) */
291
- background: #ffffff;
292
- z-index: 20;
293
- align-items: center;
294
- justify-content: center;
295
- font-size: 12px;
296
- color: #9ca3af;
297
- }
298
-
299
-
300
-
301
- nine-table-sheet .ng-col-mover-indi {
302
- position: absolute;
303
- width: 2px;
304
- background-color: #2563eb;
305
- display: none;
306
- pointer-events: none;
307
- z-index: 10020;
308
- box-sizing: border-box;
309
- }
310
-
311
- nine-table-sheet .ng-col-mover-indi::before {
312
- content: '';
313
- position: absolute;
314
- top: -6px;
315
- left: -4px;
316
- width: 0;
317
- height: 0;
318
- border-top: 6px solid #2563eb;
319
- border-left: 5px solid transparent;
320
- border-right: 5px solid transparent;
321
- }
322
-
323
- nine-table-sheet .ng-col-mover-indi::after {
324
- content: '';
325
- position: absolute;
326
- bottom: -6px;
327
- left: -4px;
328
- width: 0;
329
- height: 0;
330
- border-bottom: 6px solid #2563eb;
331
- border-left: 5px solid transparent;
332
- border-right: 5px solid transparent;
333
- }
334
-
335
- nine-table-sheet .ng-col-mover-grip {
336
- position: absolute;
337
- box-sizing: border-box;
338
- display: none;
339
- pointer-events: none;
340
- z-index: 10010;
341
- background-color: rgba(37, 99, 235, 0.12);
342
- border: none;
343
- box-shadow: 0 4px 12px rgba(37, 99, 235, 0.15);
344
- overflow: hidden;
345
- backdrop-filter: blur(1px);
346
- transition: background-color 0.15s ease, border-color 0.15s ease;
347
- }
348
-
349
- nine-table-sheet .ng-col-mover-grip .grip-header-content {
350
- position: absolute;
351
- top: 0;
352
- left: 0;
353
- width: 100%;
354
- box-sizing: border-box;
355
- z-index: 2;
356
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
357
- }
358
-
359
- nine-table-sheet .ng-col-mover-grip.invalid {
360
- background-color: rgba(239, 68, 68, 0.12);
361
- box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);
362
- }
363
-
364
- nine-table-sheet .ng-col-mover-grip.invalid .grip-header-content {
365
- border-bottom: 2px solid #ef4444;
366
- }
367
-
368
- nine-table-sheet .ng-col-mover-grip th,
369
- nine-table-sheet .ng-col-mover-grip td {
370
- box-sizing: border-box;
371
- user-select: none;
372
- pointer-events: none;
373
- }
374
-
375
- /* 🎯 정렬 아이콘 공통 (가상 요소 - 헤더 및 드래그 그립 패널 공통 적용) */
376
- nine-table-sheet .ng-sheet-header th.asc::after,
377
- nine-table-sheet .ng-sheet-header td.asc::after,
378
- nine-table-sheet .ng-sheet-header th.desc::after,
379
- nine-table-sheet .ng-sheet-header td.desc::after,
380
- nine-table-sheet .ng-col-mover-grip th.asc::after, /* 👈 그립 패널 타겟 추가 */
381
- nine-table-sheet .ng-col-mover-grip td.asc::after,
382
- nine-table-sheet .ng-col-mover-grip th.desc::after, /* 👈 그립 패널 타겟 추가 */
383
- nine-table-sheet .ng-col-mover-grip td.desc::after {
384
- content: "";
385
- display: inline-block;
386
- width: 0;
387
- height: 0;
388
- flex-shrink: 0;
389
- margin-left: 4px;
390
- vertical-align: middle;
391
- }
392
-
393
- /* 오름차순 (▲): 위쪽을 가리키는 삼각형 */
394
- nine-table-sheet .ng-sheet-header th.asc::after,
395
- nine-table-sheet .ng-sheet-header td.asc::after,
396
- nine-table-sheet .ng-col-mover-grip th.asc::after, /* 👈 추가 */
397
- nine-table-sheet .ng-col-mover-grip td.asc::after {
398
- border-left: 4px solid transparent;
399
- border-right: 4px solid transparent;
400
- border-bottom: 6px solid #2563eb; /* 블루 포인트 */
401
- }
402
-
403
- /* 내림차순 (▼): 아래쪽을 가리키는 삼각형 */
404
- nine-table-sheet .ng-sheet-header th.desc::after,
405
- nine-table-sheet .ng-sheet-header td.desc::after,
406
- nine-table-sheet .ng-col-mover-grip th.desc::after, /* 👈 추가 */
407
- nine-table-sheet .ng-col-mover-grip td.desc::after {
408
- border-left: 4px solid transparent;
409
- border-right: 4px solid transparent;
410
- border-top: 6px solid #dc2626; /* 레드 포인트 */
411
- }
412
-
413
- nine-table-sheet th.resizable-edge,
414
- nine-table-sheet td.resizable-edge {
415
- cursor: col-resize;
416
- }
417
-
418
- nine-table-sheet .ng-col-resizer-panel {
419
- position: absolute;
420
- top: 0;
421
- left: 0;
422
- width: 100%;
423
- height: 100%;
424
- pointer-events: none;
425
- display: none;
426
- z-index: 9999;
427
- }
428
-
429
- nine-table-sheet .ng-col-resizer-panel.active {
430
- display: block;
431
- }
432
-
433
- nine-table-sheet .ng-col-resizer-panel .grip {
434
- position: absolute;
435
- top: 0;
436
- width: 1px;
437
- height: 100%;
438
- background-color: #2563eb;
439
- left: var(--resizer-left, 0px);
440
- }
441
-
442
- nine-table-sheet .ng-col-resizer-panel .tooltip {
443
- position: absolute;
444
- top: 0px;
445
- left: var(--tooltip-left, 0px);
446
- width: var(--tooltip-width, 0px);
447
- height: 24px;
448
- display: flex;
449
- flex-direction: column;
450
- align-items: center;
451
- pointer-events: none;
452
- z-index: 10000;
453
- }
454
-
455
- nine-table-sheet .ng-col-resizer-panel .tooltip .line-wrapper {
456
- width: 100%;
457
- height: 1px;
458
- background-color: #2563eb;
459
- position: relative;
460
- display: flex;
461
- align-items: center;
462
- justify-content: space-between;
463
- }
464
-
465
- nine-table-sheet .ng-col-resizer-panel .resizer-overlay {
466
- position: absolute;
467
- top: 0;
468
- left: var(--tooltip-left, 0px);
469
- width: var(--tooltip-width, 0px);
470
- height: 100%;
471
- background-color: rgba(37, 99, 235, 0.12);
472
- border-left: 1px dashed #2563eb;
473
- border-right: 2px solid #2563eb;
474
- box-sizing: border-box;
475
- display: flex;
476
- align-items: flex-start;
477
- justify-content: center;
478
- padding-top: 8px;
479
- pointer-events: none;
480
- opacity: 1;
481
- transition: opacity 0.15s ease-out;
482
- }
483
-
484
- nine-table-sheet .ng-col-resizer-panel .resizer-overlay.fade-out {
485
- opacity: 0;
486
- }
487
-
488
- nine-table-sheet th.resize-flash {
489
- transition: background-color 0.3s ease;
490
- background-color: rgba(37, 99, 235, 0.15);
491
- }
492
-
493
- nine-table-sheet .ng-col-resizer-panel .resizer-overlay .size-badge {
494
- padding: 2px 8px;
495
- font-size: 11px;
496
- font-weight: 700;
497
- color: #ffffff;
498
- background-color: #1e40af;
499
- border-radius: 4px;
500
- line-height: 14px;
501
- white-space: nowrap;
502
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
503
- }
504
-
505
- nine-table-sheet tr.ng-sticky-header {
506
- background-color: #f3f4f6 !important; /* 일반 행보다 살짝 진한 배경색 */
507
- font-weight: 600;
508
- z-index: 5; /* 다른 행들보다 위에 보이도록 설정 */
509
- position: relative;
510
- }
511
-
512
- /* 스크롤되면서 밀려 내려갈 때 입체감을 주는 하단 그림자 효과 */
513
- nine-table-sheet tr.ng-sticky-header td {
514
- border-bottom: 2px solid #d1d5db !important;
515
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
516
- }
517
-
518
-
519
- td.invalid::after {
520
- content: "";
521
- position: absolute;
522
- top: 0;
523
- right: 0;
524
- width: 0;
525
- height: 0;
526
- border-top: 2px solid red;
527
- border-right: 2px solid red;
528
- border-bottom: 2px solid transparent; /* 아래쪽은 투명하게 하여 삼각형 완성 */
529
- border-left: 2px solid transparent; /* 왼쪽은 투명하게 하여 삼각형 완성 */
530
- z-index: 1;
531
- pointer-events: none;
532
- }
533
-
534
- nine-table-sheet td[disabled="true"] {
535
- input,button {
536
- background: #f0f0f0;
537
- opacity: 0.5;
538
- pointer-events: none;
539
- }
540
- }
@@ -1,4 +0,0 @@
1
- nine-table-vscrollbar {
2
- display: none; /* 평소에는 기본 숨김 */
3
- border-top: 2px solid #333;
4
- }
@@ -1,22 +0,0 @@
1
- thead {
2
- display: table-header-group;
3
- position: sticky;
4
- top: 0;
5
- z-index: 10;
6
- }
7
-
8
- tfoot {
9
- display: table-footer-group;
10
- position: sticky;
11
- bottom: 0;
12
- z-index: 10;
13
- background: red;
14
- }
15
-
16
- tbody {
17
- position: relative;
18
- }
19
-
20
- tbody.foot {
21
- height: 100vh;
22
- }
@@ -3350,7 +3350,7 @@ const Qo = class Qo {
3350
3350
  const g = u === 0 ? "active" : "", f = c.id || `sheet${u + 1}`, b = `<nine-table-sheet class="${g}" data-index="${u}" data-sheet-id="${f}" id="${f}"></nine-table-sheet>`, m = u < i - 1 ? `<nine-splitter class="h" data-split-index="${u}"></nine-splitter>` : "";
3351
3351
  return b + m;
3352
3352
  }).join(""), o = ["layout", "nine-table-sheet", "nine-table-vscrollbar", "nine-table-hscrollbar", "table"], l = o.map(
3353
- (c) => `@import "https://cdn.jsdelivr.net/npm/@ninebone/table@0.1.41/dist/css/${c}.css";`
3353
+ (c) => `@import "https://cdn.jsdelivr.net/npm/@ninebone/table@0.1.42/dist/css/${c}.css";`
3354
3354
  ), a = [];
3355
3355
  nine.cssPath && o.forEach((c) => {
3356
3356
  a.push(`@import "${nine.cssPath}/${c}.css";`);
@@ -273,7 +273,7 @@
273
273
 
274
274
  <div class="ng-col-mover-grip"></div>
275
275
  <div class="ng-col-mover-indi"></div>
276
- `,v.log("3333*****************"),p(this,Je,{mainBody:this.querySelector(".ng-sheet-body .ng-container-body"),hscrollbar:this.querySelector("nine-table-hscrollbar"),vscrollbar:this.querySelector("nine-table-vscrollbar"),content:this.querySelector(".ng-sheet-body .ng-sheet-body-content"),scrollHolder:this.querySelector(".ng-sheet-body .ng-virtual-height-holder")}),v.log("444*****************")},"#render"));d(this,Ir,h(()=>{v.log("**********************","#syncHeaderAndFooterHeights");const e=this.querySelector(".ng-container-left table"),s=this.querySelector(".ng-container-body table"),i=this.querySelector(".ng-container-right table"),r=Array.from(e.querySelectorAll("thead tr:not(.col-indicator-rowgroup)")),o=Array.from(s.querySelectorAll("thead tr:not(.col-indicator-rowgroup)")),l=Array.from(i.querySelectorAll("thead tr:not(.col-indicator-rowgroup)"));t(this,Ri).call(this,r,o,l);const a=Array.from(e.querySelectorAll("tfoot tr")),c=Array.from(s.querySelectorAll("tfoot tr")),u=Array.from(i.querySelectorAll("tfoot tr"));t(this,Ri).call(this,a,c,u)},"#syncHeaderAndFooterHeights"));d(this,Ri,h((e,s,i)=>{var o,l,a;const r=Math.max(e.length,s.length,i.length);for(let c=0;c<r;c++){const u=[((o=e[c])==null?void 0:o.getBoundingClientRect().height)||0,((l=s[c])==null?void 0:l.getBoundingClientRect().height)||0,((a=i[c])==null?void 0:a.getBoundingClientRect().height)||0],g=Math.max(...u);g>0&&(e[c]&&(e[c].style.height=`${g}px`),s[c]&&(s[c].style.height=`${g}px`),i[c]&&(i[c].style.height=`${g}px`))}},"#applyMaxHeights"));d(this,qr,h(()=>{const e=this.querySelector(".ng-sheet-body");if(!e)return;let s=null;e.addEventListener("mouseover",i=>{const r=i.target.closest("tr");if(!r||!r.dataset.row&&r.dataset.row!=="0")return;const o=r.dataset.row;s!==o&&(s=o,e.querySelectorAll(`tr[data-row="${o}"]`).forEach(l=>{l.classList.add("hover")}))}),e.addEventListener("mouseout",i=>{const r=i.target.closest("tr");if(!r)return;const o=i.relatedTarget;r.contains(o)||(e.querySelectorAll("tr.hover").forEach(l=>{l.classList.remove("hover")}),s=null)})},"#initRowHoverEvent"));v.log("11111"),p(this,zt,new Hn(this)),v.log("222"),p(this,ae,this.getRootNode().host),v.log("333")}connectedCallback(){t(this,Tr).call(this)}get index(){return t(this,wi)}get colResizer(){return t(this,Ee)}get filtering(){return t(this,Ei)}get grouping(){return t(this,ws)}get colMover(){return t(this,xs)}get colFix(){return t(this,Ai)}get rowManager(){return t(this,zt)}get selection(){return t(this,vi)}get navigation(){return t(this,Si)}get templateLength(){return t(this,qt).tbody.tr.length||0}get elements(){return t(this,Je)}get isAutoFitCol(){var i,r;const e=this.getAttribute("auto-fit-col")==="true"||((i=t(this,ae))==null?void 0:i.getAttribute("auto-fit-col"))==="true",s=((r=t(this,qt).table)==null?void 0:r.getAttribute("auto-fit-col"))==="true";return e||s}get sourceTable(){return t(this,qt).table}get source(){return t(this,qt)}recompileAndRefresh(){var e;t(this,qt).table&&(fe.recompile(t(this,qt).table),["left","right","body"].forEach(s=>{["header","body","footer"].forEach(i=>{const r=this.querySelector(`.ng-sheet-${i} .ng-container-${s}`);r&&r.querySelectorAll("table").forEach(o=>o.remove())})}),t(this,Li).call(this),t(this,Qe).call(this),t(this,zt).initialize(),this.isAutoFitCol?this.autoFit(!0):(e=this.querySelector("nine-table-hscrollbar"))==null||e.refresh(),requestAnimationFrame(()=>{var s;t(this,Qe).call(this),(s=t(this,zt))==null||s.refresh()}))}refreshLayout(){!this.classList.contains("active")||!t(this,qt).table||requestAnimationFrame(()=>{var e,s,i;t(this,Qe).call(this),this.isAutoFitCol?this.autoFit(!0):(e=this.querySelector("nine-table-hscrollbar"))==null||e.refresh(),t(this,Lr).call(this),(s=t(this,Ee))==null||s.refreshLayout(),(i=t(this,zt))==null||i.refresh()})}get view(){var e;return!t(this,Ze)&&((e=t(this,ae))!=null&&e.data)&&p(this,Ze,new Vi(this)),t(this,Ze)}disconnectedCallback(){var e,s;(e=t(this,Ee))==null||e.destroy(),(s=t(this,xs))==null||s.destroy(),this.innerHTML=""}};wi=new WeakMap,ae=new WeakMap,zt=new WeakMap,vi=new WeakMap,Si=new WeakMap,Ee=new WeakMap,xs=new WeakMap,Ai=new WeakMap,Ar=new WeakMap,Ei=new WeakMap,ws=new WeakMap,Ze=new WeakMap,qt=new WeakMap,Je=new WeakMap,Er=new WeakSet,Yl=h(function(){return t(this,ae).hasAttribute("simple")||t(this,ae).getAttribute("theme")==="simple"},"#isSimple"),Lr=new WeakMap,Rr=new WeakMap,Qe=new WeakMap,Li=new WeakMap,Cr=new WeakMap,Tr=new WeakMap,kr=new WeakMap,Ir=new WeakMap,Ri=new WeakMap,qr=new WeakMap,h(Ci,"NineTableSheet"),E(Ci,"SCROLLBAR_SIZE",16);let Xi=Ci;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",Xi);const Do=class Do{constructor(n){d(this,it);d(this,Mr,h(()=>{t(this,Hr).call(this),new ResizeObserver(n=>{for(let e of n)t(this,it).getAttribute("auto-height")==="true"&&t(this,Ti).call(this)}).observe(t(this,it))},"#init"));d(this,Ti,h(()=>{const n=Array.from(t(this,it).shadowRoot.querySelectorAll("nine-table-sheet.active"));if(n.length===0)return;const e=parseInt(t(this,it).getAttribute("max-display-row"),10)||10,s=Math.max(...n.map(u=>u.getRowHeight())),i=t(this,it).shadowRoot.querySelector("nine-table-toolbar"),r=t(this,it).shadowRoot.querySelector("nine-table-sheets-footer"),o=i?i.getBoundingClientRect().height:0,l=r?r.getBoundingClientRect().height:0,a=Xi.SCROLLBAR_SIZE,c=e*s+o+l+a;t(this,it).style.height=`${c}px`},"#applyAutoHeight"));d(this,Hr,h(()=>{const e=Array.from(t(this,it).children).filter(c=>c.tagName.toUpperCase()==="TABLE"),s=t(this,it).getAttribute("auto-height")==="true",i=e.length,r=e.map((c,u)=>{const g=u===0?"active":"",f=c.id||`sheet${u+1}`,b=`<nine-table-sheet class="${g}" data-index="${u}" data-sheet-id="${f}" id="${f}"></nine-table-sheet>`,m=u<i-1?`<nine-splitter class="h" data-split-index="${u}"></nine-splitter>`:"";return b+m}).join(""),o=["layout","nine-table-sheet","nine-table-vscrollbar","nine-table-hscrollbar","table"],l=o.map(c=>`@import "https://cdn.jsdelivr.net/npm/@ninebone/table@0.1.41/dist/css/${c}.css";`),a=[];nine.cssPath&&o.forEach(c=>{a.push(`@import "${nine.cssPath}/${c}.css";`)}),t(this,it).shadowRoot.innerHTML=`
276
+ `,v.log("3333*****************"),p(this,Je,{mainBody:this.querySelector(".ng-sheet-body .ng-container-body"),hscrollbar:this.querySelector("nine-table-hscrollbar"),vscrollbar:this.querySelector("nine-table-vscrollbar"),content:this.querySelector(".ng-sheet-body .ng-sheet-body-content"),scrollHolder:this.querySelector(".ng-sheet-body .ng-virtual-height-holder")}),v.log("444*****************")},"#render"));d(this,Ir,h(()=>{v.log("**********************","#syncHeaderAndFooterHeights");const e=this.querySelector(".ng-container-left table"),s=this.querySelector(".ng-container-body table"),i=this.querySelector(".ng-container-right table"),r=Array.from(e.querySelectorAll("thead tr:not(.col-indicator-rowgroup)")),o=Array.from(s.querySelectorAll("thead tr:not(.col-indicator-rowgroup)")),l=Array.from(i.querySelectorAll("thead tr:not(.col-indicator-rowgroup)"));t(this,Ri).call(this,r,o,l);const a=Array.from(e.querySelectorAll("tfoot tr")),c=Array.from(s.querySelectorAll("tfoot tr")),u=Array.from(i.querySelectorAll("tfoot tr"));t(this,Ri).call(this,a,c,u)},"#syncHeaderAndFooterHeights"));d(this,Ri,h((e,s,i)=>{var o,l,a;const r=Math.max(e.length,s.length,i.length);for(let c=0;c<r;c++){const u=[((o=e[c])==null?void 0:o.getBoundingClientRect().height)||0,((l=s[c])==null?void 0:l.getBoundingClientRect().height)||0,((a=i[c])==null?void 0:a.getBoundingClientRect().height)||0],g=Math.max(...u);g>0&&(e[c]&&(e[c].style.height=`${g}px`),s[c]&&(s[c].style.height=`${g}px`),i[c]&&(i[c].style.height=`${g}px`))}},"#applyMaxHeights"));d(this,qr,h(()=>{const e=this.querySelector(".ng-sheet-body");if(!e)return;let s=null;e.addEventListener("mouseover",i=>{const r=i.target.closest("tr");if(!r||!r.dataset.row&&r.dataset.row!=="0")return;const o=r.dataset.row;s!==o&&(s=o,e.querySelectorAll(`tr[data-row="${o}"]`).forEach(l=>{l.classList.add("hover")}))}),e.addEventListener("mouseout",i=>{const r=i.target.closest("tr");if(!r)return;const o=i.relatedTarget;r.contains(o)||(e.querySelectorAll("tr.hover").forEach(l=>{l.classList.remove("hover")}),s=null)})},"#initRowHoverEvent"));v.log("11111"),p(this,zt,new Hn(this)),v.log("222"),p(this,ae,this.getRootNode().host),v.log("333")}connectedCallback(){t(this,Tr).call(this)}get index(){return t(this,wi)}get colResizer(){return t(this,Ee)}get filtering(){return t(this,Ei)}get grouping(){return t(this,ws)}get colMover(){return t(this,xs)}get colFix(){return t(this,Ai)}get rowManager(){return t(this,zt)}get selection(){return t(this,vi)}get navigation(){return t(this,Si)}get templateLength(){return t(this,qt).tbody.tr.length||0}get elements(){return t(this,Je)}get isAutoFitCol(){var i,r;const e=this.getAttribute("auto-fit-col")==="true"||((i=t(this,ae))==null?void 0:i.getAttribute("auto-fit-col"))==="true",s=((r=t(this,qt).table)==null?void 0:r.getAttribute("auto-fit-col"))==="true";return e||s}get sourceTable(){return t(this,qt).table}get source(){return t(this,qt)}recompileAndRefresh(){var e;t(this,qt).table&&(fe.recompile(t(this,qt).table),["left","right","body"].forEach(s=>{["header","body","footer"].forEach(i=>{const r=this.querySelector(`.ng-sheet-${i} .ng-container-${s}`);r&&r.querySelectorAll("table").forEach(o=>o.remove())})}),t(this,Li).call(this),t(this,Qe).call(this),t(this,zt).initialize(),this.isAutoFitCol?this.autoFit(!0):(e=this.querySelector("nine-table-hscrollbar"))==null||e.refresh(),requestAnimationFrame(()=>{var s;t(this,Qe).call(this),(s=t(this,zt))==null||s.refresh()}))}refreshLayout(){!this.classList.contains("active")||!t(this,qt).table||requestAnimationFrame(()=>{var e,s,i;t(this,Qe).call(this),this.isAutoFitCol?this.autoFit(!0):(e=this.querySelector("nine-table-hscrollbar"))==null||e.refresh(),t(this,Lr).call(this),(s=t(this,Ee))==null||s.refreshLayout(),(i=t(this,zt))==null||i.refresh()})}get view(){var e;return!t(this,Ze)&&((e=t(this,ae))!=null&&e.data)&&p(this,Ze,new Vi(this)),t(this,Ze)}disconnectedCallback(){var e,s;(e=t(this,Ee))==null||e.destroy(),(s=t(this,xs))==null||s.destroy(),this.innerHTML=""}};wi=new WeakMap,ae=new WeakMap,zt=new WeakMap,vi=new WeakMap,Si=new WeakMap,Ee=new WeakMap,xs=new WeakMap,Ai=new WeakMap,Ar=new WeakMap,Ei=new WeakMap,ws=new WeakMap,Ze=new WeakMap,qt=new WeakMap,Je=new WeakMap,Er=new WeakSet,Yl=h(function(){return t(this,ae).hasAttribute("simple")||t(this,ae).getAttribute("theme")==="simple"},"#isSimple"),Lr=new WeakMap,Rr=new WeakMap,Qe=new WeakMap,Li=new WeakMap,Cr=new WeakMap,Tr=new WeakMap,kr=new WeakMap,Ir=new WeakMap,Ri=new WeakMap,qr=new WeakMap,h(Ci,"NineTableSheet"),E(Ci,"SCROLLBAR_SIZE",16);let Xi=Ci;customElements.get("nine-table-sheet")||customElements.define("nine-table-sheet",Xi);const Do=class Do{constructor(n){d(this,it);d(this,Mr,h(()=>{t(this,Hr).call(this),new ResizeObserver(n=>{for(let e of n)t(this,it).getAttribute("auto-height")==="true"&&t(this,Ti).call(this)}).observe(t(this,it))},"#init"));d(this,Ti,h(()=>{const n=Array.from(t(this,it).shadowRoot.querySelectorAll("nine-table-sheet.active"));if(n.length===0)return;const e=parseInt(t(this,it).getAttribute("max-display-row"),10)||10,s=Math.max(...n.map(u=>u.getRowHeight())),i=t(this,it).shadowRoot.querySelector("nine-table-toolbar"),r=t(this,it).shadowRoot.querySelector("nine-table-sheets-footer"),o=i?i.getBoundingClientRect().height:0,l=r?r.getBoundingClientRect().height:0,a=Xi.SCROLLBAR_SIZE,c=e*s+o+l+a;t(this,it).style.height=`${c}px`},"#applyAutoHeight"));d(this,Hr,h(()=>{const e=Array.from(t(this,it).children).filter(c=>c.tagName.toUpperCase()==="TABLE"),s=t(this,it).getAttribute("auto-height")==="true",i=e.length,r=e.map((c,u)=>{const g=u===0?"active":"",f=c.id||`sheet${u+1}`,b=`<nine-table-sheet class="${g}" data-index="${u}" data-sheet-id="${f}" id="${f}"></nine-table-sheet>`,m=u<i-1?`<nine-splitter class="h" data-split-index="${u}"></nine-splitter>`:"";return b+m}).join(""),o=["layout","nine-table-sheet","nine-table-vscrollbar","nine-table-hscrollbar","table"],l=o.map(c=>`@import "https://cdn.jsdelivr.net/npm/@ninebone/table@0.1.42/dist/css/${c}.css";`),a=[];nine.cssPath&&o.forEach(c=>{a.push(`@import "${nine.cssPath}/${c}.css";`)}),t(this,it).shadowRoot.innerHTML=`
277
277
  <style>
278
278
  ${[...l,...a].join(`
279
279
  `)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninebone/table",
3
- "version": "0.1.41",
3
+ "version": "0.1.42",
4
4
  "description": "Grid component for real-time collaboration (Vanilla JS based)",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-table.umd.js",