@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.99) – all MIT-licensed
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
- All thirteen with code and live demos: [gui.expert/whats-new](https://gui.expert/whats-new/) ·
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
- export { DetailRenderWrapperFactory, DetailRendererWrapper, DomService, RenderWrapperFactory, RendererWrapper, TableComponent };
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":";;;;;AAOA,IAAa,aAAb,MAAa,WAAU;CAErB,YACW,UAAmB;EAAnB,KAAA,WAAA;CAEX;CAEA,SAAS,IAAS,OAAe,OAAU;EACzC,KAAK,SAAS,SAAS,IAAI,OAAO,KAAK;EACvC,OAAO;CACT;CAGA,WAAW,QAAwB,MAAY;EAC7C,MAAM,MAAM,KAAK,SAAS,WAAW,IAAI;EACzC,KAAK,SAAS,YAAY,QAAQ,GAAG;EACrC,OAAO;CACT;CAGA,SAAS,KAAqB,OAAa;EACzC,IAAI,MAAM,SAAS,GAAG,GACpB,MAAM,MAAM,GAAG,CAAC,CAAC,SAAQ,MAAK,KAAK,SAAS,SAAS,KAAK,CAAC,CAAC;OAE5D,KAAK,SAAS,SAAS,KAAK,KAAK;EAEnC,OAAO;CACT;CAEA,YAAY,KAAqB,OAAa;EAC5C,IAAI,MAAM,SAAS,GAAG,GACpB,MAAM,MAAM,GAAG,CAAC,CAAC,SAAQ,MAAK,IAAI,UAAU,OAAO,CAAC,CAAC;OAErD,IAAI,UAAU,OAAO,KAAK;EAE5B,OAAO;CACT;CAEA,YAAY,QAAqB,OAAkB;EACjD,KAAK,SAAS,YAAY,QAAQ,KAAK;CACzC;CAEA,cAAiB,MAAY;EAC3B,OAAO,KAAK,SAAS,cAAc,IAAI;CACzC;CAEA,WAAW,MAAY;EACrB,OAAO,KAAK,SAAS,WAAW,IAAI;CACtC;CAEA,aAAa,KAAkB,KAAa,OAAa;EACvD,KAAK,SAAS,aAAa,KAAK,KAAK,KAAK;CAC5C;CAEA,gBAAgB,KAAkB,KAAW;EAC3C,KAAK,SAAS,gBAAgB,KAAK,GAAG;CACxC;CAxDW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,MAAA,CAAA,EAAA,OAAA,GAAA,UAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAV;EAAA,KAAA,QAAA,GAAA,sBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAU,YAFT;EAAM,CAAA;CAAA;;AAEP,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAHtB,MAAA;EAAW,MAAA,CAAA,EACV,YAAY,OACb,CAAA;;;;ACmCD,IAAa,iBAAb,MAAa,eAAc;CAsHzB,YACmB,UACA,YACA,MACA,YAAsB;EAHtB,KAAA,WAAA;EACA,KAAA,aAAA;EACA,KAAA,OAAA;EACA,KAAA,aAAA;EAvHnB,KAAA,aAAa,IAAI,QAAO;EAGxB,KAAA,SAAiC,IAAI,QAAO;EAG5C,KAAA,aAAoC,IAAI,QAAO;EAG/C,KAAA,gBAAuC,IAAI,QAAO;EAGlD,KAAA,qBAA4C,IAAI,QAAO;EAGvD,KAAA,cAAqC,IAAI,QAAO;EAGhD,KAAA,eAAsC,IAAI,QAAO;EAGjD,KAAA,eAA4C,IAAI,QAAO;EAGvD,KAAA,mBAA8C,IAAI,QAAO;EAGzD,KAAA,eAAsC,IAAI,QAAO;EAGjD,KAAA,kBAAkC,IAAI,QAAO;EAS7C,KAAA,eAA4C,IAAI,QAAO;EAQvD,KAAA,eAAwC,IAAI,QAAO;EAQnD,KAAA,cAAuC,IAAI,QAAO;EAQlD,KAAA,aAAsC,IAAI,QAAO;EAQjD,KAAA,mBAA8C,IAAI,QAAO;EAQzD,KAAA,wBAAgD,IAAI,QAAO;EAQ3D,KAAA,iBAAuC,IAAI,QAAO;EAMlD,KAAA,eAA+B,IAAI,aAAY;EAG/C,KAAA,0BAAkC;EAUlC,KAAA,UAAmB;EAEX,KAAA,qBAA4C,IAAI,QAAO;EAGvD,KAAA,QAAQ;EACR,KAAA,cAAc;EA6DtB,KAAA,mBAAyC,IAAI,QAAO;EAqF5C,KAAA,eAAe;CAzIvB;CAEA,mBAAmB,OAAuB;EACxC,KAAK,iBAAiB,KAAK,KAAK;CAClC;CAEA,eAAe,OAAmB;EAChC,KAAK,aAAa,KAAK,KAAK;CAC9B;CAEA,cAAc,KAAiB;EAC7B,KAAK,YAAY,KAAK,GAAG;CAC3B;CAEA,SAAS,KAAkB;EACzB,KAAK,OAAO,KAAK,GAAG;CACtB;CAEA,eAAe,KAAuB;EACpC,KAAK,aAAa,KAAK,GAAG;CAC5B;CAEA,eAAe,KAAmB;EAChC,KAAK,aAAa,KAAK,GAAG;CAC5B;CAEA,cAAc,KAAmB;EAC/B,KAAK,YAAY,KAAK,GAAG;CAC3B;CAEA,aAAa,KAAmB;EAC9B,KAAK,WAAW,KAAK,GAAG;CAC1B;CAEA,mBAAmB,KAAqB;EACtC,KAAK,iBAAiB,KAAK,GAAG;CAChC;CAEA,wBAAwB,KAAkB;EACxC,KAAK,sBAAsB,KAAK,GAAG;CACrC;CAEA,iBAAiB,KAAgB;EAC/B,KAAK,eAAe,KAAK,GAAG;CAC9B;CAUA,mBAAmB,KAAgB;EACjC,KAAK,iBAAiB,KAAK,GAAG;CAChC;CAEA,aAAa,KAAiB;EAC5B,KAAK,WAAW,KAAK,GAAG;CAC1B;CAGA,eAAe,KAAiB;EAC9B,KAAK,mBAAmB,KAAK,GAAG;CAClC;CAEA,kBAAkB,KAAU;EAC1B,KAAK,gBAAgB,KAAK,GAAG;CAC/B;CAEA,eAAe,KAAuB;EACpC,KAAK,aAAa,KAAK,GAAG;CAC5B;CAMA,YAAY,SAAsB;EAChC,IAAI,KAAK,gBAAgB,QAAQ,iBAAiB,QAAQ,kBACxD,KAAK,UAAS;OACT,IAAI,KAAK,eAAe,QAAQ,YACrC,KAAK,KAAK,wBAAwB,KAAK,aAAY,CAAE;CAEzD;CAEA,WAAQ;EACN,KAAK,cAAc;EACnB,KAAK,UAAS;EACd,KAAK,mBACF,KACC,aAAa,KAAK,uBAAuB,GACzC,gBAAgB,KAAK,KAAK,CAAC,CAC5B,CACA,WAAW,UAAS;GACnB,KAAK,KAAK,UAAS;IACjB,KAAK,aAAa,KAAK,KAAK;GAC9B,CAAC;EACH,CAAC;CACL;CAEA,cAAW;EACT,KAAK,QAAQ;EACb,KAAK,YAAY,QAAO;EACxB,KAAK,aAAa;CACpB;CAGA,gBAAgB,KAAiB;EAC/B,KAAK,cAAc,KAAK,GAAG;CAC7B;CAEA,mBAAmB,KAAiB;EAClC,KAAK,mBAAmB,KAAK,GAAG;CAClC;CAGQ,YAAS;EACf,KAAK,KAAK,kBAAkB,KAAK,KAAK,KAAK,IAAI,CAAC;CAClD;CAEQ,OAAI;EACV,KAAK,YAAY,QAAO;EACxB,KAAK,aAAa;EAClB,IAAI,KAAK,YAAY;GACnB,KAAK,aAAa,IAAI,WACpB,KAAK,WAAW,eAAe,KAAK,YAAY,KAAK,YAAY,KAAK,cAAc,IAAI;GAE1F,KAAK,WAAW,UAAS;GACzB,KAAK,eAAe;GACpB,KAAK,aAAY;GACjB,KAAK,WAAW,KAAK,KAAK,WAAW,OAAM,CAAE;EAC/C;CACF;CAKQ,eAAY;EAClB,IAAI,KAAK,SAAS;GAChB,KAAK,YAAY,mBAAkB;GACnC,KAAK,eAAe;EACtB,OAAO,IAAI,KAAK,cAAc;GAC5B,KAAK,YAAY,YAAW;GAC5B,KAAK,eAAe;EACtB;CACF;CA/QW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAc,MAAA;IAAA,EAAA,OAAA,GAAA,UAAA;IAAA,EAAA,OAAA,GAAA,WAAA;IAAA,EAAA,OAAA,GAAA,OAAA;IAAA,EAAA,OAAAA,WAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAd;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAc,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,YAAA;IAAA,cAAA;IAAA,yBAAA;IAAA,SAAA;GAAA;GAAA,SAAA;IAAA,YAAA;IAAA,QAAA;IAAA,YAAA;IAAA,eAAA;IAAA,oBAAA;IAAA,aAAA;IAAA,cAAA;IAAA,cAAA;IAAA,kBAAA;IAAA,cAAA;IAAA,iBAAA;IAAA,cAAA;IAAA,cAAA;IAAA,aAAA;IAAA,YAAA;IAAA,kBAAA;IAAA,uBAAA;IAAA,gBAAA;IAAA,kBAAA;GAAA;GAAA,WARd,CAAC,UAAU;GAAC,eAAA;GAAA,UAAA;GAAA,UACb;GAAE,UAAA;GAAA,QAAA,CAAA,opjCAAA;GAAA,cAAA,CAAA;IAAA,MAAA;IAAA,MAFF;GAAY,CAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AASX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA;EAZ1B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAiB,YACf;GAAI,SACP,CAAC,YAAY;GAAC,WACZ,CAAC,UAAU;GAAC,UACb;GAAE,eAIG,kBAAkB;GAAI,iBACpB,wBAAwB;GAAM,QAAA,CAAA,opjCAAA;EAAA,CAAA;;;;;;;;;EAI9C,YAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,QAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,YAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,eAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,oBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,aAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,kBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,iBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EASA,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAQA,cAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAQA,aAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAQA,YAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAQA,kBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAQA,uBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAQA,gBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;EAGA,YAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAGA,cAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAGA,yBAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAUA,SAAA,CAAA,EAAA,MAAA,MAAA,CAAA;EAmEA,kBAAA,CAAA,EAAA,MAAA,OAAA,CAAA;;;AC1MH,SAAS,aAAa,OAAU;CAC9B,OAAO,iBAAiB,cAAc,iBAAiB;AACzD;AAEA,IAAa,kBAAb,MAA4B;CAM1B,YACU,eACA,QACA,UACA,KACS,MAAY;EAJrB,KAAA,gBAAA;EACA,KAAA,SAAA;EACA,KAAA,WAAA;EACA,KAAA,MAAA;EACS,KAAA,OAAA;EARH,KAAA,SAAS,IAAI,aAAY;EACxB,KAAA,UAAU,IAAI,QAAO;CAStC;CAEA,OACE,SACA,UACA,aACA,WACA,WACA,WACA,YAAwB;EAExB,MAAM,eAAe,gBAAgB,KAAK,eAAe,EACvD,qBAAqB,KAAK,SAC3B,CAAA;EACD,aAAa,SAAS,QACpB,UACA,aACA,WACA,WACA,SAAS;EAUX,AAPqB,OAAO,KAAK,aAAa,QAAQ,CAAC,CACpD,QAAO,QAAM;GACZ,MAAM,QAAS,aAAa,SAAiB;GAC7C,OAAO,SAAS,aAAa,KAAK;EACpC,CAE0D,CAAA,CAAa,KAAI,QAAS,aAAa,SAAiB,IACpH,CAAA,CAAY,SAAQ,QAAO,IACxB,KACC,UAAU,KAAK,OAAO,CAAC,CACxB,CACA,WAAW,UAAc;GACxB,KAAK,OAAO,KAAK,KAAK;EACxB,CAAC,CAAC;EAGJ,IAAI,SAAS,QAAQ,YAAY,aAAa,SAAS,aAAa;EAEpE,KAAK,OAAO,WAAW,aAAa,QAAQ;EAE5C,KAAK,KAAK,UAAS;GACjB,KAAK,IAAI,cAAa;EACxB,CAAC;EAED,aAAY;GAEV,KAAK,OAAO,WAAW,aAAa,QAAQ;GAC5C,KAAK,QAAQ,KAAK,KAAK,IAAG,CAAE;EAC9B;CACF;AAGD;AC9ED,IAAa,uBAAb,MAAa,qBAAoB;CAE/B,YACmB,QACA,UACA,MAAY;EAFZ,KAAA,SAAA;EACA,KAAA,WAAA;EACA,KAAA,OAAA;CAEnB;CAEA,OACE,eACA,KAAsB;EAEtB,OAAO,IAAI,gBAAgB,eAAe,KAAK,QAAQ,KAAK,UAAU,KAAK,KAAK,IAAI;CACtF;CAdW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAoB,MAAA;IAAA,EAAA,OAAA,GAAA,eAAA;IAAA,EAAA,OAAA,GAAA,oBAAA;IAAA,EAAA,OAAA,GAAA,OAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAApB;EAAA,KAAA,QAAA,GAAA,sBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAoB,YAFnB;EAAM,CAAA;CAAA;;AAEP,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EAHhC,MAAA;EAAW,MAAA,CAAA,EACV,YAAY,OACb,CAAA;;;;;;;;ACID,IAAa,wBAAb,MAAkC;CAEhC,YACmB,eACA,QACA,UACA,MAAY;EAHZ,KAAA,gBAAA;EACA,KAAA,SAAA;EACA,KAAA,WAAA;EACA,KAAA,OAAA;CAEnB;CAEA,OAAO,WAA2B,KAAQ,SAAiC;EACzE,OAAO,KAAK,KAAK,UAAS;GACxB,MAAM,eAAe,gBAAgB,KAAK,eAAe,EAAE,qBAAqB,KAAK,SAAQ,CAAE;GAC/F,aAAa,SAAS,UAAU,KAAK,OAAO;GAC5C,UAAU,YAAY,aAAa,SAAS,aAAa;GACzD,KAAK,OAAO,WAAW,aAAa,QAAQ;GAC5C,aAAa,kBAAkB,cAAa;GAC5C,aAAa,KAAK,KAAK,UAAS;IAC9B,KAAK,OAAO,WAAW,aAAa,QAAQ;IAC5C,aAAa,QAAO;GACtB,CAAC;EACH,CAAC;CACH;AACD;ACjBD,IAAa,6BAAb,MAAa,2BAA0B;CAErC,YACmB,QACA,UACA,MAAY;EAFZ,KAAA,SAAA;EACA,KAAA,WAAA;EACA,KAAA,OAAA;CAEnB;CAEA,OAAgB,eAAiD;EAC/D,OAAO,IAAI,sBAAyB,eAAe,KAAK,QAAQ,KAAK,UAAU,KAAK,IAAI;CAC1F;CAXW;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA0B,MAAA;IAAA,EAAA,OAAA,GAAA,eAAA;IAAA,EAAA,OAAA,GAAA,oBAAA;IAAA,EAAA,OAAA,GAAA,OAAA;GAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA1B;EAAA,KAAA,QAAA,GAAA,sBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA0B,YAFzB;EAAM,CAAA;CAAA;;AAEP,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA0B,YAAA,CAAA;EAHtC,MAAA;EAAW,MAAA,CAAA,EACV,YAAY,OACb,CAAA"}
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.99",
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.99"
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
  }