@sumaris-net/ngx-components 18.23.0-beta.0 → 18.23.0-beta.1

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,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, Component, ChangeDetectionStrategy, Input, ViewChildren, HostBinding, HostListener, ElementRef, numberAttribute, ViewChild, ANIMATION_MODULE_TYPE, RendererStyleFlags2, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef, Self, ViewEncapsulation, APP_INITIALIZER, SecurityContext, viewChild, signal, input, model, computed, effect, untracked, DestroyRef, output, Renderer2 } from '@angular/core';
2
+ import { InjectionToken, Directive, Pipe, Injectable, EventEmitter, Output, Optional, Inject, inject, NgModule, forwardRef, booleanAttribute, Component, ChangeDetectionStrategy, Input, ViewChildren, HostBinding, HostListener, ElementRef, numberAttribute, ViewChild, ANIMATION_MODULE_TYPE, RendererStyleFlags2, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef, Self, ViewEncapsulation, APP_INITIALIZER, input, output, Renderer2, DestroyRef, SecurityContext, viewChild, signal, model, computed, effect, 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, interval, mergeMap as mergeMap$1, switchMap as switchMap$1, EMPTY } from 'rxjs';
4
4
  import { catchError, map, filter, takeUntil, first, switchMap, tap as tap$1, throttleTime, debounceTime, startWith, distinctUntilChanged, mergeMap, skip, finalize, distinctUntilKeyChanged, bufferWhen, take } from 'rxjs/operators';
5
5
  import * as cloneImported from 'clone';
@@ -153,11 +153,11 @@ import * as i3$5 from '@angular/cdk/clipboard';
153
153
  import { select } from '@rx-angular/state/selections';
154
154
  import { isDataSource, SelectionModel } from '@angular/cdk/collections';
155
155
  import { Camera, CameraResultType } from '@capacitor/camera';
156
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
156
157
  import { Geolocation } from '@capacitor/geolocation';
157
158
  import * as i1$8 from '@e-is/ngx-material-table';
158
159
  import { ValidatorService, TableDataSource, AsyncTableDataSource } from '@e-is/ngx-material-table';
159
160
  import 'moment-timezone';
160
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
161
161
 
162
162
  const ENVIRONMENT = new InjectionToken('ENV');
163
163
  class Environment {
@@ -28364,6 +28364,414 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28364
28364
  }]
28365
28365
  }] });
28366
28366
 
