@masterteam/task-schedule 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@masterteam/task-schedule",
3
+ "version": "0.0.1",
4
+ "publishConfig": {
5
+ "directory": "../../../dist/masterteam/task-schedule",
6
+ "linkDirectory": false,
7
+ "access": "public"
8
+ },
9
+ "peerDependencies": {
10
+ "@angular/common": "^21.0.3",
11
+ "@angular/core": "^21.0.3",
12
+ "@angular/forms": "^21.0.3",
13
+ "@syncfusion/ej2-angular-gantt": "^32.2.7",
14
+ "@syncfusion/ej2-base": "^32.2.6",
15
+ "@syncfusion/ej2-pdf-export": "^32.2.3",
16
+ "rxjs": "^7.8.2",
17
+ "@primeuix/themes": "^2.0.2",
18
+ "@tailwindcss/postcss": "^4.1.17",
19
+ "postcss": "^8.5.6",
20
+ "primeng": "21.0.1",
21
+ "tailwindcss": "^4.1.17",
22
+ "tailwindcss-primeui": "^0.6.1",
23
+ "@masterteam/components": "^0.0.100",
24
+ "@masterteam/icons": "^0.0.13"
25
+ },
26
+ "sideEffects": false,
27
+ "exports": {
28
+ "./assets/task-schedule.css": {
29
+ "style": "./assets/task-schedule.css"
30
+ },
31
+ "./package.json": {
32
+ "default": "./package.json"
33
+ },
34
+ ".": {
35
+ "types": "./types/masterteam-task-schedule.d.ts",
36
+ "default": "./fesm2022/masterteam-task-schedule.mjs"
37
+ }
38
+ },
39
+ "module": "fesm2022/masterteam-task-schedule.mjs",
40
+ "typings": "types/masterteam-task-schedule.d.ts",
41
+ "dependencies": {
42
+ "tslib": "^2.8.1"
43
+ }
44
+ }
@@ -0,0 +1,559 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnInit, OnDestroy, InjectionToken } from '@angular/core';
3
+ import { GanttComponent, ContextMenuOpenEventArgs, ContextMenuClickEventArgs } from '@syncfusion/ej2-angular-gantt';
4
+ import * as rxjs from 'rxjs';
5
+ import { Observable } from 'rxjs';
6
+ import { EntityData } from '@masterteam/components/entities';
7
+ import * as _masterteam_task_schedule from '@masterteam/task-schedule';
8
+
9
+ type TaskScheduleModelKey = 'default' | 'edit' | 'baseline' | 'criticalPath' | 'resources' | 'unscheduled' | 'phaseGate' | 'custom';
10
+ type TaskScheduleModelAlias = 'critical-path' | 'criticalpath' | 'critical path' | 'phase-gate' | 'phasegate' | 'phase gate' | 'resource' | 'resource-view' | 'resourceview' | 'unscheduled-task' | 'unscheduled task' | 'scheduling' | 'view' | 'defauilt' | 'custom-view';
11
+ type TaskScheduleModelType = TaskScheduleModelKey | TaskScheduleModelAlias | string;
12
+ declare function normalizeTaskScheduleModelType(modelType: TaskScheduleModelType): TaskScheduleModelKey;
13
+ interface TaskScheduleContext {
14
+ levelId: number | string;
15
+ schemaId?: number | string;
16
+ levelDataId?: number | string;
17
+ customViewId?: number | string;
18
+ apiBaseUrl?: string;
19
+ scheduleViewKey?: string;
20
+ resources?: Array<Record<string, unknown>>;
21
+ endpoints?: TaskScheduleContextEndpoints;
22
+ pdfFonts?: TaskSchedulePdfFonts;
23
+ customProperties?: TaskScheduleCustomProperty[];
24
+ customColumns?: Array<Record<string, unknown>>;
25
+ requestHeaders?: Record<string, string>;
26
+ langCode?: 'en' | 'ar';
27
+ modelCacheKey?: string;
28
+ [key: string]: unknown;
29
+ }
30
+ interface TaskSchedulePdfFonts {
31
+ regular?: string;
32
+ arabic?: string;
33
+ size?: number;
34
+ }
35
+ interface TaskScheduleContextEndpoints {
36
+ scheduleTree?: string;
37
+ scheduleTreeDefault?: string;
38
+ scheduleTreeEdit?: string;
39
+ scheduleTreeBaseline?: string;
40
+ scheduleTreeCriticalPath?: string;
41
+ scheduleTreeResources?: string;
42
+ scheduleTreeUnscheduled?: string;
43
+ scheduleTreePhaseGate?: string;
44
+ scheduleTreeCustom?: string;
45
+ scheduleManagerBase?: string;
46
+ scheduleViewById?: string;
47
+ scheduleViewsByLevel?: string;
48
+ scheduleSettingsByLevel?: string;
49
+ teamMembers?: string;
50
+ createTask?: string;
51
+ updateTask?: string;
52
+ deleteTask?: string;
53
+ updateBulkTasks?: string;
54
+ updateParent?: string;
55
+ updateOrder?: string;
56
+ updateProgress?: string;
57
+ importTasks?: string;
58
+ applyImportedTasks?: string;
59
+ setBaseline?: string;
60
+ exportTasks?: string;
61
+ [key: string]: string | undefined;
62
+ }
63
+ interface TaskScheduleTask {
64
+ id: number | string;
65
+ title: string;
66
+ name?: string;
67
+ startDate?: Date | string | null;
68
+ finishDate?: Date | string | null;
69
+ actualStart?: Date | string | null;
70
+ actualFinish?: Date | string | null;
71
+ baselineStart?: Date | string | null;
72
+ baselineFinish?: Date | string | null;
73
+ actualStartDate?: Date | string | null;
74
+ actualFinishDate?: Date | string | null;
75
+ baselineStartDate?: Date | string | null;
76
+ baselineEndDate?: Date | string | null;
77
+ duration?: number | null;
78
+ progress?: number | null;
79
+ predecessor?: string | null;
80
+ predecessors?: string | null;
81
+ status?: string | null;
82
+ type?: string | null;
83
+ typeLable?: string | null;
84
+ typeLabel?: string | null;
85
+ details?: string | null;
86
+ guid?: string | null;
87
+ uniqueID?: string | null;
88
+ parentGuid?: string | null;
89
+ assignedTo?: string | number | Record<string, unknown> | null;
90
+ resources?: Array<number | string | {
91
+ resourceId: number | string;
92
+ unit?: number;
93
+ }>;
94
+ phaseGate?: string | null;
95
+ criticalPath?: boolean;
96
+ order?: number;
97
+ customProperties?: Array<Record<string, unknown>>;
98
+ props?: Array<Record<string, unknown>>;
99
+ attachments?: string | null;
100
+ isMilestone?: boolean;
101
+ isSelected?: boolean;
102
+ subtasks?: TaskScheduleTask[];
103
+ children?: TaskScheduleTask[];
104
+ [key: string]: unknown;
105
+ }
106
+ type TaskSchedulePropertyViewType = 'Text' | 'Date' | 'Lookup' | 'Status' | 'Number' | 'Percentage' | 'Currency' | string;
107
+ interface TaskSchedulePropertyDependency {
108
+ property: string;
109
+ action: {
110
+ name: 'disable' | 'enable' | string;
111
+ };
112
+ value: unknown;
113
+ }
114
+ interface TaskScheduleCustomProperty {
115
+ id: number | string;
116
+ key: string;
117
+ name: string;
118
+ viewType: TaskSchedulePropertyViewType;
119
+ normalizedKey?: string;
120
+ isRequired?: boolean;
121
+ isCalculated?: boolean;
122
+ dependsOn?: TaskSchedulePropertyDependency[];
123
+ lookupOptions?: Array<{
124
+ value: unknown;
125
+ text: string;
126
+ }>;
127
+ configuration?: unknown;
128
+ }
129
+ interface TaskScheduleTaskMutation {
130
+ assignedTo?: number | string | null;
131
+ name: string;
132
+ startDate?: string | Date | null;
133
+ finishDate?: string | Date | null;
134
+ predecessor?: string | null;
135
+ details?: string | null;
136
+ type?: string | null;
137
+ duration?: number | null;
138
+ progress?: number | null;
139
+ parentGuid?: string | null;
140
+ props?: Array<Record<string, unknown>>;
141
+ [key: string]: unknown;
142
+ }
143
+ interface TaskScheduleTaskOrderUpdate {
144
+ taskId: number | string;
145
+ order: number;
146
+ }
147
+ interface TaskScheduleImportResult {
148
+ fileName?: string | null;
149
+ tasks: TaskScheduleTask[];
150
+ raw?: unknown;
151
+ }
152
+ interface TaskScheduleApplyImportPayload {
153
+ overrideCurrent: boolean;
154
+ data: TaskScheduleTask[];
155
+ }
156
+ interface TaskScheduleDataResult {
157
+ tasks: TaskScheduleTask[];
158
+ resources?: Array<Record<string, unknown>>;
159
+ customColumns?: Array<Record<string, unknown>>;
160
+ customProperties?: TaskScheduleCustomProperty[];
161
+ holidays?: Array<Record<string, unknown>>;
162
+ eventMarkers?: Array<Record<string, unknown>>;
163
+ addDialogFields?: Array<Record<string, unknown>>;
164
+ editDialogFields?: Array<Record<string, unknown>>;
165
+ projectStartDate?: Date | string | null;
166
+ projectEndDate?: Date | string | null;
167
+ }
168
+ interface TaskScheduleDataAdapter {
169
+ load(modelType: TaskScheduleModelType, context: TaskScheduleContext): Observable<TaskScheduleDataResult>;
170
+ createTask?(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
171
+ updateTask?(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
172
+ deleteTask?(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
173
+ updateBulkTasks?(context: TaskScheduleContext, payload: TaskScheduleTaskMutation[]): Observable<unknown>;
174
+ updateParent?(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
175
+ updateOrder?(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
176
+ updateProgress?(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
177
+ importTasks?(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
178
+ applyImportedTasks?(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
179
+ setBaseline?(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
180
+ exportTasks?(context: TaskScheduleContext): Observable<Blob>;
181
+ }
182
+ interface TaskScheduleGanttConfig {
183
+ taskFields: Record<string, unknown>;
184
+ columns: Array<Record<string, unknown>>;
185
+ labelSettings: Record<string, unknown>;
186
+ splitterSettings: Record<string, unknown>;
187
+ toolbar: Array<string | Record<string, unknown>>;
188
+ gridLines: 'Both' | 'Horizontal' | 'Vertical' | 'None';
189
+ workWeek: string[];
190
+ renderBaseline?: boolean;
191
+ enableCriticalPath?: boolean;
192
+ allowUnscheduledTasks?: boolean;
193
+ viewType?: 'ProjectView' | 'ResourceView';
194
+ resourceFields?: Record<string, unknown>;
195
+ resources?: Array<Record<string, unknown>>;
196
+ holidays?: Array<Record<string, unknown>>;
197
+ eventMarkers?: Array<Record<string, unknown>>;
198
+ timelineSettings?: Record<string, unknown>;
199
+ editSettings?: Record<string, unknown>;
200
+ addDialogFields?: Array<Record<string, unknown>>;
201
+ editDialogFields?: Array<Record<string, unknown>>;
202
+ contextMenuItems?: Array<string | Record<string, unknown>>;
203
+ enableContextMenu?: boolean;
204
+ showOverAllocation?: boolean;
205
+ allowExcelExport?: boolean;
206
+ allowPdfExport?: boolean;
207
+ projectStartDate?: Date | string | null;
208
+ projectEndDate?: Date | string | null;
209
+ }
210
+
211
+ declare const EDIT_TASK_TYPE_IDS: readonly ["Milestone", "Task", "Deliverable"];
212
+ declare class TaskSchedule implements OnInit, OnDestroy {
213
+ ganttObj?: GanttComponent;
214
+ private readonly adapter;
215
+ private readonly queueService;
216
+ private readonly injector;
217
+ private loadEffect?;
218
+ private localeEffect?;
219
+ private loadSubscription?;
220
+ private readonly operationSub;
221
+ private readonly contextAddTask;
222
+ private readonly customProperties;
223
+ readonly modelType: _angular_core.InputSignal<string>;
224
+ readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
225
+ readonly dateFormat: _angular_core.InputSignal<string>;
226
+ readonly height: _angular_core.InputSignal<string>;
227
+ readonly langCode: _angular_core.InputSignal<"en" | "ar" | null>;
228
+ readonly pdfFontData: _angular_core.InputSignal<string | null>;
229
+ readonly pdfRtlFontData: _angular_core.InputSignal<string | null>;
230
+ readonly pdfFontSize: _angular_core.InputSignal<number>;
231
+ readonly toolbarAction: _angular_core.OutputEmitterRef<string>;
232
+ readonly actionBegin: _angular_core.OutputEmitterRef<any>;
233
+ readonly actionCompleted: _angular_core.OutputEmitterRef<any>;
234
+ readonly loaded: _angular_core.OutputEmitterRef<TaskScheduleDataResult>;
235
+ readonly loadError: _angular_core.OutputEmitterRef<string>;
236
+ readonly loading: _angular_core.WritableSignal<boolean>;
237
+ readonly locale: _angular_core.WritableSignal<"en-US" | "ar-AE">;
238
+ readonly dataSource: _angular_core.WritableSignal<TaskScheduleTask[]>;
239
+ readonly ganttConfig: _angular_core.WritableSignal<TaskScheduleGanttConfig>;
240
+ readonly ganttId: string;
241
+ readonly resolvedModelType: _angular_core.Signal<TaskScheduleModelKey>;
242
+ readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
243
+ readonly isEditMode: _angular_core.Signal<boolean>;
244
+ readonly editTaskTypes: _angular_core.Signal<{
245
+ id: (typeof EDIT_TASK_TYPE_IDS)[number];
246
+ text: string;
247
+ }[]>;
248
+ readonly enableRtl: _angular_core.Signal<boolean>;
249
+ readonly tooltipTranslations: _angular_core.Signal<{
250
+ startsOn: string;
251
+ endsOn: string;
252
+ progress: string;
253
+ plannedStart: string;
254
+ plannedEnd: string;
255
+ }>;
256
+ ngOnInit(): void;
257
+ ngOnDestroy(): void;
258
+ onToolbarClick(args: any): Promise<void>;
259
+ onContextMenuOpen(args: ContextMenuOpenEventArgs): void;
260
+ onContextMenuClick(args?: ContextMenuClickEventArgs): void;
261
+ onActionBegin(args: any): void;
262
+ onActionComplete(args: any): void;
263
+ onCellEdit(args: any): void;
264
+ onQueryTaskbarInfo(args: any): void;
265
+ onDataBound(): void;
266
+ private loadSchedule;
267
+ private applyEditCustomProps;
268
+ private configureDialogState;
269
+ private applyDependentFieldBehavior;
270
+ private handleRowDropped;
271
+ private createTask;
272
+ private updateTask;
273
+ private deleteTask;
274
+ private pushBulkUpdate;
275
+ private buildMutationFromTask;
276
+ private resolveParentGuidForContextAddTask;
277
+ private getCustomPropsValue;
278
+ private getGeneralDialogFields;
279
+ private reloadSchedule;
280
+ private normalizeTasks;
281
+ private extractCustomProps;
282
+ private readNamedValue;
283
+ private readType;
284
+ private readAssignedTo;
285
+ private readResources;
286
+ private extractDateValue;
287
+ private mapColumnEditType;
288
+ private getDialogFieldInstance;
289
+ private removeValidationRule;
290
+ private toggleAddAndEditButtons;
291
+ private toggleToolbarButton;
292
+ private normalizeDuration;
293
+ private safeProgress;
294
+ private coerceDate;
295
+ private toApiDate;
296
+ private exportPdfWithRetry;
297
+ private resolvePdfExportFont;
298
+ private createEmbeddedPdfFont;
299
+ private isFitToWidthError;
300
+ private resetPdfModule;
301
+ private wait;
302
+ private getErrorMessage;
303
+ private getExportFileName;
304
+ private hexToRgb;
305
+ private localizeTaskType;
306
+ private readLegacyHolidays;
307
+ formatDateValue(value: unknown): string;
308
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskSchedule, never>;
309
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskSchedule, "mt-task-schedule", never, { "modelType": { "alias": "modelType"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "langCode": { "alias": "langCode"; "required": false; "isSignal": true; }; "pdfFontData": { "alias": "pdfFontData"; "required": false; "isSignal": true; }; "pdfRtlFontData": { "alias": "pdfRtlFontData"; "required": false; "isSignal": true; }; "pdfFontSize": { "alias": "pdfFontSize"; "required": false; "isSignal": true; }; }, { "toolbarAction": "toolbarAction"; "actionBegin": "actionBegin"; "actionCompleted": "actionCompleted"; "loaded": "loaded"; "loadError": "loadError"; }, never, never, true, never>;
310
+ }
311
+
312
+ declare const TASK_SCHEDULE_DATA_ADAPTER: InjectionToken<TaskScheduleDataAdapter>;
313
+ declare class TaskScheduleBackendAdapter implements TaskScheduleDataAdapter {
314
+ private readonly http;
315
+ load(modelType: TaskScheduleModelType, context: TaskScheduleContext): Observable<TaskScheduleDataResult>;
316
+ createTask(context: TaskScheduleContext, payload: TaskScheduleTaskMutation): Observable<unknown>;
317
+ updateTask(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
318
+ deleteTask(context: TaskScheduleContext, taskId: number | string): Observable<unknown>;
319
+ updateBulkTasks(context: TaskScheduleContext, payload: TaskScheduleTaskMutation[]): Observable<unknown>;
320
+ updateParent(context: TaskScheduleContext, taskId: number | string, parentId: number | string | null): Observable<unknown>;
321
+ updateOrder(context: TaskScheduleContext, payload: TaskScheduleTaskOrderUpdate[]): Observable<unknown>;
322
+ updateProgress(context: TaskScheduleContext, taskId: number | string, payload: TaskScheduleTaskMutation): Observable<unknown>;
323
+ importTasks(context: TaskScheduleContext, file: File): Observable<TaskScheduleImportResult>;
324
+ applyImportedTasks(context: TaskScheduleContext, payload: TaskScheduleApplyImportPayload): Observable<unknown>;
325
+ setBaseline(context: TaskScheduleContext, payload?: Record<string, unknown>): Observable<unknown>;
326
+ exportTasks(context: TaskScheduleContext): Observable<Blob>;
327
+ private loadCustomColumns;
328
+ private resolveTreeRouteTemplate;
329
+ private buildTreeRouteParams;
330
+ private resolveTaskMutationEndpoint;
331
+ private resolveApplyImportedTasksEndpoint;
332
+ private resolveScheduleManagerEndpoint;
333
+ private resolveApiUrl;
334
+ private readHeaders;
335
+ private buildIdempotencyKey;
336
+ private unwrapResponse;
337
+ private extractTaskArray;
338
+ private mapRuntimeTask;
339
+ private applyModelTransformations;
340
+ private resolveResources;
341
+ private mapTeamMemberResources;
342
+ private extractObjectValue;
343
+ private extractObjectArray;
344
+ private extractCustomProperties;
345
+ private mapCustomProperty;
346
+ private normalizeLookupOptions;
347
+ private readLegacyHolidaysFromLocalStorage;
348
+ private extractArrayCandidate;
349
+ private extractResources;
350
+ private mapScheduleColumns;
351
+ private normalizeCustomColumnKey;
352
+ private readLocalizedName;
353
+ private extractTaskResources;
354
+ private extractAssignee;
355
+ private extractStatus;
356
+ private extractProgress;
357
+ private extractDate;
358
+ private backendError;
359
+ private readEndpoint;
360
+ private readId;
361
+ private firstDefined;
362
+ private toNullableString;
363
+ private toNullableNumber;
364
+ private toTaskId;
365
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleBackendAdapter, never>;
366
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleBackendAdapter>;
367
+ }
368
+
369
+ declare class TaskScheduleQueueService {
370
+ private readonly basicOrderColumns;
371
+ private readonly currentOrderColumns;
372
+ private readonly refreshTasks;
373
+ readonly refreshTasks$: rxjs.Observable<void>;
374
+ refresh(): void;
375
+ reorderData(tasks: TaskScheduleTask[]): TaskScheduleTask[];
376
+ applyStoredColumnOrder(columns: Array<Record<string, unknown>>, modelType: TaskScheduleModelType, context: TaskScheduleContext): Array<Record<string, unknown>>;
377
+ reorderColumn(args: any, modelType: TaskScheduleModelType, context: TaskScheduleContext): void;
378
+ private mapColumnsToOrder;
379
+ private orderColumns;
380
+ private getStorageKey;
381
+ private getLegacyStorageKey;
382
+ private hasDuplicateOrders;
383
+ private safeParseOrder;
384
+ private getLocalStorageItem;
385
+ private setLocalStorageItem;
386
+ private removeLocalStorageItem;
387
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleQueueService, never>;
388
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TaskScheduleQueueService>;
389
+ }
390
+
391
+ declare function createGanttConfig(modelType: TaskScheduleModelKey, data: TaskScheduleDataResult, dateFormat: string, langCode?: 'en' | 'ar'): TaskScheduleGanttConfig;
392
+
393
+ type TaskScheduleLanguage = 'en' | 'ar';
394
+ declare function resolveTaskScheduleLanguage(preferred?: unknown, contextLangCode?: unknown): TaskScheduleLanguage;
395
+
396
+ interface ImportPreviewRow {
397
+ key: string;
398
+ task: TaskScheduleTask;
399
+ depth: number;
400
+ }
401
+ interface ResourceOption {
402
+ id: string | number;
403
+ label: string;
404
+ }
405
+ declare class TaskScheduleImportModal {
406
+ private readonly adapter;
407
+ readonly visible: _angular_core.InputSignal<boolean>;
408
+ readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
409
+ readonly langCode: _angular_core.InputSignal<"en" | "ar" | null>;
410
+ readonly title: _angular_core.InputSignal<string | null>;
411
+ readonly maxRows: _angular_core.InputSignal<number>;
412
+ readonly closed: _angular_core.OutputEmitterRef<void>;
413
+ readonly imported: _angular_core.OutputEmitterRef<TaskScheduleImportResult>;
414
+ readonly applied: _angular_core.OutputEmitterRef<{
415
+ overrideCurrent: boolean;
416
+ response: unknown;
417
+ }>;
418
+ readonly failed: _angular_core.OutputEmitterRef<string>;
419
+ readonly selectedFile: _angular_core.WritableSignal<File | null>;
420
+ readonly loadingImport: _angular_core.WritableSignal<boolean>;
421
+ readonly loadingApply: _angular_core.WritableSignal<boolean>;
422
+ readonly importResult: _angular_core.WritableSignal<TaskScheduleImportResult | null>;
423
+ readonly selectedTaskKeys: _angular_core.WritableSignal<Set<string>>;
424
+ readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
425
+ readonly isRtl: _angular_core.Signal<boolean>;
426
+ readonly labels: _angular_core.Signal<{
427
+ title: string;
428
+ selectFile: string;
429
+ startImport: string;
430
+ cancel: string;
431
+ replace: string;
432
+ append: string;
433
+ task: string;
434
+ startDate: string;
435
+ finishDate: string;
436
+ actualStartDate: string;
437
+ actualFinishDate: string;
438
+ assignedTo: string;
439
+ progress: string;
440
+ noTasks: string;
441
+ missingContext: string;
442
+ importNotSupported: string;
443
+ applyNotSupported: string;
444
+ chooseFileFirst: string;
445
+ rowsLimited: string;
446
+ }>;
447
+ readonly previewRows: _angular_core.Signal<ImportPreviewRow[]>;
448
+ readonly resourceOptions: _angular_core.Signal<ResourceOption[]>;
449
+ readonly isTruncated: _angular_core.Signal<boolean>;
450
+ readonly allSelected: _angular_core.Signal<boolean>;
451
+ readonly hasSelection: _angular_core.Signal<boolean>;
452
+ readonly canImport: _angular_core.Signal<boolean>;
453
+ readonly canApply: _angular_core.Signal<boolean>;
454
+ onFileChanged(event: Event): void;
455
+ importFile(): void;
456
+ toggleRowSelection(rowKey: string, checked: boolean): void;
457
+ selectAllRows(checked: boolean): void;
458
+ applyImport(overrideCurrent: boolean): void;
459
+ close(): void;
460
+ trackByRow(_index: number, row: ImportPreviewRow): string;
461
+ formatDate(value: unknown): string;
462
+ toDateInputValue(value: unknown): string;
463
+ resolveAssignedValue(task: TaskScheduleTask): string;
464
+ normalizeProgress(value: unknown): number;
465
+ onTaskTitleChanged(rowKey: string, value: string): void;
466
+ onTaskDateChanged(rowKey: string, key: 'startDate' | 'finishDate' | 'actualStartDate' | 'actualFinishDate', value: string): void;
467
+ onTaskAssignedToChanged(rowKey: string, value: string): void;
468
+ onTaskProgressChanged(rowKey: string, value: string): void;
469
+ toAssignedEntity(task: TaskScheduleTask): EntityData;
470
+ toProgressEntity(task: TaskScheduleTask): EntityData;
471
+ private updateRowTask;
472
+ private findTaskByRowKey;
473
+ private readPathFromRowKey;
474
+ private markImportResultDirty;
475
+ private buildApplyPayloadData;
476
+ private resolveChildTasks;
477
+ private resolveTaskKey;
478
+ private collectTaskKeys;
479
+ private resolveAssignedTo;
480
+ private resolveContextResourceIdByName;
481
+ private readAssignedToLabel;
482
+ private toApiDate;
483
+ private formatDateForApi;
484
+ private countTasks;
485
+ private getErrorMessage;
486
+ private emitError;
487
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleImportModal, never>;
488
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleImportModal, "mt-task-schedule-import-modal", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "langCode": { "alias": "langCode"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "imported": "imported"; "applied": "applied"; "failed": "failed"; }, never, never, true, never>;
489
+ }
490
+
491
+ interface TaskScheduleModeOption {
492
+ value: TaskScheduleModelType;
493
+ label?: string;
494
+ }
495
+ declare class TaskScheduleShell {
496
+ private readonly adapter;
497
+ private readonly queueService;
498
+ readonly context: _angular_core.InputSignal<TaskScheduleContext | null>;
499
+ readonly langCode: _angular_core.InputSignal<"en" | "ar" | null>;
500
+ readonly dateFormat: _angular_core.InputSignal<string>;
501
+ readonly height: _angular_core.InputSignal<string>;
502
+ readonly modelType: _angular_core.InputSignal<string>;
503
+ readonly modeOptions: _angular_core.InputSignal<TaskScheduleModeOption[] | null>;
504
+ readonly allowEditMode: _angular_core.InputSignal<boolean>;
505
+ readonly allowImport: _angular_core.InputSignal<boolean>;
506
+ readonly allowSetBaseline: _angular_core.InputSignal<boolean>;
507
+ readonly hasTasks: _angular_core.InputSignal<boolean>;
508
+ readonly baselinePending: _angular_core.InputSignal<boolean>;
509
+ readonly modeChanged: _angular_core.OutputEmitterRef<string>;
510
+ readonly baselineSet: _angular_core.OutputEmitterRef<unknown>;
511
+ readonly tasksExported: _angular_core.OutputEmitterRef<void>;
512
+ readonly actionError: _angular_core.OutputEmitterRef<string>;
513
+ readonly currentModelType: _angular_core.WritableSignal<string>;
514
+ readonly showImportModal: _angular_core.WritableSignal<boolean>;
515
+ readonly settingBaseline: _angular_core.WritableSignal<boolean>;
516
+ readonly exportingTasks: _angular_core.WritableSignal<boolean>;
517
+ readonly resolvedLangCode: _angular_core.Signal<"en" | "ar">;
518
+ readonly labels: _angular_core.Signal<{
519
+ mode: string;
520
+ setBaseline: string;
521
+ pending: string;
522
+ import: string;
523
+ export: string;
524
+ exportFileName: string;
525
+ baselineNotSupported: string;
526
+ exportNotSupported: string;
527
+ contextMissing: string;
528
+ baselineDisabled: string;
529
+ }>;
530
+ readonly currentModelKey: _angular_core.Signal<_masterteam_task_schedule.TaskScheduleModelKey>;
531
+ readonly resolvedModes: _angular_core.Signal<{
532
+ value: string;
533
+ label: string;
534
+ }[]>;
535
+ readonly showSetBaselineAction: _angular_core.Signal<boolean>;
536
+ readonly canSetBaselineAction: _angular_core.Signal<boolean>;
537
+ readonly showImportAction: _angular_core.Signal<boolean>;
538
+ readonly canOpenImport: _angular_core.Signal<boolean>;
539
+ readonly canExportTasks: _angular_core.Signal<boolean>;
540
+ constructor();
541
+ onModeChange(nextValue: string): void;
542
+ openImportModal(): void;
543
+ closeImportModal(): void;
544
+ setBaseline(): void;
545
+ exportTasks(): void;
546
+ onImportedTasksApplied(): void;
547
+ onActionError(message: unknown): void;
548
+ private resolveModeLabel;
549
+ private downloadBlob;
550
+ private getErrorMessage;
551
+ private emitError;
552
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TaskScheduleShell, never>;
553
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TaskScheduleShell, "mt-task-schedule-shell", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "langCode": { "alias": "langCode"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "modelType": { "alias": "modelType"; "required": false; "isSignal": true; }; "modeOptions": { "alias": "modeOptions"; "required": false; "isSignal": true; }; "allowEditMode": { "alias": "allowEditMode"; "required": false; "isSignal": true; }; "allowImport": { "alias": "allowImport"; "required": false; "isSignal": true; }; "allowSetBaseline": { "alias": "allowSetBaseline"; "required": false; "isSignal": true; }; "hasTasks": { "alias": "hasTasks"; "required": false; "isSignal": true; }; "baselinePending": { "alias": "baselinePending"; "required": false; "isSignal": true; }; }, { "modeChanged": "modeChanged"; "baselineSet": "baselineSet"; "tasksExported": "tasksExported"; "actionError": "actionError"; }, never, never, true, never>;
554
+ }
555
+
556
+ declare const TASK_SCHEDULE_DEFAULT_PDF_FONT: string;
557
+
558
+ export { TASK_SCHEDULE_DATA_ADAPTER, TASK_SCHEDULE_DEFAULT_PDF_FONT, TaskSchedule, TaskScheduleBackendAdapter, TaskScheduleImportModal, TaskScheduleQueueService, TaskScheduleShell, createGanttConfig, normalizeTaskScheduleModelType, resolveTaskScheduleLanguage };
559
+ export type { TaskScheduleApplyImportPayload, TaskScheduleContext, TaskScheduleContextEndpoints, TaskScheduleCustomProperty, TaskScheduleDataAdapter, TaskScheduleDataResult, TaskScheduleGanttConfig, TaskScheduleImportResult, TaskScheduleLanguage, TaskScheduleModeOption, TaskScheduleModelAlias, TaskScheduleModelKey, TaskScheduleModelType, TaskSchedulePdfFonts, TaskSchedulePropertyDependency, TaskSchedulePropertyViewType, TaskScheduleTask, TaskScheduleTaskMutation, TaskScheduleTaskOrderUpdate };