@sumaris-net/ngx-components 18.23.55-beta.4 → 18.23.55-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { DestroyRef, Directive, inject, input } from '@angular/core';
1
+ import { DestroyRef, Directive, inject, input, signal } from '@angular/core';
2
2
  import { APP_CELL_SELECTION_SERVICE_TOKEN } from './cell-selection.service';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { filter } from 'rxjs/operators';
@@ -7,33 +7,34 @@ import * as i0 from "@angular/core";
7
7
  export class CellIdentifierDirective {
8
8
  cellId = input.required({ alias: 'appCellId' });
9
9
  isInitialized = false;
10
- isCellSelected = false;
11
- isMultipleCellsSelected = false;
12
- isDragging = false;
13
- service = inject(APP_CELL_SELECTION_SERVICE_TOKEN);
10
+ isCellSelected = signal(false);
11
+ isMultipleCellsSelected = signal(false);
12
+ isDragging = signal(false);
13
+ // Optional service dependency
14
+ service = inject(APP_CELL_SELECTION_SERVICE_TOKEN, { optional: true });
14
15
  destroyRef = inject(DestroyRef);
15
16
  ngOnInit() {
16
17
  // Listen to service selection changes and emit
17
- this.service.selectionChangeSubject
18
+ this.service?.selectionChangeSubject
18
19
  .pipe(filter(() => this.isInitialized), takeUntilDestroyed(this.destroyRef))
19
20
  .subscribe(() => {
20
- this.isCellSelected = this.service.isCellSelected(this.cellId());
21
- this.isMultipleCellsSelected = arraySize(this.service.selectedCells) > 1;
21
+ this.isCellSelected.set(this.service.isCellSelected(this.cellId()));
22
+ this.isMultipleCellsSelected.set(arraySize(this.service.selectedCells) > 1);
22
23
  });
23
24
  this.isInitialized = true;
24
25
  }
25
26
  async handleMouseDown(event) {
26
27
  if (!this.isInitialized)
27
28
  return;
28
- await this.service.handleCellMouseDown(event, this.cellId());
29
+ await this.service?.handleCellMouseDown(event, this.cellId());
29
30
  }
30
31
  async handleMouseEnter(event) {
31
32
  if (!this.isInitialized)
32
33
  return;
33
- await this.service.handleCellMouseEnter(event, this.cellId());
34
+ await this.service?.handleCellMouseEnter(event, this.cellId());
34
35
  }
35
36
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellIdentifierDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
36
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CellIdentifierDirective, isStandalone: true, selector: "[appCellId]", inputs: { cellId: { classPropertyName: "cellId", publicName: "appCellId", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "mousedown": "handleMouseDown($event)", "mouseenter": "handleMouseEnter($event)" }, properties: { "class.cell-selected": "isCellSelected", "class.cell-multiple-selected": "isMultipleCellsSelected", "class.cell-dragging": "isDragging", "attr.data-row-id": "cellId().rowId", "attr.data-column-name": "cellId().columnName" } }, ngImport: i0 });
37
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CellIdentifierDirective, isStandalone: true, selector: "[appCellId]", inputs: { cellId: { classPropertyName: "cellId", publicName: "appCellId", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "mousedown": "handleMouseDown($event)", "mouseenter": "handleMouseEnter($event)" }, properties: { "class.cell-selected": "isCellSelected()", "class.cell-multiple-selected": "isMultipleCellsSelected()", "class.cell-dragging": "isDragging()", "attr.data-row-id": "cellId().rowId", "attr.data-column-name": "cellId().columnName" } }, ngImport: i0 });
37
38
  }
38
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellIdentifierDirective, decorators: [{
39
40
  type: Directive,
@@ -43,12 +44,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
43
44
  host: {
44
45
  '(mousedown)': 'handleMouseDown($event)',
45
46
  '(mouseenter)': 'handleMouseEnter($event)',
46
- '[class.cell-selected]': 'isCellSelected',
47
- '[class.cell-multiple-selected]': 'isMultipleCellsSelected',
48
- '[class.cell-dragging]': 'isDragging',
47
+ '[class.cell-selected]': 'isCellSelected()',
48
+ '[class.cell-multiple-selected]': 'isMultipleCellsSelected()',
49
+ '[class.cell-dragging]': 'isDragging()',
49
50
  '[attr.data-row-id]': 'cellId().rowId',
50
51
  '[attr.data-column-name]': 'cellId().columnName',
51
52
  },
52
53
  }]