28367
+ const APP_CELL_SELECTION_SERVICE_TOKEN = new InjectionToken('CellSelectionService');
28368
+ const APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN = new InjectionToken('CellSelectionServiceConfig');
28369
+ /**
28370
+ * Service to manage cell selection state across multiple directive instances.
28371
+ * This service should be provided at the component level (not root) to ensure
28372
+ * proper isolation between different table instances.
28373
+ */
28374
+ class CellSelectionService {
28375
+ // Configuration
28376
+ config = inject(APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN, { optional: true });
28377
+ selectableColumns = [];
28378
+ // Selection state
28379
+ selectedCells = [];
28380
+ selectionStartCell = null;
28381
+ isSelecting = false;
28382
+ // Drag state
28383
+ draggedCells = [];
28384
+ dragStartCell = null;
28385
+ isDragging = false;
28386
+ // Observables
28387
+ selectionChangeSubject = new Subject();
28388
+ selectionRightClickSubject = new Subject();
28389
+ // Overridable methods
28390
+ _equals;
28391
+ _new;
28392
+ constructor() {
28393
+ this._equals = this.config?.equals;
28394
+ this._new = this.config?.new;
28395
+ }
28396
+ // Override method
28397
+ equals(cell1, cell2) {
28398
+ return this._equals ? this._equals(cell1, cell2) : cell1?.rowId === cell2?.rowId && cell1?.columnName === cell2?.columnName;
28399
+ }
28400
+ // Override method
28401
+ new(cellId) {
28402
+ return this._new ? this._new(cellId) : cellId;
28403
+ }
28404
+ isCellSelected(cellId) {
28405
+ return this.selectedCells.some((selectedCell) => this.equals(selectedCell, cellId));
28406
+ }
28407
+ isCellDragged(cellId) {
28408
+ return this.draggedCells.some((selectedCell) => this.equals(selectedCell, cellId));
28409
+ }
28410
+ // Core selection logic (moved from CellIdentifierDirective)
28411
+ async handleCellMouseDown(event, cellId) {
28412
+ event.preventDefault();
28413
+ if (event.button === 2) {
28414
+ event.stopPropagation();
28415
+ this.selectionRightClickSubject.next(event);
28416
+ return;
28417
+ }
28418
+ const isCtrlKey = event.ctrlKey || event.metaKey;
28419
+ const isShiftKey = event.shiftKey;
28420
+ if (!isShiftKey && !isCtrlKey) {
28421
+ this.startSelection(cellId);
28422
+ // this.startDragSelection(cellId);
28423
+ }
28424
+ else if (isCtrlKey) {
28425
+ this.toggleCellSelection(cellId);
28426
+ }
28427
+ else if (isShiftKey) {
28428
+ this.selectRange(cellId);
28429
+ }
28430
+ }
28431
+ async handleCellMouseEnter(event, cellId) {
28432
+ // TODO check if next cell can be selected
28433
+ if (this.isSelecting && this.selectionStartCell) {
28434
+ this.updateSelection(cellId);
28435
+ }
28436
+ else if (this.isDragging && this.dragStartCell) {
28437
+ this.updateDraggedCells(cellId);
28438
+ }
28439
+ }
28440
+ endMouseMove() {
28441
+ if (this.isSelecting) {
28442
+ this.resetSelectionState();
28443
+ }
28444
+ else if (this.isDragging) {
28445
+ this.resetDragState();
28446
+ }
28447
+ }
28448
+ // Private helper methods
28449
+ startSelection(cellId) {
28450
+ this.selectionStartCell = cellId;
28451
+ this.isSelecting = true;
28452
+ this.emitSelection([cellId], false, false);
28453
+ }
28454
+ startDragSelection(cellId) {
28455
+ this.dragStartCell = cellId;
28456
+ this.isDragging = true;
28457
+ this.draggedCells = [cellId];
28458
+ // this.emitSelection([cellId], false, false);
28459
+ }
28460
+ toggleCellSelection(cellId) {
28461
+ const currentCells = [...this.selectedCells];
28462
+ const cellIndex = currentCells.findIndex((c) => this.equals(c, cellId));
28463
+ if (cellIndex >= 0) {
28464
+ currentCells.splice(cellIndex, 1);
28465
+ }
28466
+ else {
28467
+ currentCells.push(cellId);
28468
+ }
28469
+ this.emitSelection(currentCells, false, true);
28470
+ }
28471
+ selectRange(endCell) {
28472
+ const rangeCells = this.calculateRangeCells(endCell);
28473
+ this.emitSelection(rangeCells, true, false);
28474
+ }
28475
+ updateSelection(currentCell) {
28476
+ const rangeCells = this.calculateRangeBetweenCells(this.selectionStartCell, currentCell);
28477
+ this.emitSelection(rangeCells, true, false);
28478
+ }
28479
+ updateDraggedCells(currentCell) {
28480
+ // this.draggedCells.set(rangeCells);
28481
+ }
28482
+ emitSelection(cells, isRange, isToggle) {
28483
+ this.selectedCells = cells;
28484
+ this.selectionChangeSubject.next({
28485
+ selectedCells: cells,
28486
+ isRangeSelection: isRange,
28487
+ isToggleSelection: isToggle,
28488
+ });
28489
+ }
28490
+ calculateRangeCells(endCell) {
28491
+ if (isEmptyArray(this.selectedCells)) {
28492
+ return [endCell];
28493
+ }
28494
+ const lastSelectedCell = this.findFirstSelectedCell(this.selectedCells);
28495
+ return this.calculateRangeBetweenCells(lastSelectedCell, endCell);
28496
+ }
28497
+ calculateRangeBetweenCells(startCell, endCell) {
28498
+ // Get first cell coordinates, then add this cell as a range
28499
+ const firstRowId = Math.min(startCell.rowId, endCell.rowId);
28500
+ const lastRowId = Math.max(startCell.rowId, endCell.rowId);
28501
+ const startColumnIndex = this.selectableColumns.indexOf(startCell.columnName);
28502
+ const endColumnIndex = this.selectableColumns.indexOf(endCell.columnName);
28503
+ const firstColumnIndex = Math.min(startColumnIndex, endColumnIndex);
28504
+ const lastColumnIndex = Math.max(startColumnIndex, endColumnIndex);
28505
+ // Iterate columns and rows
28506
+ const rangeCells = [];
28507
+ for (let i = firstColumnIndex; i <= lastColumnIndex; i++) {
28508
+ const columnName = this.selectableColumns[i];
28509
+ for (let rowId = firstRowId; rowId <= lastRowId; rowId++) {
28510
+ rangeCells.push(this.new({ rowId: rowId, columnName: columnName }));
28511
+ }
28512
+ }
28513
+ return rangeCells;
28514
+ }
28515
+ resetSelectionState() {
28516
+ this.selectionStartCell = null;
28517
+ this.isSelecting = false;
28518
+ }
28519
+ resetDragState() {
28520
+ this.dragStartCell = null;
28521
+ this.isDragging = false;
28522
+ this.draggedCells = [];
28523
+ }
28524
+ findFirstSelectedCell(selectedCells) {
28525
+ // Find the cell with the lowest rowId and columnIndex
28526
+ return this.findSelectedCell(selectedCells, Math.min(...selectedCells.map((cell) => cell.rowId)), Math.min(...selectedCells.map((cell) => this.selectableColumns.indexOf(cell.columnName))));
28527
+ }
28528
+ findLastSelectedCell(selectedCells) {
28529
+ // Find the cell with the lowest rowId and columnIndex
28530
+ return this.findSelectedCell(selectedCells, Math.max(...selectedCells.map((cell) => cell.rowId)), Math.max(...selectedCells.map((cell) => this.selectableColumns.indexOf(cell.columnName))));
28531
+ }
28532
+ findSelectedCell(selectedCells, rowId, columnIndex) {
28533
+ // Find the cell with the current indexes
28534
+ return selectedCells.filter((cell) => cell.rowId === rowId && cell.columnName === this.selectableColumns[columnIndex])[0];
28535
+ }
28536
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
28537
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionService });
28538
+ }
28539
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionService, decorators: [{
28540
+ type: Injectable
28541
+ }], ctorParameters: () => [] });
28542
+
28543
+ class CellSelectionDirective {
28544
+ // Inputs
28545
+ // eslint-disable-next-line @angular-eslint/no-input-rename
28546
+ selectableColumns = input.required({ alias: 'appSelectableColumns' });
28547
+ // Outputs
28548
+ // eslint-disable-next-line @angular-eslint/no-output-rename
28549
+ selectionChange = output({ alias: 'appCellSelectionChange' });
28550
+ // eslint-disable-next-line @angular-eslint/no-output-rename
28551
+ rightClick = output({ alias: 'appCellRightClick' });
28552
+ // Inject service by token
28553
+ service = inject(APP_CELL_SELECTION_SERVICE_TOKEN);
28554
+ elementRef = inject(ElementRef);
28555
+ renderer = inject(Renderer2);
28556
+ destroyRef = inject(DestroyRef);
28557
+ overlayElements = [];
28558
+ constructor() { }
28559
+ ngOnInit() {
28560
+ // Initialize service with selectable columns
28561
+ this.setupServiceConfiguration();
28562
+ // Setup global mouseup listener
28563
+ this.setupGlobalMouseEvents();
28564
+ // Setup keyboard listener for copy (for test)
28565
+ // this.setupCopyListener();
28566
+ }
28567
+ setupServiceConfiguration() {
28568
+ // Pass selectable columns to service
28569
+ this.service.selectableColumns = this.selectableColumns();
28570
+ // Listen to service selection changes and emit
28571
+ this.service.selectionChangeSubject
28572
+ .pipe(takeUntilDestroyed(this.destroyRef))
28573
+ .subscribe((event) => this.selectionChange.emit(event));
28574
+ // Listen to right-click event
28575
+ this.service.selectionRightClickSubject.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => this.rightClick.emit(event));
28576
+ }
28577
+ setupGlobalMouseEvents() {
28578
+ fromEvent(document, 'mouseup')
28579
+ .pipe(takeUntilDestroyed(this.destroyRef))
28580
+ .subscribe(() => this.service.endMouseMove());
28581
+ }
28582
+ // For test purpose only (type CTRL+C)
28583
+ setupCopyListener() {
28584
+ fromEvent(document, 'keydown')
28585
+ .pipe(takeUntilDestroyed(this.destroyRef))
28586
+ .subscribe((event) => {
28587
+ if ((event.ctrlKey || event.metaKey) && event.key === 'c') {
28588
+ const cells = this.service.selectedCells;
28589
+ if (isNotEmptyArray(cells)) {
28590
+ // Show overlay
28591
+ this.addCellsOverlay(cells);
28592
+ event.preventDefault();
28593
+ // Hide overlay after animation completes (1 second)
28594
+ setTimeout(() => {
28595
+ this.removeCellsOverlay();
28596
+ }, 1000);
28597
+ }
28598
+ }
28599
+ });
28600
+ }
28601
+ addCellsOverlay(cells) {
28602
+ // Remove existing overlays
28603
+ this.removeCellsOverlay();
28604
+ // Group cells into contiguous regions
28605
+ const cellGroups = this.groupContiguousCells(cells);
28606
+ // Create and render overlay for each contiguous region
28607
+ cellGroups.forEach((group) => {
28608
+ const bounds = this.calculateSelectionBounds(group);
28609
+ if (bounds) {
28610
+ const overlay = this.createOverlayElement(bounds);
28611
+ this.renderer.appendChild(this.elementRef.nativeElement, overlay);
28612
+ this.overlayElements.push(overlay);
28613
+ }
28614
+ });
28615
+ }
28616
+ removeCellsOverlay() {
28617
+ this.overlayElements.forEach((overlay) => {
28618
+ this.renderer.removeChild(this.elementRef.nativeElement, overlay);
28619
+ });
28620
+ this.overlayElements = [];
28621
+ }
28622
+ groupContiguousCells(cells) {
28623
+ // Create a map for quick lookup
28624
+ const cellMap = new Map();
28625
+ cells.forEach((cell) => {
28626
+ cellMap.set(this.getCellKey(cell), cell);
28627
+ });
28628
+ const visited = new Set();
28629
+ const groups = [];
28630
+ // Process each cell
28631
+ cells.forEach((cell) => {
28632
+ const key = this.getCellKey(cell);
28633
+ if (visited.has(key)) {
28634
+ return;
28635
+ }
28636
+ // Start a new contiguous group with flood-fill
28637
+ const group = [];
28638
+ const queue = [cell];
28639
+ visited.add(key);
28640
+ while (queue.length > 0) {
28641
+ const current = queue.shift();
28642
+ group.push(current);
28643
+ // Check all 4 adjacent cells (up, down, left, right)
28644
+ const neighbors = this.getAdjacentCells(current);
28645
+ neighbors.forEach((neighbor) => {
28646
+ const neighborKey = this.getCellKey(neighbor);
28647
+ if (cellMap.has(neighborKey) && !visited.has(neighborKey)) {
28648
+ visited.add(neighborKey);
28649
+ queue.push(neighbor);
28650
+ }
28651
+ });
28652
+ }
28653
+ groups.push(group);
28654
+ });
28655
+ return groups;
28656
+ }
28657
+ getAdjacentCells(cell) {
28658
+ // Returns cells adjacent to the current cell (up, down, left, right)
28659
+ // Note: We need to get column order from the actual table structure
28660
+ // For now, we'll use a simple approach based on rowId adjacency
28661
+ return [
28662
+ { rowId: cell.rowId - 1, columnName: cell.columnName }, // up
28663
+ { rowId: cell.rowId + 1, columnName: cell.columnName }, // down
28664
+ { rowId: cell.rowId, columnName: this.getNextColumnName(cell.columnName, -1) }, // left
28665
+ { rowId: cell.rowId, columnName: this.getNextColumnName(cell.columnName, 1) }, // right
28666
+ ].filter((c) => c.columnName !== null);
28667
+ }
28668
+ getNextColumnName(currentColumnName, offset) {
28669
+ const columns = this.service.selectableColumns;
28670
+ const currentIndex = columns.indexOf(currentColumnName);
28671
+ if (currentIndex === -1) {
28672
+ return null;
28673
+ }
28674
+ const newIndex = currentIndex + offset;
28675
+ if (newIndex < 0 || newIndex >= columns.length) {
28676
+ return null;
28677
+ }
28678
+ return columns[newIndex];
28679
+ }
28680
+ getCellKey(cell) {
28681
+ return `${cell.rowId}-${cell.columnName}`;
28682
+ }
28683
+ calculateSelectionBounds(cells) {
28684
+ const container = this.elementRef.nativeElement;
28685
+ // Find all selected cell elements
28686
+ const cellElements = [];
28687
+ cells.forEach((cell) => {
28688
+ const cellElement = container.querySelector(`[data-row-id="${cell.rowId}"][data-column-name="${cell.columnName}"]`);
28689
+ if (cellElement) {
28690
+ cellElements.push(cellElement);
28691
+ }
28692
+ });
28693
+ if (isEmptyArray(cellElements)) {
28694
+ return null;
28695
+ }
28696
+ // Get container position
28697
+ const containerRect = container.getBoundingClientRect();
28698
+ // Calculate bounding box
28699
+ let minTop = Infinity;
28700
+ let minLeft = Infinity;
28701
+ let maxBottom = -Infinity;
28702
+ let maxRight = -Infinity;
28703
+ cellElements.forEach((element) => {
28704
+ const rect = element.getBoundingClientRect();
28705
+ minTop = Math.min(minTop, rect.top - containerRect.top);
28706
+ minLeft = Math.min(minLeft, rect.left - containerRect.left);
28707
+ maxBottom = Math.max(maxBottom, rect.bottom - containerRect.top);
28708
+ maxRight = Math.max(maxRight, rect.right - containerRect.left);
28709
+ });
28710
+ return {
28711
+ top: minTop,
28712
+ left: minLeft,
28713
+ width: maxRight - minLeft,
28714
+ height: maxBottom - minTop,
28715
+ };
28716
+ }
28717
+ createOverlayElement(bounds) {
28718
+ const overlay = this.renderer.createElement('div');
28719
+ this.renderer.addClass(overlay, 'cell-selection-overlay');
28720
+ // Set position and size
28721
+ this.renderer.setStyle(overlay, 'top', `${bounds.top}px`);
28722
+ this.renderer.setStyle(overlay, 'left', `${bounds.left}px`);
28723
+ this.renderer.setStyle(overlay, 'width', `${bounds.width}px`);
28724
+ this.renderer.setStyle(overlay, 'height', `${bounds.height}px`);
28725
+ return overlay;
28726
+ }
28727
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28728
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: CellSelectionDirective, isStandalone: true, selector: "[appCellSelection]", inputs: { selectableColumns: { classPropertyName: "selectableColumns", publicName: "appSelectableColumns", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectionChange: "appCellSelectionChange", rightClick: "appCellRightClick" }, ngImport: i0 });
28729
+ }
28730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionDirective, decorators: [{
28731
+ type: Directive,
28732
+ args: [{
28733
+ selector: '[appCellSelection]',
28734
+ standalone: true,
28735
+ }]
28736
+ }], ctorParameters: () => [] });
28737
+
28738
+ class CellIdentifierDirective {
28739
+ cellId = input.required({ alias: 'appCellId' });
28740
+ isCellSelected = false;
28741
+ isDragging = false;
28742
+ service = inject(APP_CELL_SELECTION_SERVICE_TOKEN);
28743
+ destroyRef = inject(DestroyRef);
28744
+ ngOnInit() {
28745
+ // Listen to service selection changes and emit
28746
+ this.service.selectionChangeSubject
28747
+ .pipe(takeUntilDestroyed(this.destroyRef))
28748
+ .subscribe(() => (this.isCellSelected = this.service.isCellSelected(this.cellId())));
28749
+ }
28750
+ async handleMouseDown(event) {
28751
+ await this.service.handleCellMouseDown(event, this.cellId());
28752
+ }
28753
+ async handleMouseEnter(event) {
28754
+ await this.service.handleCellMouseEnter(event, this.cellId());
28755
+ }
28756
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellIdentifierDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28757
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", 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-dragging": "isDragging", "attr.data-row-id": "cellId().rowId", "attr.data-column-name": "cellId().columnName" } }, ngImport: i0 });
28758
+ }
28759
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellIdentifierDirective, decorators: [{
28760
+ type: Directive,
28761
+ args: [{
28762
+ selector: '[appCellId]',
28763
+ standalone: true,
28764
+ host: {
28765
+ '(mousedown)': 'handleMouseDown($event)',
28766
+ '(mouseenter)': 'handleMouseEnter($event)',
28767
+ '[class.cell-selected]': 'isCellSelected',
28768
+ '[class.cell-dragging]': 'isDragging',
28769
+ '[attr.data-row-id]': 'cellId().rowId',
28770
+ '[attr.data-column-name]': 'cellId().columnName',
28771
+ },
28772
+ }]
28773
+ }] });
28774
+
28367
28775
  /**
28368
28776
  * Merges two LoadResult objects into a single LoadResult object by combining their data arrays and summing their total counts.
28369
28777
  *
@@ -50137,414 +50545,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
50137
50545
  type: Injectable
50138
50546
  }], ctorParameters: () => [{ type: i1$3.UntypedFormBuilder }] });
50139
50547
 
50140
- const APP_CELL_SELECTION_SERVICE_TOKEN = new InjectionToken('CellSelectionService');
50141
- const APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN = new InjectionToken('CellSelectionServiceConfig');
50142
- /**
50143
- * Service to manage cell selection state across multiple directive instances.
50144
- * This service should be provided at the component level (not root) to ensure
50145
- * proper isolation between different table instances.
50146
- */
50147
- class CellSelectionService {
50148
- // Configuration
50149
- config = inject(APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN, { optional: true });
50150
- selectableColumns = [];
50151
- // Selection state
50152
- selectedCells = [];
50153
- selectionStartCell = null;
50154
- isSelecting = false;
50155
- // Drag state
50156
- draggedCells = [];
50157
- dragStartCell = null;
50158
- isDragging = false;
50159
- // Observables
50160
- selectionChangeSubject = new Subject();
50161
- selectionRightClickSubject = new Subject();
50162
- // Overridable methods
50163
- _equals;
50164
- _new;
50165
- constructor() {
50166
- this._equals = this.config?.equals;
50167
- this._new = this.config?.new;
50168
- }
50169
- // Override method
50170
- equals(cell1, cell2) {
50171
- return this._equals ? this._equals(cell1, cell2) : cell1?.rowId === cell2?.rowId && cell1?.columnName === cell2?.columnName;
50172
- }
50173
- // Override method
50174
- new(cellId) {
50175
- return this._new ? this._new(cellId) : cellId;
50176
- }
50177
- isCellSelected(cellId) {
50178
- return this.selectedCells.some((selectedCell) => this.equals(selectedCell, cellId));
50179
- }
50180
- isCellDragged(cellId) {
50181
- return this.draggedCells.some((selectedCell) => this.equals(selectedCell, cellId));
50182
- }
50183
- // Core selection logic (moved from CellIdentifierDirective)
50184
- async handleCellMouseDown(event, cellId) {
50185
- event.preventDefault();
50186
- if (event.button === 2) {
50187
- event.stopPropagation();
50188
- this.selectionRightClickSubject.next(event);
50189
- return;
50190
- }
50191
- const isCtrlKey = event.ctrlKey || event.metaKey;
50192
- const isShiftKey = event.shiftKey;
50193
- if (!isShiftKey && !isCtrlKey) {
50194
- this.startSelection(cellId);
50195
- // this.startDragSelection(cellId);
50196
- }
50197
- else if (isCtrlKey) {
50198
- this.toggleCellSelection(cellId);
50199
- }
50200
- else if (isShiftKey) {
50201
- this.selectRange(cellId);
50202
- }
50203
- }
50204
- async handleCellMouseEnter(event, cellId) {
50205
- // TODO check if next cell can be selected
50206
- if (this.isSelecting && this.selectionStartCell) {
50207
- this.updateSelection(cellId);
50208
- }
50209
- else if (this.isDragging && this.dragStartCell) {
50210
- this.updateDraggedCells(cellId);
50211
- }
50212
- }
50213
- endMouseMove() {
50214
- if (this.isSelecting) {
50215
- this.resetSelectionState();
50216
- }
50217
- else if (this.isDragging) {
50218
- this.resetDragState();
50219
- }
50220
- }
50221
- // Private helper methods
50222
- startSelection(cellId) {
50223
- this.selectionStartCell = cellId;
50224
- this.isSelecting = true;
50225
- this.emitSelection([cellId], false, false);
50226
- }
50227
- startDragSelection(cellId) {
50228
- this.dragStartCell = cellId;
50229
- this.isDragging = true;
50230
- this.draggedCells = [cellId];
50231
- // this.emitSelection([cellId], false, false);
50232
- }
50233
- toggleCellSelection(cellId) {
50234
- const currentCells = [...this.selectedCells];
50235
- const cellIndex = currentCells.findIndex((c) => this.equals(c, cellId));
50236
- if (cellIndex >= 0) {
50237
- currentCells.splice(cellIndex, 1);
50238
- }
50239
- else {
50240
- currentCells.push(cellId);
50241
- }
50242
- this.emitSelection(currentCells, false, true);
50243
- }
50244
- selectRange(endCell) {
50245
- const rangeCells = this.calculateRangeCells(endCell);
50246
- this.emitSelection(rangeCells, true, false);
50247
- }
50248
- updateSelection(currentCell) {
50249
- const rangeCells = this.calculateRangeBetweenCells(this.selectionStartCell, currentCell);
50250
- this.emitSelection(rangeCells, true, false);
50251
- }
50252
- updateDraggedCells(currentCell) {
50253
- // this.draggedCells.set(rangeCells);
50254
- }
50255
- emitSelection(cells, isRange, isToggle) {
50256
- this.selectedCells = cells;
50257
- this.selectionChangeSubject.next({
50258
- selectedCells: cells,
50259
- isRangeSelection: isRange,
50260
- isToggleSelection: isToggle,
50261
- });
50262
- }
50263
- calculateRangeCells(endCell) {
50264
- if (isEmptyArray(this.selectedCells)) {
50265
- return [endCell];
50266
- }
50267
- const lastSelectedCell = this.findFirstSelectedCell(this.selectedCells);
50268
- return this.calculateRangeBetweenCells(lastSelectedCell, endCell);
50269
- }
50270
- calculateRangeBetweenCells(startCell, endCell) {
50271
- // Get first cell coordinates, then add this cell as a range
50272
- const firstRowId = Math.min(startCell.rowId, endCell.rowId);
50273
- const lastRowId = Math.max(startCell.rowId, endCell.rowId);
50274
- const startColumnIndex = this.selectableColumns.indexOf(startCell.columnName);
50275
- const endColumnIndex = this.selectableColumns.indexOf(endCell.columnName);
50276
- const firstColumnIndex = Math.min(startColumnIndex, endColumnIndex);
50277
- const lastColumnIndex = Math.max(startColumnIndex, endColumnIndex);
50278
- // Iterate columns and rows
50279
- const rangeCells = [];
50280
- for (let i = firstColumnIndex; i <= lastColumnIndex; i++) {
50281
- const columnName = this.selectableColumns[i];
50282
- for (let rowId = firstRowId; rowId <= lastRowId; rowId++) {
50283
- rangeCells.push(this.new({ rowId: rowId, columnName: columnName }));
50284
- }
50285
- }
50286
- return rangeCells;
50287
- }
50288
- resetSelectionState() {
50289
- this.selectionStartCell = null;
50290
- this.isSelecting = false;
50291
- }
50292
- resetDragState() {
50293
- this.dragStartCell = null;
50294
- this.isDragging = false;
50295
- this.draggedCells = [];
50296
- }
50297
- findFirstSelectedCell(selectedCells) {
50298
- // Find the cell with the lowest rowId and columnIndex
50299
- return this.findSelectedCell(selectedCells, Math.min(...selectedCells.map((cell) => cell.rowId)), Math.min(...selectedCells.map((cell) => this.selectableColumns.indexOf(cell.columnName))));
50300
- }
50301
- findLastSelectedCell(selectedCells) {
50302
- // Find the cell with the lowest rowId and columnIndex
50303
- return this.findSelectedCell(selectedCells, Math.max(...selectedCells.map((cell) => cell.rowId)), Math.max(...selectedCells.map((cell) => this.selectableColumns.indexOf(cell.columnName))));
50304
- }
50305
- findSelectedCell(selectedCells, rowId, columnIndex) {
50306
- // Find the cell with the current indexes
50307
- return selectedCells.filter((cell) => cell.rowId === rowId && cell.columnName === this.selectableColumns[columnIndex])[0];
50308
- }
50309
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
50310
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionService });
50311
- }
50312
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionService, decorators: [{
50313
- type: Injectable
50314
- }], ctorParameters: () => [] });
50315
-
50316
- class CellIdentifierDirective {
50317
- cellId = input.required({ alias: 'appCellId' });
50318
- isCellSelected = false;
50319
- isDragging = false;
50320
- service = inject(APP_CELL_SELECTION_SERVICE_TOKEN);
50321
- destroyRef = inject(DestroyRef);
50322
- ngOnInit() {
50323
- // Listen to service selection changes and emit
50324
- this.service.selectionChangeSubject
50325
- .pipe(takeUntilDestroyed(this.destroyRef))
50326
- .subscribe(() => (this.isCellSelected = this.service.isCellSelected(this.cellId())));
50327
- }
50328
- async handleMouseDown(event) {
50329
- await this.service.handleCellMouseDown(event, this.cellId());
50330
- }
50331
- async handleMouseEnter(event) {
50332
- await this.service.handleCellMouseEnter(event, this.cellId());
50333
- }
50334
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellIdentifierDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
50335
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", 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-dragging": "isDragging", "attr.data-row-id": "cellId().rowId", "attr.data-column-name": "cellId().columnName" } }, ngImport: i0 });
50336
- }
50337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellIdentifierDirective, decorators: [{
50338
- type: Directive,
50339
- args: [{
50340
- selector: '[appCellId]',
50341
- standalone: true,
50342
- host: {
50343
- '(mousedown)': 'handleMouseDown($event)',
50344
- '(mouseenter)': 'handleMouseEnter($event)',
50345
- '[class.cell-selected]': 'isCellSelected',
50346
- '[class.cell-dragging]': 'isDragging',
50347
- '[attr.data-row-id]': 'cellId().rowId',
50348
- '[attr.data-column-name]': 'cellId().columnName',
50349
- },
50350
- }]
50351
- }] });
50352
-
50353
- class CellSelectionDirective {
50354
- // Inputs
50355
- // eslint-disable-next-line @angular-eslint/no-input-rename
50356
- selectableColumns = input.required({ alias: 'appSelectableColumns' });
50357
- // Outputs
50358
- // eslint-disable-next-line @angular-eslint/no-output-rename
50359
- selectionChange = output({ alias: 'appCellSelectionChange' });
50360
- // eslint-disable-next-line @angular-eslint/no-output-rename
50361
- rightClick = output({ alias: 'appCellRightClick' });
50362
- // Inject service by token
50363
- service = inject(APP_CELL_SELECTION_SERVICE_TOKEN);
50364
- elementRef = inject(ElementRef);
50365
- renderer = inject(Renderer2);
50366
- destroyRef = inject(DestroyRef);
50367
- overlayElements = [];
50368
- constructor() { }
50369
- ngOnInit() {
50370
- // Initialize service with selectable columns
50371
- this.setupServiceConfiguration();
50372
- // Setup global mouseup listener
50373
- this.setupGlobalMouseEvents();
50374
- // Setup keyboard listener for copy (for test)
50375
- // this.setupCopyListener();
50376
- }
50377
- setupServiceConfiguration() {
50378
- // Pass selectable columns to service
50379
- this.service.selectableColumns = this.selectableColumns();
50380
- // Listen to service selection changes and emit
50381
- this.service.selectionChangeSubject
50382
- .pipe(takeUntilDestroyed(this.destroyRef))
50383
- .subscribe((event) => this.selectionChange.emit(event));
50384
- // Listen to right-click event
50385
- this.service.selectionRightClickSubject.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => this.rightClick.emit(event));
50386
- }
50387
- setupGlobalMouseEvents() {
50388
- fromEvent(document, 'mouseup')
50389
- .pipe(takeUntilDestroyed(this.destroyRef))
50390
- .subscribe(() => this.service.endMouseMove());
50391
- }
50392
- // For test purpose only (type CTRL+C)
50393
- setupCopyListener() {
50394
- fromEvent(document, 'keydown')
50395
- .pipe(takeUntilDestroyed(this.destroyRef))
50396
- .subscribe((event) => {
50397
- if ((event.ctrlKey || event.metaKey) && event.key === 'c') {
50398
- const cells = this.service.selectedCells;
50399
- if (isNotEmptyArray(cells)) {
50400
- // Show overlay
50401
- this.addCellsOverlay(cells);
50402
- event.preventDefault();
50403
- // Hide overlay after animation completes (1 second)
50404
- setTimeout(() => {
50405
- this.removeCellsOverlay();
50406
- }, 1000);
50407
- }
50408
- }
50409
- });
50410
- }
50411
- addCellsOverlay(cells) {
50412
- // Remove existing overlays
50413
- this.removeCellsOverlay();
50414
- // Group cells into contiguous regions
50415
- const cellGroups = this.groupContiguousCells(cells);
50416
- // Create and render overlay for each contiguous region
50417
- cellGroups.forEach((group) => {
50418
- const bounds = this.calculateSelectionBounds(group);
50419
- if (bounds) {
50420
- const overlay = this.createOverlayElement(bounds);
50421
- this.renderer.appendChild(this.elementRef.nativeElement, overlay);
50422
- this.overlayElements.push(overlay);
50423
- }
50424
- });
50425
- }
50426
- removeCellsOverlay() {
50427
- this.overlayElements.forEach((overlay) => {
50428
- this.renderer.removeChild(this.elementRef.nativeElement, overlay);
50429
- });
50430
- this.overlayElements = [];
50431
- }
50432
- groupContiguousCells(cells) {
50433
- // Create a map for quick lookup
50434
- const cellMap = new Map();
50435
- cells.forEach((cell) => {
50436
- cellMap.set(this.getCellKey(cell), cell);
50437
- });
50438
- const visited = new Set();
50439
- const groups = [];
50440
- // Process each cell
50441
- cells.forEach((cell) => {
50442
- const key = this.getCellKey(cell);
50443
- if (visited.has(key)) {
50444
- return;
50445
- }
50446
- // Start a new contiguous group with flood-fill
50447
- const group = [];
50448
- const queue = [cell];
50449
- visited.add(key);
50450
- while (queue.length > 0) {
50451
- const current = queue.shift();
50452
- group.push(current);
50453
- // Check all 4 adjacent cells (up, down, left, right)
50454
- const neighbors = this.getAdjacentCells(current);
50455
- neighbors.forEach((neighbor) => {
50456
- const neighborKey = this.getCellKey(neighbor);
50457
- if (cellMap.has(neighborKey) && !visited.has(neighborKey)) {
50458
- visited.add(neighborKey);
50459
- queue.push(neighbor);
50460
- }
50461
- });
50462
- }
50463
- groups.push(group);
50464
- });
50465
- return groups;
50466
- }
50467
- getAdjacentCells(cell) {
50468
- // Returns cells adjacent to the current cell (up, down, left, right)
50469
- // Note: We need to get column order from the actual table structure
50470
- // For now, we'll use a simple approach based on rowId adjacency
50471
- return [
50472
- { rowId: cell.rowId - 1, columnName: cell.columnName }, // up
50473
- { rowId: cell.rowId + 1, columnName: cell.columnName }, // down
50474
- { rowId: cell.rowId, columnName: this.getNextColumnName(cell.columnName, -1) }, // left
50475
- { rowId: cell.rowId, columnName: this.getNextColumnName(cell.columnName, 1) }, // right
50476
- ].filter((c) => c.columnName !== null);
50477
- }
50478
- getNextColumnName(currentColumnName, offset) {
50479
- const columns = this.service.selectableColumns;
50480
- const currentIndex = columns.indexOf(currentColumnName);
50481
- if (currentIndex === -1) {
50482
- return null;
50483
- }
50484
- const newIndex = currentIndex + offset;
50485
- if (newIndex < 0 || newIndex >= columns.length) {
50486
- return null;
50487
- }
50488
- return columns[newIndex];
50489
- }
50490
- getCellKey(cell) {
50491
- return `${cell.rowId}-${cell.columnName}`;
50492
- }
50493
- calculateSelectionBounds(cells) {
50494
- const container = this.elementRef.nativeElement;
50495
- // Find all selected cell elements
50496
- const cellElements = [];
50497
- cells.forEach((cell) => {
50498
- const cellElement = container.querySelector(`[data-row-id="${cell.rowId}"][data-column-name="${cell.columnName}"]`);
50499
- if (cellElement) {
50500
- cellElements.push(cellElement);
50501
- }
50502
- });
50503
- if (isEmptyArray(cellElements)) {
50504
- return null;
50505
- }
50506
- // Get container position
50507
- const containerRect = container.getBoundingClientRect();
50508
- // Calculate bounding box
50509
- let minTop = Infinity;
50510
- let minLeft = Infinity;
50511
- let maxBottom = -Infinity;
50512
- let maxRight = -Infinity;
50513
- cellElements.forEach((element) => {
50514
- const rect = element.getBoundingClientRect();
50515
- minTop = Math.min(minTop, rect.top - containerRect.top);
50516
- minLeft = Math.min(minLeft, rect.left - containerRect.left);
50517
- maxBottom = Math.max(maxBottom, rect.bottom - containerRect.top);
50518
- maxRight = Math.max(maxRight, rect.right - containerRect.left);
50519
- });
50520
- return {
50521
- top: minTop,
50522
- left: minLeft,
50523
- width: maxRight - minLeft,
50524
- height: maxBottom - minTop,
50525
- };
50526
- }
50527
- createOverlayElement(bounds) {
50528
- const overlay = this.renderer.createElement('div');
50529
- this.renderer.addClass(overlay, 'cell-selection-overlay');
50530
- // Set position and size
50531
- this.renderer.setStyle(overlay, 'top', `${bounds.top}px`);
50532
- this.renderer.setStyle(overlay, 'left', `${bounds.left}px`);
50533
- this.renderer.setStyle(overlay, 'width', `${bounds.width}px`);
50534
- this.renderer.setStyle(overlay, 'height', `${bounds.height}px`);
50535
- return overlay;
50536
- }
50537
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
50538
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: CellSelectionDirective, isStandalone: true, selector: "[appCellSelection]", inputs: { selectableColumns: { classPropertyName: "selectableColumns", publicName: "appSelectableColumns", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { selectionChange: "appCellSelectionChange", rightClick: "appCellRightClick" }, ngImport: i0 });
50539
- }
50540
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellSelectionDirective, decorators: [{
50541
- type: Directive,
50542
- args: [{
50543
- selector: '[appCellSelection]',
50544
- standalone: true,
50545
- }]
50546
- }], ctorParameters: () => [] });
50547
-
50548
50548
  class Table2TestPage extends AppAsyncTable {
50549
50549
  validatorService;
50550
50550
  formBuilder;
@@ -52262,5 +52262,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
52262
52262
  * Generated bundle index. Do not edit.
52263
52263
  */
52264
52264
 
52265
- export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_DEBUG_DATA_SERVICE, APP_FEED_SERVICE, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_FRAGMENTS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_HOME_CONFIG, APP_HOTKEYS_CONFIG, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_LOGGING_SERVICE, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_NAMED_FILTER_SERVICE, APP_PROGRESS_BAR_SERVICE, APP_SETTINGS_MENU_ITEMS, APP_STORAGE, APP_STORAGE_EXPLORER_PROTECTED_KEYS, APP_TESTING_PAGES, APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, APP_USER_EVENT_SERVICE, APP_USER_SETTINGS_OPTIONS, APP_USER_TOKEN_SCOPES, AboutModal, AbstractNamedFilterService, AbstractSelectionModelPipe, AbstractTableSelectionPipe, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, AccountUtils, ActionsColumnComponent, AdditionalFields, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AppAboutModalModule, AppAccountModule, AppAsyncTable, AppAuthForm, AppAuthModal, AppAuthModule, AppChangePasswordModule, AppChangePasswordPage, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormArray, AppFormButtonsBarModule, AppFormContainer, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHomePageModule, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMarkdownContent, AppMarkdownModal, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppPropertiesTable, AppPropertiesUtils, AppPropertyUtils, AppRegisterModule, AppResetPasswordModal, AppRowField, AppSelectPeerModule, AppSelectUsersModal, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextFormModule, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendQueryParamsPipePipe, ArrayDistinctPipe, ArrayFilterPipe, ArrayFindByPropertyPipe, ArrayFirstPipe, ArrayFormTestPage, ArrayIncludesPipe, ArrayJoinPipe, ArrayLastPipe, ArrayLengthPipe, ArrayMapPipe, ArrayPluckPipe, ArraySlicePipe, ArraySortPipe, AsAnyPipe, AsArrayPipe, AsBooleanPipe, AsFloatLabelTypePipe, AsObservablePipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoResizeDirective, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, BadgeNumberPipe, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, BooleanFormatPipe, BooleanTestPage, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CapitalizePipe, CellValueChangeListener, ChangePasswordForm, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigFragments, ConfigService, Configuration, CoreModule, CorePipesModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_MATCH_REGEXP, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR, DEFAULT_JOIN_PROPERTIES_SEPARATOR, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFormatService, DateFromNowPipe, DateFromPipe, DateShortTestPage, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DisplayWithPipe, DragAndDropDirective, DurationPipe, DurationTestPage, ED25519_SEED_LENGTH, EMPTY_PLACEHOLDER_CHAR, EMPTY_PLACEHOLDER_CHAR_REGEXP_GLOBAL, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesAsyncTableDataSource, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EnvironmentHttpLoader, EnvironmentLoader, ErrorCodes, EvenPipe, FeedDirective, FeedModule, FeedPage, FeedService, FeedsComponent, FileResponse, FileService, FileSizePipe, FilesUtils, FirstFalsePipe, FirstPipe, FirstTruePipe, FormArrayHelper, FormArrayTestModule, FormButtonsBarComponent, FormButtonsBarToken, FormErrorPipe, FormErrorTranslatePipe, FormErrorTranslator, FormFieldDefinitionUtils, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, GalleryTestPage, GeolocationUtils, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, IPosition, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsAllSelectedPipe, IsEmptySelectionPipe, IsLoginAccountPipe, IsMultipleSelectionPipe, IsNilOrBlankPipe, IsNilOrNaNPipe, IsNilPipe, IsNotAllSelectedPipe, IsNotEmptySelectionPipe, IsNotNilOrBlankPipe, IsNotNilOrNaNPipe, IsNotNilPipe, IsOnDeskPipe, IsOnFieldPipe, IsSelectedPipe, IsSingleSelectionPipe, IsValidDatePipe, JobModule, JobProgression, JobProgressionComponent, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, JsonFeedUtils, JsonUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_PATTERNS, LAT_LONG_PATTERN_MAX_DECIMALS, LAT_LONG_VALUE_MAX_DECIMALS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LogLevel, LogUtils, Logger, LoggingService, LoggingServiceModule, LongitudeFormatPipe, MASKS, MASK_RANGES, MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapPipe, MapToPipe, MapValuesPipe, MarkdownDirective, MarkdownService, MarkdownTestPage, MarkdownTestingModule, MarkdownUtils, MaskitoPlaceholderPipe, MaskitoTestPage, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBadgeTestPage, MatBooleanField, MatChipsField, MatColorPipe, MatCommonTestPage, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatLatLongFieldInput, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItem, MenuItems, MenuOptions, MenuService, MenuTestingModule, MenuTestingPage, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NETWORK_DEFAULT_CONNECTION_TIMEOUT, NamedFilter, NamedFilterFilter, NamedFilterSelector, NamedFilterSelectorTestingModule, NamedFilterSelectorTestingPage, NavActionsColumnComponent, NetworkService, NetworkUtils, NewTokenForm, NewTokenModal, NgInitDirective, NgVarDirective, NoHtmlPipe, NotEmptyArrayPipe, NumberFormatPipe, ObservableTestPage, OddPipe, OtherMenuTestingPage, PEER_URL_REGEXP, PLUS_PLACEHOLDER_CHAR_REGEXP_GLOBAL, PRINT_ID_QUERY_PARAM, PRINT_LOADING_STORAGE_KEY_PREFIX, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, PrintService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyEntity, PropertyEntityFilter, PropertyEntityValidator, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialToStringPipe, ReferentialUtils, ReferentialValidatorService, ReferentialsToStringPipe, RegExpUtils, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, RoundPipe, RxStateComputed, RxStateModule, RxStateOutput, RxStateProperty, RxStateRegister, RxStateSelect, SCRYPT_PARAMS, SETTINGS_COMPACT_ROWS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_STORAGE_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_CONFIG_OPTIONS, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SPACE_PLACEHOLDER_CHAR_REGEXP_GLOBAL, SafeHtmlPipe, SafeStylePipe, SelectPeerModal, SelectionLengthPipe, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMarkdownModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedNamedFilterModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, SplitArrayInChunksPipe, StartableService, StatusById, StatusIds, StatusList, StorageDrivers, StorageExplorerComponent, StorageExplorerModule, StorageExplorerTestingModule, StorageExplorerTestingRoutingModule, StorageService, StrIncludesPipe, StrLengthPipe, StrReplacePipe, SubMenuTabDirective, SwipeTestPage, TABLE_SETTINGS_ENUM, TOOLBAR_HEADER_ID, Table2TestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TableValidatorService, TextForm, TextFormTestingModule, TextFormTestingPage, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ThrottledClickDirective, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, TokenScope, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, TreeItemEntityUtils, TruncHtmlPipe, TruncTextPipe, TruncateHtmlPipe, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UrlUtils, UserEventModule, UserEventNotificationIcon, UserEventNotificationList, UserEventNotificationModal, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UserToken, UserTokenTable, UsersPage, UsersUtils, ValueFormatPipe, VersionUtils, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayResize, arraySize, asInputElement, base64ArrayBuffer, booleanToString, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, collectByProperty, compareValues, compareValuesDesc, compareVersionNumbers, composeComparators, computeDecimalDegrees, computeDecimalPart, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, decorateWithTakeUntil, departmentToString, departmentsToString, disableAndClearControl, disableAndClearControls, disableControl, disableControls, emitPromiseEvent, enableControl, enableControls, enableRxStateProdMode, entityToString, equals, equalsOrNil, escapeRegExp, expansionAnimation, fadeInAnimation, fadeInOutAnimation, fadeInSlowAnimation, filterFalse, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, filterNotNil, filterNumberInput, filterTrue, findParentWithClass, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatLong, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getInputRangeFromCaretIndex, getInputSelectionRangesFromMask, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, getRandomImageWithCredit, getUserAgent, hexToRgb, hexToRgbArray, initArrayControlsFromValues, interpolateString, intersectArrays, isAndroid, isBlankString, isCapacitor, isChrome, isControlHasInput, isEdge, isEmptyArray, isEntityService, isFirefox, isFocusableElement, isIOS, isInputElement, isInstanceOf, isInt, isIpad, isMacOS, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilObject, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isOnFieldMode, isPrint, isProgressEvent, isPromise, isResponseEvent, isSafari, isSameVersion, isStartableService, isTouchUi, isVersionCompatible, isWindows, joinProperties, joinPropertiesPath, lastArrayValue, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, maskitoAutoSelectByMaskPattern, maskitoPrefixPlugin, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, newArray, noHtml, noTrailingSlash, notNilOrDefault, nullIfNilOrBlank, nullIfUndefined, numberOrNilAttribute, numberToString, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputContentFromEvent, selectInputRange, setCalculatedValue, setControlEnabled, setControlRequired, setControlsEnabled, setFormErrors, setPropertyByPath, setTabIndex, sleep, slideDownAnimation, slideInAnimation, slideInOutAnimation, slideUpDownAnimation, sort, splitArrayInChunks, splitById, splitByProperty, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toLoadData, toLoadResult, toNotNil, toNumber, trimEmptyToNull, truncateHtml, uncapitalizeFirstLetter, undefinedIfNull, underscoreToChangeCase, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
52265
+ export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CELL_SELECTION_SERVICE_CONFIG_TOKEN, APP_CELL_SELECTION_SERVICE_TOKEN, APP_CONFIG_OPTIONS, APP_DEBUG_DATA_SERVICE, APP_FEED_SERVICE, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_FRAGMENTS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_HOME_CONFIG, APP_HOTKEYS_CONFIG, APP_JOB_PROGRESSION_SERVICE, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_LOGGING_SERVICE, APP_MENU_ITEMS, APP_MENU_OPTIONS, APP_NAMED_FILTER_SERVICE, APP_PROGRESS_BAR_SERVICE, APP_SETTINGS_MENU_ITEMS, APP_STORAGE, APP_STORAGE_EXPLORER_PROTECTED_KEYS, APP_TESTING_PAGES, APP_USER_EVENT_LIST_INFINITE_SCROLL_THRESHOLD, APP_USER_EVENT_SERVICE, APP_USER_SETTINGS_OPTIONS, APP_USER_TOKEN_SCOPES, AboutModal, AbstractNamedFilterService, AbstractSelectionModelPipe, AbstractTableSelectionPipe, AbstractUserEventService, Account, AccountPage, AccountService, AccountToStringPipe, AccountUtils, ActionsColumnComponent, AdditionalFields, AdminModule, AdminRoutingModule, AdminUsersModule, Alerts, AndroidOsEnvironment, AppAboutModalModule, AppAccountModule, AppAsyncTable, AppAuthForm, AppAuthModal, AppAuthModule, AppChangePasswordModule, AppChangePasswordPage, AppEditor, AppEditorOptions, AppEntityEditor, AppEntityEditorModal, AppEntityEditorModalOptions, AppEntityFormModule, AppForm, AppFormArray, AppFormButtonsBarModule, AppFormContainer, AppFormField, AppFormModule, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHomePageModule, AppIconComponent, AppIconModule, AppImageGalleryComponent, AppInMemoryTable, AppInstallUpgradeCard, AppInstallUpgradeCardModule, AppListForm, AppListFormModule, AppLoadingSpinner, AppMarkdownContent, AppMarkdownModal, AppMenuModule, AppNullForm, AppPropertiesForm, AppPropertiesFormModule, AppPropertiesTable, AppPropertiesUtils, AppPropertyUtils, AppRegisterModule, AppResetPasswordModal, AppRowField, AppSelectPeerModule, AppSelectUsersModal, AppSettingsPageModule, AppTabEditor, AppTabEditorOptions, AppTable, AppTableModule, AppTableUtils, AppTextFormModule, AppTextPopoverModule, AppUpdateOfflineModeCard, AppUpdateOfflineModeCardModule, AppValidatorService, AppendQueryParamsPipePipe, ArrayDistinctPipe, ArrayFilterPipe, ArrayFindByPropertyPipe, ArrayFirstPipe, ArrayFormTestPage, ArrayIncludesPipe, ArrayJoinPipe, ArrayLastPipe, ArrayLengthPipe, ArrayMapPipe, ArrayPluckPipe, ArraySlicePipe, ArraySortPipe, AsAnyPipe, AsArrayPipe, AsBooleanPipe, AsFloatLabelTypePipe, AsObservablePipe, AudioProvider, AudioTestingModule, AudioTestingPage, AuthGuardService, AutoResizeDirective, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, BadgeDirective, BadgeNumberPipe, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, BooleanFormatPipe, BooleanTestPage, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CapitalizePipe, CellIdentifierDirective, CellSelectionDirective, CellSelectionService, CellValueChangeListener, ChangePasswordForm, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigFragments, ConfigService, Configuration, CoreModule, CorePipesModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_MATCH_REGEXP, DATE_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR, DEFAULT_JOIN_PROPERTIES_SEPARATOR, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFormatService, DateFromNowPipe, DateFromPipe, DateShortTestPage, DateTestPage, DateTimeTestPage, DateUtils, DebugComponent, Department, DepartmentToStringPipe, DisplayWithPipe, DragAndDropDirective, DurationPipe, DurationTestPage, ED25519_SEED_LENGTH, EMPTY_PLACEHOLDER_CHAR, EMPTY_PLACEHOLDER_CHAR_REGEXP_GLOBAL, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesAsyncTableDataSource, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EnvironmentHttpLoader, EnvironmentLoader, ErrorCodes, EvenPipe, FeedDirective, FeedModule, FeedPage, FeedService, FeedsComponent, FileResponse, FileService, FileSizePipe, FilesUtils, FirstFalsePipe, FirstPipe, FirstTruePipe, FormArrayHelper, FormArrayTestModule, FormButtonsBarComponent, FormButtonsBarToken, FormErrorPipe, FormErrorTranslatePipe, FormErrorTranslator, FormFieldDefinitionUtils, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, GalleryTestPage, GeolocationUtils, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, IMAGE_DEFAULTS, IPosition, ImageAttachment, ImageAttachmentFilter, ImageAttachmentService, ImageGalleryModule, ImageGalleryTestingModule, ImageModule, ImageService, ImagesUtils, InMemoryEntitiesService, IsAllSelectedPipe, IsEmptySelectionPipe, IsLoginAccountPipe, IsMultipleSelectionPipe, IsNilOrBlankPipe, IsNilOrNaNPipe, IsNilPipe, IsNotAllSelectedPipe, IsNotEmptySelectionPipe, IsNotNilOrBlankPipe, IsNotNilOrNaNPipe, IsNotNilPipe, IsOnDeskPipe, IsOnFieldPipe, IsSelectedPipe, IsSingleSelectionPipe, IsValidDatePipe, JobModule, JobProgression, JobProgressionComponent, JobProgressionIcon, JobProgressionList, JobProgressionService, JobProgressionTestService, JobProgressionTestingPage, JobTestingModule, JobUtils, JsonFeedUtils, JsonUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_PATTERNS, LAT_LONG_PATTERN_MAX_DECIMALS, LAT_LONG_VALUE_MAX_DECIMALS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LogLevel, LogUtils, Logger, LoggingService, LoggingServiceModule, LongitudeFormatPipe, MASKS, MASK_RANGES, MAT_FORM_FIELD_DEFAULT_APPEARANCE, MAT_FORM_FIELD_DEFAULT_SUBSCRIPT_SIZING, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MOMENT_NO_TIME_PROPERTY, MapGetPipe, MapKeysPipe, MapPipe, MapToPipe, MapValuesPipe, MarkdownDirective, MarkdownService, MarkdownTestPage, MarkdownTestingModule, MarkdownUtils, MaskitoPlaceholderPipe, MaskitoTestPage, MatAutocompleteConfigHolder, MatAutocompleteField, MatAutocompleteFieldUtils, MatBadgeTestPage, MatBooleanField, MatChipsField, MatColorPipe, MatCommonTestPage, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatLatLongFieldInput, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItem, MenuItems, MenuOptions, MenuService, MenuTestingModule, MenuTestingPage, Message, MessageFilter, MessageForm, MessageModal, MessageModule, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NETWORK_DEFAULT_CONNECTION_TIMEOUT, NamedFilter, NamedFilterFilter, NamedFilterSelector, NamedFilterSelectorTestingModule, NamedFilterSelectorTestingPage, NavActionsColumnComponent, NetworkService, NetworkUtils, NewTokenForm, NewTokenModal, NgInitDirective, NgVarDirective, NoHtmlPipe, NotEmptyArrayPipe, NumberFormatPipe, ObservableTestPage, OddPipe, OtherMenuTestingPage, PEER_URL_REGEXP, PLUS_PLACEHOLDER_CHAR_REGEXP_GLOBAL, PRINT_ID_QUERY_PARAM, PRINT_LOADING_STORAGE_KEY_PREFIX, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, PrintService, ProgressBarService, ProgressInterceptor, PropertiesFormTestPage, PropertiesFormTestingModule, PropertyEntity, PropertyEntityFilter, PropertyEntityValidator, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialToStringPipe, ReferentialUtils, ReferentialValidatorService, ReferentialsToStringPipe, RegExpUtils, RegisterConfirmPage, RegisterForm, RegisterModal, ResizableComponent, ResizableDirective, ResizableModule, RoundPipe, RxStateComputed, RxStateModule, RxStateOutput, RxStateProperty, RxStateRegister, RxStateSelect, SCRYPT_PARAMS, SETTINGS_COMPACT_ROWS, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_STORAGE_TESTING_PAGES, SHARED_TESTING_PAGES, SOCIAL_CONFIG_OPTIONS, SOCIAL_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SPACE_PLACEHOLDER_CHAR_REGEXP_GLOBAL, SafeHtmlPipe, SafeStylePipe, SelectPeerModal, SelectionLengthPipe, ServerErrorCodes, SettingsPage, SharedAsyncValidators, SharedBadgeModule, SharedDebugModule, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMarkdownModule, SharedMatAutocompleteModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedNamedFilterModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedToolbarModule, SharedValidators, SocialErrorCodes, SocialModule, SocialModuleOptionsToken, SocialTestingModule, Software, SplitArrayInChunksPipe, StartableService, StatusById, StatusIds, StatusList, StorageDrivers, StorageExplorerComponent, StorageExplorerModule, StorageExplorerTestingModule, StorageExplorerTestingRoutingModule, StorageService, StrIncludesPipe, StrLengthPipe, StrReplacePipe, SubMenuTabDirective, SwipeTestPage, TABLE_SETTINGS_ENUM, TOOLBAR_HEADER_ID, Table2TestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TableValidatorService, TextForm, TextFormTestingModule, TextFormTestingPage, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ThrottledClickDirective, ToStringPipe, ToastTestingModule, ToastTestingPage, Toasts, TokenScope, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, TreeItemEntityUtils, TruncHtmlPipe, TruncTextPipe, TruncateHtmlPipe, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UrlUtils, UserEventModule, UserEventNotificationIcon, UserEventNotificationList, UserEventNotificationModal, UserEventTestService, UserEventTestingModule, UserEventTestingPage, UserSettings, UserToken, UserTokenTable, UsersPage, UsersUtils, ValueFormatPipe, VersionUtils, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayResize, arraySize, asInputElement, base64ArrayBuffer, booleanToString, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, collectByProperty, compareValues, compareValuesDesc, compareVersionNumbers, composeComparators, computeDecimalDegrees, computeDecimalPart, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, decorateWithTakeUntil, departmentToString, departmentsToString, disableAndClearControl, disableAndClearControls, disableControl, disableControls, emitPromiseEvent, enableControl, enableControls, enableRxStateProdMode, entityToString, equals, equalsOrNil, escapeRegExp, expansionAnimation, fadeInAnimation, fadeInOutAnimation, fadeInSlowAnimation, filterFalse, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, filterNotNil, filterNumberInput, filterTrue, findParentWithClass, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatLong, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getInputRangeFromCaretIndex, getInputSelectionRangesFromMask, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, getRandomImageWithCredit, getUserAgent, hexToRgb, hexToRgbArray, initArrayControlsFromValues, interpolateString, intersectArrays, isAndroid, isBlankString, isCapacitor, isChrome, isControlHasInput, isEdge, isEmptyArray, isEntityService, isFirefox, isFocusableElement, isIOS, isInputElement, isInstanceOf, isInt, isIpad, isMacOS, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilObject, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isOnFieldMode, isPrint, isProgressEvent, isPromise, isResponseEvent, isSafari, isSameVersion, isStartableService, isTouchUi, isVersionCompatible, isWindows, joinProperties, joinPropertiesPath, lastArrayValue, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, maskitoAutoSelectByMaskPattern, maskitoPrefixPlugin, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moveInputCaretToSeparator, newArray, noHtml, noTrailingSlash, notNilOrDefault, nullIfNilOrBlank, nullIfUndefined, numberOrNilAttribute, numberToString, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputContentFromEvent, selectInputRange, setCalculatedValue, setControlEnabled, setControlRequired, setControlsEnabled, setFormErrors, setPropertyByPath, setTabIndex, sleep, slideDownAnimation, slideInAnimation, slideInOutAnimation, slideUpDownAnimation, sort, splitArrayInChunks, splitById, splitByProperty, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toLoadData, toLoadResult, toNotNil, toNumber, trimEmptyToNull, truncateHtml, uncapitalizeFirstLetter, undefinedIfNull, underscoreToChangeCase, updateValueAndValidity, waitFor, waitForFalse, waitForTrue, waitIdle, waitWhilePending };
52266
52266
  //# sourceMappingURL=sumaris-net.ngx-components.mjs.map