@noatgnu/cupcake-vanilla 1.3.12 → 1.3.15

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,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, EventEmitter, OnDestroy, ElementRef } from '@angular/core';
2
+ import { OnInit, EventEmitter, OnChanges, SimpleChanges, OnDestroy, ElementRef, AfterViewInit, Renderer2 } from '@angular/core';
3
3
  import { Observable, OperatorFunction } from 'rxjs';
4
- import { BaseApiService, WebSocketService, AuthService, WebSocketMessage, NotificationService as NotificationService$1, ToastService, AsyncTaskQueryParams, PaginatedResponse as PaginatedResponse$1, AsyncTaskStatus, DownloadUrlResponse, MetadataExportRequest, AsyncTaskCreateResponse, BulkExportRequest, BulkExcelExportRequest, MetadataImportRequest, MetadataValidationRequest, ChunkedImportRequest, User, LabGroupService, LabGroup, MetadataValidationConfig, TaskType, TaskStatus, LabGroupQueryResponse, ResourceVisibility } from '@noatgnu/cupcake-core';
4
+ import { BaseApiService, NotificationService as NotificationService$1, AsyncTaskQueryParams, PaginatedResponse as PaginatedResponse$1, AsyncTaskStatus, DownloadUrlResponse, MetadataExportRequest, AsyncTaskCreateResponse, BulkExportRequest, BulkExcelExportRequest, MetadataImportRequest, ValidationSchema, MetadataValidationRequest, SdrfFileValidationRequest, ChunkedImportRequest, WebSocketService, WebSocketMessage, DesktopRuntime, User, AuthService, LabGroupService, LabGroup, MetadataValidationConfig, TaskType, TaskStatus, LabGroupQueryResponse, ToastService, ResourceVisibility } from '@noatgnu/cupcake-core';
5
5
  export { WebSocketMessage } from '@noatgnu/cupcake-core';
6
6
  import * as _angular_forms from '@angular/forms';
7
7
  import { FormGroup, FormBuilder } from '@angular/forms';
@@ -19,9 +19,15 @@ interface PaginatedResponse<T> {
19
19
  previous?: string;
20
20
  results: T[];
21
21
  }
