@guiexpert/angular-table 22.1.99 → 22.1.101
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/README.md
CHANGED
|
@@ -54,7 +54,7 @@ This is the UI-agnostic table component for your next web app. 😊
|
|
|
54
54
|
- Full control over the HTML structure and style
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
### New in October 2026 (1.1.91 – 1.1.
|
|
57
|
+
### New in October 2026 (1.1.91 – 1.1.100) – all MIT-licensed
|
|
58
58
|
|
|
59
59
|
- Screen readers and keyboard: WAI-ARIA grid, announcements, full keyboard navigation (1.1.91)
|
|
60
60
|
- “Loading…” and “No rows” overlays with a CSS spinner, `loading` prop (1.1.92)
|
|
@@ -70,7 +70,9 @@ This is the UI-agnostic table component for your next web app. 😊
|
|
|
70
70
|
- Right-to-left for Arabic, Hebrew, Persian: `direction: "rtl"` (1.1.98)
|
|
71
71
|
- A spreadsheet: A1 cell formulas, copy & paste with Excel, undo/redo, formula bar – `SpreadsheetFactory`, or `spreadsheet: true` for your table (1.1.99)
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
- Angular 22 and later: the signal-native component `<guiexpert-table-signal>` – `[(tableApi)]="api"`, `input()`/`output()`, zoneless (1.1.100)
|
|
74
|
+
|
|
75
|
+
All features with code and live demos: [gui.expert/whats-new](https://gui.expert/whats-new/) ·
|
|
74
76
|
training: [gui.expert/training](https://gui.expert/training/)
|
|
75
77
|
|
|
76
78
|
## Links
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Injectable, Input, Output, ViewEncapsulation, createComponent } from "@angular/core";
|
|
3
|
-
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Injectable, Input, NgZone, Output, PLATFORM_ID, ViewEncapsulation, createComponent, effect, inject, input, isDevMode, model, output, untracked } from "@angular/core";
|
|
3
|
+
import { CommonModule, isPlatformBrowser } from "@angular/common";
|
|
4
4
|
import { Observable, Subject, debounceTime, takeUntil, takeWhile } from "rxjs";
|
|
5
5
|
import { TableOptions, TableScope } from "@guiexpert/table";
|
|
6
6
|
var DomService = class DomService {
|
|
@@ -84,6 +84,7 @@ var TableComponent = class TableComponent {
|
|
|
84
84
|
this.mouseDragging = new Subject();
|
|
85
85
|
this.mouseDraggingEnded = new Subject();
|
|
86
86
|
this.contextmenu = new Subject();
|
|
87
|
+
this.contextMenu = new Subject();
|
|
87
88
|
this.mouseClicked = new Subject();
|
|
88
89
|
this.modelChanged = new Subject();
|
|
89
90
|
this.selectionChanged = new Subject();
|
|
@@ -113,6 +114,7 @@ var TableComponent = class TableComponent {
|
|
|
113
114
|
}
|
|
114
115
|
onContextmenu(evt) {
|
|
115
116
|
this.contextmenu.next(evt);
|
|
117
|
+
this.contextMenu.next(evt);
|
|
116
118
|
}
|
|
117
119
|
onScroll(evt) {
|
|
118
120
|
this.scroll.next(evt);
|
|
@@ -235,6 +237,7 @@ var TableComponent = class TableComponent {
|
|
|
235
237
|
mouseDragging: "mouseDragging",
|
|
236
238
|
mouseDraggingEnded: "mouseDraggingEnded",
|
|
237
239
|
contextmenu: "contextmenu",
|
|
240
|
+
contextMenu: "contextMenu",
|
|
238
241
|
mouseClicked: "mouseClicked",
|
|
239
242
|
modelChanged: "modelChanged",
|
|
240
243
|
selectionChanged: "selectionChanged",
|
|
@@ -295,6 +298,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
295
298
|
mouseDragging: [{ type: Output }],
|
|
296
299
|
mouseDraggingEnded: [{ type: Output }],
|
|
297
300
|
contextmenu: [{ type: Output }],
|
|
301
|
+
contextMenu: [{ type: Output }],
|
|
298
302
|
mouseClicked: [{ type: Output }],
|
|
299
303
|
modelChanged: [{ type: Output }],
|
|
300
304
|
selectionChanged: [{ type: Output }],
|
|
@@ -464,6 +468,362 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
464
468
|
{ type: i0.NgZone }
|
|
465
469
|
]
|
|
466
470
|
});
|
|
467
|
-
|
|
471
|
+
var TableSignalComponent = class TableSignalComponent {
|
|
472
|
+
constructor() {
|
|
473
|
+
this.tableModel = input(void 0, ...ngDevMode ? [{ debugName: "tableModel" }] : /* istanbul ignore next */ []);
|
|
474
|
+
this.tableOptions = input(new TableOptions(), ...ngDevMode ? [{ debugName: "tableOptions" }] : /* istanbul ignore next */ []);
|
|
475
|
+
this.loading = input(false, ...ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []);
|
|
476
|
+
this.debounceMouseClickDelay = input(150, ...ngDevMode ? [{ debugName: "debounceMouseClickDelay" }] : /* istanbul ignore next */ []);
|
|
477
|
+
this.tableApi = model(void 0, ...ngDevMode ? [{ debugName: "tableApi" }] : /* istanbul ignore next */ []);
|
|
478
|
+
this.mouseClicked = output();
|
|
479
|
+
this.mouseMoved = output();
|
|
480
|
+
this.mouseDragging = output();
|
|
481
|
+
this.mouseDraggingEnded = output();
|
|
482
|
+
this.contextMenu = output();
|
|
483
|
+
this.scroll = output();
|
|
484
|
+
this.modelChanged = output();
|
|
485
|
+
this.selectionChanged = output();
|
|
486
|
+
this.focusChanged = output();
|
|
487
|
+
this.checkboxChanged = output();
|
|
488
|
+
this.stateChanged = output();
|
|
489
|
+
this.rowDragStart = output();
|
|
490
|
+
this.rowDragMove = output();
|
|
491
|
+
this.rowDragEnd = output();
|
|
492
|
+
this.batchEditChanged = output();
|
|
493
|
+
this.detailExpandedChanged = output();
|
|
494
|
+
this.editingChanged = output();
|
|
495
|
+
this.undoStackChanged = output();
|
|
496
|
+
this.elementRef = inject(ElementRef);
|
|
497
|
+
this.zone = inject(NgZone);
|
|
498
|
+
this.domService = inject(DomService);
|
|
499
|
+
this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
500
|
+
this.destroyed = false;
|
|
501
|
+
this.shownByInput = false;
|
|
502
|
+
this.warnedExternalWrite = false;
|
|
503
|
+
this.listener = {
|
|
504
|
+
onMouseClicked: (evt) => this.onMouseClicked(evt),
|
|
505
|
+
onMouseMoved: (evt) => this.mouseMoved.emit(evt),
|
|
506
|
+
onMouseDragging: (evt) => this.mouseDragging.emit(evt),
|
|
507
|
+
onMouseDraggingEnd: (evt) => this.mouseDraggingEnded.emit(evt),
|
|
508
|
+
onContextmenu: (evt) => this.contextMenu.emit(evt),
|
|
509
|
+
onScroll: (evt) => this.scroll.emit(evt),
|
|
510
|
+
onModelChanged: (evt) => this.modelChanged.emit(evt),
|
|
511
|
+
onSelectionChanged: (sm) => this.selectionChanged.emit(sm),
|
|
512
|
+
onFocusChanged: (fm) => this.focusChanged.emit(fm),
|
|
513
|
+
onCheckboxChanged: (rows) => this.checkboxChanged.emit(rows),
|
|
514
|
+
onStateChanged: (evt) => this.emitUnlessDestroyed(() => this.stateChanged.emit(evt)),
|
|
515
|
+
onRowDragStart: (evt) => this.rowDragStart.emit(evt),
|
|
516
|
+
onRowDragMove: (evt) => this.rowDragMove.emit(evt),
|
|
517
|
+
onRowDragEnd: (evt) => this.emitUnlessDestroyed(() => this.rowDragEnd.emit(evt)),
|
|
518
|
+
onBatchEditChanged: (evt) => this.batchEditChanged.emit(evt),
|
|
519
|
+
onDetailExpandedChanged: (evt) => this.detailExpandedChanged.emit(evt),
|
|
520
|
+
onEditingChanged: (evt) => this.emitUnlessDestroyed(() => this.editingChanged.emit(evt)),
|
|
521
|
+
onUndoStackChanged: (evt) => this.emitUnlessDestroyed(() => this.undoStackChanged.emit(evt))
|
|
522
|
+
};
|
|
523
|
+
effect(() => {
|
|
524
|
+
const tableModel = this.tableModel();
|
|
525
|
+
const tableOptions = this.tableOptions();
|
|
526
|
+
untracked(() => this.createTable(tableModel, tableOptions));
|
|
527
|
+
});
|
|
528
|
+
effect(() => {
|
|
529
|
+
const loading = this.loading();
|
|
530
|
+
untracked(() => this.zone.runOutsideAngular(() => this.applyLoading(loading)));
|
|
531
|
+
});
|
|
532
|
+
effect(() => {
|
|
533
|
+
const value = this.tableApi();
|
|
534
|
+
untracked(() => {
|
|
535
|
+
const api = this.currentApi();
|
|
536
|
+
if (value !== api && !this.destroyed) {
|
|
537
|
+
if (isDevMode() && !this.warnedExternalWrite) {
|
|
538
|
+
this.warnedExternalWrite = true;
|
|
539
|
+
console.warn("guiexpert-table-signal: tableApi is set by the table; a value written from outside is replaced.");
|
|
540
|
+
}
|
|
541
|
+
this.tableApi.set(api);
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
ngOnDestroy() {
|
|
547
|
+
this.clearClickTimer();
|
|
548
|
+
this.tableScope?.destroy();
|
|
549
|
+
this.tableScope = void 0;
|
|
550
|
+
this.destroyed = true;
|
|
551
|
+
this.tableApi.set(void 0);
|
|
552
|
+
}
|
|
553
|
+
currentApi() {
|
|
554
|
+
return this.tableScope?.getApi();
|
|
555
|
+
}
|
|
556
|
+
createTable(tableModel, tableOptions) {
|
|
557
|
+
if (!this.isBrowser || this.destroyed) return;
|
|
558
|
+
this.zone.runOutsideAngular(() => {
|
|
559
|
+
this.clearClickTimer();
|
|
560
|
+
this.tableScope?.destroy();
|
|
561
|
+
this.tableScope = void 0;
|
|
562
|
+
if (tableModel) {
|
|
563
|
+
this.tableScope = new TableScope(this.elementRef.nativeElement, tableModel, this.domService, tableOptions, this.listener);
|
|
564
|
+
this.tableScope.firstInit();
|
|
565
|
+
this.shownByInput = false;
|
|
566
|
+
this.applyLoading(untracked(() => this.loading()));
|
|
567
|
+
}
|
|
568
|
+
});
|
|
569
|
+
this.tableApi.set(this.currentApi());
|
|
570
|
+
}
|
|
571
|
+
applyLoading(loading) {
|
|
572
|
+
if (!this.tableScope) return;
|
|
573
|
+
if (loading) {
|
|
574
|
+
if (!this.shownByInput) {
|
|
575
|
+
this.tableScope.showLoadingOverlay();
|
|
576
|
+
this.shownByInput = true;
|
|
577
|
+
}
|
|
578
|
+
} else if (this.shownByInput) {
|
|
579
|
+
this.tableScope.hideOverlay();
|
|
580
|
+
this.shownByInput = false;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
onMouseClicked(evt) {
|
|
584
|
+
const delay = untracked(() => this.debounceMouseClickDelay());
|
|
585
|
+
if (delay <= 0) {
|
|
586
|
+
this.mouseClicked.emit(evt);
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
this.pendingClick = evt;
|
|
590
|
+
this.clearClickTimer();
|
|
591
|
+
this.clickTimer = setTimeout(() => {
|
|
592
|
+
this.clickTimer = void 0;
|
|
593
|
+
const pending = this.pendingClick;
|
|
594
|
+
this.pendingClick = void 0;
|
|
595
|
+
if (pending && !this.destroyed) this.mouseClicked.emit(pending);
|
|
596
|
+
}, delay);
|
|
597
|
+
}
|
|
598
|
+
clearClickTimer() {
|
|
599
|
+
if (this.clickTimer !== void 0) {
|
|
600
|
+
clearTimeout(this.clickTimer);
|
|
601
|
+
this.clickTimer = void 0;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
emitUnlessDestroyed(emit) {
|
|
605
|
+
if (!this.destroyed) emit();
|
|
606
|
+
}
|
|
607
|
+
static {
|
|
608
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
609
|
+
minVersion: "12.0.0",
|
|
610
|
+
version: "22.2.2",
|
|
611
|
+
ngImport: i0,
|
|
612
|
+
type: TableSignalComponent,
|
|
613
|
+
deps: [],
|
|
614
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
static {
|
|
618
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
619
|
+
minVersion: "17.1.0",
|
|
620
|
+
version: "22.2.2",
|
|
621
|
+
type: TableSignalComponent,
|
|
622
|
+
isStandalone: true,
|
|
623
|
+
selector: "guiexpert-table-signal",
|
|
624
|
+
inputs: {
|
|
625
|
+
tableModel: {
|
|
626
|
+
classPropertyName: "tableModel",
|
|
627
|
+
publicName: "tableModel",
|
|
628
|
+
isSignal: true,
|
|
629
|
+
isRequired: false,
|
|
630
|
+
transformFunction: null
|
|
631
|
+
},
|
|
632
|
+
tableOptions: {
|
|
633
|
+
classPropertyName: "tableOptions",
|
|
634
|
+
publicName: "tableOptions",
|
|
635
|
+
isSignal: true,
|
|
636
|
+
isRequired: false,
|
|
637
|
+
transformFunction: null
|
|
638
|
+
},
|
|
639
|
+
loading: {
|
|
640
|
+
classPropertyName: "loading",
|
|
641
|
+
publicName: "loading",
|
|
642
|
+
isSignal: true,
|
|
643
|
+
isRequired: false,
|
|
644
|
+
transformFunction: null
|
|
645
|
+
},
|
|
646
|
+
debounceMouseClickDelay: {
|
|
647
|
+
classPropertyName: "debounceMouseClickDelay",
|
|
648
|
+
publicName: "debounceMouseClickDelay",
|
|
649
|
+
isSignal: true,
|
|
650
|
+
isRequired: false,
|
|
651
|
+
transformFunction: null
|
|
652
|
+
},
|
|
653
|
+
tableApi: {
|
|
654
|
+
classPropertyName: "tableApi",
|
|
655
|
+
publicName: "tableApi",
|
|
656
|
+
isSignal: true,
|
|
657
|
+
isRequired: false,
|
|
658
|
+
transformFunction: null
|
|
659
|
+
}
|
|
660
|
+
},
|
|
661
|
+
outputs: {
|
|
662
|
+
tableApi: "tableApiChange",
|
|
663
|
+
mouseClicked: "mouseClicked",
|
|
664
|
+
mouseMoved: "mouseMoved",
|
|
665
|
+
mouseDragging: "mouseDragging",
|
|
666
|
+
mouseDraggingEnded: "mouseDraggingEnded",
|
|
667
|
+
contextMenu: "contextMenu",
|
|
668
|
+
scroll: "scroll",
|
|
669
|
+
modelChanged: "modelChanged",
|
|
670
|
+
selectionChanged: "selectionChanged",
|
|
671
|
+
focusChanged: "focusChanged",
|
|
672
|
+
checkboxChanged: "checkboxChanged",
|
|
673
|
+
stateChanged: "stateChanged",
|
|
674
|
+
rowDragStart: "rowDragStart",
|
|
675
|
+
rowDragMove: "rowDragMove",
|
|
676
|
+
rowDragEnd: "rowDragEnd",
|
|
677
|
+
batchEditChanged: "batchEditChanged",
|
|
678
|
+
detailExpandedChanged: "detailExpandedChanged",
|
|
679
|
+
editingChanged: "editingChanged",
|
|
680
|
+
undoStackChanged: "undoStackChanged"
|
|
681
|
+
},
|
|
682
|
+
providers: [DomService],
|
|
683
|
+
ngImport: i0,
|
|
684
|
+
template: "",
|
|
685
|
+
isInline: true,
|
|
686
|
+
styles: [".ge-table-col-div.ge-table-cell-error{color:var(--ge-table-cell-error-color);font-variant-numeric:tabular-nums}:where(.ge-table){display:block;margin:0;width:100%;height:100%}.ge-table:focus-visible{outline:2px solid var(--ge-table-focus-outline-color, var(--ge-table-focus-border));outline-offset:-2px}.ge-table-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.ge-table-col-div{text-align:center;line-height:2.5;-webkit-user-select:none;user-select:none}.ge-table-label-div{padding:0;display:block;text-overflow:ellipsis;overflow:hidden}.ge-table-label-div .ge-table-label{padding-inline-start:10px;padding-inline-end:10px}.ge-table-footer-aggregate{text-align:end;font-variant-numeric:tabular-nums}.ge-table-footer-label{font-weight:600;text-align:start}.ge-table-footer-label-overflow{z-index:1;white-space:nowrap}.ge-table-footer-label-overflow .ge-table-label-div{overflow:visible}.ge-table-text-align-left{text-align:start}.ge-table-text-align-right{text-align:end}.ge-table-text-align-start{text-align:start}.ge-table-text-align-end{text-align:end}.ge-table-text-plaintext{text-align:left}.ge-table[dir=rtl] .ge-table-text-plaintext:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-text-plaintext){text-align:right}.ge-table-text-plaintext .ge-table-label{unicode-bidi:plaintext}.ge-table-text-align-center{text-align:center}.ge-table-row-checkbox-div{padding-inline-start:14px}.ge-table-body-east{z-index:999}.ge-table-crud-object-view{border-radius:8px;width:50%;display:grid;grid-template-rows:auto 1fr auto}.ge-table-crud-object-view .ge-table-dialog-header{font-weight:700;font-size:larger}.ge-table-crud-object-view .ge-table-dialog-content{overflow-y:auto}.ge-table-crud-object-view .ge-table-dialog-content table th,.ge-table-crud-object-view .ge-table-dialog-content table td{text-align:start}:is(.ge-table-crud-object-view .ge-table-dialog-content table th,.ge-table-crud-object-view .ge-table-dialog-content table td):nth-child(2){padding-inline-start:12px}:is(.ge-table-crud-object-view .ge-table-dialog-content table th,.ge-table-crud-object-view .ge-table-dialog-content table td).ge-table-crud-object-view-object-child{font-weight:700}.ge-table-crud-object-view .ge-table-dialog-footer{display:flex;justify-content:flex-end;column-gap:16px;padding-top:16px}.ge-table-crud-object-edit{border-radius:8px;width:50%;display:grid;grid-template-rows:auto 1fr auto}.ge-table-crud-object-edit .ge-table-dialog-header{font-weight:700;font-size:larger}.ge-table-crud-object-edit .ge-table-dialog-content{overflow-y:auto}.ge-table-crud-object-edit .ge-table-dialog-content .form-field{margin-bottom:6px;display:grid;grid-template-columns:.6fr 1fr;gap:16px;justify-items:stretch}.ge-table-crud-object-edit .ge-table-dialog-content .form-field label{align-self:end;text-align:end;line-height:2}.ge-table-crud-object-edit .ge-table-dialog-content fieldset.form-group{border:0;margin:0;padding:0}.ge-table-crud-object-edit .ge-table-dialog-content fieldset.form-group legend{font-weight:700;padding:6px 0}.ge-table-crud-object-edit .ge-table-dialog-footer{display:flex;justify-content:flex-end;column-gap:16px;padding-top:16px}.ge-table-col-div:has(>.ge-table-sorted-icon-div) .ge-table-label{padding-inline-end:22px}.ge-table-row-number{background-color:var(--ge-table-row-number-bg);color:var(--ge-table-row-number-color)}.ge-table-row-number .ge-table-label,.ge-table-row-number-header .ge-table-label{padding-inline:6px;font-variant-numeric:tabular-nums}.ge-table-overlay{z-index:10000;box-sizing:border-box;overflow:hidden;align-items:center;justify-content:center;pointer-events:none;color:var(--ge-table-overlay-color)}.ge-table-overlay-loading{background-color:var(--ge-table-overlay-bg)}.ge-table-overlay-blocking{pointer-events:auto;cursor:progress}.ge-table-overlay-content{display:flex;flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-inline:16px;box-sizing:border-box;text-align:center}.ge-table-overlay-loading .ge-table-overlay-content{padding:12px 20px;border-radius:8px;background-color:var(--ge-table-overlay-content-bg);box-shadow:0 1px 6px #0000002e}.ge-table-overlay-text{color:var(--ge-table-overlay-color);font-size:14px;line-height:1.4;overflow-wrap:anywhere}.ge-table-spinner{flex:none;box-sizing:border-box;width:var(--ge-table-spinner-size);height:var(--ge-table-spinner-size);border:3px solid var(--ge-table-spinner-track-color);border-top-color:var(--ge-table-spinner-color);border-radius:50%;animation:ge-table-spin .8s linear infinite}@keyframes ge-table-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.ge-table-spinner{animation:none}}.ge-table-clipboard-proxy{position:absolute;top:0;left:0;width:1px;height:1px;margin:0;padding:0;border:0;opacity:0;overflow:hidden;resize:none;pointer-events:none;font-size:16px}.ge-table-cut-range{position:absolute;display:none;z-index:8998;box-sizing:border-box;pointer-events:none;border:2px dashed var(--ge-table-cut-range-border);animation:ge-table-cut-range-ants .8s linear infinite}@keyframes ge-table-cut-range-ants{50%{border-color:var(--ge-table-cut-range-border-alt)}}@media(prefers-reduced-motion:reduce){.ge-table-cut-range{animation:none}}.ge-table{background-color:var(--ge-table-bg)}.ge-table-header-west{background-color:var(--ge-table-header-west-bg)}.ge-table-header-center{background-color:var(--ge-table-header-center-bg)}.ge-table-header-east{background-color:var(--ge-table-header-east-bg)}.ge-table-header-west{color:var(--ge-table-header-west-text)}.ge-table-header-center{color:var(--ge-table-header-center-text)}.ge-table-header-east{color:var(--ge-table-header-east-text)}.ge-table-header-west-horizontal-border{background-color:var(--ge-table-header-west-horizontal-border)}.ge-table-header-west-vertical-border{background-color:var(--ge-table-header-west-vertical-border)}.ge-table-header-center-horizontal-border{background-color:var(--ge-table-header-center-horizontal-border)}.ge-table-header-center-vertical-border{background-color:var(--ge-table-header-center-vertical-border)}.ge-table-header-east-horizontal-border{background-color:var(--ge-table-header-east-horizontal-border)}.ge-table-header-east-vertical-border{background-color:var(--ge-table-header-east-vertical-border)}.ge-table-body-west{background-color:var(--ge-table-body-west-bg)}.ge-table-body-center{background-color:var(--ge-table-body-center-bg)}.ge-table-body-east{background-color:var(--ge-table-body-east-bg)}.ge-table-body-west{color:var(--ge-table-body-west-text)}.ge-table-body-center{color:var(--ge-table-body-center-text)}.ge-table-body-east{color:var(--ge-table-body-east-text)}.ge-table-body-west-horizontal-border{background-color:var(--ge-table-body-west-horizontal-border)}.ge-table-body-west-vertical-border{background-color:var(--ge-table-body-west-vertical-border)}.ge-table-body-center-horizontal-border{background-color:var(--ge-table-body-center-horizontal-border)}.ge-table-body-center-vertical-border{background-color:var(--ge-table-body-center-vertical-border)}.ge-table-body-east-horizontal-border{background-color:var(--ge-table-body-east-horizontal-border)}.ge-table-body-east-vertical-border{background-color:var(--ge-table-body-east-vertical-border)}.ge-table-body-west-selected-range{background-color:var(--ge-table-body-west-selected-range-bg)}.ge-table-body-center-selected-range{background-color:var(--ge-table-body-center-selected-range-bg)}.ge-table-body-east-selected-range{background-color:var(--ge-table-body-east-selected-range-bg)}.ge-table-body-west-selected-range{color:var(--ge-table-body-west-selected-range-text)}.ge-table-body-center-selected-range{color:var(--ge-table-body-center-selected-range-text)}.ge-table-body-east-selected-range{color:var(--ge-table-body-east-selected-range-text)}.ge-table-footer-west{background-color:var(--ge-table-footer-west-bg)}.ge-table-footer-center{background-color:var(--ge-table-footer-center-bg)}.ge-table-footer-east{background-color:var(--ge-table-footer-east-bg)}.ge-table-footer-west{color:var(--ge-table-footer-west-text)}.ge-table-footer-center{color:var(--ge-table-footer-center-text)}.ge-table-footer-east{color:var(--ge-table-footer-east-text)}.ge-table-footer-west-horizontal-border{background-color:var(--ge-table-footer-west-horizontal-border)}.ge-table-footer-west-vertical-border{background-color:var(--ge-table-footer-west-vertical-border)}.ge-table-footer-center-horizontal-border{background-color:var(--ge-table-footer-center-horizontal-border)}.ge-table-footer-center-vertical-border{background-color:var(--ge-table-footer-center-vertical-border)}.ge-table-footer-east-horizontal-border{background-color:var(--ge-table-footer-east-horizontal-border)}.ge-table-footer-east-vertical-border{background-color:var(--ge-table-footer-east-vertical-border)}.ge-table-border{background-color:var(--ge-table-border)}.ge-table-row-odd{background-color:var(--ge-table-row-odd-bg)}.ge-table-row-even{background-color:var(--ge-table-row-even-bg)}.ge-table-column-odd{background-color:var(--ge-table-column-odd-bg)}.ge-table-column-even{background-color:var(--ge-table-column-even-bg)}.ge-table-hover-column{background-color:var(--ge-table-hover-column-bg)}.ge-table-hover-row{background-color:var(--ge-table-hover-row-bg)}.ge-table-focus-border{background-color:var(--ge-table-focus-outline-color, var(--ge-table-focus-border))}.ge-table-color-col-resize-handle-hover{background-color:var(--ge-table-color-col-resize-handle-hover-bg)}.ge-table-color-dragged-col-div{background-color:var(--ge-table-color-dragged-col-div-bg)}.ge-table-color-drop-zone{background-color:var(--ge-table-color-drop-zone-bg)}.ge-table-color-drop-zone{background-color:var(--ge-table-color-drop-zone)}.ge-table-color-tree-arrow-collapsed-color{background-color:var(--ge-table-color-tree-arrow-collapsed-color)}.ge-table-color-error{color:var(--ge-table-color-error-text)}.ge-table-tree-arrow-collapsed{color:var(--ge-table-tree-arrow-collapsed-color)}.ge-table-column-resize-handle:hover{background-color:var(--ge-table-column-resize-handle-border)}.ge-table-drop-zone{background-color:var(--ge-table-drop-zone-bg)}.ge-table-dragged-col-div{background-color:var(--ge-table-dragged-col-div-bg)}.ge-table-cell-editor-input,.ge-table-cell-editor-input:focus-within{border:none}.ge-star-rating-div{color:var(--ge-table-color-star-rating, #fcb515)}.ge-table-progress-bar{background-color:var(--ge-table-color-progress-bar, #36BB6C)}html,html[data-theme=light]{--ge-table-bg: #fff;--ge-table-header-west-bg: var(--ge-table-header-center-bg);--ge-table-header-center-bg: rgba(233, 233, 233, .5);--ge-table-header-east-bg: var(--ge-table-header-center-bg);--ge-table-header-west-text: var(--ge-table-header-center-text);--ge-table-header-center-text: #000;--ge-table-header-east-text: var(--ge-table-header-center-text);--ge-table-header-west-horizontal-border: var(--ge-table-header-center-horizontal-border);--ge-table-header-west-vertical-border: var(--ge-table-header-center-vertical-border);--ge-table-header-center-horizontal-border: #ddd;--ge-table-header-center-vertical-border: #ccc;--ge-table-header-east-horizontal-border: var(--ge-table-header-center-horizontal-border);--ge-table-header-east-vertical-border: var(--ge-table-header-center-vertical-border);--ge-table-body-west-bg: var(--ge-table-header-center-bg);--ge-table-body-center-bg: rgba(255,255,255, .5);--ge-table-body-east-bg: var(--ge-table-header-center-bg);--ge-table-body-west-text: var(--ge-table-header-center-text);--ge-table-body-center-text: var(--ge-table-header-center-text);--ge-table-body-east-text: var(--ge-table-header-center-text);--ge-table-body-west-horizontal-border: var(--ge-table-header-west-horizontal-border);--ge-table-body-west-vertical-border: var(--ge-table-header-west-vertical-border);--ge-table-body-center-horizontal-border: #bbb;--ge-table-body-center-vertical-border: #ddd;--ge-table-body-east-horizontal-border: var(--ge-table-header-east-horizontal-border);--ge-table-body-east-vertical-border: var(--ge-table-header-east-vertical-border);--ge-table-footer-west-bg: var(--ge-table-header-center-bg);--ge-table-footer-center-bg: var(--ge-table-header-center-bg);--ge-table-footer-east-bg: var(--ge-table-header-center-bg);--ge-table-footer-west-text: var(--ge-table-header-center-text);--ge-table-footer-center-text: var(--ge-table-header-center-text);--ge-table-footer-east-text: var(--ge-table-header-center-text);--ge-table-footer-west-horizontal-border: var(--ge-table-header-west-horizontal-border);--ge-table-footer-west-vertical-border: var(--ge-table-header-west-vertical-border);--ge-table-footer-center-horizontal-border: var(--ge-table-header-center-horizontal-border);--ge-table-footer-center-vertical-border: var(--ge-table-header-center-vertical-border);--ge-table-footer-east-horizontal-border: var(--ge-table-header-east-horizontal-border);--ge-table-footer-east-vertical-border: var(--ge-table-header-east-vertical-border);--ge-table-body-west-selected-range-bg: rgba(0, 152, 219, .4);--ge-table-body-center-selected-range-bg: rgba(0, 152, 219, .4);--ge-table-body-east-selected-range-bg: rgba(0, 152, 219, .4);--ge-table-body-west-selected-range-text: #000;--ge-table-body-center-selected-range-text: #000;--ge-table-body-east-selected-range-text: #000;--ge-table-border: #ccc;--ge-table-row-odd-bg: transparent;--ge-table-row-even-bg: transparent;--ge-table-column-odd-bg: transparent;--ge-table-column-even-bg: transparent;--ge-table-hover-column-bg: rgba(0, 224, 255, .27);--ge-table-hover-row-bg: rgba(0, 224, 255, .27);--ge-table-focus-border: rgb(0, 0, 255);--ge-table-color-error-text: #e00034;--ge-table-tree-arrow-collapsed-color: #e00034;--ge-table-column-resize-handle-border: rgb(0, 255, 255);--ge-table-dragged-col-div-bg: lightcyan;--ge-table-drop-zone-bg: rgba(244, 255, 242, .6);--ge-table-color-col-resize-handle-hover-bg: cyan;--ge-table-color-dragged-col-div-bg: #fafafa;--ge-table-color-drop-zone-bg: #fafafa;--ge-table-color-drop-zone: #fafafa;--ge-table-color-tree-arrow-collapsed-color: var(--ge-table-body-west-text);--ge-table-color-star-rating: #a86f00;--ge-table-color-progress-bar: #1e874b;--ge-table-row-group-bg: rgba(0, 0, 0, .045);--ge-table-row-group-text: inherit;--ge-table-row-group-label-font-weight: 600;--ge-table-pivot-subtotal-bg: rgba(0, 0, 0, .035);--ge-table-pivot-subtotal-font-weight: 600;--ge-table-pivot-total-bg: rgba(0, 0, 0, .07);--ge-table-pivot-total-font-weight: 600;--ge-table-pivot-empty-text: #6b7280;--ge-table-cell-error-color: #b91c1c;--ge-table-overlay-bg: rgba(255, 255, 255, .7);--ge-table-overlay-content-bg: #fff;--ge-table-overlay-color: #333;--ge-table-spinner-color: #1a73e8;--ge-table-spinner-track-color: rgba(0, 0, 0, .12);--ge-table-spinner-size: 28px;--ge-table-row-number-bg: var(--ge-table-header-west-bg);--ge-table-row-number-color: #555;--ge-table-row-drag-handle-color: #6b7280;--ge-table-row-drop-indicator-color: #1a73e8;--ge-table-row-drop-inside-bg: rgba(26, 115, 232, .12);--ge-table-row-drag-ghost-bg: #fff;--ge-table-row-drag-ghost-text: #1f2937;--ge-table-row-drag-ghost-border: #1a73e8;--ge-table-row-dragging-opacity: .4;--ge-table-fill-handle-color: #0a6ebd;--ge-table-fill-handle-border: #fff;--ge-table-fill-preview-border: #0a6ebd;--ge-table-cell-pending-bg: #fff3c4;--ge-table-cell-pending-text: #3d2e00;--ge-table-cell-pending-marker: #c27c00;--ge-table-cell-invalid-bg: #fde2e1;--ge-table-cell-invalid-text: #8a1c14;--ge-table-cell-invalid-border: #d93025;--ge-table-detail-bg: #f4f6f9;--ge-table-detail-border: #c9d1db;--ge-table-detail-toggle-color: #5f6368;--ge-table-detail-toggle-hover-bg: rgba(128, 128, 128, .15);--ge-table-cell-editor-bg: #fff;--ge-table-cell-editor-text: #111;--ge-table-cell-editor-border: #0a6ebd;--ge-table-cell-editor-shadow: 0 2px 6px rgba(0, 0, 0, .2);--ge-table-cell-editor-invalid-border: #d93025;--ge-table-cut-range-border: #0a6ebd;--ge-table-cut-range-border-alt: #9ec9ec;--ge-table-formula-ref-0: #1a73e8;--ge-table-formula-ref-1: #d93025;--ge-table-formula-ref-2: #7b1fa2;--ge-table-formula-ref-3: #188038;--ge-table-formula-ref-4: #c26401;--ge-table-formula-ref-5: #00838f;--ge-table-formula-ref-6: #c2185b;--ge-table-formula-ref-7: #5d4037;--ge-table-formula-popup-bg: #fff;--ge-table-formula-popup-text: #111;--ge-table-formula-popup-muted: #5f6368;--ge-table-formula-popup-border: #c4c7c5;--ge-table-formula-popup-active-bg: #e8f0fe;--ge-table-formula-bar-bg: #fff;--ge-table-formula-bar-text: #111;--ge-table-formula-bar-muted: #5f6368;--ge-table-formula-bar-border: #c4c7c5}html[data-theme=dark]{--ge-table-bg: #111827;--ge-table-header-west-bg: #111827;--ge-table-header-center-bg: #111827;--ge-table-header-east-bg: #111827;--ge-table-header-west-text: oklch(100% 0 0);--ge-table-header-center-text: oklch(100% 0 0);--ge-table-header-east-text: oklch(100% 0 0);--ge-table-header-west-horizontal-border: #313641;--ge-table-header-west-vertical-border: oklch(32% 0 0);--ge-table-header-center-horizontal-border: #313641;--ge-table-header-center-vertical-border: oklch(32% 0 0);--ge-table-header-east-horizontal-border: #313641;--ge-table-header-east-vertical-border: oklch(32% 0 0);--ge-table-body-west-bg: #23272e;--ge-table-body-center-bg: #23272e55;--ge-table-body-east-bg: #23272e;--ge-table-body-west-text: oklch(100% 0 0);--ge-table-body-center-text: oklch(100% 0 0);--ge-table-body-east-text: oklch(100% 0 0);--ge-table-body-west-horizontal-border: #313641;--ge-table-body-west-vertical-border: oklch(32% 0 0);--ge-table-body-center-horizontal-border: #313641;--ge-table-body-center-vertical-border: oklch(32% 0 0);--ge-table-body-east-horizontal-border: #313641;--ge-table-body-east-vertical-border: oklch(32% 0 0);--ge-table-footer-west-bg: #111827;--ge-table-footer-center-bg: #111827;--ge-table-footer-east-bg: #111827;--ge-table-footer-west-text: var(--ge-table-header-center-text);--ge-table-footer-center-text: var(--ge-table-header-center-text);--ge-table-footer-east-text: var(--ge-table-header-center-text);--ge-table-footer-west-horizontal-border: oklch(30% 0 0);--ge-table-footer-west-vertical-border: oklch(32% 0 0);--ge-table-footer-center-horizontal-border: oklch(30% 0 0);--ge-table-footer-center-vertical-border: oklch(32% 0 0);--ge-table-footer-east-horizontal-border: oklch(30% 0 0);--ge-table-footer-east-vertical-border: oklch(32% 0 0);--ge-table-border: oklch(32% 0 0);--ge-table-row-odd-bg: #11151F55;--ge-table-row-even-bg: #1A202F55;--ge-table-column-odd-bg: transparent;--ge-table-column-even-bg: transparent;--ge-table-hover-column-bg: rgba(0, 224, 255, .27);--ge-table-hover-row-bg: rgba(0, 224, 255, .27);--ge-table-focus-border: rgb(0, 255, 255);--ge-table-color-error-text: #ffa8b5;--ge-table-tree-arrow-collapsed-color: #ffa8b5;--ge-table-column-resize-handle-border: rgb(0, 255, 255);--ge-table-dragged-col-div-bg: oklch(0% 0 0);--ge-table-drop-zone-bg: oklch(0% 0 0);--ge-table-body-west-selected-range-bg: oklch(19% .2 205.2);--ge-table-body-center-selected-range-bg: oklch(19% .2 205.2);--ge-table-body-east-selected-range-bg: oklch(19% .2 205.2);--ge-table-body-west-selected-range-text: #0098db;--ge-table-body-center-selected-range-text: #0098db;--ge-table-body-east-selected-range-text: #0098db;--ge-table-color-col-resize-handle-hover-bg: cyan;--ge-table-color-dragged-col-div-bg: #fafafa;--ge-table-color-drop-zone-bg: #fafafa;--ge-table-color-drop-zone: #fafafa;--ge-table-color-tree-arrow-collapsed-color: var(--ge-table-body-west-text);--ge-table-color-star-rating: #fcb515;--ge-table-color-progress-bar: #36BB6C;--ge-table-row-group-bg: rgba(255, 255, 255, .06);--ge-table-row-group-text: inherit;--ge-table-row-group-label-font-weight: 600;--ge-table-pivot-subtotal-bg: rgba(255, 255, 255, .05);--ge-table-pivot-subtotal-font-weight: 600;--ge-table-pivot-total-bg: rgba(255, 255, 255, .1);--ge-table-pivot-total-font-weight: 600;--ge-table-pivot-empty-text: #9ca3af;--ge-table-cell-error-color: #f87171;--ge-table-overlay-bg: rgba(17, 24, 39, .7);--ge-table-overlay-content-bg: #1f2937;--ge-table-overlay-color: #ddd;--ge-table-spinner-color: #8ab4f8;--ge-table-spinner-track-color: rgba(255, 255, 255, .18);--ge-table-spinner-size: 28px;--ge-table-row-number-bg: var(--ge-table-header-west-bg);--ge-table-row-number-color: #aaa;--ge-table-row-drag-handle-color: #9ca3af;--ge-table-row-drop-indicator-color: #8ab4f8;--ge-table-row-drop-inside-bg: rgba(138, 180, 248, .16);--ge-table-row-drag-ghost-bg: #1f2937;--ge-table-row-drag-ghost-text: #f3f4f6;--ge-table-row-drag-ghost-border: #8ab4f8;--ge-table-row-dragging-opacity: .4;--ge-table-fill-handle-color: #8ab4f8;--ge-table-fill-handle-border: #1e1e1e;--ge-table-fill-preview-border: #8ab4f8;--ge-table-cell-pending-bg: #4a3b0b;--ge-table-cell-pending-text: #fde68a;--ge-table-cell-pending-marker: #f5b82e;--ge-table-cell-invalid-bg: #5c1d1a;--ge-table-cell-invalid-text: #fecaca;--ge-table-cell-invalid-border: #f28b82;--ge-table-detail-bg: #1b1f24;--ge-table-detail-border: #3c434d;--ge-table-detail-toggle-color: #bdc1c6;--ge-table-detail-toggle-hover-bg: rgba(255, 255, 255, .12);--ge-table-cell-editor-bg: #1f2937;--ge-table-cell-editor-text: #f3f4f6;--ge-table-cell-editor-border: #8ab4f8;--ge-table-cell-editor-shadow: 0 2px 6px rgba(0, 0, 0, .6);--ge-table-cell-editor-invalid-border: #f28b82;--ge-table-cut-range-border: #8ab4f8;--ge-table-cut-range-border-alt: #3c5a85;--ge-table-formula-ref-0: #8ab4f8;--ge-table-formula-ref-1: #f28b82;--ge-table-formula-ref-2: #d7aefb;--ge-table-formula-ref-3: #81c995;--ge-table-formula-ref-4: #fcad70;--ge-table-formula-ref-5: #78d9ec;--ge-table-formula-ref-6: #ff8bcb;--ge-table-formula-ref-7: #d7ccc8;--ge-table-formula-popup-bg: #1f2937;--ge-table-formula-popup-text: #f3f4f6;--ge-table-formula-popup-muted: #9aa0a6;--ge-table-formula-popup-border: #4b5563;--ge-table-formula-popup-active-bg: #374151;--ge-table-formula-bar-bg: #1f2937;--ge-table-formula-bar-text: #f3f4f6;--ge-table-formula-bar-muted: #9aa0a6;--ge-table-formula-bar-border: #4b5563}.ge-table-fill-handle{position:absolute;z-index:9000;width:7px;height:7px;margin:0;margin-block-start:-4px;margin-inline-start:-4px;box-sizing:border-box;background:var(--ge-table-fill-handle-color);border:1px solid var(--ge-table-fill-handle-border);cursor:crosshair;touch-action:none}.ge-table-fill-handle:after{content:\"\";position:absolute;inset:-8px}.ge-table-fill-preview{position:absolute;z-index:8999;box-sizing:border-box;border:2px dashed var(--ge-table-fill-preview-border);pointer-events:none}.ge-table-fill-active,.ge-table-fill-active *{cursor:crosshair!important;-webkit-user-select:none;user-select:none}.ge-table-col-div.ge-table-cell-pending{background-image:linear-gradient(225deg,var(--ge-table-cell-pending-marker) 6px,transparent 6px)}.ge-table[dir=rtl] .ge-table-col-div.ge-table-cell-pending:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-col-div.ge-table-cell-pending){background-image:linear-gradient(135deg,var(--ge-table-cell-pending-marker) 6px,transparent 6px)}.ge-table-col-div.ge-table-cell-pending:not([class*=-selected-range]){background-color:var(--ge-table-cell-pending-bg);color:var(--ge-table-cell-pending-text)}.ge-table-col-div.ge-table-cell-invalid:not([class*=-selected-range]){background-color:var(--ge-table-cell-invalid-bg);color:var(--ge-table-cell-invalid-text)}.ge-table-col-div.ge-table-cell-invalid{box-shadow:inset 0 0 0 2px var(--ge-table-cell-invalid-border)}.ge-table-detail-layer{position:absolute;z-index:1000;overflow:hidden;pointer-events:none}.ge-table-detail-row{position:absolute;inset-inline:0;box-sizing:border-box;pointer-events:auto;background:var(--ge-table-detail-bg);border-top:1px solid var(--ge-table-detail-border);border-bottom:1px solid var(--ge-table-detail-border)}.ge-table-detail-row.ge-table-detail-row-parked{visibility:hidden;content-visibility:hidden}.ge-table-detail-cell{box-sizing:border-box;width:100%;height:100%;padding-block:8px;padding-inline:32px 12px;overflow:auto}.ge-table-detail-row-auto .ge-table-detail-cell{height:auto;overflow:visible}.ge-table-detail-table{width:100%;position:relative}.ge-table-detail-toggle-cell{box-sizing:border-box;padding-inline-start:22px}.ge-table-row-drag-cell.ge-table-detail-toggle-cell{padding-inline-start:36px}.ge-table-detail-toggle{position:absolute;inset-inline-start:3px;top:50%;width:16px;height:16px;margin-top:-8px;border-radius:3px;cursor:pointer}.ge-table-row-drag-cell .ge-table-detail-toggle{inset-inline-start:17px}.ge-table-detail-toggle:hover{background-color:var(--ge-table-detail-toggle-hover-bg)}.ge-table-detail-toggle:before{content:\"\";position:absolute;inset-inline-start:5px;top:4px;width:0;height:0;border-style:solid;border-width:4px 0 4px 6px;border-color:transparent transparent transparent var(--ge-table-detail-toggle-color);transition:transform .12s ease-out}.ge-table-detail-toggle.ge-table-detail-toggle-expanded:before{transform:rotate(90deg)}.ge-table[dir=rtl] .ge-table-detail-toggle:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-detail-toggle):before{border-width:4px 6px 4px 0;border-color:transparent var(--ge-table-detail-toggle-color) transparent transparent}.ge-table[dir=rtl] .ge-table-detail-toggle.ge-table-detail-toggle-expanded:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-detail-toggle.ge-table-detail-toggle-expanded):before{transform:rotate(-90deg)}.ge-table-pivot-value{text-align:end;font-variant-numeric:tabular-nums}.ge-table-pivot-label .ge-table-label-div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ge-table-col-div.ge-table-pivot-subtotal{background-color:var(--ge-table-pivot-subtotal-bg);font-weight:var(--ge-table-pivot-subtotal-font-weight)}.ge-table-col-div.ge-table-pivot-total{background-color:var(--ge-table-pivot-total-bg);font-weight:var(--ge-table-pivot-total-font-weight)}.ge-table-pivot-empty{color:var(--ge-table-pivot-empty-text)}.ge-table-pivot-header-group{text-align:start;padding-inline-start:6px}.ge-table-pivot-header.ge-table-pivot-header-column{text-align:end}.ge-table-row-drag-cell:not(.ge-table-col-tree){box-sizing:border-box;padding-inline-start:16px}.ge-table-row-drag-handle{position:absolute;inset-inline-start:2px;top:50%;width:12px;height:18px;margin-top:-9px;cursor:grab;touch-action:none;border-radius:3px;background-image:radial-gradient(circle,var(--ge-table-row-drag-handle-color) 1.5px,transparent 1.6px);background-size:6px 6px;background-position:0 0}.ge-table-row-drag-handle:hover{background-color:#80808026}.ge-table-row-drag-handle.ge-table-row-drag-handle-disabled{cursor:not-allowed;opacity:.35}.ge-table-row-dragging{opacity:var(--ge-table-row-dragging-opacity)}.ge-table-row-drag-active,.ge-table-row-drag-active *{cursor:grabbing!important}.ge-table-row-drag-active.ge-table-row-drag-invalid,.ge-table-row-drag-active.ge-table-row-drag-invalid *{cursor:no-drop!important}.ge-table-row-drag-ghost{position:absolute;z-index:10001;pointer-events:none;max-width:280px;padding:4px 10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:.9em;line-height:1.5;color:var(--ge-table-row-drag-ghost-text);background:var(--ge-table-row-drag-ghost-bg);border:1px solid var(--ge-table-row-drag-ghost-border);border-radius:4px;box-shadow:0 4px 12px #0003}.ge-table-row-drop-indicator{position:absolute;display:none;z-index:10000;pointer-events:none;background:var(--ge-table-row-drop-indicator-color)}.ge-table-row-drop-indicator.ge-table-row-drop-indicator-inside{box-sizing:border-box;background:var(--ge-table-row-drop-inside-bg);border:2px solid var(--ge-table-row-drop-indicator-color)}.ge-table-col-div.ge-table-row-group{background-color:var(--ge-table-row-group-bg);color:var(--ge-table-row-group-text)}.ge-table-row-group-label{font-weight:var(--ge-table-row-group-label-font-weight)}.ge-table-row-group-label .ge-table-label-div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ge-table-row-group-aggregate{text-align:end;font-variant-numeric:tabular-nums;font-weight:var(--ge-table-row-group-label-font-weight)}.ge-table-cell-editor{position:absolute;display:none;box-sizing:border-box;z-index:9500;background:var(--ge-table-cell-editor-bg);box-shadow:var(--ge-table-cell-editor-shadow)}.ge-table-cell-editor.ge-table-cell-editor-clipped{pointer-events:none;box-shadow:none}.ge-table-cell-editor-field{box-sizing:border-box;width:100%;height:100%;margin:0;padding:0 6px;border:2px solid var(--ge-table-cell-editor-border);border-radius:0;outline:none;font:inherit;color:var(--ge-table-cell-editor-text);background:var(--ge-table-cell-editor-bg)}.ge-table-cell-editor-field[aria-invalid=true]{border-color:var(--ge-table-cell-editor-invalid-border)}.ge-table-cell-editor-number{text-align:end;font-variant-numeric:tabular-nums}input.ge-table-cell-editor-input{width:calc(100% - 8px);height:100%;border:0;padding:0;padding-inline-start:8px}select.ge-table-cell-editor-select{width:100%;height:100%;border:0;padding:0;padding-inline-start:8px}.ge-table-formula-mirror{position:absolute;inset:0;box-sizing:border-box;display:flex;align-items:center;padding:0 6px;border:2px solid transparent;overflow:hidden;white-space:pre;pointer-events:none;font:inherit;color:var(--ge-table-cell-editor-text);direction:ltr;text-align:left}.ge-table-cell-editor-field.ge-table-formula-input{position:relative;color:transparent;caret-color:var(--ge-table-cell-editor-text);background:transparent;text-align:left;direction:ltr}.ge-table-cell-editor-field.ge-table-formula-input::selection{color:transparent;background:#0a6ebd4d}.ge-table-formula-ref{position:absolute;box-sizing:border-box;border:2px solid var(--ge-table-formula-ref-0);pointer-events:none;z-index:9400}.ge-table-formula-ref-text-0{color:var(--ge-table-formula-ref-0)}.ge-table-formula-ref-text-1{color:var(--ge-table-formula-ref-1)}.ge-table-formula-ref-text-2{color:var(--ge-table-formula-ref-2)}.ge-table-formula-ref-text-3{color:var(--ge-table-formula-ref-3)}.ge-table-formula-ref-text-4{color:var(--ge-table-formula-ref-4)}.ge-table-formula-ref-text-5{color:var(--ge-table-formula-ref-5)}.ge-table-formula-ref-text-6{color:var(--ge-table-formula-ref-6)}.ge-table-formula-ref-text-7{color:var(--ge-table-formula-ref-7)}.ge-table-formula-ref.ge-table-formula-ref-1{border-color:var(--ge-table-formula-ref-1)}.ge-table-formula-ref.ge-table-formula-ref-2{border-color:var(--ge-table-formula-ref-2)}.ge-table-formula-ref.ge-table-formula-ref-3{border-color:var(--ge-table-formula-ref-3)}.ge-table-formula-ref.ge-table-formula-ref-4{border-color:var(--ge-table-formula-ref-4)}.ge-table-formula-ref.ge-table-formula-ref-5{border-color:var(--ge-table-formula-ref-5)}.ge-table-formula-ref.ge-table-formula-ref-6{border-color:var(--ge-table-formula-ref-6)}.ge-table-formula-ref.ge-table-formula-ref-7{border-color:var(--ge-table-formula-ref-7)}.ge-table-formula-list,.ge-table-formula-hint{position:absolute;top:100%;inset-inline-start:0;margin-top:2px;box-sizing:border-box;background:var(--ge-table-formula-popup-bg);color:var(--ge-table-formula-popup-text);border:1px solid var(--ge-table-formula-popup-border);box-shadow:var(--ge-table-cell-editor-shadow);font-size:13px;line-height:1.5}.ge-table-formula-list{min-width:260px;max-width:420px;max-height:216px;overflow-y:auto;padding:2px 0}.ge-table-formula-option{display:flex;gap:8px;padding:1px 8px;white-space:nowrap;cursor:pointer}.ge-table-formula-option[aria-selected=true]{background:var(--ge-table-formula-popup-active-bg)}.ge-table-formula-option-name{font-weight:600}.ge-table-formula-option-description{overflow:hidden;text-overflow:ellipsis;color:var(--ge-table-formula-popup-muted)}.ge-table-formula-hint{padding:2px 8px;white-space:nowrap}.ge-table-formula-hint b{font-weight:700}.ge-table-formula-bar{display:flex;align-items:stretch;gap:0;box-sizing:border-box;height:30px;border:1px solid var(--ge-table-formula-bar-border);background:var(--ge-table-formula-bar-bg);color:var(--ge-table-formula-bar-text);font:inherit}.ge-table-formula-bar-address,.ge-table-formula-bar-input{box-sizing:border-box;margin:0;padding:0 8px;border:0;outline:none;font:inherit;color:inherit;background:transparent}.ge-table-formula-bar-address{flex:0 0 96px;width:96px;border-inline-end:1px solid var(--ge-table-formula-bar-border);font-variant-numeric:tabular-nums}.ge-table-formula-bar-address[aria-invalid=true]{box-shadow:inset 0 0 0 2px var(--ge-table-cell-editor-invalid-border)}.ge-table-formula-bar-fx{display:flex;align-items:center;padding:0 8px;font-style:italic;color:var(--ge-table-formula-bar-muted);border-inline-end:1px solid var(--ge-table-formula-bar-border)}.ge-table-formula-bar-input{flex:1 1 auto;min-width:0;direction:ltr;text-align:left}.ge-table-formula-bar-address:focus-visible,.ge-table-formula-bar-input:focus-visible{box-shadow:inset 0 0 0 2px var(--ge-table-cell-editor-border)}.ge-table-col-div.ge-table-col-div-0.ge-table-tree-cell{text-align:start}.ge-table-tree-cell .ge-table-label-div{padding-inline-start:0;padding-inline-end:10px;display:inline}.ge-table-col-tree{text-align:start}.ge-table-col-div.ge-table-row-number.ge-table-tree-cell{text-align:end}.ge-table-row-number.ge-table-tree-cell .ge-table-label-div{display:block;padding:0}.ge-padding-property-checkbox{padding-inline-start:0}.ge-table-col-tree.ge-table-tree-deep-0{padding-inline-start:16px}.ge-table-col-tree.ge-table-tree-deep-1{padding-inline-start:36px}.ge-table-col-tree.ge-table-tree-deep-2{padding-inline-start:56px}.ge-table-col-tree.ge-table-tree-deep-3{padding-inline-start:76px}.ge-table-col-tree.ge-table-tree-deep-4{padding-inline-start:96px}.ge-table-col-tree.ge-table-tree-deep-5{padding-inline-start:116px}.ge-table-col-tree.ge-table-tree-deep-6{padding-inline-start:136px}.ge-table-col-tree.ge-table-tree-deep-7{padding-inline-start:156px}.ge-table-col-tree.ge-table-tree-deep-8{padding-inline-start:176px}.ge-table-col-tree.ge-table-tree-deep-9{padding-inline-start:196px}.ge-table-col-div.ge-table-col-tree.ge-table-tree-cell{display:grid;grid-template-columns:16px 1fr}.ge-table-col-div.ge-table-col-tree.ge-table-tree-cell.ge-with-checkbox{display:grid;grid-template-columns:16px 20px 1fr}.ge-table[dir=rtl] .gt-table-tree-arrow-expanded:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .gt-table-tree-arrow-expanded){transform:rotate(-90deg) translate(-66%,-66%)!important;transform-origin:100% 0!important}\n"],
|
|
687
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
688
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
};
|
|
692
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
693
|
+
minVersion: "12.0.0",
|
|
694
|
+
version: "22.2.2",
|
|
695
|
+
ngImport: i0,
|
|
696
|
+
type: TableSignalComponent,
|
|
697
|
+
decorators: [{
|
|
698
|
+
type: Component,
|
|
699
|
+
args: [{
|
|
700
|
+
selector: "guiexpert-table-signal",
|
|
701
|
+
providers: [DomService],
|
|
702
|
+
template: "",
|
|
703
|
+
encapsulation: ViewEncapsulation.None,
|
|
704
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
705
|
+
styles: [".ge-table-col-div.ge-table-cell-error{color:var(--ge-table-cell-error-color);font-variant-numeric:tabular-nums}:where(.ge-table){display:block;margin:0;width:100%;height:100%}.ge-table:focus-visible{outline:2px solid var(--ge-table-focus-outline-color, var(--ge-table-focus-border));outline-offset:-2px}.ge-table-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.ge-table-col-div{text-align:center;line-height:2.5;-webkit-user-select:none;user-select:none}.ge-table-label-div{padding:0;display:block;text-overflow:ellipsis;overflow:hidden}.ge-table-label-div .ge-table-label{padding-inline-start:10px;padding-inline-end:10px}.ge-table-footer-aggregate{text-align:end;font-variant-numeric:tabular-nums}.ge-table-footer-label{font-weight:600;text-align:start}.ge-table-footer-label-overflow{z-index:1;white-space:nowrap}.ge-table-footer-label-overflow .ge-table-label-div{overflow:visible}.ge-table-text-align-left{text-align:start}.ge-table-text-align-right{text-align:end}.ge-table-text-align-start{text-align:start}.ge-table-text-align-end{text-align:end}.ge-table-text-plaintext{text-align:left}.ge-table[dir=rtl] .ge-table-text-plaintext:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-text-plaintext){text-align:right}.ge-table-text-plaintext .ge-table-label{unicode-bidi:plaintext}.ge-table-text-align-center{text-align:center}.ge-table-row-checkbox-div{padding-inline-start:14px}.ge-table-body-east{z-index:999}.ge-table-crud-object-view{border-radius:8px;width:50%;display:grid;grid-template-rows:auto 1fr auto}.ge-table-crud-object-view .ge-table-dialog-header{font-weight:700;font-size:larger}.ge-table-crud-object-view .ge-table-dialog-content{overflow-y:auto}.ge-table-crud-object-view .ge-table-dialog-content table th,.ge-table-crud-object-view .ge-table-dialog-content table td{text-align:start}:is(.ge-table-crud-object-view .ge-table-dialog-content table th,.ge-table-crud-object-view .ge-table-dialog-content table td):nth-child(2){padding-inline-start:12px}:is(.ge-table-crud-object-view .ge-table-dialog-content table th,.ge-table-crud-object-view .ge-table-dialog-content table td).ge-table-crud-object-view-object-child{font-weight:700}.ge-table-crud-object-view .ge-table-dialog-footer{display:flex;justify-content:flex-end;column-gap:16px;padding-top:16px}.ge-table-crud-object-edit{border-radius:8px;width:50%;display:grid;grid-template-rows:auto 1fr auto}.ge-table-crud-object-edit .ge-table-dialog-header{font-weight:700;font-size:larger}.ge-table-crud-object-edit .ge-table-dialog-content{overflow-y:auto}.ge-table-crud-object-edit .ge-table-dialog-content .form-field{margin-bottom:6px;display:grid;grid-template-columns:.6fr 1fr;gap:16px;justify-items:stretch}.ge-table-crud-object-edit .ge-table-dialog-content .form-field label{align-self:end;text-align:end;line-height:2}.ge-table-crud-object-edit .ge-table-dialog-content fieldset.form-group{border:0;margin:0;padding:0}.ge-table-crud-object-edit .ge-table-dialog-content fieldset.form-group legend{font-weight:700;padding:6px 0}.ge-table-crud-object-edit .ge-table-dialog-footer{display:flex;justify-content:flex-end;column-gap:16px;padding-top:16px}.ge-table-col-div:has(>.ge-table-sorted-icon-div) .ge-table-label{padding-inline-end:22px}.ge-table-row-number{background-color:var(--ge-table-row-number-bg);color:var(--ge-table-row-number-color)}.ge-table-row-number .ge-table-label,.ge-table-row-number-header .ge-table-label{padding-inline:6px;font-variant-numeric:tabular-nums}.ge-table-overlay{z-index:10000;box-sizing:border-box;overflow:hidden;align-items:center;justify-content:center;pointer-events:none;color:var(--ge-table-overlay-color)}.ge-table-overlay-loading{background-color:var(--ge-table-overlay-bg)}.ge-table-overlay-blocking{pointer-events:auto;cursor:progress}.ge-table-overlay-content{display:flex;flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-inline:16px;box-sizing:border-box;text-align:center}.ge-table-overlay-loading .ge-table-overlay-content{padding:12px 20px;border-radius:8px;background-color:var(--ge-table-overlay-content-bg);box-shadow:0 1px 6px #0000002e}.ge-table-overlay-text{color:var(--ge-table-overlay-color);font-size:14px;line-height:1.4;overflow-wrap:anywhere}.ge-table-spinner{flex:none;box-sizing:border-box;width:var(--ge-table-spinner-size);height:var(--ge-table-spinner-size);border:3px solid var(--ge-table-spinner-track-color);border-top-color:var(--ge-table-spinner-color);border-radius:50%;animation:ge-table-spin .8s linear infinite}@keyframes ge-table-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.ge-table-spinner{animation:none}}.ge-table-clipboard-proxy{position:absolute;top:0;left:0;width:1px;height:1px;margin:0;padding:0;border:0;opacity:0;overflow:hidden;resize:none;pointer-events:none;font-size:16px}.ge-table-cut-range{position:absolute;display:none;z-index:8998;box-sizing:border-box;pointer-events:none;border:2px dashed var(--ge-table-cut-range-border);animation:ge-table-cut-range-ants .8s linear infinite}@keyframes ge-table-cut-range-ants{50%{border-color:var(--ge-table-cut-range-border-alt)}}@media(prefers-reduced-motion:reduce){.ge-table-cut-range{animation:none}}.ge-table{background-color:var(--ge-table-bg)}.ge-table-header-west{background-color:var(--ge-table-header-west-bg)}.ge-table-header-center{background-color:var(--ge-table-header-center-bg)}.ge-table-header-east{background-color:var(--ge-table-header-east-bg)}.ge-table-header-west{color:var(--ge-table-header-west-text)}.ge-table-header-center{color:var(--ge-table-header-center-text)}.ge-table-header-east{color:var(--ge-table-header-east-text)}.ge-table-header-west-horizontal-border{background-color:var(--ge-table-header-west-horizontal-border)}.ge-table-header-west-vertical-border{background-color:var(--ge-table-header-west-vertical-border)}.ge-table-header-center-horizontal-border{background-color:var(--ge-table-header-center-horizontal-border)}.ge-table-header-center-vertical-border{background-color:var(--ge-table-header-center-vertical-border)}.ge-table-header-east-horizontal-border{background-color:var(--ge-table-header-east-horizontal-border)}.ge-table-header-east-vertical-border{background-color:var(--ge-table-header-east-vertical-border)}.ge-table-body-west{background-color:var(--ge-table-body-west-bg)}.ge-table-body-center{background-color:var(--ge-table-body-center-bg)}.ge-table-body-east{background-color:var(--ge-table-body-east-bg)}.ge-table-body-west{color:var(--ge-table-body-west-text)}.ge-table-body-center{color:var(--ge-table-body-center-text)}.ge-table-body-east{color:var(--ge-table-body-east-text)}.ge-table-body-west-horizontal-border{background-color:var(--ge-table-body-west-horizontal-border)}.ge-table-body-west-vertical-border{background-color:var(--ge-table-body-west-vertical-border)}.ge-table-body-center-horizontal-border{background-color:var(--ge-table-body-center-horizontal-border)}.ge-table-body-center-vertical-border{background-color:var(--ge-table-body-center-vertical-border)}.ge-table-body-east-horizontal-border{background-color:var(--ge-table-body-east-horizontal-border)}.ge-table-body-east-vertical-border{background-color:var(--ge-table-body-east-vertical-border)}.ge-table-body-west-selected-range{background-color:var(--ge-table-body-west-selected-range-bg)}.ge-table-body-center-selected-range{background-color:var(--ge-table-body-center-selected-range-bg)}.ge-table-body-east-selected-range{background-color:var(--ge-table-body-east-selected-range-bg)}.ge-table-body-west-selected-range{color:var(--ge-table-body-west-selected-range-text)}.ge-table-body-center-selected-range{color:var(--ge-table-body-center-selected-range-text)}.ge-table-body-east-selected-range{color:var(--ge-table-body-east-selected-range-text)}.ge-table-footer-west{background-color:var(--ge-table-footer-west-bg)}.ge-table-footer-center{background-color:var(--ge-table-footer-center-bg)}.ge-table-footer-east{background-color:var(--ge-table-footer-east-bg)}.ge-table-footer-west{color:var(--ge-table-footer-west-text)}.ge-table-footer-center{color:var(--ge-table-footer-center-text)}.ge-table-footer-east{color:var(--ge-table-footer-east-text)}.ge-table-footer-west-horizontal-border{background-color:var(--ge-table-footer-west-horizontal-border)}.ge-table-footer-west-vertical-border{background-color:var(--ge-table-footer-west-vertical-border)}.ge-table-footer-center-horizontal-border{background-color:var(--ge-table-footer-center-horizontal-border)}.ge-table-footer-center-vertical-border{background-color:var(--ge-table-footer-center-vertical-border)}.ge-table-footer-east-horizontal-border{background-color:var(--ge-table-footer-east-horizontal-border)}.ge-table-footer-east-vertical-border{background-color:var(--ge-table-footer-east-vertical-border)}.ge-table-border{background-color:var(--ge-table-border)}.ge-table-row-odd{background-color:var(--ge-table-row-odd-bg)}.ge-table-row-even{background-color:var(--ge-table-row-even-bg)}.ge-table-column-odd{background-color:var(--ge-table-column-odd-bg)}.ge-table-column-even{background-color:var(--ge-table-column-even-bg)}.ge-table-hover-column{background-color:var(--ge-table-hover-column-bg)}.ge-table-hover-row{background-color:var(--ge-table-hover-row-bg)}.ge-table-focus-border{background-color:var(--ge-table-focus-outline-color, var(--ge-table-focus-border))}.ge-table-color-col-resize-handle-hover{background-color:var(--ge-table-color-col-resize-handle-hover-bg)}.ge-table-color-dragged-col-div{background-color:var(--ge-table-color-dragged-col-div-bg)}.ge-table-color-drop-zone{background-color:var(--ge-table-color-drop-zone-bg)}.ge-table-color-drop-zone{background-color:var(--ge-table-color-drop-zone)}.ge-table-color-tree-arrow-collapsed-color{background-color:var(--ge-table-color-tree-arrow-collapsed-color)}.ge-table-color-error{color:var(--ge-table-color-error-text)}.ge-table-tree-arrow-collapsed{color:var(--ge-table-tree-arrow-collapsed-color)}.ge-table-column-resize-handle:hover{background-color:var(--ge-table-column-resize-handle-border)}.ge-table-drop-zone{background-color:var(--ge-table-drop-zone-bg)}.ge-table-dragged-col-div{background-color:var(--ge-table-dragged-col-div-bg)}.ge-table-cell-editor-input,.ge-table-cell-editor-input:focus-within{border:none}.ge-star-rating-div{color:var(--ge-table-color-star-rating, #fcb515)}.ge-table-progress-bar{background-color:var(--ge-table-color-progress-bar, #36BB6C)}html,html[data-theme=light]{--ge-table-bg: #fff;--ge-table-header-west-bg: var(--ge-table-header-center-bg);--ge-table-header-center-bg: rgba(233, 233, 233, .5);--ge-table-header-east-bg: var(--ge-table-header-center-bg);--ge-table-header-west-text: var(--ge-table-header-center-text);--ge-table-header-center-text: #000;--ge-table-header-east-text: var(--ge-table-header-center-text);--ge-table-header-west-horizontal-border: var(--ge-table-header-center-horizontal-border);--ge-table-header-west-vertical-border: var(--ge-table-header-center-vertical-border);--ge-table-header-center-horizontal-border: #ddd;--ge-table-header-center-vertical-border: #ccc;--ge-table-header-east-horizontal-border: var(--ge-table-header-center-horizontal-border);--ge-table-header-east-vertical-border: var(--ge-table-header-center-vertical-border);--ge-table-body-west-bg: var(--ge-table-header-center-bg);--ge-table-body-center-bg: rgba(255,255,255, .5);--ge-table-body-east-bg: var(--ge-table-header-center-bg);--ge-table-body-west-text: var(--ge-table-header-center-text);--ge-table-body-center-text: var(--ge-table-header-center-text);--ge-table-body-east-text: var(--ge-table-header-center-text);--ge-table-body-west-horizontal-border: var(--ge-table-header-west-horizontal-border);--ge-table-body-west-vertical-border: var(--ge-table-header-west-vertical-border);--ge-table-body-center-horizontal-border: #bbb;--ge-table-body-center-vertical-border: #ddd;--ge-table-body-east-horizontal-border: var(--ge-table-header-east-horizontal-border);--ge-table-body-east-vertical-border: var(--ge-table-header-east-vertical-border);--ge-table-footer-west-bg: var(--ge-table-header-center-bg);--ge-table-footer-center-bg: var(--ge-table-header-center-bg);--ge-table-footer-east-bg: var(--ge-table-header-center-bg);--ge-table-footer-west-text: var(--ge-table-header-center-text);--ge-table-footer-center-text: var(--ge-table-header-center-text);--ge-table-footer-east-text: var(--ge-table-header-center-text);--ge-table-footer-west-horizontal-border: var(--ge-table-header-west-horizontal-border);--ge-table-footer-west-vertical-border: var(--ge-table-header-west-vertical-border);--ge-table-footer-center-horizontal-border: var(--ge-table-header-center-horizontal-border);--ge-table-footer-center-vertical-border: var(--ge-table-header-center-vertical-border);--ge-table-footer-east-horizontal-border: var(--ge-table-header-east-horizontal-border);--ge-table-footer-east-vertical-border: var(--ge-table-header-east-vertical-border);--ge-table-body-west-selected-range-bg: rgba(0, 152, 219, .4);--ge-table-body-center-selected-range-bg: rgba(0, 152, 219, .4);--ge-table-body-east-selected-range-bg: rgba(0, 152, 219, .4);--ge-table-body-west-selected-range-text: #000;--ge-table-body-center-selected-range-text: #000;--ge-table-body-east-selected-range-text: #000;--ge-table-border: #ccc;--ge-table-row-odd-bg: transparent;--ge-table-row-even-bg: transparent;--ge-table-column-odd-bg: transparent;--ge-table-column-even-bg: transparent;--ge-table-hover-column-bg: rgba(0, 224, 255, .27);--ge-table-hover-row-bg: rgba(0, 224, 255, .27);--ge-table-focus-border: rgb(0, 0, 255);--ge-table-color-error-text: #e00034;--ge-table-tree-arrow-collapsed-color: #e00034;--ge-table-column-resize-handle-border: rgb(0, 255, 255);--ge-table-dragged-col-div-bg: lightcyan;--ge-table-drop-zone-bg: rgba(244, 255, 242, .6);--ge-table-color-col-resize-handle-hover-bg: cyan;--ge-table-color-dragged-col-div-bg: #fafafa;--ge-table-color-drop-zone-bg: #fafafa;--ge-table-color-drop-zone: #fafafa;--ge-table-color-tree-arrow-collapsed-color: var(--ge-table-body-west-text);--ge-table-color-star-rating: #a86f00;--ge-table-color-progress-bar: #1e874b;--ge-table-row-group-bg: rgba(0, 0, 0, .045);--ge-table-row-group-text: inherit;--ge-table-row-group-label-font-weight: 600;--ge-table-pivot-subtotal-bg: rgba(0, 0, 0, .035);--ge-table-pivot-subtotal-font-weight: 600;--ge-table-pivot-total-bg: rgba(0, 0, 0, .07);--ge-table-pivot-total-font-weight: 600;--ge-table-pivot-empty-text: #6b7280;--ge-table-cell-error-color: #b91c1c;--ge-table-overlay-bg: rgba(255, 255, 255, .7);--ge-table-overlay-content-bg: #fff;--ge-table-overlay-color: #333;--ge-table-spinner-color: #1a73e8;--ge-table-spinner-track-color: rgba(0, 0, 0, .12);--ge-table-spinner-size: 28px;--ge-table-row-number-bg: var(--ge-table-header-west-bg);--ge-table-row-number-color: #555;--ge-table-row-drag-handle-color: #6b7280;--ge-table-row-drop-indicator-color: #1a73e8;--ge-table-row-drop-inside-bg: rgba(26, 115, 232, .12);--ge-table-row-drag-ghost-bg: #fff;--ge-table-row-drag-ghost-text: #1f2937;--ge-table-row-drag-ghost-border: #1a73e8;--ge-table-row-dragging-opacity: .4;--ge-table-fill-handle-color: #0a6ebd;--ge-table-fill-handle-border: #fff;--ge-table-fill-preview-border: #0a6ebd;--ge-table-cell-pending-bg: #fff3c4;--ge-table-cell-pending-text: #3d2e00;--ge-table-cell-pending-marker: #c27c00;--ge-table-cell-invalid-bg: #fde2e1;--ge-table-cell-invalid-text: #8a1c14;--ge-table-cell-invalid-border: #d93025;--ge-table-detail-bg: #f4f6f9;--ge-table-detail-border: #c9d1db;--ge-table-detail-toggle-color: #5f6368;--ge-table-detail-toggle-hover-bg: rgba(128, 128, 128, .15);--ge-table-cell-editor-bg: #fff;--ge-table-cell-editor-text: #111;--ge-table-cell-editor-border: #0a6ebd;--ge-table-cell-editor-shadow: 0 2px 6px rgba(0, 0, 0, .2);--ge-table-cell-editor-invalid-border: #d93025;--ge-table-cut-range-border: #0a6ebd;--ge-table-cut-range-border-alt: #9ec9ec;--ge-table-formula-ref-0: #1a73e8;--ge-table-formula-ref-1: #d93025;--ge-table-formula-ref-2: #7b1fa2;--ge-table-formula-ref-3: #188038;--ge-table-formula-ref-4: #c26401;--ge-table-formula-ref-5: #00838f;--ge-table-formula-ref-6: #c2185b;--ge-table-formula-ref-7: #5d4037;--ge-table-formula-popup-bg: #fff;--ge-table-formula-popup-text: #111;--ge-table-formula-popup-muted: #5f6368;--ge-table-formula-popup-border: #c4c7c5;--ge-table-formula-popup-active-bg: #e8f0fe;--ge-table-formula-bar-bg: #fff;--ge-table-formula-bar-text: #111;--ge-table-formula-bar-muted: #5f6368;--ge-table-formula-bar-border: #c4c7c5}html[data-theme=dark]{--ge-table-bg: #111827;--ge-table-header-west-bg: #111827;--ge-table-header-center-bg: #111827;--ge-table-header-east-bg: #111827;--ge-table-header-west-text: oklch(100% 0 0);--ge-table-header-center-text: oklch(100% 0 0);--ge-table-header-east-text: oklch(100% 0 0);--ge-table-header-west-horizontal-border: #313641;--ge-table-header-west-vertical-border: oklch(32% 0 0);--ge-table-header-center-horizontal-border: #313641;--ge-table-header-center-vertical-border: oklch(32% 0 0);--ge-table-header-east-horizontal-border: #313641;--ge-table-header-east-vertical-border: oklch(32% 0 0);--ge-table-body-west-bg: #23272e;--ge-table-body-center-bg: #23272e55;--ge-table-body-east-bg: #23272e;--ge-table-body-west-text: oklch(100% 0 0);--ge-table-body-center-text: oklch(100% 0 0);--ge-table-body-east-text: oklch(100% 0 0);--ge-table-body-west-horizontal-border: #313641;--ge-table-body-west-vertical-border: oklch(32% 0 0);--ge-table-body-center-horizontal-border: #313641;--ge-table-body-center-vertical-border: oklch(32% 0 0);--ge-table-body-east-horizontal-border: #313641;--ge-table-body-east-vertical-border: oklch(32% 0 0);--ge-table-footer-west-bg: #111827;--ge-table-footer-center-bg: #111827;--ge-table-footer-east-bg: #111827;--ge-table-footer-west-text: var(--ge-table-header-center-text);--ge-table-footer-center-text: var(--ge-table-header-center-text);--ge-table-footer-east-text: var(--ge-table-header-center-text);--ge-table-footer-west-horizontal-border: oklch(30% 0 0);--ge-table-footer-west-vertical-border: oklch(32% 0 0);--ge-table-footer-center-horizontal-border: oklch(30% 0 0);--ge-table-footer-center-vertical-border: oklch(32% 0 0);--ge-table-footer-east-horizontal-border: oklch(30% 0 0);--ge-table-footer-east-vertical-border: oklch(32% 0 0);--ge-table-border: oklch(32% 0 0);--ge-table-row-odd-bg: #11151F55;--ge-table-row-even-bg: #1A202F55;--ge-table-column-odd-bg: transparent;--ge-table-column-even-bg: transparent;--ge-table-hover-column-bg: rgba(0, 224, 255, .27);--ge-table-hover-row-bg: rgba(0, 224, 255, .27);--ge-table-focus-border: rgb(0, 255, 255);--ge-table-color-error-text: #ffa8b5;--ge-table-tree-arrow-collapsed-color: #ffa8b5;--ge-table-column-resize-handle-border: rgb(0, 255, 255);--ge-table-dragged-col-div-bg: oklch(0% 0 0);--ge-table-drop-zone-bg: oklch(0% 0 0);--ge-table-body-west-selected-range-bg: oklch(19% .2 205.2);--ge-table-body-center-selected-range-bg: oklch(19% .2 205.2);--ge-table-body-east-selected-range-bg: oklch(19% .2 205.2);--ge-table-body-west-selected-range-text: #0098db;--ge-table-body-center-selected-range-text: #0098db;--ge-table-body-east-selected-range-text: #0098db;--ge-table-color-col-resize-handle-hover-bg: cyan;--ge-table-color-dragged-col-div-bg: #fafafa;--ge-table-color-drop-zone-bg: #fafafa;--ge-table-color-drop-zone: #fafafa;--ge-table-color-tree-arrow-collapsed-color: var(--ge-table-body-west-text);--ge-table-color-star-rating: #fcb515;--ge-table-color-progress-bar: #36BB6C;--ge-table-row-group-bg: rgba(255, 255, 255, .06);--ge-table-row-group-text: inherit;--ge-table-row-group-label-font-weight: 600;--ge-table-pivot-subtotal-bg: rgba(255, 255, 255, .05);--ge-table-pivot-subtotal-font-weight: 600;--ge-table-pivot-total-bg: rgba(255, 255, 255, .1);--ge-table-pivot-total-font-weight: 600;--ge-table-pivot-empty-text: #9ca3af;--ge-table-cell-error-color: #f87171;--ge-table-overlay-bg: rgba(17, 24, 39, .7);--ge-table-overlay-content-bg: #1f2937;--ge-table-overlay-color: #ddd;--ge-table-spinner-color: #8ab4f8;--ge-table-spinner-track-color: rgba(255, 255, 255, .18);--ge-table-spinner-size: 28px;--ge-table-row-number-bg: var(--ge-table-header-west-bg);--ge-table-row-number-color: #aaa;--ge-table-row-drag-handle-color: #9ca3af;--ge-table-row-drop-indicator-color: #8ab4f8;--ge-table-row-drop-inside-bg: rgba(138, 180, 248, .16);--ge-table-row-drag-ghost-bg: #1f2937;--ge-table-row-drag-ghost-text: #f3f4f6;--ge-table-row-drag-ghost-border: #8ab4f8;--ge-table-row-dragging-opacity: .4;--ge-table-fill-handle-color: #8ab4f8;--ge-table-fill-handle-border: #1e1e1e;--ge-table-fill-preview-border: #8ab4f8;--ge-table-cell-pending-bg: #4a3b0b;--ge-table-cell-pending-text: #fde68a;--ge-table-cell-pending-marker: #f5b82e;--ge-table-cell-invalid-bg: #5c1d1a;--ge-table-cell-invalid-text: #fecaca;--ge-table-cell-invalid-border: #f28b82;--ge-table-detail-bg: #1b1f24;--ge-table-detail-border: #3c434d;--ge-table-detail-toggle-color: #bdc1c6;--ge-table-detail-toggle-hover-bg: rgba(255, 255, 255, .12);--ge-table-cell-editor-bg: #1f2937;--ge-table-cell-editor-text: #f3f4f6;--ge-table-cell-editor-border: #8ab4f8;--ge-table-cell-editor-shadow: 0 2px 6px rgba(0, 0, 0, .6);--ge-table-cell-editor-invalid-border: #f28b82;--ge-table-cut-range-border: #8ab4f8;--ge-table-cut-range-border-alt: #3c5a85;--ge-table-formula-ref-0: #8ab4f8;--ge-table-formula-ref-1: #f28b82;--ge-table-formula-ref-2: #d7aefb;--ge-table-formula-ref-3: #81c995;--ge-table-formula-ref-4: #fcad70;--ge-table-formula-ref-5: #78d9ec;--ge-table-formula-ref-6: #ff8bcb;--ge-table-formula-ref-7: #d7ccc8;--ge-table-formula-popup-bg: #1f2937;--ge-table-formula-popup-text: #f3f4f6;--ge-table-formula-popup-muted: #9aa0a6;--ge-table-formula-popup-border: #4b5563;--ge-table-formula-popup-active-bg: #374151;--ge-table-formula-bar-bg: #1f2937;--ge-table-formula-bar-text: #f3f4f6;--ge-table-formula-bar-muted: #9aa0a6;--ge-table-formula-bar-border: #4b5563}.ge-table-fill-handle{position:absolute;z-index:9000;width:7px;height:7px;margin:0;margin-block-start:-4px;margin-inline-start:-4px;box-sizing:border-box;background:var(--ge-table-fill-handle-color);border:1px solid var(--ge-table-fill-handle-border);cursor:crosshair;touch-action:none}.ge-table-fill-handle:after{content:\"\";position:absolute;inset:-8px}.ge-table-fill-preview{position:absolute;z-index:8999;box-sizing:border-box;border:2px dashed var(--ge-table-fill-preview-border);pointer-events:none}.ge-table-fill-active,.ge-table-fill-active *{cursor:crosshair!important;-webkit-user-select:none;user-select:none}.ge-table-col-div.ge-table-cell-pending{background-image:linear-gradient(225deg,var(--ge-table-cell-pending-marker) 6px,transparent 6px)}.ge-table[dir=rtl] .ge-table-col-div.ge-table-cell-pending:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-col-div.ge-table-cell-pending){background-image:linear-gradient(135deg,var(--ge-table-cell-pending-marker) 6px,transparent 6px)}.ge-table-col-div.ge-table-cell-pending:not([class*=-selected-range]){background-color:var(--ge-table-cell-pending-bg);color:var(--ge-table-cell-pending-text)}.ge-table-col-div.ge-table-cell-invalid:not([class*=-selected-range]){background-color:var(--ge-table-cell-invalid-bg);color:var(--ge-table-cell-invalid-text)}.ge-table-col-div.ge-table-cell-invalid{box-shadow:inset 0 0 0 2px var(--ge-table-cell-invalid-border)}.ge-table-detail-layer{position:absolute;z-index:1000;overflow:hidden;pointer-events:none}.ge-table-detail-row{position:absolute;inset-inline:0;box-sizing:border-box;pointer-events:auto;background:var(--ge-table-detail-bg);border-top:1px solid var(--ge-table-detail-border);border-bottom:1px solid var(--ge-table-detail-border)}.ge-table-detail-row.ge-table-detail-row-parked{visibility:hidden;content-visibility:hidden}.ge-table-detail-cell{box-sizing:border-box;width:100%;height:100%;padding-block:8px;padding-inline:32px 12px;overflow:auto}.ge-table-detail-row-auto .ge-table-detail-cell{height:auto;overflow:visible}.ge-table-detail-table{width:100%;position:relative}.ge-table-detail-toggle-cell{box-sizing:border-box;padding-inline-start:22px}.ge-table-row-drag-cell.ge-table-detail-toggle-cell{padding-inline-start:36px}.ge-table-detail-toggle{position:absolute;inset-inline-start:3px;top:50%;width:16px;height:16px;margin-top:-8px;border-radius:3px;cursor:pointer}.ge-table-row-drag-cell .ge-table-detail-toggle{inset-inline-start:17px}.ge-table-detail-toggle:hover{background-color:var(--ge-table-detail-toggle-hover-bg)}.ge-table-detail-toggle:before{content:\"\";position:absolute;inset-inline-start:5px;top:4px;width:0;height:0;border-style:solid;border-width:4px 0 4px 6px;border-color:transparent transparent transparent var(--ge-table-detail-toggle-color);transition:transform .12s ease-out}.ge-table-detail-toggle.ge-table-detail-toggle-expanded:before{transform:rotate(90deg)}.ge-table[dir=rtl] .ge-table-detail-toggle:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-detail-toggle):before{border-width:4px 6px 4px 0;border-color:transparent var(--ge-table-detail-toggle-color) transparent transparent}.ge-table[dir=rtl] .ge-table-detail-toggle.ge-table-detail-toggle-expanded:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .ge-table-detail-toggle.ge-table-detail-toggle-expanded):before{transform:rotate(-90deg)}.ge-table-pivot-value{text-align:end;font-variant-numeric:tabular-nums}.ge-table-pivot-label .ge-table-label-div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ge-table-col-div.ge-table-pivot-subtotal{background-color:var(--ge-table-pivot-subtotal-bg);font-weight:var(--ge-table-pivot-subtotal-font-weight)}.ge-table-col-div.ge-table-pivot-total{background-color:var(--ge-table-pivot-total-bg);font-weight:var(--ge-table-pivot-total-font-weight)}.ge-table-pivot-empty{color:var(--ge-table-pivot-empty-text)}.ge-table-pivot-header-group{text-align:start;padding-inline-start:6px}.ge-table-pivot-header.ge-table-pivot-header-column{text-align:end}.ge-table-row-drag-cell:not(.ge-table-col-tree){box-sizing:border-box;padding-inline-start:16px}.ge-table-row-drag-handle{position:absolute;inset-inline-start:2px;top:50%;width:12px;height:18px;margin-top:-9px;cursor:grab;touch-action:none;border-radius:3px;background-image:radial-gradient(circle,var(--ge-table-row-drag-handle-color) 1.5px,transparent 1.6px);background-size:6px 6px;background-position:0 0}.ge-table-row-drag-handle:hover{background-color:#80808026}.ge-table-row-drag-handle.ge-table-row-drag-handle-disabled{cursor:not-allowed;opacity:.35}.ge-table-row-dragging{opacity:var(--ge-table-row-dragging-opacity)}.ge-table-row-drag-active,.ge-table-row-drag-active *{cursor:grabbing!important}.ge-table-row-drag-active.ge-table-row-drag-invalid,.ge-table-row-drag-active.ge-table-row-drag-invalid *{cursor:no-drop!important}.ge-table-row-drag-ghost{position:absolute;z-index:10001;pointer-events:none;max-width:280px;padding:4px 10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:.9em;line-height:1.5;color:var(--ge-table-row-drag-ghost-text);background:var(--ge-table-row-drag-ghost-bg);border:1px solid var(--ge-table-row-drag-ghost-border);border-radius:4px;box-shadow:0 4px 12px #0003}.ge-table-row-drop-indicator{position:absolute;display:none;z-index:10000;pointer-events:none;background:var(--ge-table-row-drop-indicator-color)}.ge-table-row-drop-indicator.ge-table-row-drop-indicator-inside{box-sizing:border-box;background:var(--ge-table-row-drop-inside-bg);border:2px solid var(--ge-table-row-drop-indicator-color)}.ge-table-col-div.ge-table-row-group{background-color:var(--ge-table-row-group-bg);color:var(--ge-table-row-group-text)}.ge-table-row-group-label{font-weight:var(--ge-table-row-group-label-font-weight)}.ge-table-row-group-label .ge-table-label-div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ge-table-row-group-aggregate{text-align:end;font-variant-numeric:tabular-nums;font-weight:var(--ge-table-row-group-label-font-weight)}.ge-table-cell-editor{position:absolute;display:none;box-sizing:border-box;z-index:9500;background:var(--ge-table-cell-editor-bg);box-shadow:var(--ge-table-cell-editor-shadow)}.ge-table-cell-editor.ge-table-cell-editor-clipped{pointer-events:none;box-shadow:none}.ge-table-cell-editor-field{box-sizing:border-box;width:100%;height:100%;margin:0;padding:0 6px;border:2px solid var(--ge-table-cell-editor-border);border-radius:0;outline:none;font:inherit;color:var(--ge-table-cell-editor-text);background:var(--ge-table-cell-editor-bg)}.ge-table-cell-editor-field[aria-invalid=true]{border-color:var(--ge-table-cell-editor-invalid-border)}.ge-table-cell-editor-number{text-align:end;font-variant-numeric:tabular-nums}input.ge-table-cell-editor-input{width:calc(100% - 8px);height:100%;border:0;padding:0;padding-inline-start:8px}select.ge-table-cell-editor-select{width:100%;height:100%;border:0;padding:0;padding-inline-start:8px}.ge-table-formula-mirror{position:absolute;inset:0;box-sizing:border-box;display:flex;align-items:center;padding:0 6px;border:2px solid transparent;overflow:hidden;white-space:pre;pointer-events:none;font:inherit;color:var(--ge-table-cell-editor-text);direction:ltr;text-align:left}.ge-table-cell-editor-field.ge-table-formula-input{position:relative;color:transparent;caret-color:var(--ge-table-cell-editor-text);background:transparent;text-align:left;direction:ltr}.ge-table-cell-editor-field.ge-table-formula-input::selection{color:transparent;background:#0a6ebd4d}.ge-table-formula-ref{position:absolute;box-sizing:border-box;border:2px solid var(--ge-table-formula-ref-0);pointer-events:none;z-index:9400}.ge-table-formula-ref-text-0{color:var(--ge-table-formula-ref-0)}.ge-table-formula-ref-text-1{color:var(--ge-table-formula-ref-1)}.ge-table-formula-ref-text-2{color:var(--ge-table-formula-ref-2)}.ge-table-formula-ref-text-3{color:var(--ge-table-formula-ref-3)}.ge-table-formula-ref-text-4{color:var(--ge-table-formula-ref-4)}.ge-table-formula-ref-text-5{color:var(--ge-table-formula-ref-5)}.ge-table-formula-ref-text-6{color:var(--ge-table-formula-ref-6)}.ge-table-formula-ref-text-7{color:var(--ge-table-formula-ref-7)}.ge-table-formula-ref.ge-table-formula-ref-1{border-color:var(--ge-table-formula-ref-1)}.ge-table-formula-ref.ge-table-formula-ref-2{border-color:var(--ge-table-formula-ref-2)}.ge-table-formula-ref.ge-table-formula-ref-3{border-color:var(--ge-table-formula-ref-3)}.ge-table-formula-ref.ge-table-formula-ref-4{border-color:var(--ge-table-formula-ref-4)}.ge-table-formula-ref.ge-table-formula-ref-5{border-color:var(--ge-table-formula-ref-5)}.ge-table-formula-ref.ge-table-formula-ref-6{border-color:var(--ge-table-formula-ref-6)}.ge-table-formula-ref.ge-table-formula-ref-7{border-color:var(--ge-table-formula-ref-7)}.ge-table-formula-list,.ge-table-formula-hint{position:absolute;top:100%;inset-inline-start:0;margin-top:2px;box-sizing:border-box;background:var(--ge-table-formula-popup-bg);color:var(--ge-table-formula-popup-text);border:1px solid var(--ge-table-formula-popup-border);box-shadow:var(--ge-table-cell-editor-shadow);font-size:13px;line-height:1.5}.ge-table-formula-list{min-width:260px;max-width:420px;max-height:216px;overflow-y:auto;padding:2px 0}.ge-table-formula-option{display:flex;gap:8px;padding:1px 8px;white-space:nowrap;cursor:pointer}.ge-table-formula-option[aria-selected=true]{background:var(--ge-table-formula-popup-active-bg)}.ge-table-formula-option-name{font-weight:600}.ge-table-formula-option-description{overflow:hidden;text-overflow:ellipsis;color:var(--ge-table-formula-popup-muted)}.ge-table-formula-hint{padding:2px 8px;white-space:nowrap}.ge-table-formula-hint b{font-weight:700}.ge-table-formula-bar{display:flex;align-items:stretch;gap:0;box-sizing:border-box;height:30px;border:1px solid var(--ge-table-formula-bar-border);background:var(--ge-table-formula-bar-bg);color:var(--ge-table-formula-bar-text);font:inherit}.ge-table-formula-bar-address,.ge-table-formula-bar-input{box-sizing:border-box;margin:0;padding:0 8px;border:0;outline:none;font:inherit;color:inherit;background:transparent}.ge-table-formula-bar-address{flex:0 0 96px;width:96px;border-inline-end:1px solid var(--ge-table-formula-bar-border);font-variant-numeric:tabular-nums}.ge-table-formula-bar-address[aria-invalid=true]{box-shadow:inset 0 0 0 2px var(--ge-table-cell-editor-invalid-border)}.ge-table-formula-bar-fx{display:flex;align-items:center;padding:0 8px;font-style:italic;color:var(--ge-table-formula-bar-muted);border-inline-end:1px solid var(--ge-table-formula-bar-border)}.ge-table-formula-bar-input{flex:1 1 auto;min-width:0;direction:ltr;text-align:left}.ge-table-formula-bar-address:focus-visible,.ge-table-formula-bar-input:focus-visible{box-shadow:inset 0 0 0 2px var(--ge-table-cell-editor-border)}.ge-table-col-div.ge-table-col-div-0.ge-table-tree-cell{text-align:start}.ge-table-tree-cell .ge-table-label-div{padding-inline-start:0;padding-inline-end:10px;display:inline}.ge-table-col-tree{text-align:start}.ge-table-col-div.ge-table-row-number.ge-table-tree-cell{text-align:end}.ge-table-row-number.ge-table-tree-cell .ge-table-label-div{display:block;padding:0}.ge-padding-property-checkbox{padding-inline-start:0}.ge-table-col-tree.ge-table-tree-deep-0{padding-inline-start:16px}.ge-table-col-tree.ge-table-tree-deep-1{padding-inline-start:36px}.ge-table-col-tree.ge-table-tree-deep-2{padding-inline-start:56px}.ge-table-col-tree.ge-table-tree-deep-3{padding-inline-start:76px}.ge-table-col-tree.ge-table-tree-deep-4{padding-inline-start:96px}.ge-table-col-tree.ge-table-tree-deep-5{padding-inline-start:116px}.ge-table-col-tree.ge-table-tree-deep-6{padding-inline-start:136px}.ge-table-col-tree.ge-table-tree-deep-7{padding-inline-start:156px}.ge-table-col-tree.ge-table-tree-deep-8{padding-inline-start:176px}.ge-table-col-tree.ge-table-tree-deep-9{padding-inline-start:196px}.ge-table-col-div.ge-table-col-tree.ge-table-tree-cell{display:grid;grid-template-columns:16px 1fr}.ge-table-col-div.ge-table-col-tree.ge-table-tree-cell.ge-with-checkbox{display:grid;grid-template-columns:16px 20px 1fr}.ge-table[dir=rtl] .gt-table-tree-arrow-expanded:not(.ge-table[dir=rtl] .ge-table[dir=ltr] .gt-table-tree-arrow-expanded){transform:rotate(-90deg) translate(-66%,-66%)!important;transform-origin:100% 0!important}\n"]
|
|
706
|
+
}]
|
|
707
|
+
}],
|
|
708
|
+
ctorParameters: () => [],
|
|
709
|
+
propDecorators: {
|
|
710
|
+
tableModel: [{
|
|
711
|
+
type: i0.Input,
|
|
712
|
+
args: [{
|
|
713
|
+
isSignal: true,
|
|
714
|
+
alias: "tableModel",
|
|
715
|
+
required: false
|
|
716
|
+
}]
|
|
717
|
+
}],
|
|
718
|
+
tableOptions: [{
|
|
719
|
+
type: i0.Input,
|
|
720
|
+
args: [{
|
|
721
|
+
isSignal: true,
|
|
722
|
+
alias: "tableOptions",
|
|
723
|
+
required: false
|
|
724
|
+
}]
|
|
725
|
+
}],
|
|
726
|
+
loading: [{
|
|
727
|
+
type: i0.Input,
|
|
728
|
+
args: [{
|
|
729
|
+
isSignal: true,
|
|
730
|
+
alias: "loading",
|
|
731
|
+
required: false
|
|
732
|
+
}]
|
|
733
|
+
}],
|
|
734
|
+
debounceMouseClickDelay: [{
|
|
735
|
+
type: i0.Input,
|
|
736
|
+
args: [{
|
|
737
|
+
isSignal: true,
|
|
738
|
+
alias: "debounceMouseClickDelay",
|
|
739
|
+
required: false
|
|
740
|
+
}]
|
|
741
|
+
}],
|
|
742
|
+
tableApi: [{
|
|
743
|
+
type: i0.Input,
|
|
744
|
+
args: [{
|
|
745
|
+
isSignal: true,
|
|
746
|
+
alias: "tableApi",
|
|
747
|
+
required: false
|
|
748
|
+
}]
|
|
749
|
+
}, {
|
|
750
|
+
type: i0.Output,
|
|
751
|
+
args: ["tableApiChange"]
|
|
752
|
+
}],
|
|
753
|
+
mouseClicked: [{
|
|
754
|
+
type: i0.Output,
|
|
755
|
+
args: ["mouseClicked"]
|
|
756
|
+
}],
|
|
757
|
+
mouseMoved: [{
|
|
758
|
+
type: i0.Output,
|
|
759
|
+
args: ["mouseMoved"]
|
|
760
|
+
}],
|
|
761
|
+
mouseDragging: [{
|
|
762
|
+
type: i0.Output,
|
|
763
|
+
args: ["mouseDragging"]
|
|
764
|
+
}],
|
|
765
|
+
mouseDraggingEnded: [{
|
|
766
|
+
type: i0.Output,
|
|
767
|
+
args: ["mouseDraggingEnded"]
|
|
768
|
+
}],
|
|
769
|
+
contextMenu: [{
|
|
770
|
+
type: i0.Output,
|
|
771
|
+
args: ["contextMenu"]
|
|
772
|
+
}],
|
|
773
|
+
scroll: [{
|
|
774
|
+
type: i0.Output,
|
|
775
|
+
args: ["scroll"]
|
|
776
|
+
}],
|
|
777
|
+
modelChanged: [{
|
|
778
|
+
type: i0.Output,
|
|
779
|
+
args: ["modelChanged"]
|
|
780
|
+
}],
|
|
781
|
+
selectionChanged: [{
|
|
782
|
+
type: i0.Output,
|
|
783
|
+
args: ["selectionChanged"]
|
|
784
|
+
}],
|
|
785
|
+
focusChanged: [{
|
|
786
|
+
type: i0.Output,
|
|
787
|
+
args: ["focusChanged"]
|
|
788
|
+
}],
|
|
789
|
+
checkboxChanged: [{
|
|
790
|
+
type: i0.Output,
|
|
791
|
+
args: ["checkboxChanged"]
|
|
792
|
+
}],
|
|
793
|
+
stateChanged: [{
|
|
794
|
+
type: i0.Output,
|
|
795
|
+
args: ["stateChanged"]
|
|
796
|
+
}],
|
|
797
|
+
rowDragStart: [{
|
|
798
|
+
type: i0.Output,
|
|
799
|
+
args: ["rowDragStart"]
|
|
800
|
+
}],
|
|
801
|
+
rowDragMove: [{
|
|
802
|
+
type: i0.Output,
|
|
803
|
+
args: ["rowDragMove"]
|
|
804
|
+
}],
|
|
805
|
+
rowDragEnd: [{
|
|
806
|
+
type: i0.Output,
|
|
807
|
+
args: ["rowDragEnd"]
|
|
808
|
+
}],
|
|
809
|
+
batchEditChanged: [{
|
|
810
|
+
type: i0.Output,
|
|
811
|
+
args: ["batchEditChanged"]
|
|
812
|
+
}],
|
|
813
|
+
detailExpandedChanged: [{
|
|
814
|
+
type: i0.Output,
|
|
815
|
+
args: ["detailExpandedChanged"]
|
|
816
|
+
}],
|
|
817
|
+
editingChanged: [{
|
|
818
|
+
type: i0.Output,
|
|
819
|
+
args: ["editingChanged"]
|
|
820
|
+
}],
|
|
821
|
+
undoStackChanged: [{
|
|
822
|
+
type: i0.Output,
|
|
823
|
+
args: ["undoStackChanged"]
|
|
824
|
+
}]
|
|
825
|
+
}
|
|
826
|
+
});
|
|
827
|
+
export { DetailRenderWrapperFactory, DetailRendererWrapper, DomService, RenderWrapperFactory, RendererWrapper, TableComponent, TableSignalComponent };
|
|
468
828
|
|
|
469
829
|
//# sourceMappingURL=guiexpert-angular-table.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guiexpert-angular-table.mjs","names":["i1.DomService"],"sources":["../../lib/src/lib/service/dom-service.ts","../../lib/src/lib/table.component.ts","../../lib/src/lib/service/renderer-wrapper.ts","../../lib/src/lib/service/render-wrapper-factory.ts","../../lib/src/lib/service/detail-renderer-wrapper.ts","../../lib/src/lib/service/detail-render-wrapper-factory.ts"],"sourcesContent":["import {Injectable, Renderer2} from \"@angular/core\";\nimport {DomServiceIf} from \"@guiexpert/table\";\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DomService implements DomServiceIf {\n\n constructor(\n readonly renderer: Renderer2,\n ) {\n }\n\n setStyle(el: any, style: string, value: any): any {\n this.renderer.setStyle(el, style, value);\n return el;\n };\n\n\n appendText(parent: HTMLDivElement, text: string): HTMLDivElement {\n const div = this.renderer.createText(text);\n this.renderer.appendChild(parent, div);\n return div;\n }\n\n\n addClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(' ')) {\n clazz.split(' ').forEach(c => this.renderer.addClass(div, c))\n } else {\n this.renderer.addClass(div, clazz);\n }\n return div;\n }\n\n removeClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(\" \")) {\n clazz.split(\" \").forEach(c => div.classList.remove(c));\n } else {\n div.classList.remove(clazz);\n }\n return div;\n }\n\n appendChild(parent: HTMLElement, child: HTMLElement): void {\n this.renderer.appendChild(parent, child);\n }\n\n createElement<T>(name: string): T {\n return this.renderer.createElement(name);\n }\n\n createText(text: string): HTMLElement {\n return this.renderer.createText(text);\n }\n\n setAttribute(ele: HTMLElement, key: string, value: string): void {\n this.renderer.setAttribute(ele, key, value);\n }\n\n removeAttribute(ele: HTMLElement, key: string): void {\n this.renderer.removeAttribute(ele, key);\n }\n\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { debounceTime, Subject, takeWhile } from \"rxjs\";\nimport {\n EventListenerIf, FocusModelIf,\n GeBatchEditEvent, GeDetailEvent, GeEditEvent, GeModelChangeEvent, GeRowDragEvent, GeScrollEvent, GeStateChangeEvent, GeUndoEvent,\n GeMouseEvent, SelectionModelIf,\n TableApi,\n TableModelIf,\n TableOptions,\n TableOptionsIf,\n TableScope\n} from '@guiexpert/table';\nimport { DomService } from \"./service/dom-service\";\n\n\n@Component({\n selector: \"guiexpert-table\",\n standalone: true,\n imports: [CommonModule],\n providers: [DomService],\n template: \"\",\n styleUrls: [\n \"./table.component.css\"\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent implements OnInit, OnChanges, OnDestroy, EventListenerIf {\n\n @Output()\n tableReady = new Subject<TableApi>();\n\n @Output()\n scroll: Subject<GeScrollEvent> = new Subject<GeScrollEvent>();\n\n @Output()\n mouseMoved: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDragging: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDraggingEnded: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n contextmenu: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseClicked: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n modelChanged: Subject<GeModelChangeEvent> = new Subject<GeModelChangeEvent>();\n\n @Output()\n selectionChanged: Subject<SelectionModelIf> = new Subject<SelectionModelIf>();\n\n @Output()\n focusChanged: Subject<FocusModelIf> = new Subject<FocusModelIf>();\n\n @Output()\n checkboxChanged: Subject<any[]> = new Subject<any[]>();\n\n /**\n * The state changed (column layout, sorting, scroll position, tree, checked/selected rows …) – once after the\n * changes settled. Save `evt.state` and pass it back as `tableOptions.initialState`.\n *\n * @since 1.1.92\n */\n @Output()\n stateChanged: Subject<GeStateChangeEvent> = new Subject<GeStateChangeEvent>();\n\n /**\n * Row drag (handles via `ColumnDef.rowDrag`): a drag started. `evt.preventDefault()` cancels it.\n *\n * @since 1.1.95\n */\n @Output()\n rowDragStart: Subject<GeRowDragEvent> = new Subject<GeRowDragEvent>();\n\n /**\n * Row drag: the drop target changed. `evt.preventDefault()` marks it as invalid.\n *\n * @since 1.1.95\n */\n @Output()\n rowDragMove: Subject<GeRowDragEvent> = new Subject<GeRowDragEvent>();\n\n /**\n * Row drag: dropped (`evt.type` \"end\", managed: after the move) or cancelled (\"cancel\"). Save the new order here.\n *\n * @since 1.1.95\n */\n @Output()\n rowDragEnd: Subject<GeRowDragEvent> = new Subject<GeRowDragEvent>();\n\n /**\n * Batch edit: values were marked, set back, written or discarded – e.g. to enable a \"Save\" button.\n *\n * @since 1.1.96\n */\n @Output()\n batchEditChanged: Subject<GeBatchEditEvent> = new Subject<GeBatchEditEvent>();\n\n /**\n * Master/detail: a detail row was expanded or collapsed.\n *\n * @since 1.1.97\n */\n @Output()\n detailExpandedChanged: Subject<GeDetailEvent> = new Subject<GeDetailEvent>();\n\n /**\n * The cell editor opened, its text changed (Excel-style editing), it committed or it was cancelled.\n *\n * @since 1.1.99\n */\n @Output()\n editingChanged: Subject<GeEditEvent> = new Subject<GeEditEvent>();\n\n @Input()\n tableModel?: TableModelIf;\n\n @Input()\n tableOptions: TableOptionsIf = new TableOptions();\n\n @Input()\n debounceMouseClickDelay: number = 150;\n\n /**\n * `true` shows the loading overlay (\"Loading…\" with a CSS spinner) over the body, `false` hides it\n * (`TableApi.showLoadingOverlay()` / `hideOverlay()`). Changing it does **not** re-create the table;\n * a re-created table (new model) keeps showing it. Texts: `tableOptions.overlayOptions`.\n *\n * @since 1.1.92\n */\n @Input()\n loading: boolean = false;\n\n private debounceMouseClick: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n private tableScope?: TableScope;\n private alive = true;\n private initialized = false;\n\n\n constructor(\n private readonly renderer: Renderer2,\n private readonly elementRef: ElementRef,\n private readonly zone: NgZone,\n private readonly domService: DomService\n ) {\n }\n\n onSelectionChanged(model: SelectionModelIf): void {\n this.selectionChanged.next(model);\n }\n\n onFocusChanged(model: FocusModelIf): void {\n this.focusChanged.next(model);\n }\n\n onContextmenu(evt: GeMouseEvent): void {\n this.contextmenu.next(evt);\n }\n\n onScroll(evt: GeScrollEvent): void {\n this.scroll.next(evt);\n }\n\n onStateChanged(evt: GeStateChangeEvent): void {\n this.stateChanged.next(evt);\n }\n\n onRowDragStart(evt: GeRowDragEvent): void {\n this.rowDragStart.next(evt);\n }\n\n onRowDragMove(evt: GeRowDragEvent): void {\n this.rowDragMove.next(evt);\n }\n\n onRowDragEnd(evt: GeRowDragEvent): void {\n this.rowDragEnd.next(evt);\n }\n\n onBatchEditChanged(evt: GeBatchEditEvent): void {\n this.batchEditChanged.next(evt);\n }\n\n onDetailExpandedChanged(evt: GeDetailEvent): void {\n this.detailExpandedChanged.next(evt);\n }\n\n onEditingChanged(evt: GeEditEvent): void {\n this.editingChanged.next(evt);\n }\n\n /**\n * The undo history changed (undo and redo) – to enable and label own buttons.\n *\n * @since 1.1.99\n */\n @Output()\n undoStackChanged: Subject<GeUndoEvent> = new Subject<GeUndoEvent>();\n\n onUndoStackChanged(evt: GeUndoEvent): void {\n this.undoStackChanged.next(evt);\n }\n\n onMouseMoved(evt: GeMouseEvent): void {\n this.mouseMoved.next(evt);\n }\n\n // will be called by table-scope:\n onMouseClicked(evt: GeMouseEvent): void {\n this.debounceMouseClick.next(evt);\n }\n\n onCheckboxChanged(arr: any[]): void {\n this.checkboxChanged.next(arr);\n }\n\n onModelChanged(evt: GeModelChangeEvent): void {\n this.modelChanged.next(evt);\n }\n\n /**\n * A new `tableModel` or `tableOptions` object re-creates the table (the previous one is released\n * with `TableScope.destroy()`). The first values are handled by `ngOnInit`.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this.initialized && (changes[\"tableModel\"] || changes[\"tableOptions\"])) {\n this.initModel(); // applies `loading` to the new table\n } else if (this.initialized && changes[\"loading\"]) {\n this.zone.runOutsideAngular(() => this.applyLoading());\n }\n }\n\n ngOnInit(): void {\n this.initialized = true;\n this.initModel();\n this.debounceMouseClick\n .pipe(\n debounceTime(this.debounceMouseClickDelay),\n takeWhile(() => this.alive)\n )\n .subscribe((value) => {\n this.zone.run(() => {\n this.mouseClicked.next(value);\n });\n });\n }\n\n ngOnDestroy(): void {\n this.alive = false;\n this.tableScope?.destroy();\n this.tableScope = undefined;\n }\n\n\n onMouseDragging(evt: GeMouseEvent): void {\n this.mouseDragging.next(evt);\n }\n\n onMouseDraggingEnd(evt: GeMouseEvent): void {\n this.mouseDraggingEnded.next(evt);\n }\n\n\n private initModel() {\n this.zone.runOutsideAngular(this.init.bind(this));\n }\n\n private init() {\n this.tableScope?.destroy();\n this.tableScope = undefined;\n if (this.tableModel) {\n this.tableScope = new TableScope(\n this.elementRef.nativeElement, this.tableModel, this.domService, this.tableOptions, this\n );\n this.tableScope.firstInit();\n this.shownByInput = false;\n this.applyLoading();\n this.tableReady.next(this.tableScope.getApi());\n }\n }\n\n /** the overlay was shown by the `loading` input: `false` hides only that one (not one the app showed itself) */\n private shownByInput = false;\n\n private applyLoading() {\n if (this.loading) {\n this.tableScope?.showLoadingOverlay();\n this.shownByInput = true;\n } else if (this.shownByInput) {\n this.tableScope?.hideOverlay();\n this.shownByInput = false;\n }\n }\n\n\n}\n","import {AreaIdent, AreaModelIf, CellRendererIf, DomServiceIf, RendererCleanupFnType} from \"@guiexpert/table\";\nimport {\n ApplicationRef,\n ChangeDetectorRef,\n createComponent,\n EnvironmentInjector,\n EventEmitter,\n NgZone,\n Type\n} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {Observable, Subject, takeUntil} from \"rxjs\";\n\n\nfunction isObservable(value: any): value is Observable<any> {\n return value instanceof Observable || value instanceof EventEmitter;\n}\n\nexport class RendererWrapper<T extends ComponentRendererIf<T>>\n implements CellRendererIf {\n\n public readonly event$ = new EventEmitter<any>();\n private readonly closed$ = new Subject<number>();\n\n constructor(\n private componentType: Type<ComponentRendererIf<T>>,\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector,\n private cdr: ChangeDetectorRef,\n private readonly zone: NgZone\n ) {\n }\n\n render(\n cellDiv: HTMLDivElement,\n rowIndex: number,\n columnIndex: number,\n areaIdent: AreaIdent,\n areaModel: AreaModelIf,\n cellValue: any,\n domService: DomServiceIf): RendererCleanupFnType | undefined {\n\n const componentRef = createComponent(this.componentType, {\n environmentInjector: this.injector\n });\n componentRef.instance.setData(\n rowIndex,\n columnIndex,\n areaIdent,\n areaModel,\n cellValue);\n\n\n const emmiterNames = Object.keys(componentRef.instance)\n .filter(key => {\n const value = (componentRef.instance as any)[key];\n return value && isObservable(value);\n });\n\n const observables: (Observable<any>|EventEmitter<any>)[] = (emmiterNames.map(key => ((componentRef.instance as any)[key] as Observable<any>)));\n observables.forEach(obs => obs\n .pipe(\n takeUntil(this.closed$)\n )\n .subscribe((event: any) => {\n this.event$.next(event);\n })\n );\n\n if (cellDiv) cellDiv.appendChild(componentRef.location.nativeElement);\n\n this.appRef.attachView(componentRef.hostView);\n\n this.zone.run(() => {\n this.cdr.detectChanges();\n });\n\n return () => {\n // clean up:\n this.appRef.detachView(componentRef.hostView);\n this.closed$.next(Date.now());\n };\n }\n\n\n}\n","import {ApplicationRef, ChangeDetectorRef, EnvironmentInjector, Injectable, NgZone, Type} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {RendererWrapper} from \"./renderer-wrapper\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class RenderWrapperFactory {\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n create<T>(\n componentType: Type<ComponentRendererIf<T>>,\n cdr: ChangeDetectorRef\n ) {\n return new RendererWrapper(componentType, this.appRef, this.injector, cdr, this.zone);\n }\n\n}\n","import { DetailRenderContextIf, DetailRendererIf } from \"@guiexpert/table\";\nimport { ApplicationRef, createComponent, EnvironmentInjector, NgZone, Type } from \"@angular/core\";\nimport { DetailComponentRendererIf } from \"../detail-component-renderer.if\";\n\n/**\n * Renders an Angular component as the content of a detail row (master/detail). Created once when the detail row\n * becomes visible, kept while scrolling, destroyed (`ComponentRef.destroy()`) when the row is collapsed.\n *\n * @since 1.1.97\n */\nexport class DetailRendererWrapper<T = any> implements DetailRendererIf<T> {\n\n constructor(\n private readonly componentType: Type<DetailComponentRendererIf<T>>,\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n render(container: HTMLDivElement, row: T, context: DetailRenderContextIf<T>): () => void {\n return this.zone.run(() => {\n const componentRef = createComponent(this.componentType, { environmentInjector: this.injector });\n componentRef.instance.setDetail(row, context);\n container.appendChild(componentRef.location.nativeElement);\n this.appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return () => this.zone.run(() => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n });\n }\n}\n","import { ApplicationRef, EnvironmentInjector, Injectable, NgZone, Type } from \"@angular/core\";\nimport { DetailComponentRendererIf } from \"../detail-component-renderer.if\";\nimport { DetailRendererWrapper } from \"./detail-renderer-wrapper\";\n\n/**\n * Creates the `detailRenderer` of master/detail from an Angular component (`tableOptions.masterDetail`).\n *\n * @example\n * constructor(private readonly detailFactory: DetailRenderWrapperFactory) {}\n * tableOptions = { ...new TableOptions(), masterDetail: { detailHeight: 180, detailRenderer: this.detailFactory.create(OrderItemsComponent) } };\n *\n * @since 1.1.97\n */\n@Injectable({\n providedIn: \"root\"\n})\nexport class DetailRenderWrapperFactory {\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n create<T = any>(componentType: Type<DetailComponentRendererIf<T>>): DetailRendererWrapper<T> {\n return new DetailRendererWrapper<T>(componentType, this.appRef, this.injector, this.zone);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guiexpert-angular-table.mjs","names":["i1.DomService"],"sources":["../../lib/src/lib/service/dom-service.ts","../../lib/src/lib/table.component.ts","../../lib/src/lib/service/renderer-wrapper.ts","../../lib/src/lib/service/render-wrapper-factory.ts","../../lib/src/lib/service/detail-renderer-wrapper.ts","../../lib/src/lib/service/detail-render-wrapper-factory.ts","../../lib/src/lib/table-signal.component.ts"],"sourcesContent":["import {Injectable, Renderer2} from \"@angular/core\";\nimport {DomServiceIf} from \"@guiexpert/table\";\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DomService implements DomServiceIf {\n\n constructor(\n readonly renderer: Renderer2,\n ) {\n }\n\n setStyle(el: any, style: string, value: any): any {\n this.renderer.setStyle(el, style, value);\n return el;\n };\n\n\n appendText(parent: HTMLDivElement, text: string): HTMLDivElement {\n const div = this.renderer.createText(text);\n this.renderer.appendChild(parent, div);\n return div;\n }\n\n\n addClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(' ')) {\n clazz.split(' ').forEach(c => this.renderer.addClass(div, c))\n } else {\n this.renderer.addClass(div, clazz);\n }\n return div;\n }\n\n removeClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(\" \")) {\n clazz.split(\" \").forEach(c => div.classList.remove(c));\n } else {\n div.classList.remove(clazz);\n }\n return div;\n }\n\n appendChild(parent: HTMLElement, child: HTMLElement): void {\n this.renderer.appendChild(parent, child);\n }\n\n createElement<T>(name: string): T {\n return this.renderer.createElement(name);\n }\n\n createText(text: string): HTMLElement {\n return this.renderer.createText(text);\n }\n\n setAttribute(ele: HTMLElement, key: string, value: string): void {\n this.renderer.setAttribute(ele, key, value);\n }\n\n removeAttribute(ele: HTMLElement, key: string): void {\n this.renderer.removeAttribute(ele, key);\n }\n\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { debounceTime, Subject, takeWhile } from \"rxjs\";\nimport {\n EventListenerIf, FocusModelIf,\n GeBatchEditEvent, GeDetailEvent, GeEditEvent, GeModelChangeEvent, GeRowDragEvent, GeScrollEvent, GeStateChangeEvent, GeUndoEvent,\n GeMouseEvent, SelectionModelIf,\n TableApi,\n TableModelIf,\n TableOptions,\n TableOptionsIf,\n TableScope\n} from '@guiexpert/table';\nimport { DomService } from \"./service/dom-service\";\n\n\n@Component({\n selector: \"guiexpert-table\",\n standalone: true,\n imports: [CommonModule],\n providers: [DomService],\n template: \"\",\n styleUrls: [\n \"./table.component.css\"\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent implements OnInit, OnChanges, OnDestroy, EventListenerIf {\n\n @Output()\n tableReady = new Subject<TableApi>();\n\n @Output()\n scroll: Subject<GeScrollEvent> = new Subject<GeScrollEvent>();\n\n @Output()\n mouseMoved: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDragging: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDraggingEnded: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n /**\n * Right click / context menu key on the table.\n *\n * @deprecated since 1.1.101 – use `contextMenu`. Angular binds an output named like a DOM event to the output\n * **and** to the native event of the host element: `(contextmenu)=\"…\"` runs twice, first with the browser's\n * `MouseEvent`, then with the `GeMouseEvent`. Kept for compatibility.\n */\n @Output()\n contextmenu: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n /**\n * Right click / context menu key on the table – exactly once per event, always a `GeMouseEvent`\n * (replaces `contextmenu`, which also receives the native `MouseEvent`). Call `evt.originalEvent?.preventDefault()`\n * to suppress the browser menu.\n *\n * @example\n * ```html\n * <guiexpert-table [tableModel]=\"tableModel\" (contextMenu)=\"onContextMenu($event)\" />\n * ```\n *\n * @since 1.1.101\n */\n @Output()\n contextMenu: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseClicked: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n modelChanged: Subject<GeModelChangeEvent> = new Subject<GeModelChangeEvent>();\n\n @Output()\n selectionChanged: Subject<SelectionModelIf> = new Subject<SelectionModelIf>();\n\n @Output()\n focusChanged: Subject<FocusModelIf> = new Subject<FocusModelIf>();\n\n @Output()\n checkboxChanged: Subject<any[]> = new Subject<any[]>();\n\n /**\n * The state changed (column layout, sorting, scroll position, tree, checked/selected rows …) – once after the\n * changes settled. Save `evt.state` and pass it back as `tableOptions.initialState`.\n *\n * @since 1.1.92\n */\n @Output()\n stateChanged: Subject<GeStateChangeEvent> = new Subject<GeStateChangeEvent>();\n\n /**\n * Row drag (handles via `ColumnDef.rowDrag`): a drag started. `evt.preventDefault()` cancels it.\n *\n * @since 1.1.95\n */\n @Output()\n rowDragStart: Subject<GeRowDragEvent> = new Subject<GeRowDragEvent>();\n\n /**\n * Row drag: the drop target changed. `evt.preventDefault()` marks it as invalid.\n *\n * @since 1.1.95\n */\n @Output()\n rowDragMove: Subject<GeRowDragEvent> = new Subject<GeRowDragEvent>();\n\n /**\n * Row drag: dropped (`evt.type` \"end\", managed: after the move) or cancelled (\"cancel\"). Save the new order here.\n *\n * @since 1.1.95\n */\n @Output()\n rowDragEnd: Subject<GeRowDragEvent> = new Subject<GeRowDragEvent>();\n\n /**\n * Batch edit: values were marked, set back, written or discarded – e.g. to enable a \"Save\" button.\n *\n * @since 1.1.96\n */\n @Output()\n batchEditChanged: Subject<GeBatchEditEvent> = new Subject<GeBatchEditEvent>();\n\n /**\n * Master/detail: a detail row was expanded or collapsed.\n *\n * @since 1.1.97\n */\n @Output()\n detailExpandedChanged: Subject<GeDetailEvent> = new Subject<GeDetailEvent>();\n\n /**\n * The cell editor opened, its text changed (Excel-style editing), it committed or it was cancelled.\n *\n * @since 1.1.99\n */\n @Output()\n editingChanged: Subject<GeEditEvent> = new Subject<GeEditEvent>();\n\n @Input()\n tableModel?: TableModelIf;\n\n @Input()\n tableOptions: TableOptionsIf = new TableOptions();\n\n @Input()\n debounceMouseClickDelay: number = 150;\n\n /**\n * `true` shows the loading overlay (\"Loading…\" with a CSS spinner) over the body, `false` hides it\n * (`TableApi.showLoadingOverlay()` / `hideOverlay()`). Changing it does **not** re-create the table;\n * a re-created table (new model) keeps showing it. Texts: `tableOptions.overlayOptions`.\n *\n * @since 1.1.92\n */\n @Input()\n loading: boolean = false;\n\n private debounceMouseClick: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n private tableScope?: TableScope;\n private alive = true;\n private initialized = false;\n\n\n constructor(\n private readonly renderer: Renderer2,\n private readonly elementRef: ElementRef,\n private readonly zone: NgZone,\n private readonly domService: DomService\n ) {\n }\n\n onSelectionChanged(model: SelectionModelIf): void {\n this.selectionChanged.next(model);\n }\n\n onFocusChanged(model: FocusModelIf): void {\n this.focusChanged.next(model);\n }\n\n onContextmenu(evt: GeMouseEvent): void {\n this.contextmenu.next(evt);\n this.contextMenu.next(evt);\n }\n\n onScroll(evt: GeScrollEvent): void {\n this.scroll.next(evt);\n }\n\n onStateChanged(evt: GeStateChangeEvent): void {\n this.stateChanged.next(evt);\n }\n\n onRowDragStart(evt: GeRowDragEvent): void {\n this.rowDragStart.next(evt);\n }\n\n onRowDragMove(evt: GeRowDragEvent): void {\n this.rowDragMove.next(evt);\n }\n\n onRowDragEnd(evt: GeRowDragEvent): void {\n this.rowDragEnd.next(evt);\n }\n\n onBatchEditChanged(evt: GeBatchEditEvent): void {\n this.batchEditChanged.next(evt);\n }\n\n onDetailExpandedChanged(evt: GeDetailEvent): void {\n this.detailExpandedChanged.next(evt);\n }\n\n onEditingChanged(evt: GeEditEvent): void {\n this.editingChanged.next(evt);\n }\n\n /**\n * The undo history changed (undo and redo) – to enable and label own buttons.\n *\n * @since 1.1.99\n */\n @Output()\n undoStackChanged: Subject<GeUndoEvent> = new Subject<GeUndoEvent>();\n\n onUndoStackChanged(evt: GeUndoEvent): void {\n this.undoStackChanged.next(evt);\n }\n\n onMouseMoved(evt: GeMouseEvent): void {\n this.mouseMoved.next(evt);\n }\n\n // will be called by table-scope:\n onMouseClicked(evt: GeMouseEvent): void {\n this.debounceMouseClick.next(evt);\n }\n\n onCheckboxChanged(arr: any[]): void {\n this.checkboxChanged.next(arr);\n }\n\n onModelChanged(evt: GeModelChangeEvent): void {\n this.modelChanged.next(evt);\n }\n\n /**\n * A new `tableModel` or `tableOptions` object re-creates the table (the previous one is released\n * with `TableScope.destroy()`). The first values are handled by `ngOnInit`.\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (this.initialized && (changes[\"tableModel\"] || changes[\"tableOptions\"])) {\n this.initModel(); // applies `loading` to the new table\n } else if (this.initialized && changes[\"loading\"]) {\n this.zone.runOutsideAngular(() => this.applyLoading());\n }\n }\n\n ngOnInit(): void {\n this.initialized = true;\n this.initModel();\n this.debounceMouseClick\n .pipe(\n debounceTime(this.debounceMouseClickDelay),\n takeWhile(() => this.alive)\n )\n .subscribe((value) => {\n this.zone.run(() => {\n this.mouseClicked.next(value);\n });\n });\n }\n\n ngOnDestroy(): void {\n this.alive = false;\n this.tableScope?.destroy();\n this.tableScope = undefined;\n }\n\n\n onMouseDragging(evt: GeMouseEvent): void {\n this.mouseDragging.next(evt);\n }\n\n onMouseDraggingEnd(evt: GeMouseEvent): void {\n this.mouseDraggingEnded.next(evt);\n }\n\n\n private initModel() {\n this.zone.runOutsideAngular(this.init.bind(this));\n }\n\n private init() {\n this.tableScope?.destroy();\n this.tableScope = undefined;\n if (this.tableModel) {\n this.tableScope = new TableScope(\n this.elementRef.nativeElement, this.tableModel, this.domService, this.tableOptions, this\n );\n this.tableScope.firstInit();\n this.shownByInput = false;\n this.applyLoading();\n this.tableReady.next(this.tableScope.getApi());\n }\n }\n\n /** the overlay was shown by the `loading` input: `false` hides only that one (not one the app showed itself) */\n private shownByInput = false;\n\n private applyLoading() {\n if (this.loading) {\n this.tableScope?.showLoadingOverlay();\n this.shownByInput = true;\n } else if (this.shownByInput) {\n this.tableScope?.hideOverlay();\n this.shownByInput = false;\n }\n }\n\n\n}\n","import {AreaIdent, AreaModelIf, CellRendererIf, DomServiceIf, RendererCleanupFnType} from \"@guiexpert/table\";\nimport {\n ApplicationRef,\n ChangeDetectorRef,\n createComponent,\n EnvironmentInjector,\n EventEmitter,\n NgZone,\n Type\n} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {Observable, Subject, takeUntil} from \"rxjs\";\n\n\nfunction isObservable(value: any): value is Observable<any> {\n return value instanceof Observable || value instanceof EventEmitter;\n}\n\nexport class RendererWrapper<T extends ComponentRendererIf<T>>\n implements CellRendererIf {\n\n public readonly event$ = new EventEmitter<any>();\n private readonly closed$ = new Subject<number>();\n\n constructor(\n private componentType: Type<ComponentRendererIf<T>>,\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector,\n private cdr: ChangeDetectorRef,\n private readonly zone: NgZone\n ) {\n }\n\n render(\n cellDiv: HTMLDivElement,\n rowIndex: number,\n columnIndex: number,\n areaIdent: AreaIdent,\n areaModel: AreaModelIf,\n cellValue: any,\n domService: DomServiceIf): RendererCleanupFnType | undefined {\n\n const componentRef = createComponent(this.componentType, {\n environmentInjector: this.injector\n });\n componentRef.instance.setData(\n rowIndex,\n columnIndex,\n areaIdent,\n areaModel,\n cellValue);\n\n\n const emmiterNames = Object.keys(componentRef.instance)\n .filter(key => {\n const value = (componentRef.instance as any)[key];\n return value && isObservable(value);\n });\n\n const observables: (Observable<any>|EventEmitter<any>)[] = (emmiterNames.map(key => ((componentRef.instance as any)[key] as Observable<any>)));\n observables.forEach(obs => obs\n .pipe(\n takeUntil(this.closed$)\n )\n .subscribe((event: any) => {\n this.event$.next(event);\n })\n );\n\n if (cellDiv) cellDiv.appendChild(componentRef.location.nativeElement);\n\n this.appRef.attachView(componentRef.hostView);\n\n this.zone.run(() => {\n this.cdr.detectChanges();\n });\n\n return () => {\n // clean up:\n this.appRef.detachView(componentRef.hostView);\n this.closed$.next(Date.now());\n };\n }\n\n\n}\n","import {ApplicationRef, ChangeDetectorRef, EnvironmentInjector, Injectable, NgZone, Type} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {RendererWrapper} from \"./renderer-wrapper\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class RenderWrapperFactory {\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n create<T>(\n componentType: Type<ComponentRendererIf<T>>,\n cdr: ChangeDetectorRef\n ) {\n return new RendererWrapper(componentType, this.appRef, this.injector, cdr, this.zone);\n }\n\n}\n","import { DetailRenderContextIf, DetailRendererIf } from \"@guiexpert/table\";\nimport { ApplicationRef, createComponent, EnvironmentInjector, NgZone, Type } from \"@angular/core\";\nimport { DetailComponentRendererIf } from \"../detail-component-renderer.if\";\n\n/**\n * Renders an Angular component as the content of a detail row (master/detail). Created once when the detail row\n * becomes visible, kept while scrolling, destroyed (`ComponentRef.destroy()`) when the row is collapsed.\n *\n * @since 1.1.97\n */\nexport class DetailRendererWrapper<T = any> implements DetailRendererIf<T> {\n\n constructor(\n private readonly componentType: Type<DetailComponentRendererIf<T>>,\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n render(container: HTMLDivElement, row: T, context: DetailRenderContextIf<T>): () => void {\n return this.zone.run(() => {\n const componentRef = createComponent(this.componentType, { environmentInjector: this.injector });\n componentRef.instance.setDetail(row, context);\n container.appendChild(componentRef.location.nativeElement);\n this.appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return () => this.zone.run(() => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n });\n }\n}\n","import { ApplicationRef, EnvironmentInjector, Injectable, NgZone, Type } from \"@angular/core\";\nimport { DetailComponentRendererIf } from \"../detail-component-renderer.if\";\nimport { DetailRendererWrapper } from \"./detail-renderer-wrapper\";\n\n/**\n * Creates the `detailRenderer` of master/detail from an Angular component (`tableOptions.masterDetail`).\n *\n * @example\n * constructor(private readonly detailFactory: DetailRenderWrapperFactory) {}\n * tableOptions = { ...new TableOptions(), masterDetail: { detailHeight: 180, detailRenderer: this.detailFactory.create(OrderItemsComponent) } };\n *\n * @since 1.1.97\n */\n@Injectable({\n providedIn: \"root\"\n})\nexport class DetailRenderWrapperFactory {\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n create<T = any>(componentType: Type<DetailComponentRendererIf<T>>): DetailRendererWrapper<T> {\n return new DetailRendererWrapper<T>(componentType, this.appRef, this.injector, this.zone);\n }\n}\n","// @since-angular 22\n// ^ scripts/sync-angular-src.mjs copies this file only into the builds for Angular 22 and later (ng22, ng23 …).\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n model,\n NgZone,\n OnDestroy,\n output,\n PLATFORM_ID,\n untracked,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { isPlatformBrowser } from \"@angular/common\";\nimport {\n EventListenerIf,\n FocusModelIf,\n GeBatchEditEvent,\n GeDetailEvent,\n GeEditEvent,\n GeModelChangeEvent,\n GeMouseEvent,\n GeRowDragEvent,\n GeScrollEvent,\n GeStateChangeEvent,\n GeUndoEvent,\n SelectionModelIf,\n TableApi,\n TableModelIf,\n TableOptions,\n TableOptionsIf,\n TableScope\n} from \"@guiexpert/table\";\nimport { DomService } from \"./service/dom-service\";\n\n\n/**\n * The signal-native GuiExpert table for **Angular 22 and later**: signal inputs (`input()`), the {@link TableApi} as a\n * signal (`model()`, two-way binding `[(tableApi)]`), signal outputs (`output()`), reactivity with `effect()` instead\n * of `ngOnChanges` – no RxJS, works with and without Zone.js (`provideZonelessChangeDetection()`).\n *\n * The classic `TableComponent` (`<guiexpert-table>`, Angular 14 – 22+) stays available unchanged. Differences:\n * the API comes as a signal (`[(tableApi)]` / `(tableApiChange)` – there is no `tableReady` output) and the output\n * `contextMenu` (instead of `contextmenu`: an output named like a DOM event also receives the native event that\n * bubbles out of the table – the handler would run twice).\n *\n * Rules:\n * - The host needs a height (`.table-div { display: block; height: 500px }`).\n * - A new `tableModel` or `tableOptions` value re-creates the table (`tableApi` switches to the new API directly);\n * `loading` shows / hides the loading overlay without re-creating it.\n * - `tableApi` is set by the table – a value written from outside is replaced (warning in dev mode).\n * - Outputs are emitted outside the Angular zone (no change detection per `mousemove`). Write a **signal** in the\n * handler – that schedules change detection with and without Zone.js; plain fields need `markForCheck()`.\n * - On the server (SSR) no table is created; it is built in the browser.\n *\n * @since 1.1.100 (`@guiexpert/angular-table@22.1.100`)\n *\n * @example\n * import { Component, computed, effect, signal } from \"@angular/core\";\n * import { TableSignalComponent } from \"@guiexpert/angular-table\";\n * import { TableApi, TableFactory } from \"@guiexpert/table\";\n *\n * @Component({\n * selector: \"app-orders\",\n * imports: [TableSignalComponent],\n * template: `\n * <guiexpert-table-signal class=\"table-div\" [tableModel]=\"model\" [(tableApi)]=\"api\" />\n * <button [disabled]=\"!ready()\" (click)=\"api()?.downloadExcel('orders.xlsx', 'me')\">Excel</button>`\n * })\n * export class OrdersComponent {\n * readonly model = TableFactory.createTableModel({ rows: [{ id: 1, customer: \"Acme\" }], properties: [\"id\", \"customer\"] });\n * readonly api = signal<TableApi | undefined>(undefined);\n * readonly ready = computed(() => !!this.api());\n * constructor() {\n * effect(() => this.api()?.scrollToIndex(0, 0));\n * }\n * }\n */\n@Component({\n selector: \"guiexpert-table-signal\",\n providers: [DomService],\n template: \"\",\n styleUrls: [\n \"./table.component.css\" // the same generated stylesheet as TableComponent – added to the document only once\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableSignalComponent implements OnDestroy {\n\n // ---------------------------------------------------------------- inputs\n\n /** The table model. A new value re-creates the table; `undefined` = no table (e.g. while the data is loading). */\n readonly tableModel = input<TableModelIf | undefined>(undefined);\n\n /** The table options (default: `new TableOptions()`). A new value re-creates the table. */\n readonly tableOptions = input<TableOptionsIf>(new TableOptions());\n\n /**\n * `true` shows the loading overlay (\"Loading…\" with a CSS spinner) over the body, `false` hides it again – without\n * re-creating the table. An overlay the app showed itself (`tableApi()?.showNoRowsOverlay()`) is not hidden.\n */\n readonly loading = input<boolean>(false);\n\n /** Delay of `mouseClicked` in ms (a double click reports only once). `0` = emitted synchronously. Default 150. */\n readonly debounceMouseClickDelay = input<number>(150);\n\n // ---------------------------------------------------------------- the API as a signal\n\n /**\n * The {@link TableApi} of the current table, `undefined` before the first table and after the component was\n * destroyed. Two-way binding: `[(tableApi)]=\"api\"` with `api = signal<TableApi | undefined>(undefined)`; also\n * `(tableApiChange)=\"…\"` or `viewChild(TableSignalComponent)?.tableApi()`.\n *\n * @example\n * // template: <guiexpert-table-signal [tableModel]=\"model\" [(tableApi)]=\"api\" />\n * // readonly api = signal<TableApi | undefined>(undefined);\n * // readonly rowCount = computed(() => this.api()?.getDisplayedRowCount() ?? 0);\n */\n readonly tableApi = model<TableApi | undefined>(undefined);\n\n // ---------------------------------------------------------------- outputs\n\n /** Mouse click on a cell (debounced: `debounceMouseClickDelay`). */\n readonly mouseClicked = output<GeMouseEvent>();\n /** Mouse moved over the table. */\n readonly mouseMoved = output<GeMouseEvent>();\n /** Mouse dragged (button pressed). */\n readonly mouseDragging = output<GeMouseEvent>();\n /** Mouse drag ended. */\n readonly mouseDraggingEnded = output<GeMouseEvent>();\n /**\n * Right click / context menu key on the table (`TableComponent`: `contextmenu`). Call\n * `evt.originalEvent?.preventDefault()` to suppress the browser menu.\n */\n readonly contextMenu = output<GeMouseEvent>();\n /** The table was scrolled. */\n readonly scroll = output<GeScrollEvent>();\n /** Cell values were changed (editor, fill handle, paste, API …). */\n readonly modelChanged = output<GeModelChangeEvent>();\n /** The selection changed. */\n readonly selectionChanged = output<SelectionModelIf>();\n /** The focused cell changed. */\n readonly focusChanged = output<FocusModelIf>();\n /** Row checkboxes changed – the checked rows. */\n readonly checkboxChanged = output<any[]>();\n /** The table state changed (columns, sorting, scroll position …) – once after the changes settled. */\n readonly stateChanged = output<GeStateChangeEvent>();\n /** Row drag started. `evt.preventDefault()` cancels it. */\n readonly rowDragStart = output<GeRowDragEvent>();\n /** Row drag: the drop target changed. */\n readonly rowDragMove = output<GeRowDragEvent>();\n /** Row drag: dropped or cancelled. */\n readonly rowDragEnd = output<GeRowDragEvent>();\n /** Batch edit: values were marked, written or discarded. */\n readonly batchEditChanged = output<GeBatchEditEvent>();\n /** Master/detail: a detail row was expanded or collapsed. */\n readonly detailExpandedChanged = output<GeDetailEvent>();\n /** The cell editor opened, changed, committed or was cancelled. */\n readonly editingChanged = output<GeEditEvent>();\n /** The undo history changed. */\n readonly undoStackChanged = output<GeUndoEvent>();\n\n // ---------------------------------------------------------------- internals\n\n private readonly elementRef = inject<ElementRef<HTMLDivElement>>(ElementRef); // the host element (TableScope types it as a div)\n private readonly zone = inject(NgZone);\n private readonly domService = inject(DomService);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private tableScope?: TableScope;\n private destroyed = false;\n /** the overlay was shown by the `loading` input: `false` hides only that one */\n private shownByInput = false;\n private clickTimer?: ReturnType<typeof setTimeout>;\n private pendingClick?: GeMouseEvent;\n private warnedExternalWrite = false;\n\n /** Forwards the events of the core to the outputs (a separate object: no `onXxx` methods on the component). */\n private readonly listener: EventListenerIf = {\n onMouseClicked: evt => this.onMouseClicked(evt),\n onMouseMoved: evt => this.mouseMoved.emit(evt),\n onMouseDragging: evt => this.mouseDragging.emit(evt),\n onMouseDraggingEnd: evt => this.mouseDraggingEnded.emit(evt),\n onContextmenu: evt => this.contextMenu.emit(evt),\n onScroll: evt => this.scroll.emit(evt),\n onModelChanged: evt => this.modelChanged.emit(evt),\n onSelectionChanged: sm => this.selectionChanged.emit(sm),\n onFocusChanged: fm => this.focusChanged.emit(fm),\n onCheckboxChanged: rows => this.checkboxChanged.emit(rows),\n onStateChanged: evt => this.emitUnlessDestroyed(() => this.stateChanged.emit(evt)),\n onRowDragStart: evt => this.rowDragStart.emit(evt),\n onRowDragMove: evt => this.rowDragMove.emit(evt),\n onRowDragEnd: evt => this.emitUnlessDestroyed(() => this.rowDragEnd.emit(evt)),\n onBatchEditChanged: evt => this.batchEditChanged.emit(evt),\n onDetailExpandedChanged: evt => this.detailExpandedChanged.emit(evt),\n onEditingChanged: evt => this.emitUnlessDestroyed(() => this.editingChanged.emit(evt)),\n onUndoStackChanged: evt => this.emitUnlessDestroyed(() => this.undoStackChanged.emit(evt)),\n };\n\n constructor() {\n // 1) model / options → (re-)create the table. Runs like ngOnInit: during change detection, host in the DOM.\n effect(() => {\n const tableModel = this.tableModel();\n const tableOptions = this.tableOptions();\n untracked(() => this.createTable(tableModel, tableOptions));\n });\n\n // 2) loading → overlay, without re-creating the table\n effect(() => {\n const loading = this.loading();\n untracked(() => this.zone.runOutsideAngular(() => this.applyLoading(loading)));\n });\n\n // 3) tableApi is output-only: a value written from outside is replaced by the real API\n effect(() => {\n const value = this.tableApi();\n untracked(() => {\n const api = this.currentApi();\n if (value !== api && !this.destroyed) {\n if (isDevMode() && !this.warnedExternalWrite) {\n this.warnedExternalWrite = true;\n console.warn(\"guiexpert-table-signal: tableApi is set by the table; a value written from outside is replaced.\");\n }\n this.tableApi.set(api);\n }\n });\n });\n }\n\n /** Releases the table (all listeners, observers, renderer cleanups) and sets `tableApi` to `undefined`. */\n ngOnDestroy(): void {\n // ngOnDestroy runs before the outputs are released (DestroyRef callbacks): a pending stateChanged of\n // TableScope.destroy() can still be emitted here.\n this.clearClickTimer();\n this.tableScope?.destroy();\n this.tableScope = undefined;\n this.destroyed = true;\n this.tableApi.set(undefined);\n }\n\n private currentApi(): TableApi | undefined {\n return this.tableScope?.getApi();\n }\n\n private createTable(tableModel: TableModelIf | undefined, tableOptions: TableOptionsIf): void {\n if (!this.isBrowser || this.destroyed) {\n return;\n }\n this.zone.runOutsideAngular(() => {\n this.clearClickTimer();\n this.tableScope?.destroy();\n this.tableScope = undefined;\n if (tableModel) {\n this.tableScope = new TableScope(\n this.elementRef.nativeElement, tableModel, this.domService, tableOptions, this.listener\n );\n this.tableScope.firstInit();\n this.shownByInput = false;\n this.applyLoading(untracked(() => this.loading()));\n }\n });\n this.tableApi.set(this.currentApi()); // directly the new API – no `undefined` in between\n }\n\n private applyLoading(loading: boolean): void {\n if (!this.tableScope) {\n return;\n }\n if (loading) {\n if (!this.shownByInput) {\n this.tableScope.showLoadingOverlay();\n this.shownByInput = true;\n }\n } else if (this.shownByInput) {\n this.tableScope.hideOverlay();\n this.shownByInput = false;\n }\n }\n\n private onMouseClicked(evt: GeMouseEvent): void {\n const delay = untracked(() => this.debounceMouseClickDelay());\n if (delay <= 0) {\n this.mouseClicked.emit(evt);\n return;\n }\n this.pendingClick = evt;\n this.clearClickTimer();\n this.clickTimer = setTimeout(() => {\n this.clickTimer = undefined;\n const pending = this.pendingClick;\n this.pendingClick = undefined;\n if (pending && !this.destroyed) {\n this.mouseClicked.emit(pending);\n }\n }, delay);\n }\n\n private clearClickTimer(): void {\n if (this.clickTimer !== undefined) {\n clearTimeout(this.clickTimer);\n this.clickTimer = undefined;\n }\n }\n\n /** events the core can still send while it is released (TableScope.destroy()) – never after the component */\n private emitUnlessDestroyed(emit: () => void): void {\n if (!this.destroyed) {\n emit();\n }\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guiexpert/angular-table",
|
|
3
|
-
"version": "22.1.
|
|
3
|
+
"version": "22.1.101",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Dr. Marc Kronberg <info@gui.expert> (https://gui.expert)",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/common": "^22.0.1",
|
|
8
8
|
"@angular/core": "^22.0.1",
|
|
9
|
-
"@guiexpert/table": "^1.1.
|
|
9
|
+
"@guiexpert/table": "^1.1.101"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"tslib": "^2.3.0"
|
|
@@ -27,7 +27,27 @@ export declare class TableComponent implements OnInit, OnChanges, OnDestroy, Eve
|
|
|
27
27
|
mouseMoved: Subject<GeMouseEvent>;
|
|
28
28
|
mouseDragging: Subject<GeMouseEvent>;
|
|
29
29
|
mouseDraggingEnded: Subject<GeMouseEvent>;
|
|
30
|
+
/**
|
|
31
|
+
* Right click / context menu key on the table.
|
|
32
|
+
*
|
|
33
|
+
* @deprecated since 1.1.101 – use `contextMenu`. Angular binds an output named like a DOM event to the output
|
|
34
|
+
* **and** to the native event of the host element: `(contextmenu)="…"` runs twice, first with the browser's
|
|
35
|
+
* `MouseEvent`, then with the `GeMouseEvent`. Kept for compatibility.
|
|
36
|
+
*/
|
|
30
37
|
contextmenu: Subject<GeMouseEvent>;
|
|
38
|
+
/**
|
|
39
|
+
* Right click / context menu key on the table – exactly once per event, always a `GeMouseEvent`
|
|
40
|
+
* (replaces `contextmenu`, which also receives the native `MouseEvent`). Call `evt.originalEvent?.preventDefault()`
|
|
41
|
+
* to suppress the browser menu.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```html
|
|
45
|
+
* <guiexpert-table [tableModel]="tableModel" (contextMenu)="onContextMenu($event)" />
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @since 1.1.101
|
|
49
|
+
*/
|
|
50
|
+
contextMenu: Subject<GeMouseEvent>;
|
|
31
51
|
mouseClicked: Subject<GeMouseEvent>;
|
|
32
52
|
modelChanged: Subject<GeModelChangeEvent>;
|
|
33
53
|
selectionChanged: Subject<SelectionModelIf>;
|
|
@@ -153,6 +173,7 @@ export declare class TableComponent implements OnInit, OnChanges, OnDestroy, Eve
|
|
|
153
173
|
"mouseDragging": "mouseDragging";
|
|
154
174
|
"mouseDraggingEnded": "mouseDraggingEnded";
|
|
155
175
|
"contextmenu": "contextmenu";
|
|
176
|
+
"contextMenu": "contextMenu";
|
|
156
177
|
"mouseClicked": "mouseClicked";
|
|
157
178
|
"modelChanged": "modelChanged";
|
|
158
179
|
"selectionChanged": "selectionChanged";
|
|
@@ -232,4 +253,180 @@ export declare class DetailRenderWrapperFactory {
|
|
|
232
253
|
create<T = any>(componentType: Type<DetailComponentRendererIf<T>>): DetailRendererWrapper<T>;
|
|
233
254
|
static ɵfac: i0.ɵɵFactoryDeclaration<DetailRenderWrapperFactory, never>;
|
|
234
255
|
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* The signal-native GuiExpert table for **Angular 22 and later**: signal inputs (`input()`), the {@link TableApi} as a
|
|
259
|
+
* signal (`model()`, two-way binding `[(tableApi)]`), signal outputs (`output()`), reactivity with `effect()` instead
|
|
260
|
+
* of `ngOnChanges` – no RxJS, works with and without Zone.js (`provideZonelessChangeDetection()`).
|
|
261
|
+
*
|
|
262
|
+
* The classic `TableComponent` (`<guiexpert-table>`, Angular 14 – 22+) stays available unchanged. Differences:
|
|
263
|
+
* the API comes as a signal (`[(tableApi)]` / `(tableApiChange)` – there is no `tableReady` output) and the output
|
|
264
|
+
* `contextMenu` (instead of `contextmenu`: an output named like a DOM event also receives the native event that
|
|
265
|
+
* bubbles out of the table – the handler would run twice).
|
|
266
|
+
*
|
|
267
|
+
* Rules:
|
|
268
|
+
* - The host needs a height (`.table-div { display: block; height: 500px }`).
|
|
269
|
+
* - A new `tableModel` or `tableOptions` value re-creates the table (`tableApi` switches to the new API directly);
|
|
270
|
+
* `loading` shows / hides the loading overlay without re-creating it.
|
|
271
|
+
* - `tableApi` is set by the table – a value written from outside is replaced (warning in dev mode).
|
|
272
|
+
* - Outputs are emitted outside the Angular zone (no change detection per `mousemove`). Write a **signal** in the
|
|
273
|
+
* handler – that schedules change detection with and without Zone.js; plain fields need `markForCheck()`.
|
|
274
|
+
* - On the server (SSR) no table is created; it is built in the browser.
|
|
275
|
+
*
|
|
276
|
+
* @since 1.1.100 (`@guiexpert/angular-table@22.1.100`)
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* import { Component, computed, effect, signal } from "@angular/core";
|
|
280
|
+
* import { TableSignalComponent } from "@guiexpert/angular-table";
|
|
281
|
+
* import { TableApi, TableFactory } from "@guiexpert/table";
|
|
282
|
+
*
|
|
283
|
+
* @Component({
|
|
284
|
+
* selector: "app-orders",
|
|
285
|
+
* imports: [TableSignalComponent],
|
|
286
|
+
* template: `
|
|
287
|
+
* <guiexpert-table-signal class="table-div" [tableModel]="model" [(tableApi)]="api" />
|
|
288
|
+
* <button [disabled]="!ready()" (click)="api()?.downloadExcel('orders.xlsx', 'me')">Excel</button>`
|
|
289
|
+
* })
|
|
290
|
+
* export class OrdersComponent {
|
|
291
|
+
* readonly model = TableFactory.createTableModel({ rows: [{ id: 1, customer: "Acme" }], properties: ["id", "customer"] });
|
|
292
|
+
* readonly api = signal<TableApi | undefined>(undefined);
|
|
293
|
+
* readonly ready = computed(() => !!this.api());
|
|
294
|
+
* constructor() {
|
|
295
|
+
* effect(() => this.api()?.scrollToIndex(0, 0));
|
|
296
|
+
* }
|
|
297
|
+
* }
|
|
298
|
+
*/
|
|
299
|
+
export declare class TableSignalComponent implements OnDestroy {
|
|
300
|
+
/** The table model. A new value re-creates the table; `undefined` = no table (e.g. while the data is loading). */
|
|
301
|
+
readonly tableModel: import("@angular/core").InputSignal<TableModelIf | undefined>;
|
|
302
|
+
/** The table options (default: `new TableOptions()`). A new value re-creates the table. */
|
|
303
|
+
readonly tableOptions: import("@angular/core").InputSignal<TableOptionsIf>;
|
|
304
|
+
/**
|
|
305
|
+
* `true` shows the loading overlay ("Loading…" with a CSS spinner) over the body, `false` hides it again – without
|
|
306
|
+
* re-creating the table. An overlay the app showed itself (`tableApi()?.showNoRowsOverlay()`) is not hidden.
|
|
307
|
+
*/
|
|
308
|
+
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
309
|
+
/** Delay of `mouseClicked` in ms (a double click reports only once). `0` = emitted synchronously. Default 150. */
|
|
310
|
+
readonly debounceMouseClickDelay: import("@angular/core").InputSignal<number>;
|
|
311
|
+
/**
|
|
312
|
+
* The {@link TableApi} of the current table, `undefined` before the first table and after the component was
|
|
313
|
+
* destroyed. Two-way binding: `[(tableApi)]="api"` with `api = signal<TableApi | undefined>(undefined)`; also
|
|
314
|
+
* `(tableApiChange)="…"` or `viewChild(TableSignalComponent)?.tableApi()`.
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* // template: <guiexpert-table-signal [tableModel]="model" [(tableApi)]="api" />
|
|
318
|
+
* // readonly api = signal<TableApi | undefined>(undefined);
|
|
319
|
+
* // readonly rowCount = computed(() => this.api()?.getDisplayedRowCount() ?? 0);
|
|
320
|
+
*/
|
|
321
|
+
readonly tableApi: import("@angular/core").ModelSignal<TableApi | undefined>;
|
|
322
|
+
/** Mouse click on a cell (debounced: `debounceMouseClickDelay`). */
|
|
323
|
+
readonly mouseClicked: import("@angular/core").OutputEmitterRef<GeMouseEvent>;
|
|
324
|
+
/** Mouse moved over the table. */
|
|
325
|
+
readonly mouseMoved: import("@angular/core").OutputEmitterRef<GeMouseEvent>;
|
|
326
|
+
/** Mouse dragged (button pressed). */
|
|
327
|
+
readonly mouseDragging: import("@angular/core").OutputEmitterRef<GeMouseEvent>;
|
|
328
|
+
/** Mouse drag ended. */
|
|
329
|
+
readonly mouseDraggingEnded: import("@angular/core").OutputEmitterRef<GeMouseEvent>;
|
|
330
|
+
/**
|
|
331
|
+
* Right click / context menu key on the table (`TableComponent`: `contextmenu`). Call
|
|
332
|
+
* `evt.originalEvent?.preventDefault()` to suppress the browser menu.
|
|
333
|
+
*/
|
|
334
|
+
readonly contextMenu: import("@angular/core").OutputEmitterRef<GeMouseEvent>;
|
|
335
|
+
/** The table was scrolled. */
|
|
336
|
+
readonly scroll: import("@angular/core").OutputEmitterRef<GeScrollEvent>;
|
|
337
|
+
/** Cell values were changed (editor, fill handle, paste, API …). */
|
|
338
|
+
readonly modelChanged: import("@angular/core").OutputEmitterRef<GeModelChangeEvent>;
|
|
339
|
+
/** The selection changed. */
|
|
340
|
+
readonly selectionChanged: import("@angular/core").OutputEmitterRef<SelectionModelIf>;
|
|
341
|
+
/** The focused cell changed. */
|
|
342
|
+
readonly focusChanged: import("@angular/core").OutputEmitterRef<FocusModelIf>;
|
|
343
|
+
/** Row checkboxes changed – the checked rows. */
|
|
344
|
+
readonly checkboxChanged: import("@angular/core").OutputEmitterRef<any[]>;
|
|
345
|
+
/** The table state changed (columns, sorting, scroll position …) – once after the changes settled. */
|
|
346
|
+
readonly stateChanged: import("@angular/core").OutputEmitterRef<GeStateChangeEvent>;
|
|
347
|
+
/** Row drag started. `evt.preventDefault()` cancels it. */
|
|
348
|
+
readonly rowDragStart: import("@angular/core").OutputEmitterRef<GeRowDragEvent<any>>;
|
|
349
|
+
/** Row drag: the drop target changed. */
|
|
350
|
+
readonly rowDragMove: import("@angular/core").OutputEmitterRef<GeRowDragEvent<any>>;
|
|
351
|
+
/** Row drag: dropped or cancelled. */
|
|
352
|
+
readonly rowDragEnd: import("@angular/core").OutputEmitterRef<GeRowDragEvent<any>>;
|
|
353
|
+
/** Batch edit: values were marked, written or discarded. */
|
|
354
|
+
readonly batchEditChanged: import("@angular/core").OutputEmitterRef<GeBatchEditEvent>;
|
|
355
|
+
/** Master/detail: a detail row was expanded or collapsed. */
|
|
356
|
+
readonly detailExpandedChanged: import("@angular/core").OutputEmitterRef<GeDetailEvent<any>>;
|
|
357
|
+
/** The cell editor opened, changed, committed or was cancelled. */
|
|
358
|
+
readonly editingChanged: import("@angular/core").OutputEmitterRef<GeEditEvent>;
|
|
359
|
+
/** The undo history changed. */
|
|
360
|
+
readonly undoStackChanged: import("@angular/core").OutputEmitterRef<GeUndoEvent>;
|
|
361
|
+
private readonly elementRef;
|
|
362
|
+
private readonly zone;
|
|
363
|
+
private readonly domService;
|
|
364
|
+
private readonly isBrowser;
|
|
365
|
+
private tableScope?;
|
|
366
|
+
private destroyed;
|
|
367
|
+
/** the overlay was shown by the `loading` input: `false` hides only that one */
|
|
368
|
+
private shownByInput;
|
|
369
|
+
private clickTimer?;
|
|
370
|
+
private pendingClick?;
|
|
371
|
+
private warnedExternalWrite;
|
|
372
|
+
/** Forwards the events of the core to the outputs (a separate object: no `onXxx` methods on the component). */
|
|
373
|
+
private readonly listener;
|
|
374
|
+
constructor();
|
|
375
|
+
/** Releases the table (all listeners, observers, renderer cleanups) and sets `tableApi` to `undefined`. */
|
|
376
|
+
ngOnDestroy(): void;
|
|
377
|
+
private currentApi;
|
|
378
|
+
private createTable;
|
|
379
|
+
private applyLoading;
|
|
380
|
+
private onMouseClicked;
|
|
381
|
+
private clearClickTimer;
|
|
382
|
+
/** events the core can still send while it is released (TableScope.destroy()) – never after the component */
|
|
383
|
+
private emitUnlessDestroyed;
|
|
384
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TableSignalComponent, never>;
|
|
385
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TableSignalComponent, "guiexpert-table-signal", never, {
|
|
386
|
+
"tableModel": {
|
|
387
|
+
"alias": "tableModel";
|
|
388
|
+
"required": false;
|
|
389
|
+
"isSignal": true;
|
|
390
|
+
};
|
|
391
|
+
"tableOptions": {
|
|
392
|
+
"alias": "tableOptions";
|
|
393
|
+
"required": false;
|
|
394
|
+
"isSignal": true;
|
|
395
|
+
};
|
|
396
|
+
"loading": {
|
|
397
|
+
"alias": "loading";
|
|
398
|
+
"required": false;
|
|
399
|
+
"isSignal": true;
|
|
400
|
+
};
|
|
401
|
+
"debounceMouseClickDelay": {
|
|
402
|
+
"alias": "debounceMouseClickDelay";
|
|
403
|
+
"required": false;
|
|
404
|
+
"isSignal": true;
|
|
405
|
+
};
|
|
406
|
+
"tableApi": {
|
|
407
|
+
"alias": "tableApi";
|
|
408
|
+
"required": false;
|
|
409
|
+
"isSignal": true;
|
|
410
|
+
};
|
|
411
|
+
}, {
|
|
412
|
+
"tableApi": "tableApiChange";
|
|
413
|
+
"mouseClicked": "mouseClicked";
|
|
414
|
+
"mouseMoved": "mouseMoved";
|
|
415
|
+
"mouseDragging": "mouseDragging";
|
|
416
|
+
"mouseDraggingEnded": "mouseDraggingEnded";
|
|
417
|
+
"contextMenu": "contextMenu";
|
|
418
|
+
"scroll": "scroll";
|
|
419
|
+
"modelChanged": "modelChanged";
|
|
420
|
+
"selectionChanged": "selectionChanged";
|
|
421
|
+
"focusChanged": "focusChanged";
|
|
422
|
+
"checkboxChanged": "checkboxChanged";
|
|
423
|
+
"stateChanged": "stateChanged";
|
|
424
|
+
"rowDragStart": "rowDragStart";
|
|
425
|
+
"rowDragMove": "rowDragMove";
|
|
426
|
+
"rowDragEnd": "rowDragEnd";
|
|
427
|
+
"batchEditChanged": "batchEditChanged";
|
|
428
|
+
"detailExpandedChanged": "detailExpandedChanged";
|
|
429
|
+
"editingChanged": "editingChanged";
|
|
430
|
+
"undoStackChanged": "undoStackChanged";
|
|
431
|
+
}, never, never, true, never>;
|
|
235
432
|
}
|