53
54
  }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1pZGVudGlmaWVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvY2VsbC1zZWxlY3Rpb24vY2VsbC1pZGVudGlmaWVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZTVDLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUUzQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFWixPQUFPLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDbkQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRCxRQUFRO1FBQ04sK0NBQStDO1FBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCO2FBQ2hDLElBQUksQ0FDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUNoQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3BDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFUyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQWlCO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDaEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQWlCO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDaEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO3dHQWpDVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFibkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixhQUFhLEVBQUUseUJBQXlCO3dCQUN4QyxjQUFjLEVBQUUsMEJBQTBCO3dCQUMxQyx1QkFBdUIsRUFBRSxnQkFBZ0I7d0JBQ3pDLGdDQUFnQyxFQUFFLHlCQUF5Qjt3QkFDM0QsdUJBQXVCLEVBQUUsWUFBWTt3QkFDckMsb0JBQW9CLEVBQUUsZ0JBQWdCO3dCQUN0Qyx5QkFBeUIsRUFBRSxxQkFBcUI7cUJBQ2pEO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFQUF9DRUxMX1NFTEVDVElPTl9TRVJWSUNFX1RPS0VOLCBJQ2VsbElkIH0gZnJvbSAnLi9jZWxsLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGFycmF5U2l6ZSB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBDZWxsSWRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICcobW91c2Vkb3duKSc6ICdoYW5kbGVNb3VzZURvd24oJGV2ZW50KScsXG4gICAgJyhtb3VzZWVudGVyKSc6ICdoYW5kbGVNb3VzZUVudGVyKCRldmVudCknLFxuICAgICdbY2xhc3MuY2VsbC1zZWxlY3RlZF0nOiAnaXNDZWxsU2VsZWN0ZWQnLFxuICAgICdbY2xhc3MuY2VsbC1tdWx0aXBsZS1zZWxlY3RlZF0nOiAnaXNNdWx0aXBsZUNlbGxzU2VsZWN0ZWQnLFxuICAgICdbY2xhc3MuY2VsbC1kcmFnZ2luZ10nOiAnaXNEcmFnZ2luZycsXG4gICAgJ1thdHRyLmRhdGEtcm93LWlkXSc6ICdjZWxsSWQoKS5yb3dJZCcsXG4gICAgJ1thdHRyLmRhdGEtY29sdW1uLW5hbWVdJzogJ2NlbGxJZCgpLmNvbHVtbk5hbWUnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBDZWxsSWRlbnRpZmllckRpcmVjdGl2ZTxDIGV4dGVuZHMgSUNlbGxJZCA9IElDZWxsSWQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2VsbElkID0gaW5wdXQucmVxdWlyZWQ8Qz4oeyBhbGlhczogJ2FwcENlbGxJZCcgfSk7XG5cbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc0NlbGxTZWxlY3RlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgaXNNdWx0aXBsZUNlbGxzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2UgPSBpbmplY3QoQVBQX0NFTExfU0VMRUNUSU9OX1NFUlZJQ0VfVE9LRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gTGlzdGVuIHRvIHNlcnZpY2Ugc2VsZWN0aW9uIGNoYW5nZXMgYW5kIGVtaXRcbiAgICB0aGlzLnNlcnZpY2Uuc2VsZWN0aW9uQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzSW5pdGlhbGl6ZWQpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDZWxsU2VsZWN0ZWQgPSB0aGlzLnNlcnZpY2UuaXNDZWxsU2VsZWN0ZWQodGhpcy5jZWxsSWQoKSk7XG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZUNlbGxzU2VsZWN0ZWQgPSBhcnJheVNpemUodGhpcy5zZXJ2aWNlLnNlbGVjdGVkQ2VsbHMpID4gMTtcbiAgICAgIH0pO1xuICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2UuaGFuZGxlQ2VsbE1vdXNlRG93bihldmVudCwgdGhpcy5jZWxsSWQoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmhhbmRsZUNlbGxNb3VzZUVudGVyKGV2ZW50LCB0aGlzLmNlbGxJZCgpKTtcbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1pZGVudGlmaWVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvY2VsbC1zZWxlY3Rpb24vY2VsbC1pZGVudGlmaWVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0NBQWdDLEVBQVcsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWU1QyxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFM0MsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUNwQixjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJDLDhCQUE4QjtJQUNiLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWpELFFBQVE7UUFDTiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxzQkFBc0I7YUFDakMsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQ2hDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDcEM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVTLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBaUI7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUNoQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFUyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBaUI7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUNoQyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7d0dBbENVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQWJuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLGFBQWEsRUFBRSx5QkFBeUI7d0JBQ3hDLGNBQWMsRUFBRSwwQkFBMEI7d0JBQzFDLHVCQUF1QixFQUFFLGtCQUFrQjt3QkFDM0MsZ0NBQWdDLEVBQUUsMkJBQTJCO3dCQUM3RCx1QkFBdUIsRUFBRSxjQUFjO3dCQUN2QyxvQkFBb0IsRUFBRSxnQkFBZ0I7d0JBQ3RDLHlCQUF5QixFQUFFLHFCQUFxQjtxQkFDakQ7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9UT0tFTiwgSUNlbGxJZCB9IGZyb20gJy4vY2VsbC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBhcnJheVNpemUgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwQ2VsbElkXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICAnKG1vdXNlZG93biknOiAnaGFuZGxlTW91c2VEb3duKCRldmVudCknLFxuICAgICcobW91c2VlbnRlciknOiAnaGFuZGxlTW91c2VFbnRlcigkZXZlbnQpJyxcbiAgICAnW2NsYXNzLmNlbGwtc2VsZWN0ZWRdJzogJ2lzQ2VsbFNlbGVjdGVkKCknLFxuICAgICdbY2xhc3MuY2VsbC1tdWx0aXBsZS1zZWxlY3RlZF0nOiAnaXNNdWx0aXBsZUNlbGxzU2VsZWN0ZWQoKScsXG4gICAgJ1tjbGFzcy5jZWxsLWRyYWdnaW5nXSc6ICdpc0RyYWdnaW5nKCknLFxuICAgICdbYXR0ci5kYXRhLXJvdy1pZF0nOiAnY2VsbElkKCkucm93SWQnLFxuICAgICdbYXR0ci5kYXRhLWNvbHVtbi1uYW1lXSc6ICdjZWxsSWQoKS5jb2x1bW5OYW1lJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ2VsbElkZW50aWZpZXJEaXJlY3RpdmU8QyBleHRlbmRzIElDZWxsSWQgPSBJQ2VsbElkPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNlbGxJZCA9IGlucHV0LnJlcXVpcmVkPEM+KHsgYWxpYXM6ICdhcHBDZWxsSWQnIH0pO1xuXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgaXNDZWxsU2VsZWN0ZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNNdWx0aXBsZUNlbGxzU2VsZWN0ZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNEcmFnZ2luZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLy8gT3B0aW9uYWwgc2VydmljZSBkZXBlbmRlbmN5XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChBUFBfQ0VMTF9TRUxFQ1RJT05fU0VSVklDRV9UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIExpc3RlbiB0byBzZXJ2aWNlIHNlbGVjdGlvbiBjaGFuZ2VzIGFuZCBlbWl0XG4gICAgdGhpcy5zZXJ2aWNlPy5zZWxlY3Rpb25DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNJbml0aWFsaXplZCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0NlbGxTZWxlY3RlZC5zZXQodGhpcy5zZXJ2aWNlLmlzQ2VsbFNlbGVjdGVkKHRoaXMuY2VsbElkKCkpKTtcbiAgICAgICAgdGhpcy5pc011bHRpcGxlQ2VsbHNTZWxlY3RlZC5zZXQoYXJyYXlTaXplKHRoaXMuc2VydmljZS5zZWxlY3RlZENlbGxzKSA+IDEpO1xuICAgICAgfSk7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuc2VydmljZT8uaGFuZGxlQ2VsbE1vdXNlRG93bihldmVudCwgdGhpcy5jZWxsSWQoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlPy5oYW5kbGVDZWxsTW91c2VFbnRlcihldmVudCwgdGhpcy5jZWxsSWQoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Directive, Pipe, Injectable, EventEmitter, Output, Optional, Inject, inject, NgModule, forwardRef, booleanAttribute, ViewChildren, Input, ChangeDetectionStrategy, Component, HostListener, HostBinding, ElementRef, numberAttribute, ViewChild, ANIMATION_MODULE_TYPE, RendererStyleFlags2, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef, Self, ViewEncapsulation, APP_INITIALIZER, DestroyRef, input, output, Renderer2, effect, SecurityContext, viewChildren, viewChild, signal, model, computed, untracked } from '@angular/core';