22
- interface ApiResponse<T = any> {
22
+ interface ApiError {
23
+ message?: string;
24
+ code?: string;
25
+ details?: Record<string, string[]>;
26
+ [key: string]: unknown;
27
+ }
28
+ interface ApiResponse<T = unknown> {
23
29
  data?: T;
24
- error?: any;
30
+ error?: ApiError;
25
31
  status: number;
26
32
  success: boolean;
27
33
  }
@@ -49,7 +55,9 @@ declare enum OntologyType {
49
55
  CHEBI = "chebi",
50
56
  CELL_ONTOLOGY = "cell_ontology",
51
57
  MS_UNIQUE_VOCABULARIES = "ms_unique_vocabularies",
52
- PSI_MS = "psi_ms"
58
+ PSI_MS = "psi_ms",
59
+ BTO = "bto",
60
+ DOID = "doid"
53
61
  }
54
62
  declare const OntologyTypeLabels: Record<OntologyType, string>;
55
63
  declare enum TemplatePermissionLevel {
@@ -66,6 +74,125 @@ declare enum ColumnType {
66
74
  SPECIAL = "special"
67
75
  }
68
76
 
77
+ type ColumnInputType = 'text' | 'select' | 'number_with_unit' | 'pattern' | 'ontology' | 'semver' | 'accession' | 'identifier';
78
+ interface ColumnValidator {
79
+ type: string;
80
+ params: {
81
+ values?: string[];
82
+ units?: string[];
83
+ pattern?: string;
84
+ ontologies?: string[];
85
+ examples?: (string | number)[];
86
+ description?: string;
87
+ error_level?: string;
88
+ format?: string;
89
+ special_values?: string[];
90
+ [key: string]: unknown;
91
+ };
92
+ }
93
+ interface MetadataColumnTemplate extends BaseTimestampedModel {
94
+ id: number;
95
+ name: string;
96
+ description?: string;
97
+ columnName: string;
98
+ columnType: string;
99
+ defaultValue?: string;
100
+ defaultPosition?: number;
101
+ ontologyType?: string;
102
+ customOntologyFilters?: any;
103
+ enableTypeahead: boolean;
104
+ notApplicable: boolean;
105
+ notAvailable: boolean;
106
+ excelValidation?: any;
107
+ customValidationRules?: any;
108
+ apiEnhancements?: any;
109
+ visibility: string;
110
+ owner?: number;
111
+ ownerUsername?: string;
112
+ labGroup?: number;
113
+ labGroupName?: string;
114
+ schema?: number;
115
+ schemaName?: string;
116
+ sourceSchema?: string;
117
+ isSystemTemplate: boolean;
118
+ isActive: boolean;
119
+ usageCount?: number;
120
+ tags?: string[];
121
+ category?: string;
122
+ lastUsedAt?: string;
123
+ canEdit?: boolean;
124
+ canDelete?: boolean;
125
+ validators?: ColumnValidator[];
126
+ inputType?: ColumnInputType;
127
+ units?: string[];
128
+ possibleDefaultValues?: (string | number)[];
129
+ ontologyOptions?: string[];
130
+ baseColumn?: boolean;
131
+ }
132
+ interface MetadataColumnTemplateShare extends BaseTimestampedModel {
133
+ id: number;
134
+ template: number;
135
+ templateName?: string;
136
+ sharedWith: number;
137
+ sharedWithUsername?: string;
138
+ sharedBy: number;
139
+ sharedByUsername?: string;
140
+ canEdit: boolean;
141
+ }
142
+ interface MetadataColumnTemplateCreateRequest {
143
+ name: string;
144
+ description?: string;
145
+ columnName: string;
146
+ columnType: string;
147
+ defaultValue?: string;
148
+ defaultPosition?: number;
149
+ ontologyType?: string;
150
+ customOntologyFilters?: any;
151
+ enableTypeahead?: boolean;
152
+ notApplicable?: boolean;
153
+ notAvailable?: boolean;
154
+ excelValidation?: any;
155
+ customValidationRules?: any;
156
+ apiEnhancements?: any;
157
+ visibility?: string;
158
+ labGroup?: number;
159
+ tags?: string[];
160
+ category?: string;
161
+ }
162
+ interface MetadataColumnTemplateUpdateRequest {
163
+ name?: string;
164
+ description?: string;
165
+ columnName?: string;
166
+ columnType?: string;
167
+ defaultValue?: string;
168
+ defaultPosition?: number;
169
+ ontologyType?: string;
170
+ customOntologyFilters?: any;
171
+ enableTypeahead?: boolean;
172
+ notApplicable?: boolean;
173
+ notAvailable?: boolean;
174
+ excelValidation?: any;
175
+ customValidationRules?: any;
176
+ apiEnhancements?: any;
177
+ visibility?: string;
178
+ isActive?: boolean;
179
+ tags?: string[];
180
+ category?: string;
181
+ }
182
+ interface MetadataColumnTemplateShareCreateRequest {
183
+ template: number;
184
+ sharedWith: number;
185
+ canEdit?: boolean;
186
+ }
187
+ interface GroupedColumnTemplate {
188
+ columnName: string;
189
+ columnType: string;
190
+ schemaCount: number;
191
+ schemas: string[];
192
+ templateIds: number[];
193
+ sampleTemplate?: MetadataColumnTemplate;
194
+ }
195
+
69
196
  interface MetadataColumnModifier {
70
197
  samples: string;
71
198
  value: string;
@@ -96,6 +223,12 @@ interface MetadataColumn extends BaseTimestampedModel {
96
223
  possibleDefaultValues: any[];
97
224
  staffOnly: boolean;
98
225
  }
226
+ /**
227
+ * A synthetic MetadataColumn with id=0 derived from a template, used for ontology search
228
+ * in sheet mode where no backend table is loaded. id=0 is falsy so column-specific
229
+ * endpoints are not used; only the ontologyType and customOntologyFilters matter.
230
+ */
231
+ declare function createSyntheticColumnFromTemplate(header: string, template: MetadataColumnTemplate): MetadataColumn;
99
232
  interface MetadataColumnCreateRequest {
100
233
  metadataTable: number;
101
234
  template?: number;
@@ -314,91 +447,72 @@ interface AdvancedAutofillResponse {
314
447
  variationsCombinations: number;
315
448
  strategy: string;
316
449
  }
317
-
318
- interface MetadataColumnTemplate extends BaseTimestampedModel {
319
- id: number;
320
- name: string;
321
- description?: string;
322
- columnName: string;
323
- columnType: string;
324
- defaultValue?: string;
325
- defaultPosition?: number;
326
- ontologyType?: string;
327
- customOntologyFilters?: any;
328
- enableTypeahead: boolean;
329
- notApplicable: boolean;
330
- notAvailable: boolean;
331
- excelValidation?: any;
332
- customValidationRules?: any;
333
- apiEnhancements?: any;
334
- visibility: string;
335
- owner?: number;
336
- ownerUsername?: string;
337
- labGroup?: number;
338
- labGroupName?: string;
339
- isSystemTemplate: boolean;
340
- isActive: boolean;
341
- usageCount?: number;
342
- tags?: string[];
343
- category?: string;
344
- lastUsedAt?: string;
345
- canEdit?: boolean;
346
- canDelete?: boolean;
450
+ interface ColumnOverrideMappingEntry {
451
+ fileColIndex: number;
452
+ columnId: number | null;
347
453
  }
348
- interface MetadataColumnTemplateShare extends BaseTimestampedModel {
349
- id: number;
350
- template: number;
351
- templateName?: string;
352
- sharedWith: number;
353
- sharedWithUsername?: string;
354
- sharedBy: number;
355
- sharedByUsername?: string;
356
- canEdit: boolean;
454
+ interface ColumnOverrideImportOptions {
455
+ updateValue: boolean;
456
+ updateModifiers: boolean;
457
+ normalizeOntology?: boolean;
357
458
  }
358
- interface MetadataColumnTemplateCreateRequest {
359
- name: string;
360
- description?: string;
459
+ interface ColumnOverrideSuggestResult {
460
+ fileHeaders: {
461
+ fileColIndex: number;
462
+ header: string;
463
+ }[];
464
+ tableColumns: {
465
+ columnId: number;
466
+ columnName: string;
467
+ columnPosition: number;
468
+ }[];
469
+ suggestedMapping: ColumnOverrideMappingEntry[];
470
+ fileRowCount: number;
471
+ tableSampleCount: number;
472
+ }
473
+ interface ColumnOverrideMatchedColumn {
474
+ columnId: number;
361
475
  columnName: string;
362
- columnType: string;
363
- defaultValue?: string;
364
- defaultPosition?: number;
365
- ontologyType?: string;
366
- customOntologyFilters?: any;
367
- enableTypeahead?: boolean;
368
- notApplicable?: boolean;
369
- notAvailable?: boolean;
370
- excelValidation?: any;
371
- customValidationRules?: any;
372
- apiEnhancements?: any;
373
- visibility?: string;
374
- labGroup?: number;
375
- tags?: string[];
376
- category?: string;
476
+ fileHeader: string;
477
+ fileColIndex: number;
478
+ currentValue: string | null;
479
+ newValue: string | null;
480
+ currentModifiers: {
481
+ samples: string;
482
+ value: string;
483
+ }[];
484
+ newModifiers: {
485
+ samples: string;
486
+ value: string;
487
+ }[];
488
+ rowsChanged: number;
377
489
  }
378
- interface MetadataColumnTemplateUpdateRequest {
379
- name?: string;
380
- description?: string;
381
- columnName?: string;
382
- columnType?: string;
383
- defaultValue?: string;
384
- defaultPosition?: number;
385
- ontologyType?: string;
386
- customOntologyFilters?: any;
387
- enableTypeahead?: boolean;
388
- notApplicable?: boolean;
389
- notAvailable?: boolean;
390
- excelValidation?: any;
391
- customValidationRules?: any;
392
- apiEnhancements?: any;
393
- visibility?: string;
394
- isActive?: boolean;
395
- tags?: string[];
396
- category?: string;
490
+ interface ColumnOverridePreviewResult {
491
+ columnsMatched: ColumnOverrideMatchedColumn[];
492
+ columnsToAdd: {
493
+ fileHeader: string;
494
+ fileColIndex: number;
495
+ columnType: string;
496
+ newValue: string | null;
497
+ newModifiers: {
498
+ samples: string;
499
+ value: string;
500
+ }[];
501
+ warning: string;
502
+ }[];
503
+ warnings: string[];
504
+ sampleCountMismatch: boolean;
505
+ fileRowCount: number;
397
506
  }
398
- interface MetadataColumnTemplateShareCreateRequest {
399
- template: number;
400
- sharedWith: number;
401
- canEdit?: boolean;
507
+ interface ColumnOverrideCommitResult {
508
+ message: string;
509
+ columnsUpdated: number;
510
+ columnsAdded: number;
511
+ warnings: string[];
512
+ updatedColumns: {
513
+ id: number;
514
+ name: string;
515
+ }[];
402
516
  }
403
517
 
404
518
  interface MetadataTableTemplate extends BaseTimestampedModel {
@@ -438,6 +552,19 @@ interface MetadataTableTemplateQueryResponse {
438
552
  previous?: string;
439
553
  results: MetadataTableTemplate[];
440
554
  }
555
+ interface MetadataTableTemplateSyncRequest {
556
+ add_new?: boolean;
557
+ update_existing?: boolean;
558
+ remove_orphans?: boolean;
559
+ }
560
+ interface MetadataTableTemplateSyncResponse {
561
+ message: string;
562
+ added: number;
563
+ updated: number;
564
+ removed: number;
565
+ errors: string[];
566
+ schemas: string[];
567
+ }
441
568
 
442
569
  interface FavouriteMetadataOption extends BaseTimestampedModel {
443
570
  id: number;
@@ -544,6 +671,21 @@ interface CellOntology {
544
671
  synonyms?: any;
545
672
  crossReferences?: any;
546
673
  }
674
+ interface BTOTerm {
675
+ identifier: string;
676
+ name: string;
677
+ synonyms?: any;
678
+ definition?: string;
679
+ xrefs?: any;
680
+ }
681
+ interface DiseaseOntologyTerm {
682
+ identifier: string;
683
+ name: string;
684
+ synonyms?: any;
685
+ definition?: string;
686
+ xrefs?: any;
687
+ }
688
+ type SchemaLayer = 'technology' | 'sample' | 'experiment' | '';
547
689
  interface Schema {
548
690
  id: number;
549
691
  name: string;
@@ -551,9 +693,36 @@ interface Schema {
551
693
  description?: string;
552
694
  category?: string;
553
695
  version?: string;
696
+ extends?: string;
697
+ usableAlone?: boolean;
698
+ layer?: SchemaLayer;
699
+ requires?: any[];
700
+ excludes?: any;
701
+ tags?: string[];
554
702
  url?: string;
555
703
  isActive: boolean;
704
+ isBuiltin: boolean;
705
+ isPublic?: boolean;
706
+ creator?: number;
707
+ creatorUsername?: string;
556
708
  columnsCount?: number;
709
+ usageCount?: number;
710
+ }
711
+ interface SchemaColumn {
712
+ id: number;
713
+ columnName: string;
714
+ columnType: string;
715
+ name: string;
716
+ ontologyType: string | null;
717
+ ontologyOptions: string[];
718
+ customOntologyFilters: Record<string, unknown>;
719
+ enableTypeahead: boolean;
720
+ inputType: string;
721
+ possibleDefaultValues: string[];
722
+ units: string[];
723
+ notApplicable: boolean;
724
+ notAvailable: boolean;
725
+ validators: unknown[];
557
726
  }
558
727
  interface OntologySuggestion {
559
728
  id: string;
@@ -685,6 +854,12 @@ interface ChunkedUploadRequest {
685
854
  metadataTableId?: number;
686
855
  createPools?: boolean;
687
856
  replaceExisting?: boolean;
857
+ overrideSampleCount?: boolean;
858
+ validateOnly?: boolean;
859
+ schemaNames?: string[];
860
+ skipOntology?: boolean;
861
+ useOlsCacheOnly?: boolean;
862
+ applySchemaTemplates?: boolean;
688
863
  }
689
864
  interface ChunkedUploadResponse {
690
865
  id: string;
@@ -699,6 +874,12 @@ interface ChunkedUploadCompletionRequest {
699
874
  metadataTableId?: number;
700
875
  createPools?: boolean;
701
876
  replaceExisting?: boolean;
877
+ overrideSampleCount?: boolean;
878
+ validateOnly?: boolean;
879
+ schemaNames?: string[];
880
+ skipOntology?: boolean;
881
+ useOlsCacheOnly?: boolean;
882
+ applySchemaTemplates?: boolean;
702
883
  }
703
884
  interface ChunkedUploadCompletionResponse {
704
885
  message?: string;
@@ -708,6 +889,31 @@ interface ChunkedUploadCompletionResponse {
708
889
  taskId?: string;
709
890
  }
710
891
 
892
+ interface ExcelLaunchRequest {
893
+ tableId: number;
894
+ tableName?: string;
895
+ }
896
+ interface ExcelLaunchCode {
897
+ code: string;
898
+ tableId: number;
899
+ tableName?: string;
900
+ expiresIn: number;
901
+ }
902
+ interface ExcelLaunchClaimRequest {
903
+ code: string;
904
+ }
905
+ interface ExcelLaunchClaimResponse {
906
+ accessToken: string;
907
+ refreshToken: string;
908
+ tableId: number;
909
+ tableName?: string;
910
+ user: {
911
+ id: number;
912
+ username: string;
913
+ email: string;
914
+ };
915
+ }
916
+
711
917
  interface MetadataTableQueryParams {
712
918
  search?: string;
713
919
  ownerId?: number;
@@ -718,6 +924,10 @@ interface MetadataTableQueryParams {
718
924
  limit?: number;
719
925
  offset?: number;
720
926
  ordering?: string;
927
+ columnName?: string;
928
+ columnValue?: string;
929
+ columnType?: string;
930
+ columnMatch?: 'contains' | 'exact';
721
931
  }
722
932
  declare class MetadataTableService extends BaseApiService {
723
933
  /**
@@ -797,6 +1007,18 @@ declare class MetadataTableService extends BaseApiService {
797
1007
  * Search metadata tables
798
1008
  */
799
1009
  searchMetadataTables(query: string): Observable<MetadataTableQueryResponse>;
1010
+ /**
1011
+ * Find tables that contain a column matching the given name and/or value
1012
+ */
1013
+ findByColumnContent(params: {
1014
+ columnName?: string;
1015
+ columnValue?: string;
1016
+ columnType?: string;
1017
+ columnMatch?: 'contains' | 'exact';
1018
+ showShared?: boolean;
1019
+ limit?: number;
1020
+ offset?: number;
1021
+ }): Observable<MetadataTableQueryResponse>;
800
1022
  /**
801
1023
  * Get metadata tables by owner
802
1024
  */
@@ -888,6 +1110,9 @@ declare class MetadataTableService extends BaseApiService {
888
1110
  staffOnly: boolean;
889
1111
  }>;
890
1112
  advancedAutofill(id: number, request: AdvancedAutofillRequest): Observable<AdvancedAutofillResponse>;
1113
+ suggestColumnMapping(tableId: number, file: File, algorithm: 'name' | 'position' | 'none'): Observable<ColumnOverrideSuggestResult>;
1114
+ previewColumnOverride(tableId: number, file: File, mapping: ColumnOverrideMappingEntry[], options: ColumnOverrideImportOptions): Observable<ColumnOverridePreviewResult>;
1115
+ commitColumnOverride(tableId: number, file: File, mapping: ColumnOverrideMappingEntry[], options: ColumnOverrideImportOptions): Observable<ColumnOverrideCommitResult>;
891
1116
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MetadataTableService, never>;
892
1117
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<MetadataTableService>;
893
1118
  }
@@ -1229,6 +1454,9 @@ declare class MetadataTableTemplateService extends BaseApiService {
1229
1454
  schemaIds: number[];
1230
1455
  name: string;
1231
1456
  description?: string;
1457
+ labGroup?: number | null;
1458
+ visibility?: string;
1459
+ isDefault?: boolean;
1232
1460
  }): Observable<{
1233
1461
  message: string;
1234
1462
  template: MetadataTableTemplate;
@@ -1241,6 +1469,7 @@ declare class MetadataTableTemplateService extends BaseApiService {
1241
1469
  name: string;
1242
1470
  description?: string;
1243
1471
  sampleCount: number;
1472
+ labGroup?: number;
1244
1473
  }): Observable<MetadataTable>;
1245
1474
  /**
1246
1475
  * Create a new metadata table directly from schema definitions
@@ -1280,6 +1509,11 @@ declare class MetadataTableTemplateService extends BaseApiService {
1280
1509
  }>;
1281
1510
  staffOnly: boolean;
1282
1511
  }>;
1512
+ /**
1513
+ * Sync template columns from linked schemas.
1514
+ * Updates existing columns with latest ontology settings and optionally adds new columns.
1515
+ */
1516
+ syncFromSchemas(id: number, request?: MetadataTableTemplateSyncRequest): Observable<MetadataTableTemplateSyncResponse>;
1283
1517
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MetadataTableTemplateService, never>;
1284
1518
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<MetadataTableTemplateService>;
1285
1519
  }
@@ -1334,10 +1568,20 @@ interface MetadataColumnTemplateQueryParams {
1334
1568
  labGroupId?: number;
1335
1569
  visibility?: string;
1336
1570
  isActive?: boolean;
1571
+ isSystemTemplate?: boolean;
1572
+ schemaId?: number;
1573
+ sourceSchema?: string;
1574
+ inputType?: string;
1337
1575
  limit?: number;
1338
1576
  offset?: number;
1339
1577
  ordering?: string;
1340
1578
  }
1579
+ interface GroupedColumnTemplateQueryParams {
1580
+ search?: string;
1581
+ isSystemTemplate?: boolean;
1582
+ limit?: number;
1583
+ offset?: number;
1584
+ }
1341
1585
  declare class MetadataColumnTemplateService extends BaseApiService {
1342
1586
  /**
1343
1587
  * Get all metadata column templates with optional filtering
@@ -1416,6 +1660,14 @@ declare class MetadataColumnTemplateService extends BaseApiService {
1416
1660
  customFilters: any;
1417
1661
  hasMore: boolean;
1418
1662
  }>;
1663
+ /**
1664
+ * Get column templates grouped by (column_name, column_type)
1665
+ */
1666
+ getGroupedColumnTemplates(params?: GroupedColumnTemplateQueryParams): Observable<PaginatedResponse<GroupedColumnTemplate>>;
1667
+ /**
1668
+ * Get all templates for a specific column name and type
1669
+ */
1670
+ getTemplatesByColumnNameAndType(columnName: string, columnType: string): Observable<MetadataColumnTemplate[]>;
1419
1671
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MetadataColumnTemplateService, never>;
1420
1672
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<MetadataColumnTemplateService>;
1421
1673
  }
@@ -1481,14 +1733,6 @@ declare class MetadataManagementService extends BaseApiService {
1481
1733
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<MetadataManagementService>;
1482
1734
  }
1483
1735
 
1484
- declare class Websocket extends WebSocketService {
1485
- constructor(authService: AuthService);
1486
- getMetadataTableUpdates(): Observable<WebSocketMessage>;
1487
- getLabGroupUpdates(): Observable<WebSocketMessage>;
1488
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<Websocket, never>;
1489
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<Websocket>;
1490
- }
1491
-
1492
1736
  declare enum NotificationType {
1493
1737
  SYSTEM = "system",
1494
1738
  METADATA_TABLE = "metadata_table",
@@ -1502,7 +1746,7 @@ declare class NotificationService extends NotificationService$1 {
1502
1746
  private websocketService;
1503
1747
  private isConnected;
1504
1748
  readonly isWebSocketConnected: _angular_core.Signal<boolean>;
1505
- constructor(websocketService: Websocket, toastService: ToastService);
1749
+ constructor();
1506
1750
  private initializeWebSocket;
1507
1751
  private setupNotificationHandlers;
1508
1752
  private handleWebSocketMessage;
@@ -1567,6 +1811,8 @@ interface SchemaQueryParams {
1567
1811
  search?: string;
1568
1812
  category?: string;
1569
1813
  isActive?: boolean;
1814
+ isBuiltin?: boolean;
1815
+ isPublic?: boolean;
1570
1816
  limit?: number;
1571
1817
  offset?: number;
1572
1818
  ordering?: string;
@@ -1584,6 +1830,10 @@ declare class SchemaService extends BaseApiService {
1584
1830
  * Get list of available schemas for creating templates
1585
1831
  */
1586
1832
  getAvailableSchemas(): Observable<Schema[]>;
1833
+ /**
1834
+ * Get columns for a schema by its integer ID
1835
+ */
1836
+ getSchemaColumns(id: number): Observable<SchemaColumn[]>;
1587
1837
  /**
1588
1838
  * Sync builtin schemas from sdrf-pipelines package (admin only)
1589
1839
  */
@@ -1668,6 +1918,98 @@ declare class SDRFDefaultsService extends BaseApiService {
1668
1918
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SDRFDefaultsService>;
1669
1919
  }
1670
1920
 
1921
+ interface ColumnConfig {
1922
+ columnName: string;
1923
+ inputType: ColumnInputType;
1924
+ validators: ColumnValidator[];
1925
+ units: string[];
1926
+ possibleValues: (string | number)[];
1927
+ description: string;
1928
+ schemaName?: string;
1929
+ }
1930
+ declare class OfficialColumnCacheService {
1931
+ private columnTemplateService;
1932
+ private columnsByName;
1933
+ private columnsBySchema;
1934
+ private columnsByKey;
1935
+ private isLoaded;
1936
+ private isLoading;
1937
+ readonly loaded: _angular_core.Signal<boolean>;
1938
+ readonly loading: _angular_core.Signal<boolean>;
1939
+ readonly columnCount: _angular_core.Signal<number>;
1940
+ readonly uniqueColumnNames: _angular_core.Signal<number>;
1941
+ constructor(columnTemplateService: MetadataColumnTemplateService);
1942
+ /**
1943
+ * Initialize the cache by loading all official (system) column templates.
1944
+ * Call this on app initialization or when first needed.
1945
+ */
1946
+ initialize(): Observable<boolean>;
1947
+ private fetchAllSystemTemplates;
1948
+ /**
1949
+ * Get all column templates with a given name (may exist in multiple schemas).
1950
+ */
1951
+ getColumns(columnName: string): MetadataColumnTemplate[];
1952
+ /**
1953
+ * Get column template by name and schema.
1954
+ * Use this when you need the exact configuration for a specific schema.
1955
+ */
1956
+ getColumn(columnName: string, schemaName?: string): MetadataColumnTemplate | undefined;
1957
+ /**
1958
+ * Get column configuration with a simplified interface.
1959
+ * If schema is specified, returns that specific config.
1960
+ * Otherwise returns the first found (typically base schema).
1961
+ */
1962
+ getColumnConfig(columnName: string, schemaName?: string): ColumnConfig | undefined;
1963
+ /**
1964
+ * Get merged configuration from all schemas for a column.
1965
+ * Combines possible values and units from all schema variants.
1966
+ */
1967
+ getMergedColumnConfig(columnName: string): ColumnConfig | undefined;
1968
+ /**
1969
+ * Get all columns for a specific schema.
1970
+ */
1971
+ getColumnsBySchema(schemaName: string): MetadataColumnTemplate[];
1972
+ /**
1973
+ * Get all available schema names.
1974
+ */
1975
+ getSchemaNames(): string[];
1976
+ /**
1977
+ * Search for columns by partial name match.
1978
+ * Returns all variants across all schemas.
1979
+ */
1980
+ searchColumns(query: string): MetadataColumnTemplate[];
1981
+ /**
1982
+ * Get columns filtered by input type.
1983
+ */
1984
+ getColumnsByInputType(inputType: ColumnInputType): MetadataColumnTemplate[];
1985
+ /**
1986
+ * Check if a column exists in official schemas.
1987
+ */
1988
+ hasColumn(columnName: string): boolean;
1989
+ /**
1990
+ * Get all schemas that define a specific column.
1991
+ */
1992
+ getSchemasForColumn(columnName: string): string[];
1993
+ /**
1994
+ * Get possible values for a column, merged from all schemas.
1995
+ */
1996
+ getPossibleValues(columnName: string): (string | number)[];
1997
+ /**
1998
+ * Get units for a number_with_unit column, merged from all schemas.
1999
+ */
2000
+ getUnits(columnName: string): string[];
2001
+ /**
2002
+ * Clear the cache (useful for testing or forced refresh).
2003
+ */
2004
+ clear(): void;
2005
+ /**
2006
+ * Force refresh the cache.
2007
+ */
2008
+ refresh(): Observable<boolean>;
2009
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OfficialColumnCacheService, never>;
2010
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<OfficialColumnCacheService>;
2011
+ }
2012
+
1671
2013
  declare class AsyncTaskService extends BaseApiService {
1672
2014
  /**
1673
2015
  * Get all async tasks for the current user with optional filtering
@@ -1704,7 +2046,26 @@ declare class AsyncExportService extends BaseApiService {
1704
2046
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AsyncExportService>;
1705
2047
  }
1706
2048
 
2049
+ declare class AsyncImportService extends BaseApiService {
2050
+ private chunkedUploadService;
2051
+ constructor();
2052
+ sdrfFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
2053
+ excelFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
2054
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AsyncImportService, never>;
2055
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AsyncImportService>;
2056
+ }
2057
+
2058
+ declare class AsyncValidationService extends BaseApiService {
2059
+ private chunkedUploadService;
2060
+ getAvailableSchemas(): Observable<ValidationSchema[]>;
2061
+ metadataTable(request: MetadataValidationRequest): Observable<AsyncTaskCreateResponse>;
2062
+ sdrfFile(request: SdrfFileValidationRequest): Observable<AsyncTaskCreateResponse>;
2063
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AsyncValidationService, never>;
2064
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AsyncValidationService>;
2065
+ }
2066
+
1707
2067
  declare class ChunkedUploadService extends BaseApiService {
2068
+ private siteConfigService;
1708
2069
  /**
1709
2070
  * Initialize or continue a chunked upload
1710
2071
  */
@@ -1728,39 +2089,30 @@ declare class ChunkedUploadService extends BaseApiService {
1728
2089
  /**
1729
2090
  * Helper method to upload a file in chunks with progress tracking
1730
2091
  */
1731
- uploadFileInChunks(file: File, chunkSize?: number, // 1MB chunks by default
1732
- options?: {
2092
+ uploadFileInChunks(file: File, chunkSize?: number, options?: {
1733
2093
  metadataTableId?: number;
1734
2094
  createPools?: boolean;
1735
2095
  replaceExisting?: boolean;
2096
+ overrideSampleCount?: boolean;
1736
2097
  uploadSessionId?: string;
2098
+ validateOnly?: boolean;
2099
+ schemaNames?: string[];
2100
+ skipOntology?: boolean;
2101
+ useOlsCacheOnly?: boolean;
2102
+ applySchemaTemplates?: boolean;
1737
2103
  onProgress?: (progress: number) => void;
1738
2104
  }): Observable<ChunkedUploadCompletionResponse>;
1739
2105
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChunkedUploadService, never>;
1740
2106
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ChunkedUploadService>;
1741
2107
  }
1742
2108
 
1743
- declare class AsyncImportService extends BaseApiService {
1744
- private chunkedUploadService;
1745
- constructor(chunkedUploadService: ChunkedUploadService);
1746
- sdrfFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
1747
- excelFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
1748
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AsyncImportService, never>;
1749
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AsyncImportService>;
1750
- }
1751
-
1752
- declare class AsyncValidationService extends BaseApiService {
1753
- metadataTable(request: MetadataValidationRequest): Observable<AsyncTaskCreateResponse>;
1754
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AsyncValidationService, never>;
1755
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AsyncValidationService>;
1756
- }
1757
-
1758
2109
  interface ChunkedFileImportRequest {
1759
2110
  file: File;
1760
2111
  metadataTableId: number;
1761
2112
  replaceExisting?: boolean;
1762
2113
  validateOntologies?: boolean;
1763
2114
  createPools?: boolean;
2115
+ applySchemaTemplates?: boolean;
1764
2116
  }
1765
2117
  interface ChunkedImportProgress {
1766
2118
  uploadProgress: number;
@@ -1769,7 +2121,7 @@ interface ChunkedImportProgress {
1769
2121
  }
1770
2122
  declare class ChunkedImportService extends BaseApiService {
1771
2123
  private chunkedUploadService;
1772
- constructor(chunkedUploadService: ChunkedUploadService);
2124
+ constructor();
1773
2125
  /**
1774
2126
  * Import SDRF file using chunked upload for better performance with large files
1775
2127
  */
@@ -1899,9 +2251,23 @@ declare class SdrfSyntaxService {
1899
2251
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdrfSyntaxService>;
1900
2252
  }
1901
2253
 
1902
- interface ElectronAPI {
1903
- platform: string;
1904
- isElectron: boolean;
2254
+ declare class Websocket extends WebSocketService {
2255
+ constructor();
2256
+ getMetadataTableUpdates(): Observable<WebSocketMessage>;
2257
+ getLabGroupUpdates(): Observable<WebSocketMessage>;
2258
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Websocket, never>;
2259
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<Websocket>;
2260
+ }
2261
+
2262
+ /**
2263
+ * @deprecated Use DesktopService instead. ElectronService is kept for backwards compatibility.
2264
+ */
2265
+ declare class ElectronService {
2266
+ private desktop;
2267
+ get isElectron(): boolean;
2268
+ get isWails(): boolean;
2269
+ get isDesktop(): boolean;
2270
+ get platform(): string;
1905
2271
  getAppVersion(): Promise<string>;
1906
2272
  getElectronVersion(): Promise<string>;
1907
2273
  minimize(): void;
@@ -1914,21 +2280,30 @@ interface ElectronAPI {
1914
2280
  downloadFile(url: string, filename?: string): Promise<string>;
1915
2281
  getBackendPort(): Promise<number>;
1916
2282
  isBackendReady(): Promise<boolean>;
1917
- onBackendStatusChange(callback: (status: any) => void): () => void;
1918
- onWindowStateChange(callback: (state: 'maximized' | 'unmaximized') => void): () => void;
1919
- }
1920
- declare global {
1921
- interface Window {
1922
- electronAPI?: ElectronAPI;
1923
- }
2283
+ onBackendStatusChange(): Observable<any>;
2284
+ onWindowStateChange(): Observable<'maximized' | 'unmaximized'>;
2285
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElectronService, never>;
2286
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ElectronService>;
1924
2287
  }
1925
- declare class ElectronService {
1926
- private electronAPI;
2288
+
2289
+ declare class DesktopService {
2290
+ private ngZone;
2291
+ private readonly _runtime;
2292
+ private backendStatusSubject;
2293
+ private windowStateSubject;
2294
+ private wailsRuntime;
1927
2295
  constructor();
2296
+ private loadWailsRuntime;
2297
+ private hasElectron;
2298
+ private hasWails;
2299
+ get runtime(): DesktopRuntime;
2300
+ get isDesktop(): boolean;
1928
2301
  get isElectron(): boolean;
2302
+ get isWails(): boolean;
1929
2303
  get platform(): string;
2304
+ private setupWailsListeners;
1930
2305
  getAppVersion(): Promise<string>;
1931
- getElectronVersion(): Promise<string>;
2306
+ getRuntimeVersion(): Promise<string>;
1932
2307
  minimize(): void;
1933
2308
  maximize(): void;
1934
2309
  close(): void;
@@ -1941,8 +2316,16 @@ declare class ElectronService {
1941
2316
  isBackendReady(): Promise<boolean>;
1942
2317
  onBackendStatusChange(): Observable<any>;
1943
2318
  onWindowStateChange(): Observable<'maximized' | 'unmaximized'>;
1944
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElectronService, never>;
1945
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ElectronService>;
2319
+ logToFile(message: string): Promise<void>;
2320
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DesktopService, never>;
2321
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DesktopService>;
2322
+ }
2323
+
2324
+ declare class ExcelLaunchService extends BaseApiService {
2325
+ createLaunchCode(request: ExcelLaunchRequest): Observable<ExcelLaunchCode>;
2326
+ claimLaunchCode(code: string): Observable<ExcelLaunchClaimResponse>;
2327
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ExcelLaunchService, never>;
2328
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ExcelLaunchService>;
1946
2329
  }
1947
2330
 
1948
2331
  declare class SdrfAgeInput implements OnInit {
@@ -1952,6 +2335,7 @@ declare class SdrfAgeInput implements OnInit {
1952
2335
  private sdrfSyntax;
1953
2336
  ageForm: FormGroup;
1954
2337
  isRange: boolean;
2338
+ constructor();
1955
2339
  ngOnInit(): void;
1956
2340
  private parseAndSetValue;
1957
2341
  private updateValue;
@@ -1980,6 +2364,7 @@ declare class SdrfModificationInput implements OnInit {
1980
2364
  showSpecifications: _angular_core.WritableSignal<boolean>;
1981
2365
  showHiddenSpecifications: _angular_core.WritableSignal<boolean>;
1982
2366
  hiddenSpecificationCount: _angular_core.WritableSignal<number>;
2367
+ constructor();
1983
2368
  ngOnInit(): void;
1984
2369
  private parseAndSetValue;
1985
2370
  private getStringValue;
@@ -2009,6 +2394,7 @@ declare class SdrfSpikedCompoundInput implements OnInit {
2009
2394
  private sdrfSyntax;
2010
2395
  spikedForm: FormGroup;
2011
2396
  compoundTypes: string[];
2397
+ constructor();
2012
2398
  ngOnInit(): void;
2013
2399
  private parseAndSetValue;
2014
2400
  private getStringValue;
@@ -2030,6 +2416,7 @@ declare class SdrfCleavageInput implements OnInit {
2030
2416
  private metadataColumnService;
2031
2417
  private metadataColumnTemplateService;
2032
2418
  cleavageForm: FormGroup;
2419
+ constructor();
2033
2420
  ngOnInit(): void;
2034
2421
  private parseAndSetValue;
2035
2422
  private getStringValue;
@@ -2042,6 +2429,45 @@ declare class SdrfCleavageInput implements OnInit {
2042
2429
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdrfCleavageInput, "ccv-sdrf-cleavage-input", never, { "value": { "alias": "value"; "required": false; }; "templateId": { "alias": "templateId"; "required": false; }; "columnId": { "alias": "columnId"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2043
2430
  }
2044
2431
 
2432
+ declare class SdrfNumberWithUnitInput implements OnInit, OnChanges {
2433
+ private fb;
2434
+ value: string;
2435
+ units: string[];
2436
+ placeholder: string;
2437
+ description: string;
2438
+ examples: (string | number)[];
2439
+ valueChange: EventEmitter<string>;
2440
+ form: FormGroup;
2441
+ constructor(fb: FormBuilder);
2442
+ ngOnInit(): void;
2443
+ ngOnChanges(changes: SimpleChanges): void;
2444
+ private parseAndSetValue;
2445
+ private updateValue;
2446
+ selectExample(example: string | number): void;
2447
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdrfNumberWithUnitInput, never>;
2448
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdrfNumberWithUnitInput, "ccv-sdrf-number-with-unit-input", never, { "value": { "alias": "value"; "required": false; }; "units": { "alias": "units"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "description": { "alias": "description"; "required": false; }; "examples": { "alias": "examples"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2449
+ }
2450
+
2451
+ declare class SdrfSelectInput implements OnInit, OnChanges {
2452
+ value: string;
2453
+ options: string[];
2454
+ placeholder: string;
2455
+ description: string;
2456
+ allowCustom: boolean;
2457
+ valueChange: EventEmitter<string>;
2458
+ selectedValue: _angular_core.WritableSignal<string>;
2459
+ isCustomMode: _angular_core.WritableSignal<boolean>;
2460
+ customValue: _angular_core.WritableSignal<string>;
2461
+ ngOnInit(): void;
2462
+ ngOnChanges(changes: SimpleChanges): void;
2463
+ private initializeValue;
2464
+ onSelectionChange(value: string): void;
2465
+ onCustomValueChange(value: string): void;
2466
+ toggleCustomMode(): void;
2467
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdrfSelectInput, never>;
2468
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdrfSelectInput, "ccv-sdrf-select-input", never, { "value": { "alias": "value"; "required": false; }; "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "description": { "alias": "description"; "required": false; }; "allowCustom": { "alias": "allowCustom"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
2469
+ }
2470
+
2045
2471
  interface MetadataValueEditConfig {
2046
2472
  columnId?: number;
2047
2473
  columnName: string;
@@ -2063,6 +2489,10 @@ interface MetadataValueEditConfig {
2063
2489
  maxSampleCount?: number;
2064
2490
  allowNotApplicable?: boolean;
2065
2491
  allowNotAvailable?: boolean;
2492
+ inputType?: ColumnInputType;
2493
+ validators?: ColumnValidator[];
2494
+ units?: string[];
2495
+ possibleDefaultValues?: (string | number)[];
2066
2496
  }
2067
2497
  declare class MetadataValueEditModal implements OnInit {
2068
2498
  private fb;
@@ -2094,10 +2524,17 @@ declare class MetadataValueEditModal implements OnInit {
2094
2524
  specialSyntaxType: _angular_core.WritableSignal<SyntaxType | null>;
2095
2525
  showSpecialInput: _angular_core.WritableSignal<boolean>;
2096
2526
  specialInputValue: _angular_core.WritableSignal<string>;
2527
+ validatorInputType: _angular_core.WritableSignal<ColumnInputType | null>;
2528
+ validatorUnits: _angular_core.WritableSignal<string[]>;
2529
+ validatorOptions: _angular_core.WritableSignal<string[]>;
2530
+ validatorDescription: _angular_core.WritableSignal<string>;
2531
+ validatorExamples: _angular_core.WritableSignal<(string | number)[]>;
2097
2532
  selectedSampleIndices: _angular_core.WritableSignal<Set<number>>;
2098
2533
  showSamplePanel: _angular_core.WritableSignal<boolean>;
2099
2534
  constructor(fb: FormBuilder, activeModal: NgbActiveModal, authService: AuthService, favouriteMetadataOptionService: FavouriteMetadataOptionService, metadataColumnService: MetadataColumnService, metadataColumnTemplateService: MetadataColumnTemplateService, labGroupService: LabGroupService, ontologySearchService: OntologySearchService);
2100
2535
  ngOnInit(): void;
2536
+ private initializeValidatorInputType;
2537
+ onValidatorInputChange(value: string): void;
2101
2538
  onCancel(): void;
2102
2539
  onClose(): void;
2103
2540
  get title(): string;
@@ -2187,17 +2624,29 @@ declare class ValidationResultsModal {
2187
2624
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ValidationResultsModal, "ccv-validation-results-modal", never, { "results": { "alias": "results"; "required": false; }; }, {}, never, never, true, never>;
2188
2625
  }
2189
2626
 
2190
- declare class MetadataValidationModal {
2627
+ declare class MetadataValidationModal implements OnInit {
2191
2628
  config?: MetadataValidationConfig;
2192
2629
  private fb;
2193
2630
  private asyncTaskService;
2631
+ private asyncValidationService;
2194
2632
  private toastService;
2195
2633
  activeModal: NgbActiveModal;
2196
2634
  isValidating: _angular_core.WritableSignal<boolean>;
2635
+ isLoadingSchemas: _angular_core.WritableSignal<boolean>;
2197
2636
  validationError: _angular_core.WritableSignal<string | null>;
2637
+ availableSchemas: _angular_core.WritableSignal<ValidationSchema[]>;
2638
+ selectedSchemas: _angular_core.WritableSignal<Set<string>>;
2198
2639
  validationForm: _angular_forms.FormGroup<{
2199
2640
  validate_sdrf_format: _angular_forms.FormControl<boolean | null>;
2641
+ skip_ontology: _angular_forms.FormControl<boolean | null>;
2642
+ include_pools: _angular_forms.FormControl<boolean | null>;
2200
2643
  }>;
2644
+ ngOnInit(): void;
2645
+ loadAvailableSchemas(): void;
2646
+ toggleSchema(schemaName: string): void;
2647
+ isSchemaSelected(schemaName: string): boolean;
2648
+ selectAllSchemas(): void;
2649
+ clearAllSchemas(): void;
2201
2650
  onSubmit(): void;
2202
2651
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MetadataValidationModal, never>;
2203
2652
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MetadataValidationModal, "ccv-metadata-validation-modal", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
@@ -2250,9 +2699,9 @@ declare class AsyncTaskUIService implements OnDestroy {
2250
2699
  private toastService;
2251
2700
  private asyncTaskMonitor;
2252
2701
  private modalService;
2253
- private electronService;
2254
- tasks$: Observable<AsyncTaskStatus[]>;
2255
- activeTasks$: Observable<AsyncTaskStatus[]>;
2702
+ private desktopService;
2703
+ tasks: _angular_core.Signal<AsyncTaskStatus[]>;
2704
+ activeTasks: _angular_core.Signal<AsyncTaskStatus[]>;
2256
2705
  metadataTableRefresh$: Observable<number>;
2257
2706
  taskCompleted$: Observable<AsyncTaskStatus>;
2258
2707
  exportTaskCompleted$: Observable<AsyncTaskStatus>;
@@ -2350,6 +2799,11 @@ declare class MetadataTableTemplates implements OnInit {
2350
2799
  * Perform the actual template column reordering with async task monitoring
2351
2800
  */
2352
2801
  private performTemplateColumnReorder;
2802
+ /**
2803
+ * Sync template columns from linked schemas.
2804
+ * Updates columns with latest ontology settings and adds new columns from schemas.
2805
+ */
2806
+ syncTemplateFromSchemas(template: MetadataTableTemplate): void;
2353
2807
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MetadataTableTemplates, never>;
2354
2808
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MetadataTableTemplates, "ccv-metadata-table-templates", never, {}, {}, never, never, true, never>;
2355
2809
  }
@@ -2414,7 +2868,9 @@ declare class ColumnEditModal implements OnInit {
2414
2868
  private activeModal;
2415
2869
  private modalService;
2416
2870
  private metadataColumnTemplateService;
2871
+ private schemaService;
2417
2872
  private sdrfSyntaxService;
2873
+ private officialColumnCache;
2418
2874
  column: MetadataColumn | null;
2419
2875
  templateId: number | null;
2420
2876
  isEdit: boolean;
@@ -2435,13 +2891,13 @@ declare class ColumnEditModal implements OnInit {
2435
2891
  totalTemplates: number;
2436
2892
  totalTemplatePages: number;
2437
2893
  Math: Math;
2438
- officialSdrfColumns: SdrfColumnConfig[];
2439
- showOfficialColumns: boolean;
2440
- selectedOfficialColumn: SdrfColumnConfig | null;
2441
- availableOfficialColumns: SdrfColumnConfig[];
2894
+ showSystemTemplatesOnly: boolean;
2895
+ selectedSchemaFilter: string;
2896
+ availableSchemas: Schema[];
2897
+ validationError: _angular_core.WritableSignal<string | null>;
2442
2898
  showTemplateSwap: boolean;
2443
2899
  showCreateCustomTemplate: boolean;
2444
- constructor(fb: FormBuilder, activeModal: NgbActiveModal, modalService: NgbModal, metadataColumnTemplateService: MetadataColumnTemplateService, sdrfSyntaxService: SdrfSyntaxService);
2900
+ constructor(fb: FormBuilder, activeModal: NgbActiveModal, modalService: NgbModal, metadataColumnTemplateService: MetadataColumnTemplateService, schemaService: SchemaService, sdrfSyntaxService: SdrfSyntaxService, officialColumnCache: OfficialColumnCacheService);
2445
2901
  ngOnInit(): void;
2446
2902
  private populateForm;
2447
2903
  private getOntologyTypeIndex;
@@ -2456,17 +2912,15 @@ declare class ColumnEditModal implements OnInit {
2456
2912
  openValueEditModal(): void;
2457
2913
  setDefaultValue(value: string): void;
2458
2914
  private loadColumnTemplates;
2915
+ private loadAvailableSchemas;
2916
+ toggleSystemTemplatesFilter(systemOnly: boolean): void;
2917
+ onSchemaFilterChange(schema: string): void;
2459
2918
  onTemplateFilterChange(): void;
2460
2919
  clearTemplateFilter(): void;
2461
2920
  onTemplatePageChange(page: number): void;
2462
2921
  onTemplateSelectionChange(): void;
2463
2922
  clearTemplate(): void;
2464
2923
  getOntologyTypeLabel(ontologyType: string): string;
2465
- toggleOfficialColumns(): void;
2466
- selectOfficialColumn(column: SdrfColumnConfig): void;
2467
- private filterOfficialColumns;
2468
- private getOntologyConfigForColumn;
2469
- private isColumnMandatory;
2470
2924
  showTemplateSwapOptions(): void;
2471
2925
  swapToTemplate(template: MetadataColumnTemplate): void;
2472
2926
  showCreateCustomTemplateOption(): void;
@@ -2475,6 +2929,7 @@ declare class ColumnEditModal implements OnInit {
2475
2929
  toggleAdvancedMode(): void;
2476
2930
  onOntologyTypeChange(event: Event): void;
2477
2931
  private getCorrectedColumnType;
2932
+ private getOntologyConfigForColumn;
2478
2933
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnEditModal, never>;
2479
2934
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ColumnEditModal, "ccv-column-edit-modal", never, { "column": { "alias": "column"; "required": false; }; "templateId": { "alias": "templateId"; "required": false; }; "isEdit": { "alias": "isEdit"; "required": false; }; }, { "columnSaved": "columnSaved"; }, never, never, true, never>;
2480
2935
  }
@@ -2483,26 +2938,48 @@ interface TemplateSchemaSelectionResult {
2483
2938
  name: string;
2484
2939
  description: string;
2485
2940
  schemaIds: number[];
2486
- labGroupId?: number;
2941
+ labGroup?: number;
2487
2942
  visibility: ResourceVisibility;
2488
2943
  isDefault: boolean;
2489
2944
  }
2490
- declare class TemplateSchemaSelectionModal {
2945
+ interface SchemasByLayer {
2946
+ technology: Schema[];
2947
+ sample: Schema[];
2948
+ experiment: Schema[];
2949
+ other: Schema[];
2950
+ }
2951
+ declare class TemplateSchemaSelectionModal implements OnInit {
2491
2952
  private fb;
2492
2953
  activeModal: NgbActiveModal;
2493
- availableSchemas: any[];
2954
+ private _availableSchemas;
2955
+ set availableSchemas(value: Schema[]);
2956
+ get availableSchemas(): Schema[];
2494
2957
  labGroups: any[];
2495
2958
  templateCreated: EventEmitter<TemplateSchemaSelectionResult>;
2496
2959
  templateForm: FormGroup;
2497
2960
  selectedSchemas: _angular_core.WritableSignal<Set<number>>;
2961
+ schemasByLayer: _angular_core.WritableSignal<SchemasByLayer>;
2962
+ layerInfo: Record<string, {
2963
+ label: string;
2964
+ icon: string;
2965
+ description: string;
2966
+ color: string;
2967
+ }>;
2498
2968
  selectedSchemasCount: _angular_core.Signal<number>;
2499
2969
  constructor(fb: FormBuilder, activeModal: NgbActiveModal);
2970
+ ngOnInit(): void;
2971
+ private groupSchemasByLayer;
2972
+ getLayerKeys(): string[];
2973
+ hasLayerSchemas(layer: string): boolean;
2974
+ getLayerSchemas(layer: string): Schema[];
2500
2975
  toggleSchema(schemaId: number): void;
2501
2976
  onSchemaCheckChange(event: Event, schemaId: number): void;
2502
2977
  isSchemaSelected(schemaId: number): boolean;
2503
2978
  getSelectedSchemas(): number[];
2504
2979
  removeSchema(schemaId: number): void;
2980
+ getSchemaById(schemaId: number): Schema | undefined;
2505
2981
  getSchemaDisplayName(schemaId: number): string;
2982
+ getSchemaLayer(schemaId: number): string;
2506
2983
  private updateDescription;
2507
2984
  canCreateTemplate(): boolean;
2508
2985
  onCreateTemplate(): void;
@@ -2516,14 +2993,14 @@ interface TableCreationData {
2516
2993
  templateId: number;
2517
2994
  sampleCount?: number;
2518
2995
  description?: string;
2519
- labGroupId?: number;
2996
+ labGroup?: number;
2520
2997
  }
2521
2998
  declare class TableCreationModalComponent implements OnInit {
2522
2999
  private fb;
2523
3000
  activeModal: NgbActiveModal;
2524
3001
  template: MetadataTableTemplate;
2525
3002
  labGroups: LabGroup[];
2526
- selectedLabGroupId?: number;
3003
+ selectedLabGroup?: number;
2527
3004
  tableCreated: EventEmitter<TableCreationData>;
2528
3005
  tableForm: FormGroup;
2529
3006
  isCreating: boolean;
@@ -2537,7 +3014,7 @@ declare class TableCreationModalComponent implements OnInit {
2537
3014
  getFieldError(fieldName: string): string | null;
2538
3015
  private getFieldLabel;
2539
3016
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCreationModalComponent, never>;
2540
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCreationModalComponent, "ccv-table-creation-modal", never, { "template": { "alias": "template"; "required": false; }; "labGroups": { "alias": "labGroups"; "required": false; }; "selectedLabGroupId": { "alias": "selectedLabGroupId"; "required": false; }; }, { "tableCreated": "tableCreated"; }, never, never, true, never>;
3017
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCreationModalComponent, "ccv-table-creation-modal", never, { "template": { "alias": "template"; "required": false; }; "labGroups": { "alias": "labGroups"; "required": false; }; "selectedLabGroup": { "alias": "selectedLabGroup"; "required": false; }; }, { "tableCreated": "tableCreated"; }, never, never, true, never>;
2541
3018
  }
2542
3019
 
2543
3020
  interface SchemaSelectionResult {
@@ -2574,6 +3051,7 @@ declare class ColumnTemplates implements OnInit {
2574
3051
  private fb;
2575
3052
  private metadataColumnTemplateService;
2576
3053
  private labGroupService;
3054
+ private schemaService;
2577
3055
  private modalService;
2578
3056
  searchForm: FormGroup;
2579
3057
  private searchParams;
@@ -2589,19 +3067,46 @@ declare class ColumnTemplates implements OnInit {
2589
3067
  columnFilter: _angular_core.WritableSignal<string>;
2590
3068
  sortField: _angular_core.WritableSignal<string>;
2591
3069
  sortDirection: _angular_core.WritableSignal<"asc" | "desc">;
3070
+ viewMode: _angular_core.WritableSignal<"flat" | "grouped">;
2592
3071
  templatesData: _angular_core.WritableSignal<{
2593
3072
  count: number;
2594
3073
  results: MetadataColumnTemplate[];
2595
3074
  }>;
2596
3075
  labGroupsData: _angular_core.WritableSignal<LabGroupQueryResponse>;
3076
+ schemasData: _angular_core.WritableSignal<PaginatedResponse<Schema>>;
3077
+ selectedSchema: _angular_core.WritableSignal<Schema | null>;
3078
+ schemaSearchText: string;
3079
+ schemaTypeFilter: _angular_core.WritableSignal<"user" | "all" | "builtin">;
3080
+ groupedTemplatesData: _angular_core.WritableSignal<{
3081
+ count: number;
3082
+ results: GroupedColumnTemplate[];
3083
+ }>;
3084
+ expandedGroups: _angular_core.WritableSignal<Set<string>>;
3085
+ groupTemplatesCache: _angular_core.WritableSignal<Map<string, MetadataColumnTemplate[]>>;
3086
+ loadingGroups: _angular_core.WritableSignal<Set<string>>;
3087
+ isLoadingGrouped: _angular_core.WritableSignal<boolean>;
3088
+ groupedCurrentPage: _angular_core.WritableSignal<number>;
3089
+ groupedPageSize: _angular_core.WritableSignal<number>;
2597
3090
  hasTemplates: _angular_core.Signal<boolean>;
2598
3091
  hasLabGroups: _angular_core.Signal<boolean>;
3092
+ hasSchemas: _angular_core.Signal<boolean>;
2599
3093
  showTemplatesPagination: _angular_core.Signal<boolean>;
2600
3094
  showLabGroupsPagination: _angular_core.Signal<boolean>;
3095
+ hasGroupedTemplates: _angular_core.Signal<boolean>;
3096
+ showGroupedPagination: _angular_core.Signal<boolean>;
2601
3097
  filteredTemplates: _angular_core.Signal<MetadataColumnTemplate[]>;
2602
- constructor(fb: FormBuilder, metadataColumnTemplateService: MetadataColumnTemplateService, labGroupService: LabGroupService, modalService: NgbModal);
3098
+ constructor(fb: FormBuilder, metadataColumnTemplateService: MetadataColumnTemplateService, labGroupService: LabGroupService, schemaService: SchemaService, modalService: NgbModal);
2603
3099
  ngOnInit(): void;
2604
3100
  private loadInitialData;
3101
+ private loadSchemas;
3102
+ private getSchemaQueryParams;
3103
+ searchSchemas: OperatorFunction<string, readonly Schema[]>;
3104
+ onSchemaTypeFilterChange(type: 'all' | 'builtin' | 'user'): void;
3105
+ formatSchema: (schema: Schema) => string;
3106
+ onSchemaSelected: (event: any) => void;
3107
+ clearSchemaFilter(): void;
3108
+ filterBySchema(template: MetadataColumnTemplate): void;
3109
+ filterBySourceSchema(sourceSchema: string): void;
2605
3110
  private loadLabGroupsWithParams;
2606
3111
  private setupSearch;
2607
3112
  private loadTemplatesWithParams;
@@ -2623,6 +3128,17 @@ declare class ColumnTemplates implements OnInit {
2623
3128
  deleteTemplate(template: MetadataColumnTemplate): void;
2624
3129
  duplicateTemplate(template: MetadataColumnTemplate): void;
2625
3130
  private refreshTemplates;
3131
+ setViewMode(mode: 'flat' | 'grouped'): void;
3132
+ private loadGroupedTemplates;
3133
+ onGroupedPageChange(page: number): void;
3134
+ getGroupKey(group: GroupedColumnTemplate): string;
3135
+ isGroupExpanded(group: GroupedColumnTemplate): boolean;
3136
+ isGroupLoading(group: GroupedColumnTemplate): boolean;
3137
+ toggleGroup(group: GroupedColumnTemplate): void;
3138
+ private loadGroupTemplates;
3139
+ getGroupTemplates(group: GroupedColumnTemplate): MetadataColumnTemplate[];
3140
+ collapseAllGroups(): void;
3141
+ expandAllGroups(): void;
2626
3142
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnTemplates, never>;
2627
3143
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ColumnTemplates, "ccv-column-templates", never, {}, {}, never, never, true, never>;
2628
3144
  }
@@ -2670,13 +3186,6 @@ declare class ColumnTemplateEditModal implements OnInit {
2670
3186
  }
2671
3187
 
2672
3188
  declare class FavoriteManagement implements OnInit {
2673
- private fb;
2674
- private favouriteMetadataOptionService;
2675
- private metadataColumnTemplateService;
2676
- private labGroupService;
2677
- private toastService;
2678
- private modalService;
2679
- private authService;
2680
3189
  Math: Math;
2681
3190
  isLoading: _angular_core.WritableSignal<boolean>;
2682
3191
  favorites: _angular_core.WritableSignal<FavouriteMetadataOption[]>;
@@ -2696,10 +3205,17 @@ declare class FavoriteManagement implements OnInit {
2696
3205
  editingFavorite: _angular_core.WritableSignal<FavouriteMetadataOption | null>;
2697
3206
  showEditModal: _angular_core.WritableSignal<boolean>;
2698
3207
  private sdrfSyntaxService;
3208
+ private fb;
3209
+ private favouriteMetadataOptionService;
3210
+ private metadataColumnTemplateService;
3211
+ private labGroupService;
3212
+ private toastService;
3213
+ private modalService;
3214
+ private authService;
2699
3215
  specialSyntaxType: _angular_core.WritableSignal<SyntaxType | null>;
2700
3216
  showSpecialInput: _angular_core.WritableSignal<boolean>;
2701
3217
  specialInputValue: _angular_core.WritableSignal<string>;
2702
- currentUser: _angular_core.WritableSignal<User | null>;
3218
+ currentUser: _angular_core.Signal<User | null>;
2703
3219
  isAdmin: _angular_core.Signal<boolean>;
2704
3220
  currentUserId: _angular_core.Signal<number | null>;
2705
3221
  userLabGroups: _angular_core.WritableSignal<LabGroup[]>;
@@ -2719,7 +3235,7 @@ declare class FavoriteManagement implements OnInit {
2719
3235
  value: string;
2720
3236
  label: string;
2721
3237
  }[];
2722
- constructor(fb: FormBuilder, favouriteMetadataOptionService: FavouriteMetadataOptionService, metadataColumnTemplateService: MetadataColumnTemplateService, labGroupService: LabGroupService, toastService: ToastService, modalService: NgbModal, authService: AuthService);
3238
+ constructor();
2723
3239
  ngOnInit(): void;
2724
3240
  loadFavorites(): void;
2725
3241
  canEditFavorite(favorite: FavouriteMetadataOption): boolean;
@@ -2822,6 +3338,7 @@ declare class MetadataTableDetails implements OnInit, OnDestroy {
2822
3338
  private toastService;
2823
3339
  private asyncTaskService;
2824
3340
  private modalService;
3341
+ private officialColumnCache;
2825
3342
  private destroy$;
2826
3343
  fileInput: ElementRef<HTMLInputElement>;
2827
3344
  excelInput: ElementRef<HTMLInputElement>;
@@ -2834,6 +3351,8 @@ declare class MetadataTableDetails implements OnInit, OnDestroy {
2834
3351
  getSortIcon(field: string): string;
2835
3352
  isSorted(field: string): boolean;
2836
3353
  isLoading: _angular_core.WritableSignal<boolean>;
3354
+ overrideSampleCount: _angular_core.WritableSignal<boolean>;
3355
+ applySchemaTemplates: _angular_core.WritableSignal<boolean>;
2837
3356
  table: _angular_core.WritableSignal<MetadataTable | null>;
2838
3357
  tableId: _angular_core.WritableSignal<number | null>;
2839
3358
  viewMode: _angular_core.WritableSignal<"list" | "table">;
@@ -2851,7 +3370,7 @@ declare class MetadataTableDetails implements OnInit, OnDestroy {
2851
3370
  poolTableRows: _angular_core.Signal<any[]>;
2852
3371
  paginatedRows: _angular_core.Signal<any[]>;
2853
3372
  totalPages: _angular_core.Signal<number>;
2854
- constructor(route: ActivatedRoute, router: Router, metadataTableService: MetadataTableService, asyncExportService: AsyncExportService, chunkedUploadService: ChunkedUploadService, samplePoolService: SamplePoolService, metadataColumnService: MetadataColumnService, toastService: ToastService, asyncTaskService: AsyncTaskUIService, modalService: NgbModal);
3373
+ constructor(route: ActivatedRoute, router: Router, metadataTableService: MetadataTableService, asyncExportService: AsyncExportService, chunkedUploadService: ChunkedUploadService, samplePoolService: SamplePoolService, metadataColumnService: MetadataColumnService, toastService: ToastService, asyncTaskService: AsyncTaskUIService, modalService: NgbModal, officialColumnCache: OfficialColumnCacheService);
2855
3374
  ngOnInit(): void;
2856
3375
  ngOnDestroy(): void;
2857
3376
  private setupAsyncTaskRefreshListener;
@@ -2896,6 +3415,7 @@ declare class MetadataTableDetails implements OnInit, OnDestroy {
2896
3415
  viewColumnDetails(column: MetadataColumn): void;
2897
3416
  editColumnSettings(column: MetadataColumn): void;
2898
3417
  openColumnHistory(column: MetadataColumn): void;
3418
+ openColumnOverrideImportModal(): void;
2899
3419
  private updateColumnSettings;
2900
3420
  editPoolColumnValue(pool: SamplePool, column: any): void;
2901
3421
  editSampleColumnValue(column: MetadataColumn, sampleIndex: number): void;
@@ -3068,18 +3588,17 @@ interface ColumnHistoryModalConfig {
3068
3588
  columnName: string;
3069
3589
  }
3070
3590
  declare class MetadataColumnHistoryModal implements OnInit {
3071
- activeModal: NgbActiveModal;
3072
- private columnService;
3073
3591
  config: ColumnHistoryModalConfig;
3074
3592
  closed: EventEmitter<void>;
3075
- history: MetadataColumnHistoryRecord[];
3076
- loading: boolean;
3077
- error: string | null;
3078
- totalCount: number;
3079
- limit: number;
3080
- offset: number;
3081
- hasMore: boolean;
3082
- constructor(activeModal: NgbActiveModal, columnService: MetadataColumnService);
3593
+ readonly history: _angular_core.WritableSignal<MetadataColumnHistoryRecord[]>;
3594
+ readonly loading: _angular_core.WritableSignal<boolean>;
3595
+ readonly error: _angular_core.WritableSignal<string | null>;
3596
+ readonly totalCount: _angular_core.WritableSignal<number>;
3597
+ readonly hasMore: _angular_core.WritableSignal<boolean>;
3598
+ private limit;
3599
+ private offset;
3600
+ readonly activeModal: NgbActiveModal;
3601
+ private columnService;
3083
3602
  ngOnInit(): void;
3084
3603
  loadHistory(): void;
3085
3604
  loadMore(): void;
@@ -3091,10 +3610,88 @@ declare class MetadataColumnHistoryModal implements OnInit {
3091
3610
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MetadataColumnHistoryModal, "ccv-metadata-column-history-modal", never, { "config": { "alias": "config"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
3092
3611
  }
3093
3612
 
3613
+ declare class OpenInExcel {
3614
+ private launchService;
3615
+ readonly tableId: _angular_core.InputSignal<number>;
3616
+ readonly tableName: _angular_core.InputSignal<string>;
3617
+ readonly buttonClass: _angular_core.InputSignal<string>;
3618
+ readonly showIcon: _angular_core.InputSignal<boolean>;
3619
+ readonly buttonText: _angular_core.InputSignal<string>;
3620
+ readonly launched: _angular_core.OutputEmitterRef<ExcelLaunchCode>;
3621
+ readonly error: _angular_core.OutputEmitterRef<string>;
3622
+ readonly isLoading: _angular_core.WritableSignal<boolean>;
3623
+ readonly launchCode: _angular_core.WritableSignal<ExcelLaunchCode | null>;
3624
+ readonly showModal: _angular_core.WritableSignal<boolean>;
3625
+ readonly copySuccess: _angular_core.WritableSignal<boolean>;
3626
+ createLaunchCode(): void;
3627
+ copyCode(): void;
3628
+ closeModal(): void;
3629
+ getExpiryTime(): string;
3630
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OpenInExcel, never>;
3631
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OpenInExcel, "ccv-open-in-excel", never, { "tableId": { "alias": "tableId"; "required": true; "isSignal": true; }; "tableName": { "alias": "tableName"; "required": false; "isSignal": true; }; "buttonClass": { "alias": "buttonClass"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "buttonText": { "alias": "buttonText"; "required": false; "isSignal": true; }; }, { "launched": "launched"; "error": "error"; }, never, never, true, never>;
3632
+ }
3633
+
3634
+ interface ColumnOverrideImportModalConfig {
3635
+ tableId: number;
3636
+ tableName: string;
3637
+ sampleCount: number;
3638
+ }
3639
+ type Step = 'upload' | 'map' | 'preview' | 'confirming' | 'done';
3640
+ declare class ColumnOverrideImportModal {
3641
+ config: ColumnOverrideImportModalConfig;
3642
+ private activeModal;
3643
+ private tableService;
3644
+ private fb;
3645
+ readonly step: _angular_core.WritableSignal<Step>;
3646
+ readonly selectedFile: _angular_core.WritableSignal<File | null>;
3647
+ readonly isLoading: _angular_core.WritableSignal<boolean>;
3648
+ readonly error: _angular_core.WritableSignal<string | null>;
3649
+ readonly suggestResult: _angular_core.WritableSignal<ColumnOverrideSuggestResult | null>;
3650
+ readonly userMapping: _angular_core.WritableSignal<ColumnOverrideMappingEntry[]>;
3651
+ readonly previewResult: _angular_core.WritableSignal<ColumnOverridePreviewResult | null>;
3652
+ readonly commitResult: _angular_core.WritableSignal<ColumnOverrideCommitResult | null>;
3653
+ readonly optionsForm: FormGroup;
3654
+ readonly mappedColumnIds: _angular_core.Signal<Set<number>>;
3655
+ readonly newColumnCount: _angular_core.Signal<number>;
3656
+ onFileChange(event: Event): void;
3657
+ generateMapping(): void;
3658
+ updateMappingEntry(fileColIndex: number, value: string): void;
3659
+ removeMappingEntry(fileColIndex: number): void;
3660
+ restoreMappingEntry(fileColIndex: number): void;
3661
+ isIgnored(fileColIndex: number): boolean;
3662
+ getColumnIdForFileCol(fileColIndex: number): string;
3663
+ reapplyAlgorithm(): void;
3664
+ preview(): void;
3665
+ confirm(): void;
3666
+ backToUpload(): void;
3667
+ backToMap(): void;
3668
+ close(): void;
3669
+ dismiss(): void;
3670
+ private buildOptions;
3671
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnOverrideImportModal, never>;
3672
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ColumnOverrideImportModal, "ccv-column-override-import-modal", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
3673
+ }
3674
+
3094
3675
  declare class CupcakeVanilla {
3095
3676
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CupcakeVanilla, never>;
3096
3677
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CupcakeVanilla, "ccv-cupcake-vanilla", never, {}, {}, never, never, true, never>;
3097
3678
  }
3098
3679
 
3099
- export { AsyncExportService, AsyncImportService, AsyncTaskService, AsyncTaskUIService, AsyncValidationService, COLUMN_TYPE_CONFIGS, ChunkedImportService, ChunkedUploadService, ColumnEditModal, ColumnTemplateEditModal, ColumnTemplates, ColumnType, CupcakeVanilla, ElectronService, ExcelExportModalComponent, FavoriteManagement, FavouriteMetadataOptionService, MSTermType, MetadataColumnAutofillModal, MetadataColumnHistoryModal, MetadataColumnService, MetadataColumnTemplateService, MetadataColumnTemplateShareService, MetadataManagementService, MetadataTableDetails, MetadataTableEditModal, MetadataTableService, MetadataTableTemplateEditModal, MetadataTableTemplateService, MetadataTableTemplates, MetadataValidationModal, MetadataValueEditModal, NotificationService, NotificationType, OFFICIAL_SDRF_COLUMNS, ONTOLOGY_TYPE_CONFIGS, OntologySearchService, OntologyType, OntologyTypeLabels, OntologyUtils, SDRFDefaultsService, SamplePoolCreateModal, SamplePoolDetailsModal, SamplePoolEditModal, SamplePoolService, SchemaSelectionModal, SchemaService, SdrfAgeInput, SdrfCleavageInput, SdrfColumnCategory, SdrfModificationInput, SdrfSpikedCompoundInput, SdrfSyntaxService, SearchReplaceModal, TableCreationModalComponent, TemplatePermissionLabels, TemplatePermissionLevel, TemplateSchemaSelectionModal, ValidationResultsModal, Websocket, getRequiredSdrfColumns, getSdrfColumnByName, getSdrfColumnsByCategory, isSdrfColumnRequired, isUnimodFullData };
3100
- export type { AdvancedAutofillRequest, AdvancedAutofillResponse, AgeFormat, ApiResponse, BaseTimestampedModel, CellOntology, ChEBICompound, ChunkedFileImportRequest, ChunkedImportProgress, ChunkedUploadCompletionRequest, ChunkedUploadCompletionResponse, ChunkedUploadRequest, ChunkedUploadResponse, ChunkedUploadStatus, CleavageAgentDetails, ColumnHistoryModalConfig, ColumnTypeConfig, ElectronAPI, ExcelExportOptions, FavouriteMetadataOption, FavouriteMetadataOptionCreateRequest, FavouriteMetadataOptionQueryParams, FavouriteMetadataOptionUpdateRequest, HumanDisease, MSUniqueVocabularies, MetadataColumn, MetadataColumnAutofillConfig, MetadataColumnCreateRequest, MetadataColumnHistoryChange, MetadataColumnHistoryRecord, MetadataColumnHistoryResponse, MetadataColumnHistorySnapshot, MetadataColumnModifier, MetadataColumnQueryParams, MetadataColumnTemplate, MetadataColumnTemplateCreateRequest, MetadataColumnTemplateQueryParams, MetadataColumnTemplateShare, MetadataColumnTemplateShareCreateRequest, MetadataColumnTemplateShareQueryParams, MetadataColumnTemplateUpdateRequest, MetadataColumnUpdateRequest, MetadataQueryParams, MetadataTable, MetadataTableCreateRequest, MetadataTableQueryParams, MetadataTableQueryResponse, MetadataTableTemplate, MetadataTableTemplateCreateRequest, MetadataTableTemplateQueryParams, MetadataTableTemplateQueryResponse, MetadataTableTemplateUpdateRequest, MetadataTableUpdateRequest, MetadataValueEditConfig, ModificationParameters, MondoDisease, NCBITaxonomy, OntologyCustomFilter, OntologySuggestParams, OntologySuggestResponse, OntologySuggestion, OntologyTypeConfig, PSIMSOntology, PaginatedResponse, PooledSample, SampleCountConfirmationError, SampleCountValidationRequest, SampleCountValidationResponse, SampleCountValidationResult, SamplePool, SamplePoolCreateRequest, SamplePoolQueryParams, SamplePoolUpdateRequest, Schema, SchemaQueryParams, SchemaSelectionResult, SdrfColumnConfig, SearchReplaceConfig, Species, SpikedCompound, SubcellularLocation, SyntaxType, SyntheticPeptide, TableCreationData, TemplateSchemaSelectionResult, Tissue, UberonAnatomy, Unimod, UnimodFullData, UnimodSpecification, ValidationResult, ValidationResults, VariationSpec, VariationSpecList, VariationSpecPattern, VariationSpecRange };
3680
+ declare class DualScrollDirective implements AfterViewInit, OnDestroy {
3681
+ private el;
3682
+ private renderer;
3683
+ private topBar;
3684
+ private topBarInner;
3685
+ private resizeObserver;
3686
+ private readonly onHostScroll;
3687
+ private readonly onTopScroll;
3688
+ constructor(el: ElementRef<HTMLElement>, renderer: Renderer2);
3689
+ ngAfterViewInit(): void;
3690
+ private syncWidth;
3691
+ ngOnDestroy(): void;
3692
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DualScrollDirective, never>;
3693
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DualScrollDirective, "[appDualScroll]", never, {}, {}, never, never, true, never>;
3694
+ }
3695
+
3696
+ export { AsyncExportService, AsyncImportService, AsyncTaskService, AsyncTaskUIService, AsyncValidationService, COLUMN_TYPE_CONFIGS, ChunkedImportService, ChunkedUploadService, ColumnEditModal, ColumnOverrideImportModal, ColumnTemplateEditModal, ColumnTemplates, ColumnType, CupcakeVanilla, DesktopService, DualScrollDirective, ElectronService, ExcelExportModalComponent, ExcelLaunchService, FavoriteManagement, FavouriteMetadataOptionService, MSTermType, MetadataColumnAutofillModal, MetadataColumnHistoryModal, MetadataColumnService, MetadataColumnTemplateService, MetadataColumnTemplateShareService, MetadataManagementService, MetadataTableDetails, MetadataTableEditModal, MetadataTableService, MetadataTableTemplateEditModal, MetadataTableTemplateService, MetadataTableTemplates, MetadataValidationModal, MetadataValueEditModal, NotificationService, NotificationType, OFFICIAL_SDRF_COLUMNS, ONTOLOGY_TYPE_CONFIGS, OfficialColumnCacheService, OntologySearchService, OntologyType, OntologyTypeLabels, OntologyUtils, OpenInExcel, SDRFDefaultsService, SamplePoolCreateModal, SamplePoolDetailsModal, SamplePoolEditModal, SamplePoolService, SchemaSelectionModal, SchemaService, SdrfAgeInput, SdrfCleavageInput, SdrfColumnCategory, SdrfModificationInput, SdrfNumberWithUnitInput, SdrfSelectInput, SdrfSpikedCompoundInput, SdrfSyntaxService, SearchReplaceModal, TableCreationModalComponent, TemplatePermissionLabels, TemplatePermissionLevel, TemplateSchemaSelectionModal, ValidationResultsModal, Websocket, createSyntheticColumnFromTemplate, getRequiredSdrfColumns, getSdrfColumnByName, getSdrfColumnsByCategory, isSdrfColumnRequired, isUnimodFullData };
3697
+ export type { AdvancedAutofillRequest, AdvancedAutofillResponse, AgeFormat, ApiError, ApiResponse, BTOTerm, BaseTimestampedModel, CellOntology, ChEBICompound, ChunkedFileImportRequest, ChunkedImportProgress, ChunkedUploadCompletionRequest, ChunkedUploadCompletionResponse, ChunkedUploadRequest, ChunkedUploadResponse, ChunkedUploadStatus, CleavageAgentDetails, ColumnConfig, ColumnHistoryModalConfig, ColumnInputType, ColumnOverrideCommitResult, ColumnOverrideImportModalConfig, ColumnOverrideImportOptions, ColumnOverrideMappingEntry, ColumnOverrideMatchedColumn, ColumnOverridePreviewResult, ColumnOverrideSuggestResult, ColumnTypeConfig, ColumnValidator, DiseaseOntologyTerm, ExcelExportOptions, ExcelLaunchClaimRequest, ExcelLaunchClaimResponse, ExcelLaunchCode, ExcelLaunchRequest, FavouriteMetadataOption, FavouriteMetadataOptionCreateRequest, FavouriteMetadataOptionQueryParams, FavouriteMetadataOptionUpdateRequest, GroupedColumnTemplate, GroupedColumnTemplateQueryParams, HumanDisease, MSUniqueVocabularies, MetadataColumn, MetadataColumnAutofillConfig, MetadataColumnCreateRequest, MetadataColumnHistoryChange, MetadataColumnHistoryRecord, MetadataColumnHistoryResponse, MetadataColumnHistorySnapshot, MetadataColumnModifier, MetadataColumnQueryParams, MetadataColumnTemplate, MetadataColumnTemplateCreateRequest, MetadataColumnTemplateQueryParams, MetadataColumnTemplateShare, MetadataColumnTemplateShareCreateRequest, MetadataColumnTemplateShareQueryParams, MetadataColumnTemplateUpdateRequest, MetadataColumnUpdateRequest, MetadataQueryParams, MetadataTable, MetadataTableCreateRequest, MetadataTableQueryParams, MetadataTableQueryResponse, MetadataTableTemplate, MetadataTableTemplateCreateRequest, MetadataTableTemplateQueryParams, MetadataTableTemplateQueryResponse, MetadataTableTemplateSyncRequest, MetadataTableTemplateSyncResponse, MetadataTableTemplateUpdateRequest, MetadataTableUpdateRequest, MetadataValueEditConfig, ModificationParameters, MondoDisease, NCBITaxonomy, OntologyCustomFilter, OntologySuggestParams, OntologySuggestResponse, OntologySuggestion, OntologyTypeConfig, PSIMSOntology, PaginatedResponse, PooledSample, SampleCountConfirmationError, SampleCountValidationRequest, SampleCountValidationResponse, SampleCountValidationResult, SamplePool, SamplePoolCreateRequest, SamplePoolQueryParams, SamplePoolUpdateRequest, Schema, SchemaColumn, SchemaLayer, SchemaQueryParams, SchemaSelectionResult, SchemasByLayer, SdrfColumnConfig, SearchReplaceConfig, Species, SpikedCompound, SubcellularLocation, SyntaxType, SyntheticPeptide, TableCreationData, TemplateSchemaSelectionResult, Tissue, UberonAnatomy, Unimod, UnimodFullData, UnimodSpecification, ValidationResult, ValidationResults, VariationSpec, VariationSpecList, VariationSpecPattern, VariationSpecRange };