@noatgnu/cupcake-vanilla 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { BaseApiService } from '@cupcake/core';
2
+ import { OnInit, EventEmitter, OnDestroy } from '@angular/core';
3
+ import { Observable, OperatorFunction } from 'rxjs';
4
+ import { BaseApiService, WebSocketService, AuthService, WebSocketMessage, NotificationService as NotificationService$1, ToastService, User, LabGroupService, LabGroup, LabGroupQueryResponse, ResourceVisibility } from '@noatgnu/cupcake-core';
5
+ export { WebSocketMessage } from '@noatgnu/cupcake-core';
6
+ import * as _angular_forms from '@angular/forms';
7
+ import { FormGroup, FormBuilder } from '@angular/forms';
8
+ import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';
9
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
4
10
 
5
11
  interface BaseTimestampedModel {
6
12
  createdAt: string;
@@ -30,6 +36,7 @@ interface MetadataQueryParams {
30
36
  }
31
37
 
32
38
  declare enum OntologyType {
39
+ NONE = "",
33
40
  SPECIES = "species",
34
41
  TISSUE = "tissue",
35
42
  HUMAN_DISEASE = "human_disease",
@@ -50,6 +57,13 @@ declare enum TemplatePermissionLevel {
50
57
  ADMIN = "admin"
51
58
  }
52
59
  declare const TemplatePermissionLabels: Record<TemplatePermissionLevel, string>;
60
+ declare enum ColumnType {
61
+ CHARACTERISTICS = "characteristics",
62
+ COMMENT = "comment",
63
+ FACTOR_VALUE = "factor_value",
64
+ SOURCE_NAME = "source_name",
65
+ SPECIAL = "special"
66
+ }
53
67
 
54
68
  interface MetadataTable extends BaseTimestampedModel {
55
69
  id: number;
@@ -86,10 +100,46 @@ interface MetadataTableUpdateRequest {
86
100
  name?: string;
87
101
  description?: string;
88
102
  sampleCount?: number;
103
+ sampleCountConfirmed?: boolean;
89
104
  version?: string;
105
+ labGroup?: number;
90
106
  isLocked?: boolean;
91
107
  isPublished?: boolean;
92
108
  }
109
+ interface SampleCountValidationRequest {
110
+ newSampleCount: number;
111
+ }
112
+ interface SampleCountValidationResult {
113
+ valid: boolean;
114
+ warnings: string[];
115
+ affectedModifiers: Array<{
116
+ modifierIndex: number;
117
+ columnName: string;
118
+ samples: string;
119
+ invalidIndices: number[];
120
+ value: string;
121
+ }>;
122
+ affectedPools: Array<{
123
+ poolName: string;
124
+ invalidPooledOnly: number[];
125
+ invalidPooledAndIndependent: number[];
126
+ }>;
127
+ samplesToRemove: number[];
128
+ }
129
+ interface SampleCountValidationResponse {
130
+ currentSampleCount: number;
131
+ newSampleCount: number;
132
+ validationResult: SampleCountValidationResult;
133
+ }
134
+ interface SampleCountConfirmationError {
135
+ sampleCount: string[];
136
+ sampleCountConfirmationDetails: {
137
+ currentSampleCount: number;
138
+ newSampleCount: number;
139
+ requiresConfirmation: true;
140
+ validationResult: SampleCountValidationResult;
141
+ };
142
+ }
93
143
  interface MetadataTableQueryResponse {
94
144
  count: number;
95
145
  next?: string;
@@ -417,6 +467,7 @@ interface CellOntology {
417
467
  interface Schema {
418
468
  id: number;
419
469
  name: string;
470
+ displayName?: string;
420
471
  description?: string;
421
472
  category?: string;
422
473
  version?: string;
@@ -427,10 +478,10 @@ interface Schema {
427
478
  interface OntologySuggestion {
428
479
  id: string;
429
480
  value: string;
430
- display_name: string;
481
+ displayName: string;
431
482
  description?: string;
432
- ontology_type: string;
433
- full_data?: any;
483
+ ontologyType: string;
484
+ fullData?: any;
434
485
  }
435
486
  interface OntologySuggestionResponse {
436
487
  count: number;
@@ -443,34 +494,34 @@ interface UnimodSpecification {
443
494
  accession: string;
444
495
  name: string;
445
496
  definition: string;
446
- additional_data: Array<{
497
+ additionalData: Array<{
447
498
  id: string;
448
499
  description: string;
449
500
  }>;
450
- general_properties: Record<string, string>;
501
+ generalProperties: Record<string, string>;
451
502
  specifications: Record<string, UnimodSpecification>;
452
- delta_mono_mass: string;
453
- delta_avge_mass: string;
454
- delta_composition: string;
503
+ deltaMonoMass: string;
504
+ deltaAvgeMass: string;
505
+ deltaComposition: string;
455
506
  [key: string]: any;
456
507
  }
457
508
  interface UnimodFullData {
458
509
  accession: string;
459
510
  name: string;
460
511
  definition: string;
461
- additional_data: Array<{
512
+ additionalData: Array<{
462
513
  id: string;
463
514
  description: string;
464
515
  }>;
465
- general_properties: Record<string, string>;
516
+ generalProperties: Record<string, string>;
466
517
  specifications: Record<string, UnimodSpecification>;
467
- delta_mono_mass: string;
468
- delta_avge_mass: string;
469
- delta_composition: string;
518
+ deltaMonoMass: string;
519
+ deltaAvgeMass: string;
520
+ deltaComposition: string;
470
521
  [key: string]: any;
471
522
  }
472
523
  declare function isUnimodFullData(suggestion: any): suggestion is {
473
- full_data: UnimodFullData;
524
+ fullData: UnimodFullData;
474
525
  };
475
526
  declare class OntologyUtils {
476
527
  static getUnimodSpecifications(suggestion: any): (UnimodSpecification & {
@@ -482,8 +533,65 @@ declare class OntologyUtils {
482
533
  static formatUnimodName(data: UnimodFullData): string;
483
534
  }
484
535
 
536
+ interface OntologyCustomFilter {
537
+ [ontologyType: string]: {
538
+ [filterKey: string]: string | number | boolean;
539
+ };
540
+ }
541
+ interface OntologyTypeConfig {
542
+ value: string;
543
+ label: string;
544
+ customFilters?: OntologyCustomFilter;
545
+ }
546
+ interface ColumnTypeConfig {
547
+ value: string;
548
+ label: string;
549
+ }
550
+ declare enum MSTermType {
551
+ INSTRUMENT = "instrument",
552
+ CLEAVAGE_AGENT = "cleavage agent",
553
+ DISSOCIATION_METHOD = "dissociation method",
554
+ SAMPLE_ATTRIBUTE = "sample attribute",
555
+ CELL_LINE = "cell line",
556
+ ENRICHMENT_PROCESS = "enrichment process",
557
+ FRACTIONATION_METHOD = "fractionation method",
558
+ DATA_ACQUISITION_METHOD = "proteomics data acquisition method",
559
+ REDUCTION_REAGENT = "reduction reagent",
560
+ ALKYLATION_REAGENT = "alkylation reagent",
561
+ MASS_ANALYZER_TYPE = "mass analyzer type",
562
+ ANCESTRAL_CATEGORY = "ancestral category",
563
+ SEX = "sex",
564
+ DEVELOPMENTAL_STAGE = "developmental stage"
565
+ }
566
+ declare const ONTOLOGY_TYPE_CONFIGS: OntologyTypeConfig[];
567
+ declare const COLUMN_TYPE_CONFIGS: ColumnTypeConfig[];
568
+
569
+ interface SdrfColumnConfig {
570
+ name: string;
571
+ type: string;
572
+ description: string;
573
+ category?: SdrfColumnCategory;
574
+ isRequired?: boolean;
575
+ }
576
+ declare enum SdrfColumnCategory {
577
+ CORE_SAMPLE = "Core Sample Metadata",
578
+ CHARACTERISTICS = "Characteristics",
579
+ ASSAY = "Assay Information",
580
+ COMMENTS = "Comments",
581
+ MODIFICATIONS = "Modifications & Enzymes",
582
+ MASS_TOLERANCES = "Mass Tolerances",
583
+ TECHNICAL_PARAMS = "Technical Parameters",
584
+ SAMPLE_PREP = "Sample Preparation",
585
+ FILE_PROJECT = "File & Project Information"
586
+ }
587
+ declare const OFFICIAL_SDRF_COLUMNS: SdrfColumnConfig[];
588
+ declare function getSdrfColumnsByCategory(category?: SdrfColumnCategory): SdrfColumnConfig[];
589
+ declare function getRequiredSdrfColumns(): SdrfColumnConfig[];
590
+ declare function getSdrfColumnByName(name: string): SdrfColumnConfig | undefined;
591
+ declare function isSdrfColumnRequired(name: string): boolean;
592
+
485
593
  type TaskStatus = 'QUEUED' | 'STARTED' | 'SUCCESS' | 'FAILURE' | 'CANCELLED';
486
- type TaskType = 'EXPORT_EXCEL' | 'EXPORT_SDRF' | 'IMPORT_SDRF' | 'IMPORT_EXCEL' | 'EXPORT_MULTIPLE_SDRF' | 'EXPORT_MULTIPLE_EXCEL' | 'VALIDATE_TABLE';
594
+ type TaskType = 'EXPORT_EXCEL' | 'EXPORT_SDRF' | 'IMPORT_SDRF' | 'IMPORT_EXCEL' | 'EXPORT_MULTIPLE_SDRF' | 'EXPORT_MULTIPLE_EXCEL' | 'VALIDATE_TABLE' | 'REORDER_TABLE_COLUMNS' | 'REORDER_TEMPLATE_COLUMNS';
487
595
  interface AsyncTaskStatus {
488
596
  id: string;
489
597
  taskType: TaskType;
@@ -562,6 +670,13 @@ interface MetadataImportRequest {
562
670
  replaceExisting?: boolean;
563
671
  validateOntologies?: boolean;
564
672
  }
673
+ interface ChunkedImportRequest {
674
+ metadataTableId: number;
675
+ chunkedUploadId: string;
676
+ replaceExisting?: boolean;
677
+ validateOntologies?: boolean;
678
+ createPools?: boolean;
679
+ }
565
680
  interface MetadataValidationRequest {
566
681
  metadataTableId: number;
567
682
  validateSdrfFormat?: boolean;
@@ -633,25 +748,11 @@ interface ChunkedUploadCompletionRequest {
633
748
  replaceExisting?: boolean;
634
749
  }
635
750
  interface ChunkedUploadCompletionResponse {
636
- message: string;
751
+ message?: string;
637
752
  filename?: string;
638
753
  warning?: string;
639
754
  error?: string;
640
- createdColumns?: number;
641
- createdPools?: number;
642
- sampleRows?: number;
643
- metadataColumns?: Array<{
644
- id: number;
645
- name: string;
646
- type: string;
647
- position: number;
648
- }>;
649
- samplePools?: Array<{
650
- id: number;
651
- name: string;
652
- totalSamples: number;
653
- isReference: boolean;
654
- }>;
755
+ taskId?: string;
655
756
  }
656
757
 
657
758
  interface MetadataTableQueryParams {
@@ -726,6 +827,15 @@ declare class MetadataTableService extends BaseApiService {
726
827
  normalizeColumnPositions(id: number): Observable<{
727
828
  message: string;
728
829
  }>;
830
+ /**
831
+ * Start async reordering of table columns by schema
832
+ */
833
+ reorderColumnsBySchemaAsync(id: number, schemaIds?: number[]): Observable<{
834
+ taskId: string;
835
+ message: string;
836
+ metadataTableId: number;
837
+ schemaIds: number[];
838
+ }>;
729
839
  /**
730
840
  * Get all tables (admin only)
731
841
  */
@@ -760,6 +870,13 @@ declare class MetadataTableService extends BaseApiService {
760
870
  message: string;
761
871
  combinedColumn: any;
762
872
  }>;
873
+ validateSampleCountChange(id: number, request: SampleCountValidationRequest): Observable<SampleCountValidationResponse>;
874
+ updateSampleCount(id: number, newSampleCount: number, confirmed?: boolean): Observable<{
875
+ message: string;
876
+ oldSampleCount: number;
877
+ newSampleCount: number;
878
+ cleanupPerformed: boolean;
879
+ }>;
763
880
  static ɵfac: i0.ɵɵFactoryDeclaration<MetadataTableService, never>;
764
881
  static ɵprov: i0.ɵɵInjectableDeclaration<MetadataTableService>;
765
882
  }
@@ -1011,6 +1128,15 @@ declare class MetadataTableTemplateService extends BaseApiService {
1011
1128
  normalizeColumnPositions(id: number): Observable<{
1012
1129
  message: string;
1013
1130
  }>;
1131
+ /**
1132
+ * Start async reordering of template columns by schema
1133
+ */
1134
+ reorderColumnsBySchemaAsync(id: number, schemaIds?: number[]): Observable<{
1135
+ taskId: string;
1136
+ message: string;
1137
+ templateId: number;
1138
+ schemaIds: number[];
1139
+ }>;
1014
1140
  /**
1015
1141
  * Apply this template to a metadata table
1016
1142
  */
@@ -1064,10 +1190,7 @@ declare class MetadataTableTemplateService extends BaseApiService {
1064
1190
  name: string;
1065
1191
  description?: string;
1066
1192
  sampleCount: number;
1067
- }): Observable<{
1068
- message: string;
1069
- table: MetadataTable;
1070
- }>;
1193
+ }): Observable<MetadataTable>;
1071
1194
  /**
1072
1195
  * Create a new metadata table directly from schema definitions
1073
1196
  */
@@ -1076,16 +1199,14 @@ declare class MetadataTableTemplateService extends BaseApiService {
1076
1199
  name: string;
1077
1200
  description?: string;
1078
1201
  sampleCount: number;
1079
- }): Observable<{
1080
- message: string;
1081
- table: MetadataTable;
1082
- }>;
1202
+ }): Observable<MetadataTable>;
1083
1203
  static ɵfac: i0.ɵɵFactoryDeclaration<MetadataTableTemplateService, never>;
1084
1204
  static ɵprov: i0.ɵɵInjectableDeclaration<MetadataTableTemplateService>;
1085
1205
  }
1086
1206
 
1087
1207
  interface FavouriteMetadataOptionQueryParams {
1088
1208
  search?: string;
1209
+ name?: string;
1089
1210
  type?: string;
1090
1211
  userId?: number;
1091
1212
  labGroupId?: number;
@@ -1280,6 +1401,56 @@ declare class MetadataManagementService extends BaseApiService {
1280
1401
  static ɵprov: i0.ɵɵInjectableDeclaration<MetadataManagementService>;
1281
1402
  }
1282
1403
 
1404
+ declare class Websocket extends WebSocketService {
1405
+ constructor(authService: AuthService);
1406
+ getMetadataTableUpdates(): Observable<WebSocketMessage>;
1407
+ getLabGroupUpdates(): Observable<WebSocketMessage>;
1408
+ static ɵfac: i0.ɵɵFactoryDeclaration<Websocket, never>;
1409
+ static ɵprov: i0.ɵɵInjectableDeclaration<Websocket>;
1410
+ }
1411
+
1412
+ declare class AdminWebSocketService extends WebSocketService {
1413
+ constructor(authService: AuthService);
1414
+ getAdminNotifications(): Observable<WebSocketMessage>;
1415
+ getSystemNotifications(): Observable<WebSocketMessage>;
1416
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminWebSocketService, never>;
1417
+ static ɵprov: i0.ɵɵInjectableDeclaration<AdminWebSocketService>;
1418
+ }
1419
+
1420
+ declare enum NotificationType {
1421
+ SYSTEM = "system",
1422
+ METADATA_TABLE = "metadata_table",
1423
+ LAB_GROUP = "lab_group",
1424
+ FILE_UPLOAD = "file_upload",
1425
+ DATA_PROCESSING = "data_processing",
1426
+ ASYNC_TASK = "async_task",
1427
+ USER = "user"
1428
+ }
1429
+ declare class NotificationService extends NotificationService$1 {
1430
+ private websocketService;
1431
+ private adminWebSocketService;
1432
+ private isConnected;
1433
+ private isAdminConnected;
1434
+ readonly isWebSocketConnected: i0.Signal<boolean>;
1435
+ readonly isAdminWebSocketConnected: i0.Signal<boolean>;
1436
+ constructor(websocketService: Websocket, adminWebSocketService: AdminWebSocketService, toastService: ToastService);
1437
+ private initializeWebSocket;
1438
+ private setupNotificationHandlers;
1439
+ private handleWebSocketMessage;
1440
+ private createNotificationFromWebSocket;
1441
+ private getAsyncTaskTitle;
1442
+ private getAsyncTaskLevel;
1443
+ private handleAdminWebSocketMessage;
1444
+ connect(): void;
1445
+ connectAdmin(): void;
1446
+ disconnect(): void;
1447
+ disconnectAdmin(): void;
1448
+ subscribeToMetadataTable(tableId: number): void;
1449
+ createVanillaNotification(type: NotificationType, title: string, message: string, level?: 'info' | 'success' | 'warning' | 'error', autoClose?: boolean): void;
1450
+ static ɵfac: i0.ɵɵFactoryDeclaration<NotificationService, never>;
1451
+ static ɵprov: i0.ɵɵInjectableDeclaration<NotificationService>;
1452
+ }
1453
+
1283
1454
  declare class OntologySearchService extends BaseApiService {
1284
1455
  /**
1285
1456
  * Get ontology suggestions across all sources for SDRF validation
@@ -1433,23 +1604,6 @@ declare class AsyncExportService extends BaseApiService {
1433
1604
  static ɵprov: i0.ɵɵInjectableDeclaration<AsyncExportService>;
1434
1605
  }
1435
1606
 
1436
- declare class AsyncImportService extends BaseApiService {
1437
- /**
1438
- * Calculate SHA256 hash of a file
1439
- */
1440
- private calculateSHA256;
1441
- sdrfFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
1442
- excelFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
1443
- static ɵfac: i0.ɵɵFactoryDeclaration<AsyncImportService, never>;
1444
- static ɵprov: i0.ɵɵInjectableDeclaration<AsyncImportService>;
1445
- }
1446
-
1447
- declare class AsyncValidationService extends BaseApiService {
1448
- metadataTable(request: MetadataValidationRequest): Observable<AsyncTaskCreateResponse>;
1449
- static ɵfac: i0.ɵɵFactoryDeclaration<AsyncValidationService, never>;
1450
- static ɵprov: i0.ɵɵInjectableDeclaration<AsyncValidationService>;
1451
- }
1452
-
1453
1607
  declare class ChunkedUploadService extends BaseApiService {
1454
1608
  /**
1455
1609
  * Initialize or continue a chunked upload
@@ -1463,6 +1617,10 @@ declare class ChunkedUploadService extends BaseApiService {
1463
1617
  * Complete the chunked upload and process the file
1464
1618
  */
1465
1619
  completeUpload(uploadId: string, request?: ChunkedUploadCompletionRequest): Observable<ChunkedUploadCompletionResponse>;
1620
+ /**
1621
+ * Complete the chunked upload by uploading the entire file at once
1622
+ */
1623
+ completeUploadWithFile(request: ChunkedUploadRequest): Observable<ChunkedUploadCompletionResponse>;
1466
1624
  /**
1467
1625
  * Delete/cancel a chunked upload
1468
1626
  */
@@ -1482,10 +1640,835 @@ declare class ChunkedUploadService extends BaseApiService {
1482
1640
  static ɵprov: i0.ɵɵInjectableDeclaration<ChunkedUploadService>;
1483
1641
  }
1484
1642
 
1643
+ declare class AsyncImportService extends BaseApiService {
1644
+ private chunkedUploadService;
1645
+ constructor(chunkedUploadService: ChunkedUploadService);
1646
+ sdrfFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
1647
+ excelFile(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
1648
+ static ɵfac: i0.ɵɵFactoryDeclaration<AsyncImportService, never>;
1649
+ static ɵprov: i0.ɵɵInjectableDeclaration<AsyncImportService>;
1650
+ }
1651
+
1652
+ declare class AsyncValidationService extends BaseApiService {
1653
+ metadataTable(request: MetadataValidationRequest): Observable<AsyncTaskCreateResponse>;
1654
+ static ɵfac: i0.ɵɵFactoryDeclaration<AsyncValidationService, never>;
1655
+ static ɵprov: i0.ɵɵInjectableDeclaration<AsyncValidationService>;
1656
+ }
1657
+
1658
+ interface ChunkedFileImportRequest {
1659
+ file: File;
1660
+ metadataTableId: number;
1661
+ replaceExisting?: boolean;
1662
+ validateOntologies?: boolean;
1663
+ createPools?: boolean;
1664
+ }
1665
+ interface ChunkedImportProgress {
1666
+ uploadProgress: number;
1667
+ phase: 'uploading' | 'processing' | 'completed' | 'failed';
1668
+ taskId?: string;
1669
+ }
1670
+ declare class ChunkedImportService extends BaseApiService {
1671
+ private chunkedUploadService;
1672
+ constructor(chunkedUploadService: ChunkedUploadService);
1673
+ /**
1674
+ * Import SDRF file using chunked upload for better performance with large files
1675
+ */
1676
+ importSdrfFileChunked(request: ChunkedFileImportRequest): Observable<AsyncTaskCreateResponse>;
1677
+ /**
1678
+ * Import Excel file using chunked upload for better performance with large files
1679
+ */
1680
+ importExcelFileChunked(request: ChunkedFileImportRequest): Observable<AsyncTaskCreateResponse>;
1681
+ /**
1682
+ * Generic chunked import that auto-detects file type
1683
+ */
1684
+ importFileChunked(request: ChunkedFileImportRequest): Observable<AsyncTaskCreateResponse>;
1685
+ /**
1686
+ * Upload file using chunked upload with metadata processing
1687
+ */
1688
+ private uploadFileChunked;
1689
+ /**
1690
+ * Trigger async import processing after chunked upload completion
1691
+ * This uses the existing async-import endpoints but with chunked upload completion
1692
+ */
1693
+ private triggerAsyncImport;
1694
+ /**
1695
+ * Validate file type
1696
+ */
1697
+ private validateFileType;
1698
+ /**
1699
+ * Get file extension from filename
1700
+ */
1701
+ private getFileExtension;
1702
+ /**
1703
+ * Create progress observable for UI updates
1704
+ */
1705
+ createProgressObservable(request: ChunkedFileImportRequest, onProgress?: (progress: ChunkedImportProgress) => void): Observable<AsyncTaskCreateResponse>;
1706
+ /**
1707
+ * Queue chunked file import task using completed chunked upload
1708
+ * This uses the new backend endpoint that processes already uploaded chunks
1709
+ */
1710
+ processChunkedUpload(request: ChunkedImportRequest): Observable<AsyncTaskCreateResponse>;
1711
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChunkedImportService, never>;
1712
+ static ɵprov: i0.ɵɵInjectableDeclaration<ChunkedImportService>;
1713
+ }
1714
+
1715
+ interface AgeFormat {
1716
+ years?: number;
1717
+ months?: number;
1718
+ days?: number;
1719
+ isRange?: boolean;
1720
+ rangeStart?: AgeFormat;
1721
+ rangeEnd?: AgeFormat;
1722
+ }
1723
+ interface ModificationParameters {
1724
+ NT?: string;
1725
+ AC?: string;
1726
+ CF?: string;
1727
+ MT?: string;
1728
+ PP?: string;
1729
+ TA?: string;
1730
+ MM?: string;
1731
+ TS?: string;
1732
+ }
1733
+ interface CleavageAgentDetails {
1734
+ NT?: string;
1735
+ AC?: string;
1736
+ CS?: string;
1737
+ }
1738
+ interface SpikedCompound {
1739
+ SP?: string;
1740
+ CT?: string;
1741
+ QY?: string;
1742
+ PS?: string;
1743
+ AC?: string;
1744
+ CN?: string;
1745
+ CV?: string;
1746
+ CS?: string;
1747
+ CF?: string;
1748
+ }
1749
+ interface PooledSample {
1750
+ value: 'not pooled' | 'pooled' | string;
1751
+ sourceNames?: string[];
1752
+ }
1753
+ interface SyntheticPeptide {
1754
+ value: 'synthetic' | 'not synthetic';
1755
+ }
1756
+ interface ValidationResult {
1757
+ isValid: boolean;
1758
+ errors: string[];
1759
+ warnings?: string[];
1760
+ }
1761
+ type SyntaxType = 'age' | 'modification' | 'cleavage' | 'spiked_compound' | 'pooled_sample' | 'synthetic_peptide';
1762
+ declare class SdrfSyntaxService {
1763
+ private readonly SPECIAL_COLUMN_PATTERNS;
1764
+ private readonly MODIFICATION_KEYS;
1765
+ private readonly CLEAVAGE_KEYS;
1766
+ private readonly SPIKED_COMPOUND_KEYS;
1767
+ private readonly POOLED_SAMPLE_VALUES;
1768
+ private readonly SYNTHETIC_PEPTIDE_VALUES;
1769
+ /**
1770
+ * Detects if a column requires special SDRF syntax handling
1771
+ */
1772
+ detectSpecialSyntax(columnName: string, columnType: string): SyntaxType | null;
1773
+ /**
1774
+ * Parses a value based on the syntax type
1775
+ */
1776
+ parseValue(syntaxType: SyntaxType, value: string): any;
1777
+ /**
1778
+ * Formats parsed data back to string format
1779
+ */
1780
+ formatValue(syntaxType: SyntaxType, data: any): string;
1781
+ /**
1782
+ * Validates parsed data
1783
+ */
1784
+ validateValue(syntaxType: SyntaxType, data: any): ValidationResult;
1785
+ private parseAgeFormat;
1786
+ private parseSingleAge;
1787
+ private formatAgeFormat;
1788
+ private formatSingleAge;
1789
+ private parseKeyValuePairs;
1790
+ private formatKeyValuePairs;
1791
+ private validateAgeFormat;
1792
+ private validateSingleAge;
1793
+ private validateModificationParameters;
1794
+ private validateCleavageAgentDetails;
1795
+ private validateSpikedCompound;
1796
+ getPooledSampleValues(): string[];
1797
+ getSyntheticPeptideValues(): string[];
1798
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdrfSyntaxService, never>;
1799
+ static ɵprov: i0.ɵɵInjectableDeclaration<SdrfSyntaxService>;
1800
+ }
1801
+
1802
+ interface ElectronAPI {
1803
+ platform: string;
1804
+ isElectron: boolean;
1805
+ getAppVersion(): Promise<string>;
1806
+ getElectronVersion(): Promise<string>;
1807
+ minimize(): void;
1808
+ maximize(): void;
1809
+ close(): void;
1810
+ isMaximized(): Promise<boolean>;
1811
+ showOpenDialog(options?: any): Promise<any>;
1812
+ showSaveDialog(options?: any): Promise<any>;
1813
+ showMessageBox(options: any): Promise<any>;
1814
+ downloadFile(url: string, filename?: string): Promise<string>;
1815
+ getBackendPort(): Promise<number>;
1816
+ isBackendReady(): Promise<boolean>;
1817
+ onBackendStatusChange(callback: (status: any) => void): () => void;
1818
+ onWindowStateChange(callback: (state: 'maximized' | 'unmaximized') => void): () => void;
1819
+ }
1820
+ declare global {
1821
+ interface Window {
1822
+ electronAPI?: ElectronAPI;
1823
+ }
1824
+ }
1825
+ declare class ElectronService {
1826
+ private electronAPI;
1827
+ constructor();
1828
+ get isElectron(): boolean;
1829
+ get platform(): string;
1830
+ getAppVersion(): Promise<string>;
1831
+ getElectronVersion(): Promise<string>;
1832
+ minimize(): void;
1833
+ maximize(): void;
1834
+ close(): void;
1835
+ isMaximized(): Promise<boolean>;
1836
+ showOpenDialog(options?: any): Promise<any>;
1837
+ showSaveDialog(options?: any): Promise<any>;
1838
+ showMessageBox(options: any): Promise<any>;
1839
+ downloadFile(url: string, filename?: string): Promise<string>;
1840
+ getBackendPort(): Promise<number>;
1841
+ isBackendReady(): Promise<boolean>;
1842
+ onBackendStatusChange(): Observable<any>;
1843
+ onWindowStateChange(): Observable<'maximized' | 'unmaximized'>;
1844
+ static ɵfac: i0.ɵɵFactoryDeclaration<ElectronService, never>;
1845
+ static ɵprov: i0.ɵɵInjectableDeclaration<ElectronService>;
1846
+ }
1847
+
1848
+ declare class SdrfAgeInput implements OnInit {
1849
+ value: string;
1850
+ valueChange: EventEmitter<string>;
1851
+ private fb;
1852
+ private sdrfSyntax;
1853
+ ageForm: FormGroup;
1854
+ isRange: boolean;
1855
+ ngOnInit(): void;
1856
+ private parseAndSetValue;
1857
+ private updateValue;
1858
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdrfAgeInput, never>;
1859
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdrfAgeInput, "ccv-sdrf-age-input", never, { "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1860
+ }
1861
+
1862
+ declare class SdrfModificationInput implements OnInit {
1863
+ value: string;
1864
+ templateId: number | null;
1865
+ columnId: number | null;
1866
+ valueChange: EventEmitter<string>;
1867
+ searchType: i0.WritableSignal<"icontains" | "istartswith">;
1868
+ private fb;
1869
+ private sdrfSyntax;
1870
+ private metadataColumnService;
1871
+ private metadataColumnTemplateService;
1872
+ modificationForm: FormGroup;
1873
+ modificationTypes: string[];
1874
+ positions: string[];
1875
+ selectedUnimodData: i0.WritableSignal<UnimodFullData | null>;
1876
+ availableSpecifications: i0.WritableSignal<(UnimodSpecification & {
1877
+ specNumber: string;
1878
+ })[]>;
1879
+ selectedSpecification: i0.WritableSignal<string | null>;
1880
+ showSpecifications: i0.WritableSignal<boolean>;
1881
+ showHiddenSpecifications: i0.WritableSignal<boolean>;
1882
+ hiddenSpecificationCount: i0.WritableSignal<number>;
1883
+ ngOnInit(): void;
1884
+ private parseAndSetValue;
1885
+ private getStringValue;
1886
+ private updateValue;
1887
+ searchModificationTerms: OperatorFunction<string, readonly OntologySuggestion[]>;
1888
+ formatOntologySuggestion: (suggestion: OntologySuggestion) => string;
1889
+ onOntologySuggestionSelected: (event: any) => void;
1890
+ formatTargetAminoAcids(value: string): string;
1891
+ onTargetAminoAcidChange(event: any): void;
1892
+ onSpecificationSelected(specNumber: string): void;
1893
+ private mapUnimodPosition;
1894
+ private mapClassificationToType;
1895
+ getSpecificationDisplay(spec: UnimodSpecification & {
1896
+ specNumber: string;
1897
+ }): string;
1898
+ onSearchTypeChange(type: 'icontains' | 'istartswith'): void;
1899
+ private updateAvailableSpecifications;
1900
+ toggleHiddenSpecifications(): void;
1901
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdrfModificationInput, never>;
1902
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdrfModificationInput, "ccv-sdrf-modification-input", never, { "value": { "alias": "value"; "required": false; }; "templateId": { "alias": "templateId"; "required": false; }; "columnId": { "alias": "columnId"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1903
+ }
1904
+
1905
+ declare class SdrfSpikedCompoundInput implements OnInit {
1906
+ value: string;
1907
+ valueChange: EventEmitter<string>;
1908
+ private fb;
1909
+ private sdrfSyntax;
1910
+ spikedForm: FormGroup;
1911
+ compoundTypes: string[];
1912
+ ngOnInit(): void;
1913
+ private parseAndSetValue;
1914
+ private getStringValue;
1915
+ private updateValue;
1916
+ get showProteinFields(): boolean;
1917
+ get showPeptideFields(): boolean;
1918
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdrfSpikedCompoundInput, never>;
1919
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdrfSpikedCompoundInput, "ccv-sdrf-spiked-compound-input", never, { "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1920
+ }
1921
+
1922
+ declare class SdrfCleavageInput implements OnInit {
1923
+ value: string;
1924
+ templateId: number | null;
1925
+ columnId: number | null;
1926
+ valueChange: EventEmitter<string>;
1927
+ searchType: i0.WritableSignal<"icontains" | "istartswith">;
1928
+ private fb;
1929
+ private sdrfSyntax;
1930
+ private metadataColumnService;
1931
+ private metadataColumnTemplateService;
1932
+ cleavageForm: FormGroup;
1933
+ ngOnInit(): void;
1934
+ private parseAndSetValue;
1935
+ private getStringValue;
1936
+ private updateValue;
1937
+ searchCleavageTerms: OperatorFunction<string, readonly OntologySuggestion[]>;
1938
+ formatOntologySuggestion: (suggestion: OntologySuggestion) => string;
1939
+ onOntologySuggestionSelected: (event: any) => void;
1940
+ onSearchTypeChange(type: 'icontains' | 'istartswith'): void;
1941
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdrfCleavageInput, never>;
1942
+ static ɵcmp: i0.ɵɵ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>;
1943
+ }
1944
+
1945
+ interface MetadataValueEditConfig {
1946
+ columnId?: number;
1947
+ columnName: string;
1948
+ columnType: string;
1949
+ ontologyType?: string;
1950
+ enableTypeahead?: boolean;
1951
+ currentValue?: string;
1952
+ context: 'template' | 'table' | 'pool' | 'favorite_management';
1953
+ templateId?: number;
1954
+ tableId?: number;
1955
+ poolId?: number;
1956
+ customOntologyFilters?: Record<string, any>;
1957
+ enableMultiSampleEdit?: boolean;
1958
+ sampleData?: {
1959
+ index: number;
1960
+ value: string;
1961
+ sourceName?: string;
1962
+ }[];
1963
+ maxSampleCount?: number;
1964
+ }
1965
+ declare class MetadataValueEditModal implements OnInit {
1966
+ private fb;
1967
+ private activeModal;
1968
+ private authService;
1969
+ private favouriteMetadataOptionService;
1970
+ private metadataColumnService;
1971
+ private metadataColumnTemplateService;
1972
+ private labGroupService;
1973
+ config: MetadataValueEditConfig;
1974
+ valueSaved: EventEmitter<string | {
1975
+ value: string;
1976
+ sampleIndices: number[];
1977
+ }>;
1978
+ editForm: FormGroup;
1979
+ isLoading: i0.WritableSignal<boolean>;
1980
+ isLoadingSuggestions: i0.WritableSignal<boolean>;
1981
+ searchType: i0.WritableSignal<"icontains" | "istartswith">;
1982
+ isLoadingFavorites: i0.WritableSignal<boolean>;
1983
+ userFavorites: i0.WritableSignal<FavouriteMetadataOption[]>;
1984
+ labGroupFavorites: i0.WritableSignal<FavouriteMetadataOption[]>;
1985
+ globalFavorites: i0.WritableSignal<FavouriteMetadataOption[]>;
1986
+ selectedFavorite: i0.WritableSignal<FavouriteMetadataOption | null>;
1987
+ currentUser: i0.WritableSignal<User | null>;
1988
+ userLabGroups: i0.WritableSignal<number[]>;
1989
+ activeFavoritesTab: 'user' | 'lab_group' | 'global';
1990
+ private sdrfSyntaxService;
1991
+ specialSyntaxType: i0.WritableSignal<SyntaxType | null>;
1992
+ showSpecialInput: i0.WritableSignal<boolean>;
1993
+ specialInputValue: i0.WritableSignal<string>;
1994
+ selectedSampleIndices: i0.WritableSignal<Set<number>>;
1995
+ showSamplePanel: i0.WritableSignal<boolean>;
1996
+ constructor(fb: FormBuilder, activeModal: NgbActiveModal, authService: AuthService, favouriteMetadataOptionService: FavouriteMetadataOptionService, metadataColumnService: MetadataColumnService, metadataColumnTemplateService: MetadataColumnTemplateService, labGroupService: LabGroupService);
1997
+ ngOnInit(): void;
1998
+ onCancel(): void;
1999
+ onClose(): void;
2000
+ get title(): string;
2001
+ get hasOntologyType(): boolean;
2002
+ get ontologyTypeLabel(): string;
2003
+ get isFromFavoriteManagement(): boolean;
2004
+ searchOntology: (text$: Observable<string>) => Observable<OntologySuggestion[]>;
2005
+ formatSuggestion: (suggestion: OntologySuggestion) => string;
2006
+ inputFormatter: (suggestion: OntologySuggestion) => string;
2007
+ onSuggestionSelected: (event: any) => void;
2008
+ onSearchTypeChange(type: 'icontains' | 'istartswith'): void;
2009
+ clearValue(): void;
2010
+ loadFavoriteOptions(): void;
2011
+ selectFavorite(favorite: FavouriteMetadataOption): void;
2012
+ onFavoriteSelected(event: Event, favoritesList: FavouriteMetadataOption[]): void;
2013
+ setActiveFavoritesTab(tab: 'user' | 'lab_group' | 'global'): void;
2014
+ setInitialActiveFavoritesTab(): void;
2015
+ addToFavorites(scope?: 'user' | 'lab_group' | 'global'): void;
2016
+ get hasFavorites(): boolean;
2017
+ getFavoriteDisplayValue(favorite: FavouriteMetadataOption): string;
2018
+ getFavoriteTooltip(favorite: FavouriteMetadataOption): string;
2019
+ hasCustomDisplayValue(favorite: FavouriteMetadataOption): boolean;
2020
+ getSelectedFavoriteInfo(): string;
2021
+ loadUserLabGroups(): void;
2022
+ onSpecialInputChange(value: string): void;
2023
+ toggleSpecialInput(): void;
2024
+ getSpecialInputTitle(): string;
2025
+ get hasMultiSampleEdit(): boolean;
2026
+ get sampleData(): {
2027
+ index: number;
2028
+ value: string;
2029
+ sourceName?: string;
2030
+ }[];
2031
+ toggleSampleSelection(sampleIndex: number): void;
2032
+ selectAllSamples(): void;
2033
+ clearSampleSelection(): void;
2034
+ get selectedSampleCount(): number;
2035
+ get totalSampleCount(): number;
2036
+ isSampleSelected(sampleIndex: number): boolean;
2037
+ onSubmit(): void;
2038
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetadataValueEditModal, never>;
2039
+ static ɵcmp: i0.ɵɵComponentDeclaration<MetadataValueEditModal, "ccv-metadata-value-edit-modal", never, { "config": { "alias": "config"; "required": false; }; }, { "valueSaved": "valueSaved"; }, never, never, true, never>;
2040
+ }
2041
+
2042
+ interface ExcelExportOptions {
2043
+ includeLabGroups: 'none' | 'selected' | 'all';
2044
+ selectedLabGroupIds: number[];
2045
+ includePools: boolean;
2046
+ }
2047
+ declare class ExcelExportModalComponent implements OnInit {
2048
+ activeModal: NgbActiveModal;
2049
+ labGroupService: LabGroupService;
2050
+ isLoadingLabGroups: i0.WritableSignal<boolean>;
2051
+ availableLabGroups: i0.WritableSignal<LabGroup[]>;
2052
+ includeLabGroups: i0.WritableSignal<"none" | "selected" | "all">;
2053
+ selectedLabGroupIds: i0.WritableSignal<number[]>;
2054
+ includePools: i0.WritableSignal<boolean>;
2055
+ showLabGroupSelection: i0.Signal<boolean>;
2056
+ canConfirm: i0.Signal<boolean>;
2057
+ ngOnInit(): void;
2058
+ private loadLabGroups;
2059
+ onLabGroupToggle(labGroupId: number, checked: boolean): void;
2060
+ isLabGroupSelected(labGroupId: number): boolean;
2061
+ onIncludeLabGroupsChange(value: 'none' | 'selected' | 'all'): void;
2062
+ selectAllLabGroups(): void;
2063
+ deselectAllLabGroups(): void;
2064
+ confirm(): void;
2065
+ cancel(): void;
2066
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExcelExportModalComponent, never>;
2067
+ static ɵcmp: i0.ɵɵComponentDeclaration<ExcelExportModalComponent, "ccv-excel-export-modal", never, {}, {}, never, never, true, never>;
2068
+ }
2069
+
2070
+ interface ValidationResults {
2071
+ success: boolean;
2072
+ metadata_table_id: number;
2073
+ metadata_table_name: string;
2074
+ validation_timestamp: string;
2075
+ errors: string[];
2076
+ warnings: string[];
2077
+ }
2078
+ declare class ValidationResultsModal {
2079
+ results?: ValidationResults;
2080
+ activeModal: NgbActiveModal;
2081
+ formatTimestamp(timestamp: string): string;
2082
+ static ɵfac: i0.ɵɵFactoryDeclaration<ValidationResultsModal, never>;
2083
+ static ɵcmp: i0.ɵɵComponentDeclaration<ValidationResultsModal, "ccv-validation-results-modal", never, { "results": { "alias": "results"; "required": false; }; }, {}, never, never, true, never>;
2084
+ }
2085
+
2086
+ declare class MetadataValidationModal {
2087
+ config?: MetadataValidationConfig;
2088
+ private fb;
2089
+ private asyncTaskService;
2090
+ private toastService;
2091
+ activeModal: NgbActiveModal;
2092
+ isValidating: i0.WritableSignal<boolean>;
2093
+ validationError: i0.WritableSignal<string | null>;
2094
+ validationForm: _angular_forms.FormGroup<{
2095
+ validate_sdrf_format: _angular_forms.FormControl<boolean | null>;
2096
+ }>;
2097
+ onSubmit(): void;
2098
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetadataValidationModal, never>;
2099
+ static ɵcmp: i0.ɵɵComponentDeclaration<MetadataValidationModal, "ccv-metadata-validation-modal", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
2100
+ }
2101
+
2102
+ declare class MetadataTableEditModal implements OnInit {
2103
+ private fb;
2104
+ private activeModal;
2105
+ private modalService;
2106
+ private metadataTableService;
2107
+ private labGroupService;
2108
+ table?: MetadataTable;
2109
+ isCreateMode: boolean;
2110
+ tableSaved: EventEmitter<MetadataTable>;
2111
+ editForm: FormGroup;
2112
+ isLoading: i0.WritableSignal<boolean>;
2113
+ availableLabGroups: i0.WritableSignal<LabGroup[]>;
2114
+ isLoadingLabGroups: i0.WritableSignal<boolean>;
2115
+ constructor(fb: FormBuilder, activeModal: NgbActiveModal, modalService: NgbModal, metadataTableService: MetadataTableService, labGroupService: LabGroupService);
2116
+ ngOnInit(): void;
2117
+ loadLabGroups(): void;
2118
+ onSubmit(): void;
2119
+ private performCreate;
2120
+ private performUpdate;
2121
+ private handleSampleCountConfirmation;
2122
+ private formatAffectedData;
2123
+ private isSampleCountConfirmationError;
2124
+ onCancel(): void;
2125
+ get title(): string;
2126
+ get hasChanges(): boolean;
2127
+ isFieldInvalid(fieldName: string): boolean;
2128
+ getFieldError(fieldName: string): string;
2129
+ private getFieldDisplayName;
2130
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetadataTableEditModal, never>;
2131
+ static ɵcmp: i0.ɵɵComponentDeclaration<MetadataTableEditModal, "ccv-metadata-table-edit-modal", never, { "table": { "alias": "table"; "required": false; }; "isCreateMode": { "alias": "isCreateMode"; "required": false; }; }, { "tableSaved": "tableSaved"; }, never, never, true, never>;
2132
+ }
2133
+
2134
+ declare class AsyncTaskUIService implements OnDestroy {
2135
+ private destroy$;
2136
+ private tasksSubject;
2137
+ private isSubscribed;
2138
+ private metadataTableRefreshSubject;
2139
+ private taskCompletedSubject;
2140
+ private exportTaskCompletedSubject;
2141
+ private readonly sessionId;
2142
+ private initiatedTasks;
2143
+ private libraryAsyncTaskService;
2144
+ private asyncExportService;
2145
+ private asyncImportService;
2146
+ private asyncValidationService;
2147
+ private toastService;
2148
+ private websocket;
2149
+ private modalService;
2150
+ private electronService;
2151
+ tasks$: Observable<AsyncTaskStatus[]>;
2152
+ activeTasks$: Observable<AsyncTaskStatus[]>;
2153
+ metadataTableRefresh$: Observable<number>;
2154
+ taskCompleted$: Observable<AsyncTaskStatus>;
2155
+ exportTaskCompleted$: Observable<AsyncTaskStatus>;
2156
+ constructor();
2157
+ ngOnDestroy(): void;
2158
+ private initializeService;
2159
+ startRealtimeUpdates(): void;
2160
+ stopRealtimeUpdates(): void;
2161
+ getTasks(): Observable<AsyncTaskStatus[]>;
2162
+ getTask(taskId: string): Observable<AsyncTaskStatus>;
2163
+ cancelTask(taskId: string): Observable<{
2164
+ message: string;
2165
+ }>;
2166
+ private generateSessionId;
2167
+ private isTaskInitiatedByThisTab;
2168
+ /**
2169
+ * Mark a task as initiated by this tab for tracking purposes
2170
+ */
2171
+ monitorTask(taskId: string): void;
2172
+ queueExcelExport(request: MetadataExportRequest): Observable<AsyncTaskCreateResponse>;
2173
+ queueSdrfExport(request: MetadataExportRequest): Observable<AsyncTaskCreateResponse>;
2174
+ queueSdrfImport(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
2175
+ queueExcelImport(request: MetadataImportRequest): Observable<AsyncTaskCreateResponse>;
2176
+ queueBulkSdrfExport(request: BulkExportRequest): Observable<AsyncTaskCreateResponse>;
2177
+ queueBulkExcelExport(request: BulkExcelExportRequest): Observable<AsyncTaskCreateResponse>;
2178
+ downloadTaskResult(taskId: string): void;
2179
+ validateMetadataTable(validationRequest: MetadataValidationRequest): Observable<AsyncTaskCreateResponse>;
2180
+ private handleTaskUpdate;
2181
+ private showTaskProgressNotification;
2182
+ private showTaskCompletionNotification;
2183
+ getTaskDisplayName(taskType: string): string;
2184
+ getTaskStatusClass(status: string): string;
2185
+ formatDuration(duration: number | null): string;
2186
+ canCancelTask(status: string): boolean;
2187
+ canDownloadResult(task: AsyncTaskStatus): boolean;
2188
+ private isImportTask;
2189
+ private isExportTask;
2190
+ private handleExportTaskCompletion;
2191
+ private handleValidationTaskCompletion;
2192
+ private showValidationResultsModal;
2193
+ private handleImportTaskCompletion;
2194
+ private handleReorderTaskCompletion;
2195
+ static ɵfac: i0.ɵɵFactoryDeclaration<AsyncTaskUIService, never>;
2196
+ static ɵprov: i0.ɵɵInjectableDeclaration<AsyncTaskUIService>;
2197
+ }
2198
+
2199
+ declare class MetadataTableTemplates implements OnInit {
2200
+ private fb;
2201
+ private metadataTableTemplateService;
2202
+ private labGroupService;
2203
+ private modalService;
2204
+ private toastService;
2205
+ private asyncTaskService;
2206
+ searchForm: FormGroup;
2207
+ private searchParams;
2208
+ private labGroupParams;
2209
+ isLoading: i0.WritableSignal<boolean>;
2210
+ selectedLabGroup: i0.WritableSignal<LabGroup | null>;
2211
+ currentPage: i0.WritableSignal<number>;
2212
+ pageSize: i0.WritableSignal<number>;
2213
+ totalItems: i0.WritableSignal<number>;
2214
+ labGroupsCurrentPage: i0.WritableSignal<number>;
2215
+ labGroupsPageSize: i0.WritableSignal<number>;
2216
+ labGroupsTotalItems: i0.WritableSignal<number>;
2217
+ templatesData: i0.WritableSignal<MetadataTableTemplateQueryResponse>;
2218
+ labGroupsData: i0.WritableSignal<LabGroupQueryResponse>;
2219
+ hasTemplates: i0.Signal<boolean>;
2220
+ hasLabGroups: i0.Signal<boolean>;
2221
+ showTemplatesPagination: i0.Signal<boolean>;
2222
+ showLabGroupsPagination: i0.Signal<boolean>;
2223
+ availableSchemas: i0.WritableSignal<any[]>;
2224
+ isLoadingSchemas: i0.WritableSignal<boolean>;
2225
+ constructor(fb: FormBuilder, metadataTableTemplateService: MetadataTableTemplateService, labGroupService: LabGroupService, modalService: NgbModal, toastService: ToastService, asyncTaskService: AsyncTaskUIService);
2226
+ ngOnInit(): void;
2227
+ private loadInitialData;
2228
+ private loadLabGroupsWithParams;
2229
+ private setupSearch;
2230
+ private loadTemplatesWithParams;
2231
+ onLabGroupChange(event: Event): void;
2232
+ private findLabGroupById;
2233
+ getLabGroupName(labGroupId: number | undefined): string;
2234
+ onPageChange(page: number): void;
2235
+ onLabGroupsPageChange(page: number): void;
2236
+ createTemplate(): void;
2237
+ editTemplate(template: MetadataTableTemplate): void;
2238
+ deleteTemplate(template: MetadataTableTemplate): void;
2239
+ duplicateTemplate(template: MetadataTableTemplate): void;
2240
+ private openTemplateModal;
2241
+ private handleTemplateSave;
2242
+ private refreshTemplates;
2243
+ private loadAvailableSchemas;
2244
+ createTemplateWithCustomSchemas(): void;
2245
+ private openSchemaSelectionModal;
2246
+ private handleSchemaTemplateCreation;
2247
+ createTableFromTemplate(template: MetadataTableTemplate): void;
2248
+ private openTableCreationModal;
2249
+ private handleTableCreation;
2250
+ /**
2251
+ * Reorder template columns by schema selection
2252
+ */
2253
+ reorderTemplateColumns(template: MetadataTableTemplate): void;
2254
+ /**
2255
+ * Perform the actual template column reordering with async task monitoring
2256
+ */
2257
+ private performTemplateColumnReorder;
2258
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetadataTableTemplates, never>;
2259
+ static ɵcmp: i0.ɵɵComponentDeclaration<MetadataTableTemplates, "ccv-metadata-table-templates", never, {}, {}, never, never, true, never>;
2260
+ }
2261
+
2262
+ declare class MetadataTableTemplateEditModal implements OnInit {
2263
+ private fb;
2264
+ private activeModal;
2265
+ private modalService;
2266
+ private metadataTableTemplateService;
2267
+ private toastService;
2268
+ template: MetadataTableTemplate | null;
2269
+ labGroups: LabGroup[];
2270
+ isEdit: boolean;
2271
+ templateSaved: EventEmitter<Partial<MetadataTableTemplate>>;
2272
+ editForm: FormGroup;
2273
+ isLoading: i0.WritableSignal<boolean>;
2274
+ _templateColumns: i0.WritableSignal<MetadataColumn[]>;
2275
+ templateColumns: i0.Signal<MetadataColumn[]>;
2276
+ visibilityOptions: {
2277
+ value: ResourceVisibility;
2278
+ label: string;
2279
+ }[];
2280
+ constructor(fb: FormBuilder, activeModal: NgbActiveModal, modalService: NgbModal, metadataTableTemplateService: MetadataTableTemplateService, toastService: ToastService);
2281
+ ngOnInit(): void;
2282
+ private populateForm;
2283
+ onSubmit(): void;
2284
+ private markFormGroupTouched;
2285
+ onCancel(): void;
2286
+ onClose(): void;
2287
+ getFieldError(fieldName: string): string;
2288
+ get title(): string;
2289
+ addColumn(): void;
2290
+ addColumnWithAutoReorder(): void;
2291
+ editColumn(column: MetadataColumn): void;
2292
+ duplicateColumn(column: MetadataColumn): void;
2293
+ removeColumn(column: MetadataColumn): void;
2294
+ onColumnDrop(event: CdkDragDrop<MetadataColumn[]>): void;
2295
+ private openColumnModal;
2296
+ private handleColumnSave;
2297
+ private handleColumnSaveWithAutoReorder;
2298
+ private reloadTemplateColumns;
2299
+ private generateTempId;
2300
+ private getNextPositionForSameType;
2301
+ private getNextPositionForNameType;
2302
+ private normalizeColumnPositions;
2303
+ private enforceGrouping;
2304
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetadataTableTemplateEditModal, never>;
2305
+ static ɵcmp: i0.ɵɵComponentDeclaration<MetadataTableTemplateEditModal, "ccv-metadata-table-template-edit-modal", never, { "template": { "alias": "template"; "required": false; }; "labGroups": { "alias": "labGroups"; "required": false; }; "isEdit": { "alias": "isEdit"; "required": false; }; }, { "templateSaved": "templateSaved"; }, never, never, true, never>;
2306
+ }
2307
+
2308
+ declare class ColumnEditModal implements OnInit {
2309
+ private fb;
2310
+ private activeModal;
2311
+ private modalService;
2312
+ private metadataColumnTemplateService;
2313
+ private sdrfSyntaxService;
2314
+ column: MetadataColumn | null;
2315
+ templateId: number | null;
2316
+ isEdit: boolean;
2317
+ columnSaved: EventEmitter<Partial<MetadataColumn>>;
2318
+ editForm: FormGroup;
2319
+ isLoading: i0.WritableSignal<boolean>;
2320
+ showAdvancedMode: i0.WritableSignal<boolean>;
2321
+ selectedOntologyConfig: OntologyTypeConfig | null;
2322
+ columnTypes: ColumnTypeConfig[];
2323
+ ontologyTypes: OntologyTypeConfig[];
2324
+ templateFilter: string;
2325
+ selectedTemplateId: number | string;
2326
+ selectedTemplate: MetadataColumnTemplate | null;
2327
+ templates: MetadataColumnTemplate[];
2328
+ isLoadingTemplates: boolean;
2329
+ currentTemplatePage: number;
2330
+ templatePageSize: number;
2331
+ totalTemplates: number;
2332
+ totalTemplatePages: number;
2333
+ Math: Math;
2334
+ officialSdrfColumns: SdrfColumnConfig[];
2335
+ showOfficialColumns: boolean;
2336
+ selectedOfficialColumn: SdrfColumnConfig | null;
2337
+ availableOfficialColumns: SdrfColumnConfig[];
2338
+ showTemplateSwap: boolean;
2339
+ showCreateCustomTemplate: boolean;
2340
+ constructor(fb: FormBuilder, activeModal: NgbActiveModal, modalService: NgbModal, metadataColumnTemplateService: MetadataColumnTemplateService, sdrfSyntaxService: SdrfSyntaxService);
2341
+ ngOnInit(): void;
2342
+ private populateForm;
2343
+ onSubmit(): void;
2344
+ private markFormGroupTouched;
2345
+ onCancel(): void;
2346
+ onClose(): void;
2347
+ getFieldError(fieldName: string): string;
2348
+ get title(): string;
2349
+ get hasOntologyType(): boolean;
2350
+ get hasTypeaheadEnabled(): boolean;
2351
+ openValueEditModal(): void;
2352
+ private loadColumnTemplates;
2353
+ onTemplateFilterChange(): void;
2354
+ clearTemplateFilter(): void;
2355
+ onTemplatePageChange(page: number): void;
2356
+ onTemplateSelectionChange(): void;
2357
+ clearTemplate(): void;
2358
+ getOntologyTypeLabel(ontologyType: string): string;
2359
+ toggleOfficialColumns(): void;
2360
+ selectOfficialColumn(column: SdrfColumnConfig): void;
2361
+ private filterOfficialColumns;
2362
+ private getDefaultOntologyTypeForColumn;
2363
+ private shouldEnableTypeaheadForColumn;
2364
+ private isColumnMandatory;
2365
+ showTemplateSwapOptions(): void;
2366
+ swapToTemplate(template: MetadataColumnTemplate): void;
2367
+ showCreateCustomTemplateOption(): void;
2368
+ createCustomTemplate(): void;
2369
+ cancelTemplateSwap(): void;
2370
+ toggleAdvancedMode(): void;
2371
+ onOntologyTypeChange(event: Event): void;
2372
+ private getCorrectedColumnType;
2373
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnEditModal, never>;
2374
+ static ɵcmp: i0.ɵɵ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>;
2375
+ }
2376
+
2377
+ interface TemplateSchemaSelectionResult {
2378
+ name: string;
2379
+ description: string;
2380
+ schemaIds: number[];
2381
+ labGroupId?: number;
2382
+ visibility: ResourceVisibility;
2383
+ isDefault: boolean;
2384
+ }
2385
+ declare class TemplateSchemaSelectionModal {
2386
+ private fb;
2387
+ activeModal: NgbActiveModal;
2388
+ availableSchemas: any[];
2389
+ labGroups: any[];
2390
+ templateCreated: EventEmitter<TemplateSchemaSelectionResult>;
2391
+ templateForm: FormGroup;
2392
+ selectedSchemas: i0.WritableSignal<Set<number>>;
2393
+ selectedSchemasCount: i0.Signal<number>;
2394
+ constructor(fb: FormBuilder, activeModal: NgbActiveModal);
2395
+ toggleSchema(schemaId: number): void;
2396
+ onSchemaCheckChange(event: Event, schemaId: number): void;
2397
+ isSchemaSelected(schemaId: number): boolean;
2398
+ getSelectedSchemas(): number[];
2399
+ removeSchema(schemaId: number): void;
2400
+ getSchemaDisplayName(schemaId: number): string;
2401
+ private updateDescription;
2402
+ canCreateTemplate(): boolean;
2403
+ onCreateTemplate(): void;
2404
+ onCancel(): void;
2405
+ static ɵfac: i0.ɵɵFactoryDeclaration<TemplateSchemaSelectionModal, never>;
2406
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateSchemaSelectionModal, "ccv-template-schema-selection-modal", never, { "availableSchemas": { "alias": "availableSchemas"; "required": false; }; "labGroups": { "alias": "labGroups"; "required": false; }; }, { "templateCreated": "templateCreated"; }, never, never, true, never>;
2407
+ }
2408
+
2409
+ interface TableCreationData {
2410
+ name: string;
2411
+ templateId: number;
2412
+ sampleCount?: number;
2413
+ description?: string;
2414
+ labGroupId?: number;
2415
+ }
2416
+ declare class TableCreationModalComponent implements OnInit {
2417
+ private fb;
2418
+ activeModal: NgbActiveModal;
2419
+ template: MetadataTableTemplate;
2420
+ labGroups: LabGroup[];
2421
+ selectedLabGroupId?: number;
2422
+ tableCreated: EventEmitter<TableCreationData>;
2423
+ tableForm: FormGroup;
2424
+ isCreating: boolean;
2425
+ errorMessage: string | null;
2426
+ constructor(fb: FormBuilder, activeModal: NgbActiveModal);
2427
+ ngOnInit(): void;
2428
+ onSubmit(): void;
2429
+ onClose(): void;
2430
+ setCreatingState(isCreating: boolean): void;
2431
+ setErrorMessage(message: string | null): void;
2432
+ getFieldError(fieldName: string): string | null;
2433
+ private getFieldLabel;
2434
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableCreationModalComponent, never>;
2435
+ static ɵcmp: i0.ɵɵ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>;
2436
+ }
2437
+
2438
+ interface SchemaSelectionResult {
2439
+ selectedSchemaIds: number[];
2440
+ }
2441
+ declare class SchemaSelectionModal implements OnInit, OnDestroy {
2442
+ activeModal: NgbActiveModal;
2443
+ private schemaService;
2444
+ private toastService;
2445
+ private destroy$;
2446
+ title: string;
2447
+ description: string;
2448
+ isLoading: i0.WritableSignal<boolean>;
2449
+ availableSchemas: i0.WritableSignal<Schema[]>;
2450
+ selectedSchemaIds: i0.WritableSignal<Set<number>>;
2451
+ searchTerm: i0.WritableSignal<string>;
2452
+ constructor(activeModal: NgbActiveModal, schemaService: SchemaService, toastService: ToastService);
2453
+ ngOnInit(): void;
2454
+ ngOnDestroy(): void;
2455
+ private loadAvailableSchemas;
2456
+ get filteredSchemas(): Schema[];
2457
+ toggleSchemaSelection(schemaId: number): void;
2458
+ isSchemaSelected(schemaId: number): boolean;
2459
+ selectAll(): void;
2460
+ clearSelection(): void;
2461
+ onCancel(): void;
2462
+ onConfirm(): void;
2463
+ getBadgeClass(category?: string): string;
2464
+ static ɵfac: i0.ɵɵFactoryDeclaration<SchemaSelectionModal, never>;
2465
+ static ɵcmp: i0.ɵɵComponentDeclaration<SchemaSelectionModal, "ccv-schema-selection-modal", never, {}, {}, never, never, true, never>;
2466
+ }
2467
+
1485
2468
  declare class CupcakeVanilla {
1486
2469
  static ɵfac: i0.ɵɵFactoryDeclaration<CupcakeVanilla, never>;
1487
2470
  static ɵcmp: i0.ɵɵComponentDeclaration<CupcakeVanilla, "ccv-cupcake-vanilla", never, {}, {}, never, never, true, never>;
1488
2471
  }
1489
2472
 
1490
- export { AsyncExportService, AsyncImportService, AsyncTaskService, AsyncValidationService, ChunkedUploadService, CupcakeVanilla, FavouriteMetadataOptionService, MetadataColumnService, MetadataColumnTemplateService, MetadataColumnTemplateShareService, MetadataManagementService, MetadataTableService, MetadataTableTemplateService, OntologySearchService, OntologyType, OntologyTypeLabels, OntologyUtils, SDRFDefaultsService, SamplePoolService, SchemaService, TASK_STATUS_COLORS, TASK_STATUS_LABELS, TASK_TYPE_LABELS, TemplatePermissionLabels, TemplatePermissionLevel, isUnimodFullData };
1491
- export type { ApiResponse, AsyncTaskCreateResponse, AsyncTaskQueryParams, AsyncTaskStatus, BaseTimestampedModel, BulkExcelExportRequest, BulkExportRequest, CellOntology, ChEBICompound, ChunkedUploadCompletionRequest, ChunkedUploadCompletionResponse, ChunkedUploadRequest, ChunkedUploadResponse, ChunkedUploadStatus, DownloadUrlResponse, FavouriteMetadataOption, FavouriteMetadataOptionCreateRequest, FavouriteMetadataOptionQueryParams, FavouriteMetadataOptionUpdateRequest, HumanDisease, MSUniqueVocabularies, MetadataColumn, MetadataColumnCreateRequest, MetadataColumnModifier, MetadataColumnQueryParams, MetadataColumnTemplate, MetadataColumnTemplateCreateRequest, MetadataColumnTemplateQueryParams, MetadataColumnTemplateShare, MetadataColumnTemplateShareCreateRequest, MetadataColumnTemplateShareQueryParams, MetadataColumnTemplateUpdateRequest, MetadataColumnUpdateRequest, MetadataExportRequest, MetadataImportRequest, MetadataQueryParams, MetadataTable, MetadataTableCreateRequest, MetadataTableQueryParams, MetadataTableQueryResponse, MetadataTableTemplate, MetadataTableTemplateCreateRequest, MetadataTableTemplateQueryParams, MetadataTableTemplateQueryResponse, MetadataTableTemplateUpdateRequest, MetadataTableUpdateRequest, MetadataValidationConfig, MetadataValidationRequest, MondoDisease, NCBITaxonomy, OntologySuggestion, OntologySuggestionResponse, PSIMSOntology, PaginatedResponse, SamplePool, SamplePoolCreateRequest, SamplePoolQueryParams, SamplePoolUpdateRequest, Schema, SchemaQueryParams, Species, SubcellularLocation, TaskListItem, TaskResult, TaskStatus, TaskType, Tissue, UberonAnatomy, Unimod, UnimodFullData, UnimodSpecification };
2473
+ export { AdminWebSocketService, AsyncExportService, AsyncImportService, AsyncTaskService, AsyncTaskUIService, AsyncValidationService, COLUMN_TYPE_CONFIGS, ChunkedImportService, ChunkedUploadService, ColumnEditModal, ColumnType, CupcakeVanilla, ElectronService, ExcelExportModalComponent, FavouriteMetadataOptionService, MSTermType, MetadataColumnService, MetadataColumnTemplateService, MetadataColumnTemplateShareService, MetadataManagementService, MetadataTableEditModal, MetadataTableService, MetadataTableTemplateEditModal, MetadataTableTemplateService, MetadataTableTemplates, MetadataValidationModal, MetadataValueEditModal, NotificationService, NotificationType, OFFICIAL_SDRF_COLUMNS, ONTOLOGY_TYPE_CONFIGS, OntologySearchService, OntologyType, OntologyTypeLabels, OntologyUtils, SDRFDefaultsService, SamplePoolService, SchemaSelectionModal, SchemaService, SdrfAgeInput, SdrfCleavageInput, SdrfColumnCategory, SdrfModificationInput, SdrfSpikedCompoundInput, SdrfSyntaxService, TASK_STATUS_COLORS, TASK_STATUS_LABELS, TASK_TYPE_LABELS, TableCreationModalComponent, TemplatePermissionLabels, TemplatePermissionLevel, TemplateSchemaSelectionModal, ValidationResultsModal, Websocket, getRequiredSdrfColumns, getSdrfColumnByName, getSdrfColumnsByCategory, isSdrfColumnRequired, isUnimodFullData };
2474
+ export type { AgeFormat, ApiResponse, AsyncTaskCreateResponse, AsyncTaskQueryParams, AsyncTaskStatus, BaseTimestampedModel, BulkExcelExportRequest, BulkExportRequest, CellOntology, ChEBICompound, ChunkedFileImportRequest, ChunkedImportProgress, ChunkedImportRequest, ChunkedUploadCompletionRequest, ChunkedUploadCompletionResponse, ChunkedUploadRequest, ChunkedUploadResponse, ChunkedUploadStatus, CleavageAgentDetails, ColumnTypeConfig, DownloadUrlResponse, ElectronAPI, ExcelExportOptions, FavouriteMetadataOption, FavouriteMetadataOptionCreateRequest, FavouriteMetadataOptionQueryParams, FavouriteMetadataOptionUpdateRequest, HumanDisease, MSUniqueVocabularies, MetadataColumn, MetadataColumnCreateRequest, MetadataColumnModifier, MetadataColumnQueryParams, MetadataColumnTemplate, MetadataColumnTemplateCreateRequest, MetadataColumnTemplateQueryParams, MetadataColumnTemplateShare, MetadataColumnTemplateShareCreateRequest, MetadataColumnTemplateShareQueryParams, MetadataColumnTemplateUpdateRequest, MetadataColumnUpdateRequest, MetadataExportRequest, MetadataImportRequest, MetadataQueryParams, MetadataTable, MetadataTableCreateRequest, MetadataTableQueryParams, MetadataTableQueryResponse, MetadataTableTemplate, MetadataTableTemplateCreateRequest, MetadataTableTemplateQueryParams, MetadataTableTemplateQueryResponse, MetadataTableTemplateUpdateRequest, MetadataTableUpdateRequest, MetadataValidationConfig, MetadataValidationRequest, MetadataValueEditConfig, ModificationParameters, MondoDisease, NCBITaxonomy, OntologyCustomFilter, OntologySuggestion, OntologySuggestionResponse, OntologyTypeConfig, PSIMSOntology, PaginatedResponse, PooledSample, SampleCountConfirmationError, SampleCountValidationRequest, SampleCountValidationResponse, SampleCountValidationResult, SamplePool, SamplePoolCreateRequest, SamplePoolQueryParams, SamplePoolUpdateRequest, Schema, SchemaQueryParams, SchemaSelectionResult, SdrfColumnConfig, Species, SpikedCompound, SubcellularLocation, SyntaxType, SyntheticPeptide, TableCreationData, TaskListItem, TaskResult, TaskStatus, TaskType, TemplateSchemaSelectionResult, Tissue, UberonAnatomy, Unimod, UnimodFullData, UnimodSpecification, ValidationResult, ValidationResults };