2
+ import { InjectionToken, Directive, Pipe, Injectable, EventEmitter, Output, Optional, Inject, inject, NgModule, forwardRef, booleanAttribute, ViewChildren, Input, ChangeDetectionStrategy, Component, HostListener, HostBinding, ElementRef, numberAttribute, ViewChild, ANIMATION_MODULE_TYPE, RendererStyleFlags2, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef, Self, ViewEncapsulation, APP_INITIALIZER, DestroyRef, input, output, Renderer2, effect, signal, SecurityContext, viewChildren, viewChild, model, computed, untracked } from '@angular/core';
3
3
  import { firstValueFrom, shareReplay, tap, of, timer, Subject, merge, delay, isObservable, from, Subscription, BehaviorSubject, fromEvent, noop as noop$9, Observable, forkJoin, timeout, defer, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, mergeMap as mergeMap$1, switchMap as switchMap$1, EMPTY, interval } from 'rxjs';
4
4
  import { catchError, map, filter, takeUntil, first, switchMap, tap as tap$1, throttleTime, debounceTime, startWith, distinctUntilChanged, mergeMap, skip, finalize, distinctUntilKeyChanged, take } from 'rxjs/operators';
5
5
  import * as cloneImported from 'clone';
@@ -29393,33 +29393,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
29393
29393
  class CellIdentifierDirective {
29394
29394
  cellId = input.required({ alias: 'appCellId' });
29395
29395
  isInitialized = false;
29396
- isCellSelected = false;
29397
- isMultipleCellsSelected = false;
29398
- isDragging = false;
29399
- service = inject(APP_CELL_SELECTION_SERVICE_TOKEN);
29396
+ isCellSelected = signal(false);
29397
+ isMultipleCellsSelected = signal(false);
29398
+ isDragging = signal(false);
29399
+ // Optional service dependency
29400
+ service = inject(APP_CELL_SELECTION_SERVICE_TOKEN, { optional: true });
29400
29401
  destroyRef = inject(DestroyRef);
29401
29402
  ngOnInit() {
29402
29403
  // Listen to service selection changes and emit
29403
- this.service.selectionChangeSubject
29404
+ this.service?.selectionChangeSubject
29404
29405
  .pipe(filter(() => this.isInitialized), takeUntilDestroyed(this.destroyRef))
29405
29406
  .subscribe(() => {
29406
- this.isCellSelected = this.service.isCellSelected(this.cellId());
29407
- this.isMultipleCellsSelected = arraySize(this.service.selectedCells) > 1;
29407
+ this.isCellSelected.set(this.service.isCellSelected(this.cellId()));
29408
+ this.isMultipleCellsSelected.set(arraySize(this.service.selectedCells) > 1);
29408
29409
  });
29409
29410
  this.isInitialized = true;
29410
29411
  }
29411
29412
  async handleMouseDown(event) {
29412
29413
  if (!this.isInitialized)
29413
29414
  return;
29414
- await this.service.handleCellMouseDown(event, this.cellId());
29415
+ await this.service?.handleCellMouseDown(event, this.cellId());
29415
29416
  }
29416
29417
  async handleMouseEnter(event) {
29417
29418
  if (!this.isInitialized)
29418
29419
  return;
29419
- await this.service.handleCellMouseEnter(event, this.cellId());
29420
+ await this.service?.handleCellMouseEnter(event, this.cellId());
29420
29421
  }
29421
29422
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellIdentifierDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29422
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CellIdentifierDirective, isStandalone: true, selector: "[appCellId]", inputs: { cellId: { classPropertyName: "cellId", publicName: "appCellId", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "mousedown": "handleMouseDown($event)", "mouseenter": "handleMouseEnter($event)" }, properties: { "class.cell-selected": "isCellSelected", "class.cell-multiple-selected": "isMultipleCellsSelected", "class.cell-dragging": "isDragging", "attr.data-row-id": "cellId().rowId", "attr.data-column-name": "cellId().columnName" } }, ngImport: i0 });
29423
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CellIdentifierDirective, isStandalone: true, selector: "[appCellId]", inputs: { cellId: { classPropertyName: "cellId", publicName: "appCellId", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "mousedown": "handleMouseDown($event)", "mouseenter": "handleMouseEnter($event)" }, properties: { "class.cell-selected": "isCellSelected()", "class.cell-multiple-selected": "isMultipleCellsSelected()", "class.cell-dragging": "isDragging()", "attr.data-row-id": "cellId().rowId", "attr.data-column-name": "cellId().columnName" } }, ngImport: i0 });
29423
29424
  }
29424
29425
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CellIdentifierDirective, decorators: [{
29425
29426
  type: Directive,
@@ -29429,9 +29430,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
29429
29430
  host: {
29430
29431
  '(mousedown)': 'handleMouseDown($event)',
29431
29432
  '(mouseenter)': 'handleMouseEnter($event)',
29432
- '[class.cell-selected]': 'isCellSelected',
29433
- '[class.cell-multiple-selected]': 'isMultipleCellsSelected',
29434
- '[class.cell-dragging]': 'isDragging',
29433
+ '[class.cell-selected]': 'isCellSelected()',
29434
+ '[class.cell-multiple-selected]': 'isMultipleCellsSelected()',
29435
+ '[class.cell-dragging]': 'isDragging()',
29435
29436
  '[attr.data-row-id]': 'cellId().rowId',
29436
29437
  '[attr.data-column-name]': 'cellId().columnName',
29437
29438
  },