@masterteam/dashboard-builder 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.
@@ -0,0 +1,4616 @@
1
+ import * as _masterteam_dashboard_builder from '@masterteam/dashboard-builder';
2
+ import * as _angular_core from '@angular/core';
3
+ import { OnInit, OnDestroy, AfterViewInit, OnChanges, SimpleChanges, TemplateRef, PipeTransform } from '@angular/core';
4
+ import { GridsterItem, GridsterConfig } from 'angular-gridster2';
5
+ import { ContextMenu } from 'primeng/contextmenu';
6
+ import { MenuItem } from 'primeng/api';
7
+ import * as _angular_forms from '@angular/forms';
8
+ import { ControlValueAccessor, FormGroup, FormArray, ValidationErrors } from '@angular/forms';
9
+ import * as rxjs from 'rxjs';
10
+ import { Observable } from 'rxjs';
11
+ import { ColumnDef, TableAction } from '@masterteam/components/table';
12
+ import { ModalService } from '@masterteam/components/modal';
13
+ import { ModalRef } from '@masterteam/components/dialog';
14
+ import { MTMenuItem } from '@masterteam/components/menu';
15
+
16
+ /**
17
+ * Localized name with English and Arabic
18
+ */
19
+ interface LocalizedName {
20
+ en: string;
21
+ ar: string;
22
+ [key: string]: string | undefined;
23
+ }
24
+ /**
25
+ * Report type enum
26
+ */
27
+ type ReportType = 'Dashboard' | 'Excel';
28
+ /**
29
+ * Request for modules tree from gateway
30
+ */
31
+ interface ModulesTreeRequest {
32
+ services: string[];
33
+ includeValues?: boolean;
34
+ }
35
+ /**
36
+ * Module value item from tree response
37
+ */
38
+ interface ModuleValue {
39
+ id: number;
40
+ name: string;
41
+ value: string;
42
+ selector: string;
43
+ }
44
+ /**
45
+ * Module item from tree response
46
+ */
47
+ interface ModuleItem {
48
+ id: string;
49
+ name: string;
50
+ description?: string;
51
+ version?: string;
52
+ values: ModuleValue[];
53
+ }
54
+ /**
55
+ * Service item from tree response
56
+ */
57
+ interface ServiceItem {
58
+ serviceName: string;
59
+ modules: ModuleItem[];
60
+ }
61
+ /**
62
+ * Modules tree response
63
+ */
64
+ interface ModulesTreeResponse {
65
+ services: ServiceItem[];
66
+ }
67
+ /**
68
+ * Grouped module option for select dropdown
69
+ */
70
+ interface GroupedModuleOption {
71
+ /** Group label (module type name like "Levels", "Log") */
72
+ label: string;
73
+ /** Module type id */
74
+ moduleTypeId: string;
75
+ /** Items in this group */
76
+ items: ModuleSelectOption[];
77
+ }
78
+ /**
79
+ * Module option for select dropdown
80
+ */
81
+ interface ModuleSelectOption {
82
+ /** Module id (number) */
83
+ id: number;
84
+ /** Display name */
85
+ name: string;
86
+ /** Selector format "ModuleType:Id" */
87
+ selector: string;
88
+ /** Parent module type id */
89
+ moduleTypeId: string;
90
+ }
91
+ /**
92
+ * Request item for bulk properties lookup
93
+ */
94
+ interface BulkPropertyRequestItem {
95
+ serviceName: string;
96
+ selector: string;
97
+ }
98
+ /**
99
+ * Request for bulk properties lookup from gateway
100
+ */
101
+ interface BulkPropertiesRequest {
102
+ items: BulkPropertyRequestItem[];
103
+ }
104
+ /**
105
+ * Response item from bulk properties lookup
106
+ */
107
+ interface BulkPropertiesResponseItem {
108
+ serviceName: string;
109
+ selector: string;
110
+ /** Display name for the specific selector (e.g., "Projects" for "Level:7") */
111
+ selectorName?: string;
112
+ properties: PropertyItem$1[];
113
+ }
114
+ /**
115
+ * Response wrapper from bulk properties lookup
116
+ * API returns { data: { items: [...] } }
117
+ */
118
+ interface BulkPropertiesResponse {
119
+ items: BulkPropertiesResponseItem[];
120
+ }
121
+ /**
122
+ * Property item from module properties response
123
+ */
124
+ interface PropertyItem$1 {
125
+ id: number;
126
+ name: string;
127
+ hasName: boolean;
128
+ key: string;
129
+ hasKey: boolean;
130
+ normalizedKey: string;
131
+ hasNormalizedKey: boolean;
132
+ configuration: string;
133
+ hasConfiguration: boolean;
134
+ viewType: string;
135
+ hasViewType: boolean;
136
+ isTranslatable: boolean;
137
+ }
138
+ /**
139
+ * Property items response (lookup/status values)
140
+ */
141
+ interface PropertyItemsResponse {
142
+ propertyKey: string;
143
+ viewType: string;
144
+ language: string;
145
+ items: PropertyItemOption[];
146
+ }
147
+ /**
148
+ * Property item option for filters
149
+ */
150
+ interface PropertyItemOption {
151
+ key: string;
152
+ name: string;
153
+ }
154
+ /**
155
+ * Response from /metadata/{service}/modules/{moduleId}/properties
156
+ */
157
+ interface PropertiesResponse {
158
+ properties: PropertyItem$1[];
159
+ }
160
+ /**
161
+ * Report URL configuration for dashboard exports
162
+ */
163
+ interface ReportUrl {
164
+ url: string;
165
+ name: LocalizedName;
166
+ responseType?: string;
167
+ }
168
+ /**
169
+ * Dashboard-specific configuration
170
+ */
171
+ interface ReportDashboardConfig {
172
+ ignoreQueryFilter?: boolean;
173
+ filters?: Record<string, any>;
174
+ versionNumber?: number;
175
+ extraInfo?: Record<string, any>;
176
+ reportUrls?: ReportUrl[];
177
+ }
178
+ /**
179
+ * Excel sheet configuration
180
+ */
181
+ interface ExcelSheet {
182
+ name: string;
183
+ chartDataQuery?: {
184
+ dashboardId?: number;
185
+ [key: string]: any;
186
+ };
187
+ }
188
+ /**
189
+ * Excel-specific configuration
190
+ */
191
+ interface ReportExcelConfig {
192
+ excel: ExcelSheet[];
193
+ }
194
+ /**
195
+ * Chart link configuration (per-chart config in link)
196
+ */
197
+ interface ChartLinkConfiguration {
198
+ series?: string[];
199
+ [key: string]: any;
200
+ }
201
+ /**
202
+ * Report chart link - links a chart component to a report
203
+ */
204
+ interface ReportChartLink {
205
+ id?: number;
206
+ reportId: number;
207
+ chartComponentId?: string;
208
+ configration: ChartLinkConfiguration;
209
+ order?: number;
210
+ }
211
+ /**
212
+ * Report model - base record for dashboard and excel
213
+ */
214
+ interface Report {
215
+ id?: number;
216
+ name: LocalizedName;
217
+ type: ReportType;
218
+ icon?: string;
219
+ url?: string;
220
+ showInMenu?: boolean;
221
+ isActive?: boolean;
222
+ createdAt?: string;
223
+ dashboardConfig?: ReportDashboardConfig;
224
+ excelConfig?: ReportExcelConfig;
225
+ chartLinks?: ReportChartLink[];
226
+ }
227
+ /**
228
+ * Style configuration for dashboard items
229
+ */
230
+ interface StyleConfig {
231
+ 'background-color'?: string;
232
+ color?: string;
233
+ 'justify-content'?: 'start' | 'center' | 'end';
234
+ 'font-size-title'?: number;
235
+ 'font-size-value'?: number;
236
+ [key: string]: any;
237
+ }
238
+ /**
239
+ * Display configuration
240
+ */
241
+ interface DisplayConfig {
242
+ StyleConfig: StyleConfig;
243
+ dimensions?: {
244
+ cols?: number;
245
+ rows?: number;
246
+ [key: string]: any;
247
+ };
248
+ [key: string]: any;
249
+ }
250
+ /**
251
+ * Service configuration for chart data
252
+ */
253
+ interface ServiceConfig {
254
+ dashboardId: string;
255
+ chartType?: string;
256
+ query?: {
257
+ extraProperties?: any[];
258
+ properties?: any[];
259
+ [key: string]: any;
260
+ };
261
+ [key: string]: any;
262
+ }
263
+ /**
264
+ * Action configuration
265
+ */
266
+ interface ActionConfig {
267
+ type: string;
268
+ actionType: string;
269
+ id?: string;
270
+ config?: Record<string, any>;
271
+ }
272
+ /**
273
+ * Client configuration for UI
274
+ */
275
+ interface ClientConfig {
276
+ title?: LocalizedName;
277
+ componentName?: string;
278
+ functionName?: string;
279
+ subType?: string;
280
+ requestType?: string;
281
+ displayConfig?: DisplayConfig;
282
+ configAsType?: {
283
+ icon?: string;
284
+ breadcrumb?: any[];
285
+ [key: string]: any;
286
+ };
287
+ actions?: ActionConfig[];
288
+ filter?: {
289
+ configs?: any[];
290
+ [key: string]: any;
291
+ };
292
+ pieConfigOverried?: any;
293
+ barConfigOverride?: any;
294
+ stackBarConfigOverride?: any;
295
+ [key: string]: any;
296
+ }
297
+ /**
298
+ * Chart/Item configuration
299
+ */
300
+ interface ItemConfig {
301
+ serviceConfig: ServiceConfig;
302
+ clientConfig: ClientConfig;
303
+ }
304
+ /**
305
+ * Dashboard chart item extending GridsterItem
306
+ */
307
+ interface DashboardChartItem extends GridsterItem {
308
+ /** Link record ID from server */
309
+ id?: number;
310
+ /** Chart component GUID from server */
311
+ chartComponentId?: string;
312
+ config: ItemConfig;
313
+ chartTypeId?: string;
314
+ loading?: boolean;
315
+ quickManage?: boolean;
316
+ group?: string;
317
+ orderInGroup?: number;
318
+ selectedGroupIndex?: number;
319
+ }
320
+ /**
321
+ * Dashboard dialog item
322
+ */
323
+ interface DashboardDialogItem {
324
+ id?: number;
325
+ name?: string;
326
+ config: ItemConfig;
327
+ chartTypeId?: string;
328
+ loading?: boolean;
329
+ }
330
+ /**
331
+ * Dashboard page configuration
332
+ * Alias for Report with Dashboard type - used for backwards compatibility
333
+ */
334
+ type DashboardPage = Report;
335
+ /**
336
+ * Request payload for linking a chart to a report
337
+ */
338
+ interface LinkChartRequest {
339
+ reportId: number;
340
+ chartComponentId?: string;
341
+ configration: ChartLinkConfiguration;
342
+ }
343
+ /**
344
+ * Request payload for bulk linking charts to a report
345
+ */
346
+ interface BulkLinkChartRequest {
347
+ reportId: number;
348
+ chartComponentId?: string;
349
+ configration: ChartLinkConfiguration;
350
+ }
351
+ /**
352
+ * Response item from bulk link operation
353
+ */
354
+ interface BulkLinkChartResponse {
355
+ id: number;
356
+ chartComponentId: string;
357
+ configration: string;
358
+ order: number;
359
+ }
360
+ /**
361
+ * Request payload for unlinking a chart from a report
362
+ */
363
+ interface UnlinkChartRequest {
364
+ reportId: number;
365
+ chartComponentId: string;
366
+ }
367
+ /**
368
+ * Chart actions context for pipes
369
+ */
370
+ interface ChartActionsContext {
371
+ deleteItem: (item: DashboardChartItem) => void;
372
+ removeGroup: (item: DashboardChartItem) => void;
373
+ editItem: (item: DashboardChartItem, parentItem?: DashboardChartItem) => void;
374
+ addDialogForChart: (item: DashboardChartItem) => void;
375
+ editOnDialogForChart: (item: DashboardChartItem) => void;
376
+ deleteDialogFromChart: (item: DashboardChartItem) => void;
377
+ }
378
+ /**
379
+ * Quick manage item types
380
+ */
381
+ type QuickManageType = 'default' | 'pie' | 'bar' | 'stackBar' | 'snapshotBar' | null;
382
+ /**
383
+ * Module type for data sources
384
+ */
385
+ interface ModuleType {
386
+ id: string;
387
+ name: string;
388
+ version?: string;
389
+ description?: string;
390
+ }
391
+ /**
392
+ * Chart data response structure
393
+ */
394
+ interface ChartData {
395
+ labels?: string[];
396
+ values?: number[];
397
+ data?: any[];
398
+ rows?: any[];
399
+ columns?: any[];
400
+ total?: number;
401
+ [key: string]: any;
402
+ }
403
+ /**
404
+ * HTTP methods for custom API
405
+ */
406
+ declare enum HTTPMethod {
407
+ GET = "GET",
408
+ POST = "POST",
409
+ PUT = "PUT",
410
+ DELETE = "DELETE",
411
+ PATCH = "PATCH"
412
+ }
413
+ /**
414
+ * Custom API configuration
415
+ */
416
+ interface CustomApi {
417
+ customApiUrl: string;
418
+ method: HTTPMethod;
419
+ headers?: Record<string, string>;
420
+ params?: Record<string, any>;
421
+ }
422
+
423
+ /**
424
+ * Chart Type Configuration
425
+ */
426
+ interface ChartTypeConfig {
427
+ id: string;
428
+ name: string;
429
+ icon: string;
430
+ serviceType: string;
431
+ componentName: string;
432
+ functionName: string;
433
+ requestType?: string;
434
+ category: 'chart' | 'card' | 'table' | 'special' | 'layout';
435
+ /** Products this chart type is available for (pplus, splus, report) */
436
+ products?: ('pplus' | 'splus' | 'report')[];
437
+ hideInList?: boolean;
438
+ /** Whether this type requires manage-item configuration (false = add directly) */
439
+ hasManageItem: boolean;
440
+ /** Default size when added to grid */
441
+ defaultSize?: {
442
+ cols: number;
443
+ rows: number;
444
+ };
445
+ }
446
+ /**
447
+ * Module Type from API
448
+ */
449
+ interface IModuleType {
450
+ id: string;
451
+ name: string;
452
+ version?: string;
453
+ description?: string;
454
+ }
455
+ /**
456
+ * Module with properties
457
+ */
458
+ interface IModule {
459
+ moduleDisplay: string;
460
+ moduleId: number | string;
461
+ moduleName: string;
462
+ selectionId?: number;
463
+ }
464
+ /**
465
+ * Property definition from API
466
+ * Maps to PropertyItem from dashboard.model.ts
467
+ */
468
+ interface IProperty {
469
+ id: number;
470
+ name: string;
471
+ hasName?: boolean;
472
+ key: string;
473
+ hasKey?: boolean;
474
+ normalizedKey: string;
475
+ hasNormalizedKey?: boolean;
476
+ configuration?: string;
477
+ hasConfiguration?: boolean;
478
+ viewType: string;
479
+ hasViewType?: boolean;
480
+ isTranslatable: boolean;
481
+ /** @deprecated Use PropertyItem.isCalculated when available */
482
+ isCalculated?: boolean;
483
+ /** @deprecated Use sorting on client side */
484
+ order?: number;
485
+ description?: string;
486
+ }
487
+ /**
488
+ * Property with grouping info
489
+ */
490
+ interface IPropertyWithGroup extends IProperty {
491
+ groupingBy: string;
492
+ }
493
+ /**
494
+ * Selection filter
495
+ */
496
+ interface SelectionFilter {
497
+ propertyKey: string | null;
498
+ propertyValue: any;
499
+ operation: 'Equals' | 'NotEquals' | 'OneOf' | 'Between' | 'Contains' | 'GreaterThan' | 'LessThan' | null;
500
+ logical: 'And' | 'Or' | null;
501
+ operationLevel?: number | null;
502
+ propertyData?: any;
503
+ }
504
+ /**
505
+ * Selection configuration
506
+ */
507
+ interface ISelection {
508
+ id: number;
509
+ service?: string | null;
510
+ /** Module selector in format "ModuleType:Id" (e.g., "Level:7") */
511
+ selector: string | null;
512
+ /** Display name of the selected module (e.g., "Project" for "Level:7") */
513
+ selectorName?: string | null;
514
+ filters: SelectionFilter[];
515
+ }
516
+ /**
517
+ * Source link configuration for joins
518
+ */
519
+ interface SourceLink {
520
+ source1SelectionId: number | null;
521
+ source2SelectionId: number | null;
522
+ source1PropertyKey: string | null;
523
+ source2PropertyKey: string | null;
524
+ source1Properties?: IProperty[];
525
+ source2Properties?: IProperty[];
526
+ isLeftJoin?: boolean;
527
+ isFilterLinkage?: boolean;
528
+ sourceLinkId?: number | null;
529
+ }
530
+ /**
531
+ * Available chart types - matching old groupedCharts implementation
532
+ */
533
+ declare const CHART_TYPES: ChartTypeConfig[];
534
+ /**
535
+ * Manage Item Service
536
+ *
537
+ * Handles state and operations for the manage-item drawer
538
+ */
539
+ declare class ManageItemService {
540
+ private dashboardService;
541
+ private fb;
542
+ readonly chart: _angular_core.WritableSignal<DashboardChartItem | null>;
543
+ readonly selectedType: _angular_core.WritableSignal<ChartTypeConfig | null>;
544
+ readonly chartTypes: _angular_core.WritableSignal<ChartTypeConfig[]>;
545
+ readonly moduleTypes: _angular_core.WritableSignal<IModuleType[]>;
546
+ readonly modulesProperties: _angular_core.WritableSignal<{
547
+ moduleName: string;
548
+ moduleDisplay: string;
549
+ properties: IProperty[];
550
+ }[]>;
551
+ readonly propertiesFlat: _angular_core.WritableSignal<IPropertyWithGroup[]>;
552
+ readonly isEdit: _angular_core.WritableSignal<boolean>;
553
+ readonly dirty: _angular_core.WritableSignal<boolean>;
554
+ readonly loading: _angular_core.WritableSignal<boolean>;
555
+ readonly configSignal: _angular_core.WritableSignal<ItemConfig | null>;
556
+ readonly chartTypesFiltered: _angular_core.Signal<ChartTypeConfig[]>;
557
+ readonly chartTypesByCategory: _angular_core.Signal<{
558
+ card: ChartTypeConfig[];
559
+ chart: ChartTypeConfig[];
560
+ table: ChartTypeConfig[];
561
+ special: ChartTypeConfig[];
562
+ layout: ChartTypeConfig[];
563
+ }>;
564
+ readonly chartForm: _angular_forms.FormGroup<{
565
+ id: _angular_forms.FormControl<number | null>;
566
+ name: _angular_forms.FormControl<string | null>;
567
+ dashboardId: _angular_forms.FormControl<string | null>;
568
+ chartTypeId: _angular_forms.FormControl<string | null>;
569
+ configuration: _angular_forms.FormGroup<{
570
+ clientConfig: _angular_forms.FormControl<ClientConfig | null>;
571
+ serviceConfig: _angular_forms.FormControl<ServiceConfig | null>;
572
+ }>;
573
+ }>;
574
+ /**
575
+ * Reset all state
576
+ */
577
+ resetState(): void;
578
+ /**
579
+ * Initialize with existing chart (edit mode) or empty (new mode)
580
+ */
581
+ init(chartData?: DashboardChartItem): void;
582
+ /**
583
+ * Set chart data for editing
584
+ */
585
+ setChart(chartData: DashboardChartItem): void;
586
+ /**
587
+ * Select a chart type
588
+ */
589
+ selectType(type: ChartTypeConfig): void;
590
+ /**
591
+ * Mark form as dirty
592
+ */
593
+ markDirty(): void;
594
+ /**
595
+ * Get configuration value (returns signal value for reactivity)
596
+ */
597
+ getConfig(): ItemConfig | null;
598
+ /**
599
+ * Update service config
600
+ */
601
+ updateServiceConfig(partial: Partial<ServiceConfig>): void;
602
+ /**
603
+ * Update client config
604
+ */
605
+ updateClientConfig(partial: Partial<ClientConfig>): void;
606
+ /**
607
+ * Load module types from API
608
+ */
609
+ loadModuleTypes(): void;
610
+ /**
611
+ * Load properties for selected modules
612
+ */
613
+ loadPropertiesForModules(modules: {
614
+ moduleType: string;
615
+ moduleDisplay?: string;
616
+ }[]): void;
617
+ /**
618
+ * Get final chart data for saving
619
+ */
620
+ getFinalChartData(): {
621
+ configuration: ItemConfig;
622
+ chartTypeId: string;
623
+ } | null;
624
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageItemService, never>;
625
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ManageItemService>;
626
+ }
627
+
628
+ /**
629
+ * Dashboard Builder Component
630
+ *
631
+ * Main component for building and managing dashboard layouts.
632
+ * Features:
633
+ * - Gridster-based drag & drop layout
634
+ * - Chart management (add, edit, delete)
635
+ * - Group support
636
+ * - Multi-select and copy/paste
637
+ * - Chart settings drawer (pie, bar, stack bar controls)
638
+ */
639
+ declare class DashboardBuilder implements OnInit, OnDestroy {
640
+ private cdr;
641
+ private dashboardService;
642
+ private storeService;
643
+ private transloco;
644
+ private modalService;
645
+ /** Whether to wrap content in mt-page component */
646
+ readonly isPage: _angular_core.InputSignal<boolean>;
647
+ /** Page title when isPage is true */
648
+ readonly pageTitle: _angular_core.InputSignal<string>;
649
+ /** Show back button in page header */
650
+ readonly backButton: _angular_core.InputSignal<boolean>;
651
+ /** Dashboard/Page ID to load */
652
+ readonly pageId: _angular_core.InputSignal<string | number | null>;
653
+ /** Read-only mode */
654
+ readonly readonly: _angular_core.InputSignal<boolean>;
655
+ /** Emit when page config changes */
656
+ readonly pageChange: _angular_core.OutputEmitterRef<_masterteam_dashboard_builder.Report>;
657
+ /** Emit when charts change */
658
+ readonly chartsChange: _angular_core.OutputEmitterRef<DashboardChartItem[]>;
659
+ /** Emit when save is complete */
660
+ readonly onSave: _angular_core.OutputEmitterRef<void>;
661
+ /** Emit when back button is clicked */
662
+ readonly onBack: _angular_core.OutputEmitterRef<void>;
663
+ /** Emit when requesting to add new chart (opens external chart editor) */
664
+ readonly onAddChart: _angular_core.OutputEmitterRef<{
665
+ x: number;
666
+ y: number;
667
+ }>;
668
+ /** Emit when requesting to edit chart */
669
+ readonly onEditChart: _angular_core.OutputEmitterRef<{
670
+ chart: DashboardChartItem;
671
+ isDialog?: boolean;
672
+ }>;
673
+ readonly contextMenu: _angular_core.Signal<ContextMenu | undefined>;
674
+ readonly gridsterContainer: _angular_core.Signal<any>;
675
+ readonly loading: _angular_core.WritableSignal<boolean>;
676
+ readonly saving: _angular_core.WritableSignal<boolean>;
677
+ readonly pageConfig: _angular_core.WritableSignal<_masterteam_dashboard_builder.Report | null>;
678
+ readonly charts: _angular_core.WritableSignal<DashboardChartItem[]>;
679
+ readonly dialogs: _angular_core.WritableSignal<DashboardDialogItem[]>;
680
+ readonly filtersConfig: _angular_core.WritableSignal<any[]>;
681
+ readonly selectedCharts: _angular_core.WritableSignal<string[]>;
682
+ readonly contextPos: _angular_core.WritableSignal<{
683
+ x: number;
684
+ y: number;
685
+ }>;
686
+ readonly stopActionsOnCards: _angular_core.WritableSignal<boolean>;
687
+ readonly pendingWidgetType: _angular_core.WritableSignal<ChartTypeConfig | null>;
688
+ /** Reference to widget palette drawer */
689
+ private widgetPaletteRef;
690
+ /** Reference to chart settings drawer */
691
+ private chartSettingsRef;
692
+ readonly languageCode: _angular_core.Signal<string>;
693
+ readonly direction: _angular_core.Signal<"rtl" | "ltr">;
694
+ readonly chartActionsContext: ChartActionsContext;
695
+ readonly options: GridsterConfig;
696
+ private subscription;
697
+ private isDragging;
698
+ private scrollInterval;
699
+ private dragStartY;
700
+ readonly menuItems: _angular_core.Signal<MenuItem[]>;
701
+ ngOnInit(): void;
702
+ ngOnDestroy(): void;
703
+ private setupEventListeners;
704
+ private removeEventListeners;
705
+ private loadPageIfNeeded;
706
+ loadPage(id: string | number): void;
707
+ saveDash(): void;
708
+ addOrEditPage(page?: DashboardPage): void;
709
+ deleteReport(): void;
710
+ onItemResize(item: GridsterItem, itemComponent: any): void;
711
+ onItemChange(item: GridsterItem, _itemComponent: any): void;
712
+ onContextMenu(event: MouseEvent, item: GridsterItem): void;
713
+ /** Handle dragover on gridster - must call preventDefault to allow drop */
714
+ onGridDragOver(event: DragEvent): void;
715
+ /** Handle drop on gridster - just prevent default, actual handling in onDrop */
716
+ onGridDrop(event: DragEvent): void;
717
+ /** Handle drop on empty cell from widget palette */
718
+ onDrop(event: DragEvent, item: GridsterItem): void;
719
+ onKeyDown(event: KeyboardEvent): void;
720
+ onSelect(chart: DashboardChartItem, event: MouseEvent): void;
721
+ pasteSelectedCharts(): void;
722
+ private pasteItemInChart;
723
+ addItem(): void;
724
+ editItem(chart: DashboardChartItem, parentItem?: DashboardChartItem): void;
725
+ deleteItem(chart: DashboardChartItem): void;
726
+ private removeChartLocally;
727
+ newChart(value: any): void;
728
+ editChart(value: any): void;
729
+ createGroup(): void;
730
+ removeGroup(groupItem: DashboardChartItem): void;
731
+ addHeader(): void;
732
+ addTopbar(): void;
733
+ /** Open widget palette drawer */
734
+ toggleWidgetPalette(): void;
735
+ /** Close widget palette drawer */
736
+ closeWidgetPalette(): void;
737
+ /** Add widget based on type configuration */
738
+ addWidgetByType(widgetType: ChartTypeConfig): void;
739
+ /** Add layout widget directly (header, topbar, group) */
740
+ private addLayoutWidget;
741
+ /** Open manage-item drawer for a specific widget type */
742
+ private openManageItemForType;
743
+ /** Create new chart with specified size */
744
+ private newChartWithSize;
745
+ openBreadcrumb(item: DashboardChartItem): void;
746
+ openManageFilter(): void;
747
+ addDialogForChart(chart: DashboardChartItem): void;
748
+ editOnDialogForChart(chart: DashboardChartItem): void;
749
+ deleteDialogFromChart(chart: DashboardChartItem): void;
750
+ /** Open chart settings drawer for item configuration */
751
+ openQuickManage(event: Event, item: DashboardChartItem): void;
752
+ /** Handle apply from chart settings drawer */
753
+ onQuickManageApply(updatedItem: DashboardChartItem): void;
754
+ stopAndActiveActions(): void;
755
+ reRenderItem(item: DashboardChartItem): void;
756
+ isSelected(chart: DashboardChartItem): boolean;
757
+ showQuickManageButton(chart: DashboardChartItem): boolean;
758
+ private handleDragOver;
759
+ private handleDrop;
760
+ private handleDragEnd;
761
+ private startAutoScroll;
762
+ private stopAutoScroll;
763
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardBuilder, never>;
764
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardBuilder, "mt-dashboard-builder", never, { "isPage": { "alias": "isPage"; "required": false; "isSignal": true; }; "pageTitle": { "alias": "pageTitle"; "required": false; "isSignal": true; }; "backButton": { "alias": "backButton"; "required": false; "isSignal": true; }; "pageId": { "alias": "pageId"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "chartsChange": "chartsChange"; "onSave": "onSave"; "onBack": "onBack"; "onAddChart": "onAddChart"; "onEditChart": "onEditChart"; }, never, never, true, never>;
765
+ }
766
+
767
+ /**
768
+ * Dashboard Viewer Component
769
+ *
770
+ * A read-only component for viewing and displaying dashboard layouts.
771
+ * Similar to pageBuilder-gridster but without editing capabilities.
772
+ *
773
+ * Features:
774
+ * - Gridster-based layout display (read-only)
775
+ * - Chart/widget rendering
776
+ * - Group support with tab switching
777
+ * - Filter sidebar integration
778
+ * - Dialog rendering
779
+ */
780
+ declare class DashboardViewer implements OnInit, OnDestroy {
781
+ private cdr;
782
+ private dashboardService;
783
+ private storeService;
784
+ /** Whether to wrap content in mt-page component */
785
+ readonly isPage: _angular_core.InputSignal<boolean>;
786
+ /** Page title when isPage is true */
787
+ readonly pageTitle: _angular_core.InputSignal<string>;
788
+ /** Show back button in page header */
789
+ readonly backButton: _angular_core.InputSignal<boolean>;
790
+ /** Dashboard/Page ID to load */
791
+ readonly pageId: _angular_core.InputSignal<string | number | null>;
792
+ /** Pre-loaded charts (optional - if provided, skips API call) */
793
+ readonly chartsData: _angular_core.InputSignal<DashboardChartItem[]>;
794
+ /** Pre-loaded dialogs (optional) */
795
+ readonly dialogsData: _angular_core.InputSignal<DashboardDialogItem[]>;
796
+ /** Pre-loaded filters (optional) */
797
+ readonly filtersData: _angular_core.InputSignal<any[]>;
798
+ /** Show filters sidebar */
799
+ readonly showFilters: _angular_core.InputSignal<boolean>;
800
+ /** Emit when page is loaded */
801
+ readonly pageLoaded: _angular_core.OutputEmitterRef<_masterteam_dashboard_builder.Report>;
802
+ /** Emit when back button is clicked */
803
+ readonly onBack: _angular_core.OutputEmitterRef<void>;
804
+ /** Emit when chart is clicked (for drill-down, etc.) */
805
+ readonly chartClick: _angular_core.OutputEmitterRef<{
806
+ chart: DashboardChartItem;
807
+ event: Event;
808
+ }>;
809
+ readonly gridsterContainer: _angular_core.Signal<any>;
810
+ readonly loading: _angular_core.WritableSignal<boolean>;
811
+ readonly pageConfig: _angular_core.WritableSignal<_masterteam_dashboard_builder.Report | null>;
812
+ readonly charts: _angular_core.WritableSignal<DashboardChartItem[]>;
813
+ readonly dialogs: _angular_core.WritableSignal<DashboardDialogItem[]>;
814
+ readonly filters: _angular_core.WritableSignal<any[]>;
815
+ readonly languageCode: _angular_core.Signal<string>;
816
+ readonly direction: _angular_core.Signal<"rtl" | "ltr">;
817
+ readonly options: GridsterConfig;
818
+ private subscription;
819
+ private chartsDataEffect;
820
+ private dialogsDataEffect;
821
+ private filtersDataEffect;
822
+ ngOnInit(): void;
823
+ ngOnDestroy(): void;
824
+ private setupSubscriptions;
825
+ private loadPageIfNeeded;
826
+ loadPage(id: string | number): void;
827
+ reloadPage(): void;
828
+ /**
829
+ * Get the title for a group item
830
+ */
831
+ getGroupTitle(item: DashboardChartItem): string;
832
+ /**
833
+ * Get children of a group
834
+ */
835
+ getGroupChildren(item: DashboardChartItem): DashboardChartItem[];
836
+ /**
837
+ * Select a child in a group
838
+ */
839
+ selectGroupChild(item: DashboardChartItem, index: number): void;
840
+ /**
841
+ * Check if item is a group
842
+ */
843
+ isGroup(item: DashboardChartItem): boolean;
844
+ /**
845
+ * Check if item is a header
846
+ */
847
+ isHeader(item: DashboardChartItem): boolean;
848
+ /**
849
+ * Check if item is a topbar
850
+ */
851
+ isTopbar(item: DashboardChartItem): boolean;
852
+ /**
853
+ * Check if item should be shown (not grouped or is a group itself)
854
+ */
855
+ shouldShowItem(item: DashboardChartItem): boolean;
856
+ /**
857
+ * Get item title
858
+ */
859
+ getItemTitle(item: DashboardChartItem): string;
860
+ /**
861
+ * Get style config
862
+ */
863
+ getStyleConfig(item: DashboardChartItem): Record<string, any>;
864
+ /**
865
+ * Get icon from configAsType
866
+ */
867
+ getItemIcon(item: DashboardChartItem): string | null;
868
+ /**
869
+ * Get breadcrumb items for topbar
870
+ */
871
+ getBreadcrumb(item: DashboardChartItem): any[];
872
+ /**
873
+ * Get chart type
874
+ */
875
+ getChartType(item: DashboardChartItem): string;
876
+ /**
877
+ * Handle chart click
878
+ */
879
+ onChartClick(chart: DashboardChartItem, event: Event): void;
880
+ /**
881
+ * Track function for ngFor
882
+ */
883
+ trackByDashboardId(_index: number, item: DashboardChartItem): string;
884
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardViewer, never>;
885
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardViewer, "mt-dashboard-viewer", never, { "isPage": { "alias": "isPage"; "required": false; "isSignal": true; }; "pageTitle": { "alias": "pageTitle"; "required": false; "isSignal": true; }; "backButton": { "alias": "backButton"; "required": false; "isSignal": true; }; "pageId": { "alias": "pageId"; "required": false; "isSignal": true; }; "chartsData": { "alias": "chartsData"; "required": false; "isSignal": true; }; "dialogsData": { "alias": "dialogsData"; "required": false; "isSignal": true; }; "filtersData": { "alias": "filtersData"; "required": false; "isSignal": true; }; "showFilters": { "alias": "showFilters"; "required": false; "isSignal": true; }; }, { "pageLoaded": "pageLoaded"; "onBack": "onBack"; "chartClick": "chartClick"; }, never, never, true, never>;
886
+ }
887
+
888
+ /**
889
+ * Chart Models
890
+ *
891
+ * Type definitions for chart data, configuration, and responses.
892
+ */
893
+
894
+ /**
895
+ * Store interface for each dashboard item
896
+ */
897
+ interface DashboardItemStore {
898
+ /** Initial configuration (immutable) */
899
+ initConfigurationItem?: ItemConfig;
900
+ /** Current configuration (may be modified) */
901
+ ConfigurationItem?: ItemConfig;
902
+ /** Raw data response from API */
903
+ DataResponse?: any;
904
+ /** Processed/transformed data for rendering */
905
+ DataHandled?: ChartDataHandled;
906
+ /** Flag to trigger data fetch */
907
+ GetData?: boolean;
908
+ /** Action being handled */
909
+ handleAction?: HandleAction;
910
+ /** Filter activation state */
911
+ filterActivated?: any;
912
+ /** Loading state for the item */
913
+ isLoading?: boolean;
914
+ /** Error state for the item */
915
+ error?: string | null;
916
+ /** Whether the item has an error */
917
+ hasError?: boolean;
918
+ /** Extra filter from parent context */
919
+ extraFilter?: Record<string, any>;
920
+ /** Stop actions flag */
921
+ stopActions?: boolean;
922
+ /** Query params for current context */
923
+ queryParams?: Record<string, any>;
924
+ /** Pre-query params to merge */
925
+ preQueryParams?: Record<string, any>;
926
+ /** Dialog visibility state */
927
+ showDialog?: boolean;
928
+ /** Dialog configuration */
929
+ dialogConfig?: any;
930
+ /** Dialog data */
931
+ dialogData?: any;
932
+ }
933
+ /**
934
+ * Action types for dashboard items
935
+ */
936
+ interface HandleAction {
937
+ id: number | string;
938
+ type: 'openDialog' | 'closeDialog' | 'navigate' | 'filter' | 'refresh';
939
+ data: any;
940
+ }
941
+ /**
942
+ * Processed chart data structure
943
+ */
944
+ interface ChartDataHandled {
945
+ /** ECharts options (for chart types) */
946
+ chartOptions?: any;
947
+ /** No data flag */
948
+ noData?: boolean;
949
+ /** Table columns */
950
+ columns?: TableColumn$1[];
951
+ /** Table data rows */
952
+ rows?: any[];
953
+ /** Statistic cards data */
954
+ cards?: StatisticCardData[];
955
+ /** Calendar/timeline options */
956
+ calendarOptions?: any;
957
+ /** Labels for display */
958
+ labels?: ChartLabel[];
959
+ /** Raw values */
960
+ values?: any[];
961
+ /** Any additional data */
962
+ [key: string]: any;
963
+ }
964
+ /**
965
+ * Table column definition
966
+ */
967
+ interface TableColumn$1 {
968
+ /** Column key (field name) */
969
+ key: string;
970
+ /** Display label */
971
+ label: string;
972
+ /** Alias for key */
973
+ field?: string;
974
+ /** Alias for label */
975
+ header?: string;
976
+ headerAr?: string;
977
+ sortable?: boolean;
978
+ filterable?: boolean;
979
+ width?: string;
980
+ align?: 'left' | 'center' | 'right';
981
+ type?: 'text' | 'number' | 'date' | 'status' | 'currency' | 'percentage';
982
+ format?: string;
983
+ hidden?: boolean;
984
+ }
985
+ /**
986
+ * Statistic card data
987
+ */
988
+ interface StatisticCardData {
989
+ id?: string | number;
990
+ title: {
991
+ en?: string;
992
+ ar?: string;
993
+ } | string;
994
+ value: number | string;
995
+ icon?: string;
996
+ color?: string;
997
+ trend?: {
998
+ direction: 'up' | 'down' | 'neutral';
999
+ value: number;
1000
+ label?: string;
1001
+ };
1002
+ suffix?: string;
1003
+ prefix?: string;
1004
+ description?: string;
1005
+ actions?: any[];
1006
+ /** Subtitle text */
1007
+ subTitle?: {
1008
+ en?: string;
1009
+ ar?: string;
1010
+ } | string;
1011
+ /** Card width */
1012
+ width?: string;
1013
+ /** Whether the card is clickable */
1014
+ isClickable?: boolean;
1015
+ }
1016
+ /**
1017
+ * Chart label for legends
1018
+ */
1019
+ interface ChartLabel {
1020
+ key: string;
1021
+ label: string;
1022
+ color?: string;
1023
+ icon?: string;
1024
+ }
1025
+ /**
1026
+ * Request types for data fetching
1027
+ */
1028
+ type RequestType = 'level' | 'levellog' | 'log' | 'custom' | 'snapShot' | 'levelCards' | 'timelineProjectDependencies' | 'customSplus' | 'phaseGate';
1029
+ /**
1030
+ * Chart type to component mapping
1031
+ */
1032
+ type ComponentType = 'chart' | 'map' | 'BackgroundTextChart' | 'chartCustomWithCardInfo' | 'listOfcharts' | 'listOfCardsStatistic' | 'cardsStatistic' | 'header' | 'footer' | 'label' | 'listOfLevelCards' | 'dialog' | 'table' | 'phaseGateTable' | 'topbar' | 'timeline' | 'timelineProjectDependencies' | 'lastHistoryLevelCard' | 'entityPreview' | 'clusterStackedChart' | 'listComponentSplusCard' | 'splitterChart' | 'repeater' | 'levelCardsWithStatic' | 'phaseGateStepperCard' | 'Group';
1033
+ /**
1034
+ * EChart series data item
1035
+ */
1036
+ interface EChartSeriesItem {
1037
+ value: number;
1038
+ name: string;
1039
+ key?: string;
1040
+ itemStyle?: {
1041
+ color?: string;
1042
+ borderColor?: string;
1043
+ borderWidth?: number;
1044
+ };
1045
+ extraValues?: Record<string, any>;
1046
+ groupValues?: Record<string, any>;
1047
+ }
1048
+ /**
1049
+ * Bar chart data structure
1050
+ */
1051
+ interface BarChartData {
1052
+ noData: boolean;
1053
+ chartOptions: {
1054
+ xAxis: any;
1055
+ yAxis: any;
1056
+ series: any[];
1057
+ tooltip?: any;
1058
+ legend?: any;
1059
+ grid?: any;
1060
+ dataZoom?: any[];
1061
+ };
1062
+ }
1063
+ /**
1064
+ * Pie/Donut chart data structure
1065
+ */
1066
+ interface PieChartData {
1067
+ noData: boolean;
1068
+ chartOptions: {
1069
+ series: any[];
1070
+ tooltip?: any;
1071
+ legend?: any;
1072
+ };
1073
+ }
1074
+ /**
1075
+ * Table view data structure
1076
+ */
1077
+ interface TableViewData {
1078
+ columns: TableColumn$1[];
1079
+ rows: any[];
1080
+ data?: any[];
1081
+ total?: number;
1082
+ totalRecords?: number;
1083
+ groupBy?: string;
1084
+ isGrouped?: boolean;
1085
+ }
1086
+ /**
1087
+ * Timeline/Gantt data item
1088
+ */
1089
+ interface TimelineItem {
1090
+ id?: string | number;
1091
+ title: string;
1092
+ startDate: string | Date;
1093
+ endDate: string | Date;
1094
+ color?: string;
1095
+ type?: string;
1096
+ progress?: number;
1097
+ dependencies?: string[];
1098
+ extraValues?: Record<string, any>;
1099
+ }
1100
+ /**
1101
+ * Timeline/Gantt data structure
1102
+ */
1103
+ interface TimelineData {
1104
+ items: TimelineItem[];
1105
+ calendarOptions?: any;
1106
+ labels?: ChartLabel[];
1107
+ events?: any[];
1108
+ startDate?: string | Date;
1109
+ endDate?: string | Date;
1110
+ }
1111
+ /**
1112
+ * Breadcrumb item for topbar
1113
+ */
1114
+ interface BreadcrumbItem {
1115
+ label: {
1116
+ en?: string;
1117
+ ar?: string;
1118
+ } | string;
1119
+ routerLink?: string;
1120
+ icon?: string;
1121
+ queryParams?: Record<string, any>;
1122
+ }
1123
+ /**
1124
+ * Filter configuration
1125
+ */
1126
+ interface FilterConfig {
1127
+ show: boolean;
1128
+ propertyKey?: string;
1129
+ options?: FilterOption[];
1130
+ defaultValue?: any;
1131
+ type?: 'select' | 'multiselect' | 'multiSelect' | 'date' | 'daterange' | 'text';
1132
+ placeholder?: Record<string, string>;
1133
+ }
1134
+ /**
1135
+ * Filter option
1136
+ */
1137
+ interface FilterOption {
1138
+ label: string;
1139
+ value: any;
1140
+ icon?: string;
1141
+ color?: string;
1142
+ }
1143
+ /**
1144
+ * Action click event
1145
+ */
1146
+ interface ChartActionEvent {
1147
+ type: 'click' | 'dblclick' | 'hover' | 'clickOnHeader';
1148
+ data?: any;
1149
+ event?: Event;
1150
+ dataIndex?: number;
1151
+ seriesIndex?: number;
1152
+ name?: string;
1153
+ value?: any;
1154
+ }
1155
+
1156
+ declare class DashboardItem implements OnInit, OnDestroy {
1157
+ private readonly storeService;
1158
+ private readonly itemStoreService;
1159
+ private readonly chartDataService;
1160
+ private readonly actionService;
1161
+ private readonly transloco;
1162
+ private subscription;
1163
+ private readonly destroy$;
1164
+ /** Chart configuration */
1165
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
1166
+ /** Chart type identifier */
1167
+ readonly chartTypeId: _angular_core.InputSignal<string | number | undefined>;
1168
+ /** Read-only mode */
1169
+ readonly readonly: _angular_core.InputSignal<boolean>;
1170
+ /** Whether this item is inside a group */
1171
+ readonly inGroup: _angular_core.InputSignal<boolean>;
1172
+ /** Whether this item is rendered inside a dialog */
1173
+ readonly isDialog: _angular_core.InputSignal<boolean>;
1174
+ /** Query params passed from parent (e.g., dialog) */
1175
+ readonly queryParams: _angular_core.InputSignal<Record<string, any>>;
1176
+ /** Emitted when an action is triggered (useful for dialog communication) */
1177
+ readonly actionTriggered: _angular_core.OutputEmitterRef<any>;
1178
+ /** Dashboard ID - derived from config or chartTypeId */
1179
+ readonly dashboardId: _angular_core.Signal<string | null>;
1180
+ /** Component name */
1181
+ readonly componentName: _angular_core.Signal<ComponentType>;
1182
+ /** Request type */
1183
+ readonly requestType: _angular_core.Signal<RequestType | undefined>;
1184
+ /** Function name for data handling */
1185
+ readonly functionName: _angular_core.Signal<string | undefined>;
1186
+ /** Custom API configuration */
1187
+ readonly customApi: _angular_core.Signal<CustomApi | undefined>;
1188
+ /** Language code for title display */
1189
+ readonly languageCode: _angular_core.Signal<string>;
1190
+ /** Chart type from service config */
1191
+ readonly chartType: _angular_core.Signal<string | undefined>;
1192
+ /** Loading state - SINGLE SOURCE OF TRUTH */
1193
+ readonly isLoading: _angular_core.WritableSignal<boolean>;
1194
+ /** Has error */
1195
+ readonly hasError: _angular_core.WritableSignal<boolean>;
1196
+ /** Error message */
1197
+ readonly errorMessage: _angular_core.WritableSignal<string | null>;
1198
+ /** Configuration from store */
1199
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1200
+ /** Statistic data for cardsStatistic type */
1201
+ readonly statisticData: _angular_core.WritableSignal<any>;
1202
+ /** Track if component has been initialized */
1203
+ private initialized;
1204
+ /** Track current dashboardId to detect changes */
1205
+ private currentDashboardId;
1206
+ constructor();
1207
+ ngOnInit(): void;
1208
+ /**
1209
+ * Setup subscriptions and fetch data for a specific dashboardId
1210
+ */
1211
+ private setupForDashboardId;
1212
+ ngOnDestroy(): void;
1213
+ /**
1214
+ * Initialize store with configuration
1215
+ */
1216
+ private initializeStore;
1217
+ /**
1218
+ * Main getData method - delegates to ChartDataService for all request types
1219
+ */
1220
+ getData(): void;
1221
+ /**
1222
+ * Refresh data
1223
+ */
1224
+ refresh(): void;
1225
+ /**
1226
+ * Trigger data fetch via store
1227
+ */
1228
+ triggerDataFetch(): void;
1229
+ /**
1230
+ * Handle actions from child components (charts, tables, etc.)
1231
+ * This is the main entry point for action handling.
1232
+ */
1233
+ doActions(eventData: any, eventType: string): void;
1234
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardItem, never>;
1235
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardItem, "mt-dashboard-item", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartTypeId": { "alias": "chartTypeId"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "isDialog": { "alias": "isDialog"; "required": false; "isSignal": true; }; "queryParams": { "alias": "queryParams"; "required": false; "isSignal": true; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
1236
+ }
1237
+
1238
+ interface HeaderCardConfig$1 {
1239
+ showHeader?: boolean;
1240
+ isHeaderHidden?: boolean;
1241
+ headerClickable?: boolean;
1242
+ icon?: string;
1243
+ iconColor?: string;
1244
+ titleColor?: string;
1245
+ }
1246
+ interface CardBorderStyleConfig {
1247
+ 'border-width'?: number;
1248
+ 'border-top-show'?: boolean;
1249
+ 'border-top-color'?: string;
1250
+ 'border-right-show'?: boolean;
1251
+ 'border-right-color'?: string;
1252
+ 'border-bottom-show'?: boolean;
1253
+ 'border-bottom-color'?: string;
1254
+ 'border-left-show'?: boolean;
1255
+ 'border-left-color'?: string;
1256
+ 'background-color'?: string;
1257
+ 'box-shadow'?: string;
1258
+ 'border-radius'?: number;
1259
+ }
1260
+ interface CardStyleConfig$1 {
1261
+ backgroundColor?: string;
1262
+ borderRadius?: number;
1263
+ shadows?: Array<{
1264
+ x: number;
1265
+ y: number;
1266
+ blur: number;
1267
+ spread: number;
1268
+ color: string;
1269
+ }>;
1270
+ }
1271
+ declare class CardContentComponent {
1272
+ /** Card title */
1273
+ readonly title: _angular_core.InputSignal<string>;
1274
+ /** Whether card is inside a group */
1275
+ readonly inGroup: _angular_core.InputSignal<boolean>;
1276
+ /** Header configuration */
1277
+ readonly headerConfig: _angular_core.InputSignal<HeaderCardConfig$1 | null>;
1278
+ /** Style configuration (border styling) */
1279
+ readonly styleConfig: _angular_core.InputSignal<CardBorderStyleConfig | null>;
1280
+ /** Card style configuration (background, shadows, border radius) */
1281
+ readonly cardStyleConfig: _angular_core.InputSignal<CardStyleConfig$1 | null>;
1282
+ /** Whether to show header */
1283
+ readonly showHeaderInput: _angular_core.InputSignal<boolean>;
1284
+ /** Whether header is clickable */
1285
+ readonly headerClickableInput: _angular_core.InputSignal<boolean>;
1286
+ /** No top end content flag */
1287
+ readonly isNoTopEnd: _angular_core.InputSignal<boolean>;
1288
+ /** Whether this card contains a chart (disables horizontal scroll) */
1289
+ readonly isChart: _angular_core.InputSignal<boolean>;
1290
+ /** Header click event */
1291
+ readonly headerClick: _angular_core.OutputEmitterRef<void>;
1292
+ /** Computed show header */
1293
+ readonly showHeader: _angular_core.Signal<boolean>;
1294
+ /** Computed header clickable */
1295
+ readonly headerClickable: _angular_core.Signal<boolean>;
1296
+ /** Computed card styles from StyleConfig and cardStyleConfig */
1297
+ readonly cardStyles: _angular_core.Signal<Record<string, string>>;
1298
+ /** Computed border radius style */
1299
+ readonly borderRadiusStyle: _angular_core.Signal<string>;
1300
+ onHeaderClick(): void;
1301
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardContentComponent, never>;
1302
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardContentComponent, "db-card-content", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "headerConfig": { "alias": "headerConfig"; "required": false; "isSignal": true; }; "styleConfig": { "alias": "styleConfig"; "required": false; "isSignal": true; }; "cardStyleConfig": { "alias": "cardStyleConfig"; "required": false; "isSignal": true; }; "showHeaderInput": { "alias": "showHeader"; "required": false; "isSignal": true; }; "headerClickableInput": { "alias": "headerClickable"; "required": false; "isSignal": true; }; "isNoTopEnd": { "alias": "isNoTopEnd"; "required": false; "isSignal": true; }; "isChart": { "alias": "isChart"; "required": false; "isSignal": true; }; }, { "headerClick": "headerClick"; }, never, ["[topEnd]", "[body]", "[footer]"], true, never>;
1303
+ }
1304
+
1305
+ declare class CardFilterComponent implements OnInit {
1306
+ private readonly storeService;
1307
+ private readonly transloco;
1308
+ /** Filter configuration */
1309
+ readonly config: _angular_core.InputSignal<FilterConfig | null>;
1310
+ /** Dashboard ID */
1311
+ readonly dashboardId: _angular_core.InputSignal<string | number | undefined>;
1312
+ /** Filter change event */
1313
+ readonly filterChange: _angular_core.OutputEmitterRef<any>;
1314
+ /** Selected value (single select) */
1315
+ selectedValue: any;
1316
+ /** Selected values (multi select) */
1317
+ selectedValues: any[];
1318
+ /** Date range */
1319
+ startDate: string;
1320
+ endDate: string;
1321
+ /** Language code */
1322
+ readonly langCode: _angular_core.Signal<string>;
1323
+ /** Filter type */
1324
+ readonly filterType: _angular_core.Signal<"date" | "text" | "select" | "multiselect" | "multiSelect" | "daterange">;
1325
+ /** Filter options */
1326
+ readonly options: _angular_core.Signal<FilterOption[]>;
1327
+ /** Placeholder text */
1328
+ readonly placeholder: _angular_core.Signal<string>;
1329
+ ngOnInit(): void;
1330
+ onFilterChange(value: any): void;
1331
+ onMultiFilterChange(values: any[]): void;
1332
+ onDateChange(): void;
1333
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardFilterComponent, never>;
1334
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardFilterComponent, "db-card-filter", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "dashboardId": { "alias": "dashboardId"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; }, never, never, true, never>;
1335
+ }
1336
+
1337
+ declare class ChartCardComponent implements OnInit, OnDestroy {
1338
+ private readonly storeService;
1339
+ private readonly actionService;
1340
+ private readonly transloco;
1341
+ private readonly subscription;
1342
+ /** Dashboard ID for this card */
1343
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1344
+ /** Whether card is inside a group */
1345
+ readonly inGroup: _angular_core.InputSignal<boolean>;
1346
+ /** Config mode flag */
1347
+ readonly isConfigMode: _angular_core.InputSignal<boolean>;
1348
+ /** Action event output */
1349
+ readonly onAction: _angular_core.OutputEmitterRef<{
1350
+ type: string;
1351
+ data: any;
1352
+ }>;
1353
+ /** Configuration item */
1354
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1355
+ /** Handled chart data */
1356
+ readonly dataHandled: _angular_core.WritableSignal<ChartDataHandled | null>;
1357
+ /** Card title */
1358
+ readonly title: _angular_core.Signal<string>;
1359
+ /** Show filter flag */
1360
+ readonly showFilter: _angular_core.Signal<any>;
1361
+ /** Show top end section (filter or extra filters) */
1362
+ readonly showTopEnd: _angular_core.Signal<any>;
1363
+ /** Filter configuration */
1364
+ readonly filterConfig: _angular_core.Signal<{
1365
+ [key: string]: any;
1366
+ configs?: any[];
1367
+ } | undefined>;
1368
+ ngOnInit(): void;
1369
+ ngOnDestroy(): void;
1370
+ onChartClick(event: any): void;
1371
+ onHeaderClick(): void;
1372
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartCardComponent, never>;
1373
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartCardComponent, "db-chart-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "isConfigMode": { "alias": "isConfigMode"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
1374
+ }
1375
+
1376
+ type EChartsType = any;
1377
+ declare class EChartComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {
1378
+ private readonly elementRef;
1379
+ private readonly ngZone;
1380
+ private readonly platformId;
1381
+ private chart;
1382
+ private resizeObserver;
1383
+ private echarts;
1384
+ /** Dashboard ID */
1385
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1386
+ /** Chart configuration/data - can be ECharts option directly or wrapped format */
1387
+ readonly chartConfig: _angular_core.InputSignal<any>;
1388
+ /** Item configuration */
1389
+ readonly configurationItem: _angular_core.InputSignal<ItemConfig | null>;
1390
+ /** Chart height */
1391
+ readonly height: _angular_core.InputSignal<string>;
1392
+ /** Whether this chart is in a group */
1393
+ readonly inGroup: _angular_core.InputSignal<boolean>;
1394
+ /** Whether header is hidden */
1395
+ readonly headerHidden: _angular_core.InputSignal<boolean>;
1396
+ /** Chart click event */
1397
+ readonly chartClick: _angular_core.OutputEmitterRef<{
1398
+ data: any;
1399
+ event: any;
1400
+ }>;
1401
+ /** Chart ready flag */
1402
+ readonly isReady: _angular_core.WritableSignal<boolean>;
1403
+ /** Legend items for custom legend */
1404
+ readonly legendItems: _angular_core.WritableSignal<{
1405
+ name: string;
1406
+ color: string;
1407
+ disabled: boolean;
1408
+ }[]>;
1409
+ /** Language code */
1410
+ readonly languageCode: _angular_core.WritableSignal<string>;
1411
+ /**
1412
+ * Extract ECharts options from chartConfig
1413
+ * Handles both direct format and wrapped format for backwards compatibility
1414
+ */
1415
+ readonly chartOptions: _angular_core.Signal<any>;
1416
+ /** Chart width from config */
1417
+ readonly chartWidth: _angular_core.Signal<any>;
1418
+ /** Has scroll class */
1419
+ readonly hasScrollClass: _angular_core.Signal<boolean>;
1420
+ /** Container class */
1421
+ readonly containerClass: _angular_core.Signal<"scroll-wrapper" | "chart-wrapper">;
1422
+ /** Chart class */
1423
+ readonly chartClass: _angular_core.Signal<"chart" | "chart-scroll">;
1424
+ /** Show custom legend */
1425
+ readonly showCustomLegend: _angular_core.Signal<any>;
1426
+ constructor();
1427
+ ngOnInit(): Promise<void>;
1428
+ ngAfterViewInit(): void;
1429
+ ngOnChanges(changes: SimpleChanges): void;
1430
+ ngOnDestroy(): void;
1431
+ /**
1432
+ * Process legends for custom legend display
1433
+ */
1434
+ private processLegends;
1435
+ /**
1436
+ * Toggle legend item visibility
1437
+ */
1438
+ toggleLegendItem(item: {
1439
+ name: string;
1440
+ disabled: boolean;
1441
+ }): void;
1442
+ /**
1443
+ * Dynamically load ECharts
1444
+ */
1445
+ private loadECharts;
1446
+ /**
1447
+ * Initialize chart
1448
+ */
1449
+ private initChart;
1450
+ /**
1451
+ * Update chart with new options
1452
+ */
1453
+ private updateChart;
1454
+ /**
1455
+ * Setup resize observer
1456
+ */
1457
+ private setupResizeObserver;
1458
+ /**
1459
+ * Resize chart
1460
+ */
1461
+ resize(): void;
1462
+ /**
1463
+ * Destroy chart
1464
+ */
1465
+ private destroyChart;
1466
+ /**
1467
+ * Destroy resize observer
1468
+ */
1469
+ private destroyResizeObserver;
1470
+ /**
1471
+ * Get chart instance
1472
+ */
1473
+ getChartInstance(): EChartsType | null;
1474
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EChartComponent, never>;
1475
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EChartComponent, "db-echart", never, { "dashboardId": { "alias": "dashboardId"; "required": false; "isSignal": true; }; "chartConfig": { "alias": "chartConfig"; "required": false; "isSignal": true; }; "configurationItem": { "alias": "configurationItem"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "headerHidden": { "alias": "headerHidden"; "required": false; "isSignal": true; }; }, { "chartClick": "chartClick"; }, never, never, true, never>;
1476
+ }
1477
+
1478
+ interface EntityData {
1479
+ key?: string;
1480
+ normalizedKey?: string;
1481
+ label?: string;
1482
+ value?: any;
1483
+ viewType?: string;
1484
+ settings?: any;
1485
+ showInfoUser?: boolean;
1486
+ displayAreas?: any[];
1487
+ }
1488
+ declare class EntityInfoComponent {
1489
+ /** Entity data to display */
1490
+ readonly data: _angular_core.InputSignal<EntityData | null>;
1491
+ /** Display type: 'entity' shows label, 'inTable' shows value only */
1492
+ readonly displayType: _angular_core.InputSignal<"entity" | "inTable">;
1493
+ /** Extra configuration */
1494
+ readonly extraInfoData: _angular_core.InputSignal<any>;
1495
+ /** Whether to limit words with ellipsis */
1496
+ readonly limitWords: _angular_core.InputSignal<boolean>;
1497
+ /** Custom CSS class */
1498
+ readonly customClass: _angular_core.InputSignal<string>;
1499
+ /** Computed viewType in lowercase */
1500
+ readonly viewTypeLower: _angular_core.Signal<string>;
1501
+ readonly textValue: _angular_core.Signal<any>;
1502
+ readonly numericValue: _angular_core.Signal<number | null>;
1503
+ readonly dateDisplayValue: _angular_core.Signal<any>;
1504
+ readonly currencyDisplayValue: _angular_core.Signal<any>;
1505
+ readonly timeDisplayValue: _angular_core.Signal<any>;
1506
+ readonly lookupName: _angular_core.Signal<any>;
1507
+ readonly lookupColor: _angular_core.Signal<any>;
1508
+ readonly checkboxValue: _angular_core.Signal<boolean>;
1509
+ readonly statusName: _angular_core.Signal<any>;
1510
+ readonly statusColor: _angular_core.Signal<any>;
1511
+ readonly percentageValue: _angular_core.Signal<number | null>;
1512
+ readonly percentageColor: _angular_core.Signal<any>;
1513
+ readonly sliderValue: _angular_core.Signal<number>;
1514
+ readonly userData: _angular_core.Signal<any>;
1515
+ readonly userName: _angular_core.Signal<any>;
1516
+ readonly userInitials: _angular_core.Signal<string>;
1517
+ readonly multiselectValues: _angular_core.Signal<any[]>;
1518
+ readonly multiUserValues: _angular_core.Signal<any[]>;
1519
+ readonly dynamicListValues: _angular_core.Signal<any[]>;
1520
+ readonly locationDisplayValue: _angular_core.Signal<any>;
1521
+ /** Get initials from name */
1522
+ getInitials(name: string): string;
1523
+ /** Format currency value */
1524
+ private formatCurrency;
1525
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityInfoComponent, never>;
1526
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityInfoComponent, "mt-entity-info", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "displayType": { "alias": "displayType"; "required": false; "isSignal": true; }; "extraInfoData": { "alias": "extraInfoData"; "required": false; "isSignal": true; }; "limitWords": { "alias": "limitWords"; "required": false; "isSignal": true; }; "customClass": { "alias": "customClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1527
+ }
1528
+
1529
+ interface PropertyItem {
1530
+ key: string;
1531
+ normalizedKey?: string;
1532
+ label?: string;
1533
+ value: any;
1534
+ viewType?: string;
1535
+ settings?: any;
1536
+ }
1537
+ interface PropertyConfig {
1538
+ width?: string;
1539
+ border?: string[];
1540
+ hidden?: boolean;
1541
+ colorAsProperty?: string;
1542
+ }
1543
+ interface ProcessedProperty {
1544
+ propInfo: PropertyItem;
1545
+ config: PropertyConfig;
1546
+ }
1547
+ declare class EntityPreviewCardComponent implements OnInit, OnDestroy {
1548
+ private readonly storeService;
1549
+ private readonly transloco;
1550
+ private readonly subscription;
1551
+ /** Dashboard ID for this card */
1552
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1553
+ /** Configuration item from store */
1554
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1555
+ /** Processed properties to display */
1556
+ readonly props: _angular_core.WritableSignal<ProcessedProperty[]>;
1557
+ /** Card title */
1558
+ readonly title: _angular_core.Signal<string>;
1559
+ ngOnInit(): void;
1560
+ ngOnDestroy(): void;
1561
+ /**
1562
+ * Subscribe to store updates for this dashboard ID
1563
+ */
1564
+ private subscribeToStore;
1565
+ /**
1566
+ * Get current language code
1567
+ */
1568
+ private getLanguageCode;
1569
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityPreviewCardComponent, never>;
1570
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityPreviewCardComponent, "mt-entity-preview-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1571
+ }
1572
+
1573
+ interface StatusItem {
1574
+ label: string;
1575
+ color: string;
1576
+ shape?: 'circle' | 'square';
1577
+ }
1578
+ declare class HeaderCardComponent implements OnInit, OnDestroy {
1579
+ private readonly storeService;
1580
+ private readonly transloco;
1581
+ private readonly subscription;
1582
+ /** Dashboard ID */
1583
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1584
+ /** Action event output */
1585
+ readonly onAction: _angular_core.OutputEmitterRef<{
1586
+ type: string;
1587
+ data: any;
1588
+ }>;
1589
+ /** Configuration item */
1590
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1591
+ /** Data handled (for dynamic text replacement) */
1592
+ readonly dataHandled: _angular_core.WritableSignal<any>;
1593
+ /** Language code */
1594
+ readonly langCode: _angular_core.Signal<string>;
1595
+ /** StyleConfig from displayConfig */
1596
+ readonly styleConfig: _angular_core.Signal<_masterteam_dashboard_builder.StyleConfig>;
1597
+ /** Card style config */
1598
+ readonly cardStyleConfig: _angular_core.Signal<any>;
1599
+ /** Cols from dimensions */
1600
+ readonly cols: _angular_core.Signal<number>;
1601
+ /** Is full width (cols == 36) */
1602
+ readonly isFullWidth: _angular_core.Signal<boolean>;
1603
+ /** Title with dynamic text replacement */
1604
+ readonly title: _angular_core.Signal<string>;
1605
+ /** Icon name */
1606
+ readonly icon: _angular_core.Signal<string>;
1607
+ /** Logo configuration */
1608
+ readonly logo: _angular_core.Signal<any>;
1609
+ /** Logo URL */
1610
+ readonly logoUrl: _angular_core.Signal<string | null>;
1611
+ /** Icon color */
1612
+ readonly iconColor: _angular_core.Signal<any>;
1613
+ /** Icon background color */
1614
+ readonly iconBgColor: _angular_core.Signal<any>;
1615
+ /** Font size for title */
1616
+ readonly fontSizeTitle: _angular_core.Signal<string>;
1617
+ /** Container styles from StyleConfig */
1618
+ readonly containerStyles: _angular_core.Signal<any>;
1619
+ /** Card styles */
1620
+ readonly cardStyles: _angular_core.Signal<any>;
1621
+ /** Status indicators */
1622
+ readonly statuses: _angular_core.WritableSignal<StatusItem[]>;
1623
+ /** Is clickable */
1624
+ readonly isClickable: _angular_core.Signal<boolean>;
1625
+ /** Show arrow */
1626
+ readonly showArrow: _angular_core.Signal<any>;
1627
+ ngOnInit(): void;
1628
+ private processStatuses;
1629
+ ngOnDestroy(): void;
1630
+ onTitleClick(): void;
1631
+ onArrowClick(): void;
1632
+ onClick(): void;
1633
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderCardComponent, never>;
1634
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderCardComponent, "db-header-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
1635
+ }
1636
+
1637
+ interface LevelCardData$1 {
1638
+ id: number;
1639
+ name: string;
1640
+ currentPhase?: string;
1641
+ props: PropertyData[];
1642
+ status?: PropertyData;
1643
+ [key: string]: any;
1644
+ }
1645
+ interface PropertyData {
1646
+ key: string;
1647
+ normalizedKey: string;
1648
+ viewType: string;
1649
+ value: any;
1650
+ displayAreas?: {
1651
+ key: string;
1652
+ order: number;
1653
+ }[];
1654
+ displayArea?: {
1655
+ key: string;
1656
+ order: number;
1657
+ }[];
1658
+ }
1659
+ declare class LevelCardListComponent implements OnInit, OnDestroy {
1660
+ private readonly storeService;
1661
+ private readonly transloco;
1662
+ private readonly subscription;
1663
+ /** Dashboard ID */
1664
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1665
+ /** Whether inside a group */
1666
+ readonly inGroup: _angular_core.InputSignal<boolean>;
1667
+ /** Properties to hide */
1668
+ readonly hideProperties: _angular_core.InputSignal<string[]>;
1669
+ /** Action event output */
1670
+ readonly onAction: _angular_core.OutputEmitterRef<{
1671
+ type: string;
1672
+ data: any;
1673
+ }>;
1674
+ /** Configuration item */
1675
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1676
+ /** Card data from handler */
1677
+ readonly cardData: _angular_core.WritableSignal<any[][]>;
1678
+ /** Currently selected tab index */
1679
+ readonly tabSelected: _angular_core.WritableSignal<number>;
1680
+ /** Language code */
1681
+ readonly langCode: _angular_core.Signal<string>;
1682
+ /** Gallery mode flag */
1683
+ readonly galleryMode: _angular_core.Signal<boolean>;
1684
+ /** Tabs from config */
1685
+ readonly tabs: _angular_core.Signal<{
1686
+ ar: string | undefined;
1687
+ en: string | undefined;
1688
+ }[]>;
1689
+ /** Current tab data */
1690
+ readonly currentTabData: _angular_core.Signal<any[]>;
1691
+ ngOnInit(): void;
1692
+ ngOnDestroy(): void;
1693
+ /**
1694
+ * Get properties for card body (displayArea: levelCard_body)
1695
+ */
1696
+ getBodyProps(card: LevelCardData$1): PropertyData[];
1697
+ /**
1698
+ * Get attachments for gallery mode
1699
+ */
1700
+ getAttachments(card: LevelCardData$1): any[];
1701
+ /**
1702
+ * Check if card has any counters
1703
+ */
1704
+ hasCounters(card: any): boolean;
1705
+ /**
1706
+ * Handle card click
1707
+ */
1708
+ onCardClick(card: LevelCardData$1): void;
1709
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LevelCardListComponent, never>;
1710
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LevelCardListComponent, "mt-level-card-list", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; "hideProperties": { "alias": "hideProperties"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
1711
+ }
1712
+
1713
+ declare class ListStatisticCardComponent implements OnInit, OnDestroy {
1714
+ private readonly storeService;
1715
+ private readonly subscription;
1716
+ /** Dashboard ID */
1717
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1718
+ /** Configuration item - matches OLD: ConfigurationItem */
1719
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1720
+ /** Handled data - matches OLD: DataHandled - receives direct format from handler */
1721
+ readonly dataHandled: _angular_core.WritableSignal<any>;
1722
+ /** Style configuration - matches OLD: StyleConfig */
1723
+ readonly styleConfig: _angular_core.Signal<_masterteam_dashboard_builder.StyleConfig | undefined>;
1724
+ ngOnInit(): void;
1725
+ ngOnDestroy(): void;
1726
+ /**
1727
+ * DoActions - matches OLD exactly
1728
+ * OLD: DoActions(event: any, type: string)
1729
+ */
1730
+ doActions(event: any, type: string): void;
1731
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListStatisticCardComponent, never>;
1732
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListStatisticCardComponent, "db-list-statistic-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1733
+ }
1734
+
1735
+ interface SkeletonConfig {
1736
+ width: string;
1737
+ height: string;
1738
+ }
1739
+ declare class SkeletonCardComponent implements OnInit, OnDestroy {
1740
+ private readonly storeService;
1741
+ private readonly subscription;
1742
+ /** Dashboard ID */
1743
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1744
+ /** Configuration item */
1745
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1746
+ /** Skeletons configuration */
1747
+ readonly skeletons: _angular_core.Signal<SkeletonConfig[]>;
1748
+ ngOnInit(): void;
1749
+ ngOnDestroy(): void;
1750
+ private getSkeletonsForComponent;
1751
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonCardComponent, never>;
1752
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonCardComponent, "db-skeleton-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1753
+ }
1754
+
1755
+ declare class StatisticCardComponent implements OnInit {
1756
+ /** Card config (same as old component) */
1757
+ readonly config: _angular_core.InputSignal<any>;
1758
+ /** Style config from parent */
1759
+ readonly styleConfig: _angular_core.InputSignal<any>;
1760
+ /** Configuration item from parent */
1761
+ readonly configurationItem: _angular_core.InputSignal<ItemConfig | null>;
1762
+ /** Click event - emits the config */
1763
+ readonly cardClick: _angular_core.OutputEmitterRef<any>;
1764
+ /** Path for images */
1765
+ pathImages: string;
1766
+ /** Language code */
1767
+ readonly languageCode: _angular_core.Signal<string>;
1768
+ readonly isArabic: _angular_core.Signal<boolean>;
1769
+ /** Show card info icon */
1770
+ readonly showCardInfo: _angular_core.Signal<any>;
1771
+ /** Card info tooltip content */
1772
+ readonly cardInfoTooltip: _angular_core.Signal<any>;
1773
+ /** Tooltip value */
1774
+ readonly tooltipValue: _angular_core.Signal<any>;
1775
+ /** Font size for value */
1776
+ readonly fontSizeValue: _angular_core.Signal<string | undefined>;
1777
+ /** Font size for title */
1778
+ readonly fontSizeTitle: _angular_core.Signal<string | undefined>;
1779
+ /** Card styles */
1780
+ readonly cardStyles: _angular_core.Signal<Record<string, any>>;
1781
+ /** Border top style */
1782
+ readonly borderTopStyle: _angular_core.Signal<{
1783
+ 'border-top'?: undefined;
1784
+ } | {
1785
+ 'border-top': string;
1786
+ }>;
1787
+ /** Icon styles */
1788
+ readonly iconStyles: _angular_core.Signal<{
1789
+ 'background-color': any;
1790
+ color: any;
1791
+ }>;
1792
+ ngOnInit(): void;
1793
+ onClick(): void;
1794
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatisticCardComponent, never>;
1795
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatisticCardComponent, "mt-statistic-card", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "styleConfig": { "alias": "styleConfig"; "required": false; "isSignal": true; }; "configurationItem": { "alias": "configurationItem"; "required": false; "isSignal": true; }; }, { "cardClick": "cardClick"; }, never, never, true, never>;
1796
+ }
1797
+
1798
+ interface TableColumn {
1799
+ key: string;
1800
+ keyPure?: string;
1801
+ label: string;
1802
+ viewType?: string;
1803
+ columnType?: 'entity' | 'actions' | 'template' | 'drag';
1804
+ hideColumn?: boolean;
1805
+ width?: string;
1806
+ isSort?: boolean;
1807
+ isAsc?: boolean;
1808
+ }
1809
+ interface TableStyleConfig {
1810
+ thTextColor?: string;
1811
+ thBackgroundColor?: string;
1812
+ thFontBold?: boolean;
1813
+ thFontSize?: number;
1814
+ tdTextColor?: string;
1815
+ tdFontBold?: boolean;
1816
+ tdFontSize?: number;
1817
+ groupTextColor?: string;
1818
+ groupBackgroundColor?: string;
1819
+ hiddenColumns?: string[];
1820
+ hideTableSubheader?: boolean;
1821
+ hideIndex?: boolean;
1822
+ }
1823
+ declare class TableCardComponent implements OnInit, OnDestroy {
1824
+ private readonly storeService;
1825
+ private readonly transloco;
1826
+ private readonly subscription;
1827
+ /** Dashboard ID */
1828
+ readonly dashboardId: _angular_core.InputSignal<string | number>;
1829
+ /** Whether card is in a group */
1830
+ readonly inGroup: _angular_core.InputSignal<boolean>;
1831
+ /** Action event output */
1832
+ readonly onAction: _angular_core.OutputEmitterRef<{
1833
+ type: string;
1834
+ data: any;
1835
+ }>;
1836
+ /** Configuration item */
1837
+ readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
1838
+ /** Raw data from handler */
1839
+ readonly rawData: _angular_core.WritableSignal<any>;
1840
+ /** Loading state */
1841
+ readonly loading: _angular_core.WritableSignal<boolean>;
1842
+ /** Columns */
1843
+ readonly columns: _angular_core.WritableSignal<TableColumn[]>;
1844
+ /** Labels for status display */
1845
+ readonly labels: _angular_core.WritableSignal<any[]>;
1846
+ /** Processed table rows */
1847
+ readonly tableRows: _angular_core.WritableSignal<any[]>;
1848
+ /** Grouped data */
1849
+ readonly groupedData: _angular_core.WritableSignal<any[]>;
1850
+ /** Title */
1851
+ readonly title: _angular_core.Signal<string>;
1852
+ /** Table style config */
1853
+ readonly tableStyleConfig: _angular_core.Signal<TableStyleConfig | null>;
1854
+ /** Whether to show index column */
1855
+ readonly showIndex: _angular_core.Signal<boolean>;
1856
+ /** Whether table is grouped */
1857
+ readonly isGrouped: _angular_core.Signal<boolean>;
1858
+ /** Has data */
1859
+ readonly hasData: _angular_core.Signal<boolean>;
1860
+ /** Visible columns (not hidden) */
1861
+ readonly visibleColumns: _angular_core.Signal<TableColumn[]>;
1862
+ /** Total columns (for colspan) */
1863
+ readonly totalColumns: _angular_core.Signal<number>;
1864
+ /** Row clickable */
1865
+ readonly isRowClickable: _angular_core.Signal<boolean | undefined>;
1866
+ ngOnInit(): void;
1867
+ ngOnDestroy(): void;
1868
+ /**
1869
+ * Build table columns and rows from raw data
1870
+ * Matches old buildTable logic in table-card.component.ts
1871
+ */
1872
+ private buildTable;
1873
+ /**
1874
+ * Build flat (non-grouped) table
1875
+ */
1876
+ private buildFlatTable;
1877
+ /**
1878
+ * Build grouped table
1879
+ */
1880
+ private buildGroupedTable;
1881
+ /**
1882
+ * Get cell data for entity-info component
1883
+ * Returns the full entity data object { viewType, value, label }
1884
+ */
1885
+ getCellData(row: any, column: TableColumn): any;
1886
+ /**
1887
+ * Sort column
1888
+ */
1889
+ onSort(column: TableColumn): void;
1890
+ /**
1891
+ * Get sortable value from row
1892
+ */
1893
+ private getSortValue;
1894
+ /**
1895
+ * Handle row click
1896
+ */
1897
+ onRowClick(row: any): void;
1898
+ /**
1899
+ * Handle header click
1900
+ */
1901
+ onHeaderClick(): void;
1902
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCardComponent, never>;
1903
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCardComponent, "db-table-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
1904
+ }
1905
+
1906
+ declare class DashboardItemStoreService {
1907
+ /** Store for all dashboard items, keyed by dashboardId */
1908
+ private itemsStore;
1909
+ /** Subject for broadcasting store updates */
1910
+ private storeUpdates$;
1911
+ /** Localization data */
1912
+ private localization;
1913
+ /** Current action data per dashboard item */
1914
+ private actionData;
1915
+ /**
1916
+ * Initialize or update store for a dashboard item
1917
+ */
1918
+ updateStoreForItem(dashboardId: string | number, data: Partial<DashboardItemStore>): void;
1919
+ /**
1920
+ * Get current store for a dashboard item
1921
+ */
1922
+ getStoreForItem(dashboardId: string | number): DashboardItemStore | undefined;
1923
+ /**
1924
+ * Get current store for a dashboard item (alias for getStoreForItem)
1925
+ */
1926
+ getStore(dashboardId: string | number): DashboardItemStore | undefined;
1927
+ /**
1928
+ * Get specific property from item store
1929
+ */
1930
+ getItemProperty<K extends keyof DashboardItemStore>(dashboardId: string | number, key: K): DashboardItemStore[K] | undefined;
1931
+ /**
1932
+ * Select specific property from item store as Observable
1933
+ */
1934
+ selectItemProperty$<K extends keyof DashboardItemStore>(dashboardId: string | number, key: K): Observable<DashboardItemStore[K] | undefined>;
1935
+ /**
1936
+ * Clear store for a specific item
1937
+ */
1938
+ clearItemStore(dashboardId: string | number): void;
1939
+ /**
1940
+ * Clear all stores
1941
+ */
1942
+ clearAllStores(): void;
1943
+ /**
1944
+ * Get configuration item for a dashboard
1945
+ */
1946
+ getConfigurationItem(dashboardId: string | number): ItemConfig | undefined;
1947
+ /**
1948
+ * Update configuration item
1949
+ */
1950
+ updateConfigurationItem(dashboardId: string | number, config: ItemConfig): void;
1951
+ /**
1952
+ * Get handled data for a dashboard item
1953
+ */
1954
+ getDataHandled(dashboardId: string | number): any;
1955
+ /**
1956
+ * Trigger data fetch for an item
1957
+ */
1958
+ triggerDataFetch(dashboardId: string | number): void;
1959
+ /**
1960
+ * Handle action type
1961
+ */
1962
+ handleActionsType(type: string, configurationItem: Partial<ItemConfig> | any, data: any): void;
1963
+ /**
1964
+ * Get data for current action
1965
+ */
1966
+ getDataForCurrentAction(dashboardId: string | number): any;
1967
+ /**
1968
+ * Get extra filter for current action context
1969
+ */
1970
+ getExtraFilterForCurrentAction(dashboardId: string | number): Record<string, any>;
1971
+ /**
1972
+ * Set extra filter for an item
1973
+ */
1974
+ setExtraFilter(dashboardId: string | number, filter: Record<string, any>): void;
1975
+ /**
1976
+ * Set query params for an item
1977
+ */
1978
+ setQueryParams(dashboardId: string | number, params: Record<string, any>): void;
1979
+ /**
1980
+ * Get query params for an item
1981
+ */
1982
+ getQueryParams(dashboardId: string | number): Record<string, any>;
1983
+ /**
1984
+ * Set pre-query params (params that should be merged before request)
1985
+ */
1986
+ setPreQueryParams(dashboardId: string | number, params: Record<string, any>): void;
1987
+ /**
1988
+ * Get items that have filters applied (for batch refresh)
1989
+ */
1990
+ getItemsWithFilters(): Array<{
1991
+ id: string | number;
1992
+ filters: Record<string, any>;
1993
+ }>;
1994
+ /**
1995
+ * Trigger data fetch for all items that have filters
1996
+ */
1997
+ refreshItemsWithFilters(): void;
1998
+ /**
1999
+ * Stop actions for an item (prevent action handling)
2000
+ */
2001
+ stopActions(dashboardId: string | number, stop?: boolean): void;
2002
+ /**
2003
+ * Set localization data
2004
+ */
2005
+ setLocalization(data: Record<string, any>): void;
2006
+ /**
2007
+ * Get localization data
2008
+ */
2009
+ getLocalization(): Record<string, any>;
2010
+ /**
2011
+ * Get localized value
2012
+ */
2013
+ getLocalizedValue(key: string): string;
2014
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardItemStoreService, never>;
2015
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DashboardItemStoreService>;
2016
+ }
2017
+
2018
+ declare class ChartDataService {
2019
+ private readonly http;
2020
+ private readonly transloco;
2021
+ private readonly itemStore;
2022
+ private urlPrefix;
2023
+ private apiVersion;
2024
+ private readonly handlers;
2025
+ private readonly passthroughFunctions;
2026
+ constructor();
2027
+ /**
2028
+ * Initialize URL configuration from localStorage (same as old implementation)
2029
+ */
2030
+ private initUrlConfig;
2031
+ private createPassthroughResult;
2032
+ /**
2033
+ * Main entry point - fetch and process chart data
2034
+ */
2035
+ fetchChartData(config: ItemConfig, filters?: Record<string, any>): Observable<ChartDataHandled | null>;
2036
+ /**
2037
+ * Build HTTP request based on request type
2038
+ */
2039
+ private buildRequest;
2040
+ /**
2041
+ * Merge service config filters with runtime filters
2042
+ */
2043
+ private mergeFilters;
2044
+ /**
2045
+ * Build HttpParams from filters
2046
+ */
2047
+ private buildHttpParams;
2048
+ /**
2049
+ * Fetch level data
2050
+ */
2051
+ private fetchLevelData;
2052
+ /**
2053
+ * Fetch level log data
2054
+ */
2055
+ private fetchLevelLogData;
2056
+ /**
2057
+ * Fetch log data
2058
+ */
2059
+ private fetchLogData;
2060
+ /**
2061
+ * Fetch custom data (uses POST like old implementation)
2062
+ * URL: ${urlPrefix}dashboards/${apiVersion}chart?name=${chartName}
2063
+ */
2064
+ private fetchCustomData;
2065
+ /**
2066
+ * Build request body for custom chart requests
2067
+ */
2068
+ private buildCustomRequestBody;
2069
+ /**
2070
+ * Fetch snapshot data
2071
+ * URL: ${urlPrefix}dashboards/${apiVersion}GetSnapShotInfo/${levelId?/}${timeFrame}?year=${year}
2072
+ */
2073
+ private fetchSnapshotData;
2074
+ /**
2075
+ * Fetch level cards data
2076
+ * URL: ${urlPrefix}Dashboards/${apiVersion}GetCards/${selector}
2077
+ */
2078
+ private fetchLevelCardsData;
2079
+ /**
2080
+ * Fetch timeline dependencies
2081
+ * URL: ${urlPrefix}dashboards/${apiVersion}ProjectsDependancies
2082
+ */
2083
+ private fetchTimelineDependencies;
2084
+ /**
2085
+ * Fetch custom S+ data
2086
+ */
2087
+ private fetchCustomSplusData;
2088
+ /**
2089
+ * Fetch phase gate data
2090
+ * URL: ${urlPrefix}api/Levels/${levelId}/PhaseGates
2091
+ */
2092
+ private fetchPhaseGateData;
2093
+ /**
2094
+ * Fetch data from custom API (customApi.customApiUrl)
2095
+ */
2096
+ private fetchCustomApiData;
2097
+ /**
2098
+ * Process chart data using appropriate handler method
2099
+ * DYNAMIC pattern: Find handler that has the functionName method and call it
2100
+ */
2101
+ processChartData(data: any, config: ItemConfig): ChartDataHandled;
2102
+ /**
2103
+ * Get language code
2104
+ */
2105
+ getLanguageCode(): string;
2106
+ /**
2107
+ * Trigger refresh for a specific item
2108
+ */
2109
+ refreshItem(dashboardId: string | number): void;
2110
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartDataService, never>;
2111
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ChartDataService>;
2112
+ }
2113
+
2114
+ declare class BarChartHandler {
2115
+ /**
2116
+ * handleBarChart - matches functionName from CHART_TYPES
2117
+ * Returns ECharts option directly (exactly like old BarChartService.handleBarChart)
2118
+ */
2119
+ handleBarChart(dataResponse: any, config: ItemConfig): any;
2120
+ /**
2121
+ * Format X axis value
2122
+ */
2123
+ private formatXAxis;
2124
+ /**
2125
+ * Apply bar override configurations
2126
+ */
2127
+ private applyBarOverrides;
2128
+ /**
2129
+ * Build grouped bar chart
2130
+ */
2131
+ private buildGroupedBarChart;
2132
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartHandler, never>;
2133
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<BarChartHandler>;
2134
+ }
2135
+
2136
+ declare class PieChartHandler {
2137
+ /**
2138
+ * handleDonutChart - matches functionName from CHART_TYPES
2139
+ * Returns ECharts option directly (exactly like old DountChartService.handleDonutChart)
2140
+ */
2141
+ handleDonutChart(dataResponse: any, config: ItemConfig): any;
2142
+ /**
2143
+ * Normalize chart data - aggregate duplicate labels
2144
+ * Exactly matches old DountChartService.normalizeChartData
2145
+ */
2146
+ normalizeChartData(data: any): {
2147
+ labels: any[];
2148
+ values: any[];
2149
+ };
2150
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieChartHandler, never>;
2151
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PieChartHandler>;
2152
+ }
2153
+
2154
+ declare class StackBarChartHandler {
2155
+ /**
2156
+ * Helper method to convert legend position based on language
2157
+ */
2158
+ private getLegendPositionX;
2159
+ /**
2160
+ * handleStackBarChart - matches functionName from CHART_TYPES
2161
+ */
2162
+ handleStackBarChart(dataResponse: any, config: ItemConfig): any;
2163
+ private buildSingleDefaultOption;
2164
+ private buildGroupedStackedOption;
2165
+ private removeDuplicatedKeys;
2166
+ private findStackInfo;
2167
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackBarChartHandler, never>;
2168
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<StackBarChartHandler>;
2169
+ }
2170
+ /**
2171
+ * Centralized x-axis formatting utilities
2172
+ */
2173
+ declare const axisFormatters: Record<string, {
2174
+ formatValue: (dateValue: string, formatConfig: any) => string;
2175
+ preprocessData?: (stacks: any[], formatConfig: any) => any;
2176
+ findCategoryData?: (processedStacks: any[], xAxisKey: string, xAxisLabels: Map<string, string>) => any;
2177
+ }>;
2178
+ declare function groupDatesByYearAndMonth(data: any[], valueAggregator?: (values: number[]) => number): any[];
2179
+
2180
+ declare class GaugeChartHandler {
2181
+ /**
2182
+ * handleGaugeChart - matches functionName from CHART_TYPES
2183
+ * Returns ECharts config directly (exactly like old GaugeChartService)
2184
+ */
2185
+ handleGaugeChart(dataResponse: any, config: ItemConfig): any;
2186
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GaugeChartHandler, never>;
2187
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<GaugeChartHandler>;
2188
+ }
2189
+
2190
+ declare class TableViewHandler {
2191
+ /**
2192
+ * handleTableView - matches functionName from CHART_TYPES
2193
+ * Returns data directly (not wrapped in { type, data, config })
2194
+ */
2195
+ handleTableView(dataResponse: any, config: ItemConfig): any;
2196
+ /**
2197
+ * Handle projects by execution period (special case)
2198
+ * Returns eCharts bar chart config directly (like old HandleProjectsByExecutionPeriod)
2199
+ */
2200
+ private handleProjectsByExecutionPeriod;
2201
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableViewHandler, never>;
2202
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TableViewHandler>;
2203
+ }
2204
+
2205
+ declare class OverviewCardHandler {
2206
+ /**
2207
+ * handleOverviewCard - matches functionName from CHART_TYPES
2208
+ * Returns EXACT same format as old OverviewCardService
2209
+ */
2210
+ handleOverviewCard(data: any, config: ItemConfig): any;
2211
+ /**
2212
+ * Handle special case values (same as old)
2213
+ */
2214
+ private handleSpecialCase;
2215
+ /**
2216
+ * Get current week of year (same as old)
2217
+ */
2218
+ private getCurrentWeekOfYear;
2219
+ /**
2220
+ * handleProperties - for entityPreview component
2221
+ * Returns dataResponse directly - the component handles transformation
2222
+ * (same as old PropertiesService.handleProperties)
2223
+ */
2224
+ handleProperties(dataResponse: any, config: ItemConfig): any;
2225
+ /**
2226
+ * handleHeader - for header component
2227
+ * Extracts title from first value (same as old PropertiesService.handleHeader)
2228
+ */
2229
+ handleHeader(data: any, config: ItemConfig): any;
2230
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OverviewCardHandler, never>;
2231
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<OverviewCardHandler>;
2232
+ }
2233
+
2234
+ declare class TimelineHandler {
2235
+ /**
2236
+ * handleTimeline - Single level timeline
2237
+ * Matches old TimelineService.handleTimeline exactly
2238
+ */
2239
+ handleTimeline(data: any, config: ItemConfig): any;
2240
+ /**
2241
+ * handleTimelineV2MultiLevel - matches functionName from CHART_TYPES
2242
+ * Returns timeline data directly (not wrapped) like old TimelineService.
2243
+ * Format: { calendarOptions: {...}, ...data }
2244
+ */
2245
+ handleTimelineV2MultiLevel(dataResponse: any, config: ItemConfig): any;
2246
+ /**
2247
+ * Helper to handle value cases (name or value directly)
2248
+ */
2249
+ private handleCasesForValue;
2250
+ /**
2251
+ * Helper function to find parent resource recursively
2252
+ */
2253
+ private findParentResource;
2254
+ /**
2255
+ * Handle multi-level timeline (alias for handleTimelineV2MultiLevel)
2256
+ * Used for hierarchical timeline views.
2257
+ * Returns data directly like handleTimelineV2MultiLevel.
2258
+ */
2259
+ handleMultiLevel(dataResponse: any, config: ItemConfig): any;
2260
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimelineHandler, never>;
2261
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<TimelineHandler>;
2262
+ }
2263
+
2264
+ declare class LineChartHandler {
2265
+ /**
2266
+ * handleLineChart - matches functionName from CHART_TYPES
2267
+ * Returns ECharts config directly with noData, width, divClass properties
2268
+ */
2269
+ handleLineChart(dataResponse: any, config: ItemConfig): any;
2270
+ /**
2271
+ * Build ECharts configuration
2272
+ */
2273
+ private buildChartOption;
2274
+ /**
2275
+ * Get default color for series index
2276
+ */
2277
+ private getDefaultColor;
2278
+ /**
2279
+ * Convert hex to rgba
2280
+ */
2281
+ private hexToRgba;
2282
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LineChartHandler, never>;
2283
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<LineChartHandler>;
2284
+ }
2285
+
2286
+ declare class SnapshotHandler {
2287
+ /**
2288
+ * handleSnapShot - matches functionName from CHART_TYPES
2289
+ * Returns ECharts option directly (same as old SnapShotService)
2290
+ */
2291
+ handleSnapShot(data: any, config: ItemConfig): any;
2292
+ /**
2293
+ * Handle snapshot line chart (default)
2294
+ * Returns ECharts option directly
2295
+ */
2296
+ handleSnapShotLineChart(data: any, config: ItemConfig): any;
2297
+ /**
2298
+ * Handle snapshot line bar chart
2299
+ * Returns ECharts option directly
2300
+ */
2301
+ handleSnapShotLineBarChart(data: any, config: ItemConfig): any;
2302
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SnapshotHandler, never>;
2303
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SnapshotHandler>;
2304
+ }
2305
+
2306
+ declare class ComparisonChartHandler {
2307
+ /**
2308
+ * Main handler for comparison charts
2309
+ * Returns ECharts config directly with noData, width, divClass properties
2310
+ * (matches old ComparisonChartService.handleComparisonChart format)
2311
+ */
2312
+ handle(dataResponse: any, config: ItemConfig): any;
2313
+ /**
2314
+ * Year over Year comparison handler
2315
+ * Returns ECharts config directly with noData, width, divClass properties
2316
+ */
2317
+ handleYearOverYear(dataResponse: any, config: ItemConfig): any;
2318
+ /**
2319
+ * Planned vs Actual comparison
2320
+ * Returns ECharts config directly with noData, width, divClass properties
2321
+ */
2322
+ handlePlannedVsActual(dataResponse: any, config: ItemConfig): any;
2323
+ /**
2324
+ * Parse generic comparison data
2325
+ */
2326
+ private parseComparisonData;
2327
+ /**
2328
+ * Parse Year over Year data
2329
+ */
2330
+ private parseYoYData;
2331
+ /**
2332
+ * Parse Planned vs Actual data
2333
+ */
2334
+ private parsePlannedActualData;
2335
+ /**
2336
+ * Build comparison bar chart
2337
+ */
2338
+ private buildComparisonChart;
2339
+ /**
2340
+ * Build Year over Year chart
2341
+ */
2342
+ private buildYoYChart;
2343
+ /**
2344
+ * Build Planned vs Actual chart with variance indicators
2345
+ */
2346
+ private buildPlannedActualChart;
2347
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComparisonChartHandler, never>;
2348
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ComparisonChartHandler>;
2349
+ }
2350
+
2351
+ declare class SplitterChartHandler {
2352
+ /**
2353
+ * handleSplitterChart - matches functionName from CHART_TYPES
2354
+ * Returns data directly in the format:
2355
+ * {
2356
+ * negative: { labels: string[], groupedValue: number },
2357
+ * positive: { labels: string[], groupedValue: number }
2358
+ * }
2359
+ */
2360
+ handleSplitterChart(dataResponse: any, config: ItemConfig): any;
2361
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SplitterChartHandler, never>;
2362
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SplitterChartHandler>;
2363
+ }
2364
+
2365
+ interface LevelCardData {
2366
+ id: string | number;
2367
+ name: string;
2368
+ level?: {
2369
+ id: number;
2370
+ name: string;
2371
+ order: number;
2372
+ };
2373
+ status?: {
2374
+ name: string;
2375
+ color: string;
2376
+ };
2377
+ properties: LevelCardProperty[];
2378
+ extraData?: Record<string, any>;
2379
+ show?: boolean;
2380
+ }
2381
+ interface LevelCardProperty {
2382
+ key: string;
2383
+ normalizedKey: string;
2384
+ label: string;
2385
+ value: any;
2386
+ displayValue?: string;
2387
+ viewType?: string;
2388
+ color?: string;
2389
+ icon?: string;
2390
+ }
2391
+ declare class LevelCardHandler {
2392
+ /**
2393
+ * handlelevelCards - matches functionName from CHART_TYPES
2394
+ * Returns data directly like old LevelCardService:
2395
+ * result?.map(data => data?.details?.map(...).sort(...))
2396
+ */
2397
+ handlelevelCards(result: any, config: ItemConfig): any;
2398
+ /**
2399
+ * handlelevelCardsWithFilter - matches functionName from CHART_TYPES
2400
+ * Returns data directly like old LevelCardService:
2401
+ * [[{ data: levelProps }]]
2402
+ */
2403
+ handlelevelCardsWithFilter(result: any, config: ItemConfig): any;
2404
+ /**
2405
+ * Handle grouped level cards (multiple selections)
2406
+ * Returns data directly
2407
+ */
2408
+ handleGrouped(dataResponse: any[], config: ItemConfig): any;
2409
+ /**
2410
+ * Parse level cards from details array (standard API response)
2411
+ */
2412
+ private parseLevelCards;
2413
+ /**
2414
+ * Parse level cards with filter (values array format)
2415
+ */
2416
+ private parseLevelCardsWithFilter;
2417
+ /**
2418
+ * Parse a single card detail
2419
+ */
2420
+ private parseCardDetail;
2421
+ /**
2422
+ * Get display value from property
2423
+ */
2424
+ private getDisplayValue;
2425
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LevelCardHandler, never>;
2426
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<LevelCardHandler>;
2427
+ }
2428
+
2429
+ declare class MapChartHandler {
2430
+ private mapCity;
2431
+ /**
2432
+ * handleMapChart - for ECharts geo map
2433
+ * Returns ECharts option directly
2434
+ */
2435
+ handleMapChart(dataResponse: any, config: ItemConfig): any;
2436
+ /**
2437
+ * handleLeafletMap - matches functionName from CHART_TYPES
2438
+ * Returns data directly as array of grouped records
2439
+ */
2440
+ handleLeafletMap(dataResponse: any, config: ItemConfig): any;
2441
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MapChartHandler, never>;
2442
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MapChartHandler>;
2443
+ }
2444
+
2445
+ declare class RingGaugeChartHandler {
2446
+ private colorByPropMap;
2447
+ /**
2448
+ * handleRingGaugeChart - matches functionName from CHART_TYPES
2449
+ * Returns ECharts option directly (same as old RingGaugeChartService)
2450
+ */
2451
+ handleRingGaugeChart(dataResponse: any, config: ItemConfig): any;
2452
+ /**
2453
+ * Helper method to return empty chart options
2454
+ */
2455
+ private getEmptyChartOptions;
2456
+ /**
2457
+ * Helper method to extract numeric value from various value types
2458
+ */
2459
+ private extractNumericValue;
2460
+ /**
2461
+ * Build color by property map
2462
+ */
2463
+ private buildColorByPropertyMap;
2464
+ /**
2465
+ * Add legend graphics to options
2466
+ */
2467
+ private addLegendGraphics;
2468
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RingGaugeChartHandler, never>;
2469
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<RingGaugeChartHandler>;
2470
+ }
2471
+
2472
+ declare class SPlusChartHandler {
2473
+ private generalService;
2474
+ /**
2475
+ * Handle S+ Gauge Chart - returns ECharts option directly
2476
+ * Matches old SplusChartsService.handleGaugeChartSplus return format
2477
+ */
2478
+ handleGaugeChartSplus(data: any, config: ItemConfig): any;
2479
+ /**
2480
+ * Handle S+ Component Cards Chart - returns transformed array directly
2481
+ * Matches old SplusChartsService.handleComponentsCardsChart return format
2482
+ */
2483
+ handleComponentsCardsChart(data: any, _config: ItemConfig): any;
2484
+ /**
2485
+ * Handle S+ progress chart
2486
+ */
2487
+ handleProgress(dataResponse: any, config: ItemConfig): ChartDataHandled;
2488
+ /**
2489
+ * Handle S+ KPIs display
2490
+ */
2491
+ handleKPIs(dataResponse: any, config: ItemConfig): ChartDataHandled;
2492
+ /**
2493
+ * Handle S+ weighted progress
2494
+ */
2495
+ handleWeightedProgress(dataResponse: any, config: ItemConfig): ChartDataHandled;
2496
+ /**
2497
+ * Handle S+ milestone timeline
2498
+ */
2499
+ handleMilestones(dataResponse: any, config: ItemConfig): ChartDataHandled;
2500
+ /**
2501
+ * Parse progress data
2502
+ */
2503
+ private parseProgressData;
2504
+ /**
2505
+ * Parse KPI data
2506
+ */
2507
+ private parseKPIData;
2508
+ /**
2509
+ * Parse milestone data
2510
+ */
2511
+ private parseMilestoneData;
2512
+ /**
2513
+ * Build progress bar chart
2514
+ */
2515
+ private buildProgressChart;
2516
+ /**
2517
+ * Build weighted progress chart with summary gauge
2518
+ */
2519
+ private buildWeightedProgressChart;
2520
+ /**
2521
+ * Handle S+ gauge chart (handleGaugeChartSplus)
2522
+ */
2523
+ handleGauge(dataResponse: any, config: ItemConfig): ChartDataHandled;
2524
+ /**
2525
+ * Handle S+ component cards (handleComponentsCardsChart)
2526
+ */
2527
+ handleComponentCards(dataResponse: any, config: ItemConfig): ChartDataHandled;
2528
+ /**
2529
+ * Get color based on status
2530
+ */
2531
+ private getStatusColor;
2532
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SPlusChartHandler, never>;
2533
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SPlusChartHandler>;
2534
+ }
2535
+
2536
+ interface PhaseGateStep {
2537
+ id: string | number;
2538
+ name: string;
2539
+ order: number;
2540
+ status: 'completed' | 'current' | 'upcoming' | 'skipped';
2541
+ date?: string;
2542
+ completedDate?: string;
2543
+ color?: string;
2544
+ icon?: string;
2545
+ properties?: PhaseGateProperty[];
2546
+ }
2547
+ interface PhaseGateProperty {
2548
+ key: string;
2549
+ label: string;
2550
+ value: any;
2551
+ displayValue?: string;
2552
+ viewType?: string;
2553
+ }
2554
+ declare class PhaseGateStepperHandler {
2555
+ /**
2556
+ * handlePhaseGateStepperCard - matches functionName from CHART_TYPES
2557
+ * Returns data directly matching old PhaseGateStepperService format
2558
+ */
2559
+ handlePhaseGateStepperCard(data: any, _configurationItem: any): any;
2560
+ /**
2561
+ * Handle phase gate for table display
2562
+ */
2563
+ handleTable(dataResponse: any, config: ItemConfig): ChartDataHandled;
2564
+ /**
2565
+ * Parse phase gate data from API response
2566
+ */
2567
+ private parsePhaseGateData;
2568
+ /**
2569
+ * Determine step status
2570
+ */
2571
+ private determineStepStatus;
2572
+ /**
2573
+ * Get color based on status
2574
+ */
2575
+ private getStatusColor;
2576
+ /**
2577
+ * Parse step properties
2578
+ */
2579
+ private parseStepProperties;
2580
+ /**
2581
+ * Get display value from property
2582
+ */
2583
+ private getDisplayValue;
2584
+ /**
2585
+ * Build table columns from steps
2586
+ */
2587
+ private buildTableColumns;
2588
+ /**
2589
+ * Build table rows from steps
2590
+ */
2591
+ private buildTableRows;
2592
+ /**
2593
+ * Get localized status label
2594
+ */
2595
+ private getStatusLabel;
2596
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PhaseGateStepperHandler, never>;
2597
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PhaseGateStepperHandler>;
2598
+ }
2599
+
2600
+ /**
2601
+ * Formatters
2602
+ *
2603
+ * Number, currency, and date formatting utilities.
2604
+ */
2605
+ /**
2606
+ * Get current language code from localStorage
2607
+ */
2608
+ declare function getLanguageCode(): string;
2609
+ /**
2610
+ * Format large numbers with suffixes (K, M, B, T)
2611
+ */
2612
+ declare function formatCurrency(value: number | string | null | undefined, config?: {
2613
+ type?: 'currency';
2614
+ showCurrency?: boolean;
2615
+ handleLang?: boolean;
2616
+ decimals?: number;
2617
+ }): string;
2618
+ /**
2619
+ * Format percentage value
2620
+ */
2621
+ declare function formatPercentage(value: number | string | null | undefined, decimals?: number): string;
2622
+ /**
2623
+ * Format number with locale
2624
+ */
2625
+ declare function formatNumber(value: number | string | null | undefined, options?: Intl.NumberFormatOptions): string;
2626
+ /**
2627
+ * Format date
2628
+ */
2629
+ declare function formatDate(value: string | Date | null | undefined, format?: 'short' | 'medium' | 'long' | 'full'): string;
2630
+ /**
2631
+ * Formatter for ECharts axis labels
2632
+ */
2633
+ declare function createAxisFormatter(config?: {
2634
+ maxLength?: number;
2635
+ handleLang?: boolean;
2636
+ }): (value: string | number) => string;
2637
+ /**
2638
+ * Formatter for ECharts tooltip values
2639
+ */
2640
+ declare function createTooltipFormatter(config?: {
2641
+ type?: 'currency' | 'percentage' | 'number';
2642
+ }): (value: number) => string;
2643
+ /**
2644
+ * Format words with underscores for display
2645
+ * @param text - Text to format
2646
+ * @param maxLength - Optional max length to truncate to
2647
+ */
2648
+ declare function formatWordsUnderBar(text: string, maxLength?: number): string;
2649
+
2650
+ /**
2651
+ * Chart Helpers
2652
+ *
2653
+ * Utility functions for chart data manipulation.
2654
+ */
2655
+
2656
+ /**
2657
+ * General configuration for charts (matches old generalConfigration)
2658
+ */
2659
+ declare const generalConfiguration: {
2660
+ fontConfig: {
2661
+ fontFamily: string;
2662
+ fontSizeConfig: {
2663
+ label: number;
2664
+ legend: number;
2665
+ category: number;
2666
+ tooltip: number;
2667
+ };
2668
+ };
2669
+ generalFilter: {
2670
+ show: boolean;
2671
+ };
2672
+ };
2673
+ /**
2674
+ * Format value based on config format (matches old Formater function)
2675
+ */
2676
+ declare function formatValue(value: any, configFormat: any): any;
2677
+ /**
2678
+ * Add commas to number for display (same as old)
2679
+ */
2680
+ declare function addCommasToNumber(num: string | number): string;
2681
+ /**
2682
+ * Convert all object keys to lowercase
2683
+ */
2684
+ declare function switchAllKeysToLower<T extends Record<string, any>>(obj: T | null | undefined): Record<string, any>;
2685
+ /**
2686
+ * Alias for switchAllKeysToLower (matches old generalFuctions naming)
2687
+ */
2688
+ declare const switchAllKeysSmall: typeof switchAllKeysToLower;
2689
+ /**
2690
+ * Get nested data from object using dot notation path
2691
+ */
2692
+ declare function getNestedData(key: string, item: any): any;
2693
+ /**
2694
+ * Dynamic text replacement with placeholders
2695
+ * Replaces {{key}} patterns with values from the data object
2696
+ */
2697
+ declare function dynamicTextReplace(text: string | null | undefined, data: Record<string, any> | null | undefined): string;
2698
+ /**
2699
+ * Dynamic reorder array based on order config
2700
+ * Supports both object syntax and individual parameters
2701
+ * Compatible with old format: { order: string[], operation?: string }
2702
+ */
2703
+ declare function dynamicReorder<T>(arrayOrConfig: T[] | {
2704
+ array: T[];
2705
+ orderConfig?: {
2706
+ order?: string[];
2707
+ operation?: string;
2708
+ } | Record<string, number>;
2709
+ path?: string;
2710
+ }, orderConfig?: {
2711
+ order?: string[];
2712
+ operation?: string;
2713
+ } | Record<string, number>, path?: string): T[];
2714
+ /**
2715
+ * Sort chart data based on value
2716
+ * Returns { sortedData, sortedXAxis } like old implementation
2717
+ */
2718
+ declare function sortChartData<T extends {
2719
+ value?: number;
2720
+ }>(data: T[], xAxisData?: string[], config?: {
2721
+ key?: string;
2722
+ direction?: 'asc' | 'desc';
2723
+ type?: 'string' | 'number' | 'date';
2724
+ enable?: boolean;
2725
+ }): {
2726
+ sortedData: T[];
2727
+ sortedXAxis: string[];
2728
+ } | null;
2729
+ /**
2730
+ * Sort table view data
2731
+ */
2732
+ declare function sortDataTableView(data: any[], sortConfig: {
2733
+ key: string;
2734
+ direction: 'asc' | 'desc';
2735
+ }): any[];
2736
+ /**
2737
+ * Get localized title from object
2738
+ */
2739
+ declare function getLocalizedTitle(titleObj: {
2740
+ en?: string;
2741
+ ar?: string;
2742
+ } | string | null | undefined): string;
2743
+ /**
2744
+ * Check if running on mobile platform
2745
+ */
2746
+ declare function isMobilePlatform(): boolean;
2747
+ /**
2748
+ * Get color from indexed color conditions
2749
+ * Matches old getColorFromConditions behavior
2750
+ */
2751
+ declare function getColorFromConditions(conditions: any[] | undefined, index: number, value: any): string | undefined;
2752
+
2753
+ declare function handleFiltersForCustom(configItem: any, params: any, extraFilters?: any): any;
2754
+ declare function handleFilterForCard(filters: any, params: any): any;
2755
+ declare function handleFilterForSnapshot(levelId: any, params: any): string;
2756
+
2757
+ /**
2758
+ * Event emitted when a dashboard action is triggered
2759
+ */
2760
+ interface DashboardListEvent {
2761
+ type: 'view' | 'edit' | 'create' | 'delete' | 'manage';
2762
+ dashboard?: DashboardPage;
2763
+ id?: string | number;
2764
+ }
2765
+ declare class DashboardList implements OnDestroy {
2766
+ private dashboardService;
2767
+ private modalService;
2768
+ private transloco;
2769
+ private modalRef;
2770
+ readonly nameTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
2771
+ /** Whether to wrap content in mt-page component */
2772
+ readonly isPage: _angular_core.InputSignal<boolean>;
2773
+ /** Page title when isPage is true */
2774
+ readonly pageTitle: _angular_core.InputSignal<string>;
2775
+ /** Base route for navigation (default: current route) */
2776
+ readonly baseRoute: _angular_core.InputSignal<string>;
2777
+ /** Whether to show the create button */
2778
+ readonly showCreateButton: _angular_core.InputSignal<boolean>;
2779
+ /** Whether to show the view action */
2780
+ readonly showViewButton: _angular_core.InputSignal<boolean>;
2781
+ /** Whether to show the edit action */
2782
+ readonly showEditButton: _angular_core.InputSignal<boolean>;
2783
+ /** Emitted when a dashboard action is triggered */
2784
+ readonly dashboardAction: _angular_core.OutputEmitterRef<DashboardListEvent>;
2785
+ /** Emitted when a new dashboard is created */
2786
+ readonly dashboardCreated: _angular_core.OutputEmitterRef<_masterteam_dashboard_builder.Report>;
2787
+ /** Dashboards resource using rxResource */
2788
+ readonly dashboards: _angular_core.ResourceRef<_masterteam_dashboard_builder.ApiResponse<_masterteam_dashboard_builder.Report[]> | undefined>;
2789
+ /** Current language code */
2790
+ readonly langCode: _angular_core.Signal<string>;
2791
+ /** Loading state */
2792
+ readonly isLoading: _angular_core.Signal<boolean>;
2793
+ /** Dashboard list */
2794
+ readonly dashboardList: _angular_core.Signal<_masterteam_dashboard_builder.Report[]>;
2795
+ /** Table columns */
2796
+ readonly tableColumns: _angular_core.Signal<ColumnDef[]>;
2797
+ /** Table row actions */
2798
+ readonly rowActions: _angular_core.Signal<TableAction[]>;
2799
+ /** Deleting row IDs for loading state */
2800
+ readonly deletingRowIds: _angular_core.WritableSignal<(string | number)[]>;
2801
+ ngOnDestroy(): void;
2802
+ /**
2803
+ * Get localized dashboard name
2804
+ */
2805
+ getDashboardName(dashboard: DashboardPage): string;
2806
+ /**
2807
+ * Handle view action - emits event only
2808
+ */
2809
+ onView(dashboard: DashboardPage): void;
2810
+ /**
2811
+ * Handle edit action - opens dialog for editing
2812
+ */
2813
+ onEdit(dashboard: DashboardPage): void;
2814
+ /**
2815
+ * Handle manage action - emits event for navigation
2816
+ */
2817
+ onManage(dashboard: DashboardPage): void;
2818
+ /**
2819
+ * Open create dashboard modal
2820
+ */
2821
+ openCreateModal(): void;
2822
+ /**
2823
+ * Refresh the dashboard list
2824
+ */
2825
+ refresh(): void;
2826
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardList, never>;
2827
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardList, "mt-dashboard-list", never, { "isPage": { "alias": "isPage"; "required": false; "isSignal": true; }; "pageTitle": { "alias": "pageTitle"; "required": false; "isSignal": true; }; "baseRoute": { "alias": "baseRoute"; "required": false; "isSignal": true; }; "showCreateButton": { "alias": "showCreateButton"; "required": false; "isSignal": true; }; "showViewButton": { "alias": "showViewButton"; "required": false; "isSignal": true; }; "showEditButton": { "alias": "showEditButton"; "required": false; "isSignal": true; }; }, { "dashboardAction": "dashboardAction"; "dashboardCreated": "dashboardCreated"; }, never, never, true, never>;
2828
+ }
2829
+
2830
+ interface ApiResponse<T> {
2831
+ data: T;
2832
+ status?: number;
2833
+ message?: string;
2834
+ }
2835
+ /**
2836
+ * Dashboard Builder Service
2837
+ *
2838
+ * Handles all API calls for dashboard management including:
2839
+ * - Reports CRUD (Dashboard/Excel)
2840
+ * - Chart linking/unlinking
2841
+ * - Metadata from gateway (modules, properties, values)
2842
+ */
2843
+ declare class DashboardBuilderService {
2844
+ private http;
2845
+ /** Subject for processing items */
2846
+ private processOnItem;
2847
+ readonly processOnItem$: Observable<{
2848
+ actionType: string;
2849
+ value: any;
2850
+ }>;
2851
+ /** Filters signal for reactive state */
2852
+ readonly filters: _angular_core.WritableSignal<any[]>;
2853
+ /** Chart for selected dialog */
2854
+ readonly chartForSelectedDialog: _angular_core.WritableSignal<any>;
2855
+ /**
2856
+ * Selector to Name mapping (e.g., "Level:7" -> "Project")
2857
+ * Built from tree data, used to resolve selectorName for properties
2858
+ */
2859
+ readonly selectorNameMap: _angular_core.WritableSignal<Map<string, string>>;
2860
+ /**
2861
+ * Tree data cache for building selector name map
2862
+ */
2863
+ readonly treeData: _angular_core.WritableSignal<ServiceItem[]>;
2864
+ /**
2865
+ * Fixed selections that cannot be removed or edited in SelectionConfiguration.
2866
+ * These selections are always shown and are read-only.
2867
+ */
2868
+ readonly fixedSelections: _angular_core.WritableSignal<ISelection[]>;
2869
+ /** API configuration */
2870
+ private urlPrefix;
2871
+ /** HTTP context for gateway requests */
2872
+ private gatewayContext;
2873
+ constructor();
2874
+ private loadConfig;
2875
+ /**
2876
+ * Emit process action
2877
+ */
2878
+ doProcessOnItem(actionType: string, value: any): void;
2879
+ /**
2880
+ * Build selector name map from tree data
2881
+ * Maps selector (e.g., "Level:7") to name (e.g., "Project")
2882
+ * @param services Tree data services array
2883
+ */
2884
+ buildSelectorNameMap(services: ServiceItem[]): void;
2885
+ /**
2886
+ * Set fixed selections that cannot be removed or edited
2887
+ * @param selections Array of ISelection to be fixed/locked
2888
+ */
2889
+ setFixedSelections(selections: ISelection[]): void;
2890
+ /**
2891
+ * Clear all fixed selections
2892
+ */
2893
+ clearFixedSelections(): void;
2894
+ /**
2895
+ * Add a single fixed selection
2896
+ * @param selection Selection to add as fixed
2897
+ */
2898
+ addFixedSelection(selection: ISelection): void;
2899
+ /**
2900
+ * Remove a single fixed selection by ID
2901
+ * @param selectionId ID of the selection to remove
2902
+ */
2903
+ removeFixedSelection(selectionId: number): void;
2904
+ /**
2905
+ * Resolve selector name from selector
2906
+ * @param selector Full selector (e.g., "Level:7")
2907
+ * @returns Name (e.g., "Project") or null if not found
2908
+ */
2909
+ resolveSelectorName(selector: string | null | undefined): string | null;
2910
+ /**
2911
+ * Enrich bulk properties response with selectorName from tree data
2912
+ * @param items Bulk properties response items
2913
+ * @returns Enriched items with selectorName
2914
+ */
2915
+ enrichPropertiesWithSelectorName(items: BulkPropertiesResponseItem[]): BulkPropertiesResponseItem[];
2916
+ /**
2917
+ * Get all reports
2918
+ * @param type Optional filter by type: 'Dashboard' | 'Excel'
2919
+ */
2920
+ getReports(type?: 'Dashboard' | 'Excel'): Observable<ApiResponse<Report[]>>;
2921
+ /**
2922
+ * Get report by ID
2923
+ */
2924
+ getReportById(id: string | number): Observable<ApiResponse<Report>>;
2925
+ /**
2926
+ * Create a new report
2927
+ */
2928
+ createReport(report: Partial<Report>): Observable<ApiResponse<Report>>;
2929
+ /**
2930
+ * Update an existing report
2931
+ */
2932
+ updateReport(report: Partial<Report>, id: string | number): Observable<ApiResponse<Report>>;
2933
+ /**
2934
+ * Delete a report
2935
+ */
2936
+ deleteReport(id: string | number): Observable<ApiResponse<void>>;
2937
+ /**
2938
+ * Link a chart to a report (creates or updates link)
2939
+ */
2940
+ linkChart(request: LinkChartRequest): Observable<ApiResponse<void>>;
2941
+ /**
2942
+ * Bulk link charts to a report (creates or updates links)
2943
+ * @param requests Array of link requests
2944
+ * @returns Array of link responses with id and chartComponentId
2945
+ */
2946
+ linkChartsBulk(requests: BulkLinkChartRequest[]): Observable<ApiResponse<BulkLinkChartResponse[]>>;
2947
+ /**
2948
+ * Update chart link configuration
2949
+ */
2950
+ updateChartLink(request: LinkChartRequest): Observable<ApiResponse<void>>;
2951
+ /**
2952
+ * Unlink a chart from a report
2953
+ */
2954
+ unlinkChart(request: UnlinkChartRequest): Observable<ApiResponse<void>>;
2955
+ /**
2956
+ * Get all available services from gateway
2957
+ */
2958
+ getMetadataServices(): Observable<ApiResponse<any[]>>;
2959
+ /**
2960
+ * Get modules tree with all services, modules, and values in a single call
2961
+ * This returns the complete tree structure for efficient caching
2962
+ */
2963
+ getModulesTree(): Observable<ApiResponse<ModulesTreeResponse>>;
2964
+ /**
2965
+ * Get modules for a specific service
2966
+ * @param serviceName The service name (e.g., 'pplus')
2967
+ */
2968
+ getModules(serviceName: string): Observable<ApiResponse<ModuleType[]>>;
2969
+ /**
2970
+ * Get properties for a specific module
2971
+ * @param serviceName The service name (e.g., 'pplus')
2972
+ * @param moduleId Module type name or 'ModuleType:Id' format (e.g., 'Level:12')
2973
+ * @returns Properties array extracted from nested response
2974
+ */
2975
+ getModuleProperties(serviceName: string, moduleId: string): Observable<ApiResponse<PropertyItem$1[]>>;
2976
+ /**
2977
+ * Get values for a specific module
2978
+ * @param serviceName The service name (e.g., 'pplus')
2979
+ * @param moduleId Module type name (e.g., 'Level')
2980
+ */
2981
+ getModuleValues(serviceName: string, moduleId: string): Observable<ApiResponse<any[]>>;
2982
+ /**
2983
+ * Get authorization rules for a service
2984
+ * @param serviceName The service name
2985
+ */
2986
+ getAuthorization(serviceName: string): Observable<ApiResponse<any>>;
2987
+ /**
2988
+ * Get public endpoints for a service
2989
+ * @param serviceName The service name
2990
+ */
2991
+ getPublicEndpoints(serviceName: string): Observable<ApiResponse<any[]>>;
2992
+ /**
2993
+ * Get property items for lookup/status properties
2994
+ * GET /api/dashboards/builder/property-items/{propertyKey}?language=en
2995
+ */
2996
+ getPropertyItems(propertyKey: string, language?: string): Observable<ApiResponse<PropertyItemsResponse>>;
2997
+ /**
2998
+ * Bulk properties lookup - single request for multiple modules
2999
+ * POST /metadata/modules/properties
3000
+ * @param items Array of { serviceName, moduleId } items
3001
+ * @returns Properties grouped by module (extracted from data.items)
3002
+ */
3003
+ getBulkProperties(items: BulkPropertyRequestItem[]): Observable<ApiResponse<BulkPropertiesResponseItem[]>>;
3004
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardBuilderService, never>;
3005
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DashboardBuilderService>;
3006
+ }
3007
+
3008
+ /**
3009
+ * Store Service
3010
+ *
3011
+ * Simple reactive store for dashboard builder state management
3012
+ */
3013
+ declare class DashboardStoreService {
3014
+ /** Query parameters */
3015
+ private queryParamsSignal;
3016
+ readonly queryParams: _angular_core.Signal<Record<string, any>>;
3017
+ /** Stop actions on cards flag */
3018
+ private stopActionsSignal;
3019
+ readonly stopActions: _angular_core.Signal<boolean>;
3020
+ /** Dynamic key-value store */
3021
+ private dynamicStore;
3022
+ /** Language code */
3023
+ readonly languageCode: _angular_core.WritableSignal<string>;
3024
+ /** Direction */
3025
+ readonly direction: _angular_core.WritableSignal<"rtl" | "ltr">;
3026
+ /** Reload current page subject */
3027
+ private reloadCurrentPageSubject;
3028
+ readonly reloadCurrentPage$: rxjs.Observable<void>;
3029
+ /**
3030
+ * Trigger reload of current page
3031
+ */
3032
+ triggerReloadCurrentPage(): void;
3033
+ /**
3034
+ * Update query parameters
3035
+ */
3036
+ updateQueryParams(params: Record<string, any>): void;
3037
+ /**
3038
+ * Update stop actions flag
3039
+ */
3040
+ updateStopActions(value: boolean): void;
3041
+ /**
3042
+ * Update dynamic key in store
3043
+ */
3044
+ updateDynamicKey(key: string, value: any): void;
3045
+ /**
3046
+ * Get dynamic key from store
3047
+ */
3048
+ getDynamicKey<T = any>(key: string): T | undefined;
3049
+ /**
3050
+ * Get computed value from dynamic store
3051
+ */
3052
+ selectDynamicKey<T = any>(key: string): _angular_core.Signal<T | undefined>;
3053
+ /**
3054
+ * Get query params as a plain object
3055
+ */
3056
+ getQueryParams(): Record<string, any>;
3057
+ /**
3058
+ * Get extra filters for a specific dashboard action
3059
+ */
3060
+ getExtraFilterForCurrentAction(dashboardId: string): Record<string, any>;
3061
+ /**
3062
+ * Reset store to initial state
3063
+ */
3064
+ reset(): void;
3065
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardStoreService, never>;
3066
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DashboardStoreService>;
3067
+ }
3068
+
3069
+ /**
3070
+ * Manage Pages Component
3071
+ *
3072
+ * Dialog component for creating and editing dashboard reports
3073
+ */
3074
+ declare class ManagePages implements OnInit {
3075
+ private dashboardService;
3076
+ readonly modal: ModalService;
3077
+ private ref;
3078
+ /** Input: Report to edit (if editing) */
3079
+ readonly dataEdit: _angular_core.InputSignal<Report | null>;
3080
+ /** Report form data */
3081
+ readonly report: _angular_core.WritableSignal<{
3082
+ id?: number;
3083
+ name: LocalizedName;
3084
+ type: "Dashboard" | "Excel";
3085
+ showInMenu: boolean;
3086
+ isActive: boolean;
3087
+ icon: string;
3088
+ url: string;
3089
+ dashboardConfig: ReportDashboardConfig;
3090
+ }>;
3091
+ /** Saving state */
3092
+ readonly saving: _angular_core.WritableSignal<boolean>;
3093
+ ngOnInit(): void;
3094
+ saveReport(): void;
3095
+ close(): void;
3096
+ private clear;
3097
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManagePages, never>;
3098
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManagePages, "mt-manage-pages", never, { "dataEdit": { "alias": "dataEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3099
+ }
3100
+
3101
+ /**
3102
+ * Manage Breadcrumb Component
3103
+ *
3104
+ * Dialog component for configuring breadcrumb navigation
3105
+ */
3106
+ declare class ManageBreadcrumb implements OnInit {
3107
+ readonly modal: ModalService;
3108
+ private ref;
3109
+ /** Input: Initial breadcrumb data */
3110
+ readonly data: _angular_core.InputSignal<any[]>;
3111
+ /** Breadcrumb configuration */
3112
+ readonly breadcrumb: _angular_core.WritableSignal<any[]>;
3113
+ ngOnInit(): void;
3114
+ save(): void;
3115
+ close(): void;
3116
+ addItem(): void;
3117
+ removeItem(index: number): void;
3118
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageBreadcrumb, never>;
3119
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageBreadcrumb, "mt-manage-breadcrumb", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3120
+ }
3121
+
3122
+ /**
3123
+ * Filter Field Models
3124
+ *
3125
+ * Defines the structure for dynamic filter fields configuration
3126
+ * used in dashboard page filtering.
3127
+ */
3128
+ /** Localized text with English and Arabic translations */
3129
+ interface LocalizedText {
3130
+ en: string;
3131
+ ar: string;
3132
+ }
3133
+ /** Filter field types supported by the system */
3134
+ type FilterFieldType = 'dropdownTVService' | 'lookup' | 'status' | 'phaseGate' | 'user' | 'date' | 'section' | 'separator' | 'year' | 'month' | 'quarter' | 'checkbox' | 'schemaSettings' | 'schemaSettingsLeafs';
3135
+ /** Selection item for dropdown configuration */
3136
+ interface FilterSelectionItem {
3137
+ id: number;
3138
+ moduleType?: string;
3139
+ moduleId?: number;
3140
+ filters?: any[];
3141
+ modules?: any[];
3142
+ properties?: any[];
3143
+ }
3144
+ /** Filter field configuration details */
3145
+ interface FilterFieldConfiguration {
3146
+ payload?: {
3147
+ dashboardId: number;
3148
+ selection: FilterSelectionItem[];
3149
+ chartType: string;
3150
+ query: {
3151
+ selectedProperties: string[];
3152
+ };
3153
+ };
3154
+ lookupId?: number;
3155
+ schemaLevelId?: number;
3156
+ logId?: number;
3157
+ isRequird?: boolean;
3158
+ isMultiple?: boolean;
3159
+ checked?: boolean;
3160
+ minYear?: number;
3161
+ maxYear?: number;
3162
+ }
3163
+ /** Filter field definition */
3164
+ interface FilterField {
3165
+ key?: string;
3166
+ name?: LocalizedText;
3167
+ type: FilterFieldType;
3168
+ configuration?: FilterFieldConfiguration;
3169
+ }
3170
+ /** Filter field type option for dropdown */
3171
+ interface FilterFieldTypeOption {
3172
+ value: FilterFieldType;
3173
+ label: string;
3174
+ products: string[];
3175
+ }
3176
+
3177
+ /**
3178
+ * Manage Filter On Page Component
3179
+ *
3180
+ * Dialog component for configuring page filters.
3181
+ * Opened from dashboard-builder via openManageFilter() method.
3182
+ *
3183
+ * Flow:
3184
+ * 1. Receives initial filters via `data` input
3185
+ * 2. User configures filters using DynamicFiltersConfig
3186
+ * 3. On save, closes with updated filters
3187
+ * 4. Dashboard-builder saves filters to pageConfig
3188
+ */
3189
+ declare class ManageFilterOnPage implements OnInit {
3190
+ readonly modal: ModalService;
3191
+ private ref;
3192
+ /** Input: Initial filters data */
3193
+ readonly data: _angular_core.InputSignal<FilterField[]>;
3194
+ /** Input: Available lookups for dropdown */
3195
+ readonly lookups: _angular_core.InputSignal<any[]>;
3196
+ /** Input: Available level schemas */
3197
+ readonly levelsSchema: _angular_core.InputSignal<any[]>;
3198
+ /** Filters configuration */
3199
+ readonly filtersConfig: _angular_core.WritableSignal<FilterField[]>;
3200
+ /** Level logs for status filter */
3201
+ readonly levelLogs: _angular_core.WritableSignal<any[]>;
3202
+ ngOnInit(): void;
3203
+ /** Handle filter configuration changes */
3204
+ onFiltersChange(filters: FilterField[]): void;
3205
+ /** Load level logs for a specific schema level (placeholder for API call) */
3206
+ onLoadLevelLogs(schemaLevelId: number): void;
3207
+ /** Save and close the dialog */
3208
+ save(): void;
3209
+ /** Cancel and close the dialog */
3210
+ close(): void;
3211
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageFilterOnPage, never>;
3212
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageFilterOnPage, "mt-manage-filter-on-page", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "lookups": { "alias": "lookups"; "required": false; "isSignal": true; }; "levelsSchema": { "alias": "levelsSchema"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3213
+ }
3214
+
3215
+ declare class DynamicFiltersConfig implements ControlValueAccessor {
3216
+ /** Available lookups from parent context */
3217
+ readonly lookups: _angular_core.InputSignal<any[]>;
3218
+ /** Available level schemas from parent context */
3219
+ readonly levelsSchema: _angular_core.InputSignal<any[]>;
3220
+ /** Available level logs from parent context */
3221
+ readonly levelLogs: _angular_core.InputSignal<any[]>;
3222
+ /** Product type to filter available field types */
3223
+ readonly productType: _angular_core.InputSignal<string>;
3224
+ /** Emit when level logs need to be loaded for a specific schema level */
3225
+ readonly loadLevelLogs: _angular_core.OutputEmitterRef<number>;
3226
+ /** Filter fields data */
3227
+ readonly filterFields: _angular_core.WritableSignal<FilterField[]>;
3228
+ /** Paste configuration state */
3229
+ readonly showPasteArea: _angular_core.WritableSignal<boolean>;
3230
+ readonly pasteContent: _angular_core.WritableSignal<string>;
3231
+ readonly pasteError: _angular_core.WritableSignal<string>;
3232
+ /** Disabled state */
3233
+ readonly disabled: _angular_core.WritableSignal<boolean>;
3234
+ /** Available field types filtered by product */
3235
+ readonly availableFieldTypes: _angular_core.Signal<FilterFieldTypeOption[]>;
3236
+ private onChange;
3237
+ private onTouched;
3238
+ writeValue(value: FilterField[]): void;
3239
+ registerOnChange(fn: (value: FilterField[]) => void): void;
3240
+ registerOnTouched(fn: () => void): void;
3241
+ setDisabledState(isDisabled: boolean): void;
3242
+ /** Add a new filter field */
3243
+ addFilterField(): void;
3244
+ /** Remove a filter field by index */
3245
+ removeFilterField(index: number): void;
3246
+ /** Update a filter field property */
3247
+ updateField(index: number, key: keyof FilterField, value: any): void;
3248
+ /** Update filter field name */
3249
+ updateFieldName(index: number, lang: 'en' | 'ar', value: string): void;
3250
+ /** Update filter field configuration */
3251
+ updateFieldConfig(index: number, key: string, value: any): void;
3252
+ /** Handle field type change */
3253
+ onFieldTypeChange(index: number, type: FilterFieldType): void;
3254
+ /** Handle schema level change for status/phaseGate */
3255
+ onSchemaLevelChange(index: number, schemaLevelId: number): void;
3256
+ /** Copy current configuration to clipboard */
3257
+ copyConfiguration(): void;
3258
+ /** Toggle paste area visibility */
3259
+ togglePasteArea(): void;
3260
+ /** Apply pasted configuration */
3261
+ applyPastedConfiguration(): void;
3262
+ /** Track by function for ngFor */
3263
+ trackByIndex(index: number): number;
3264
+ /** Notify parent of changes */
3265
+ private notifyChange;
3266
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicFiltersConfig, never>;
3267
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicFiltersConfig, "mt-dynamic-filters-config", never, { "lookups": { "alias": "lookups"; "required": false; "isSignal": true; }; "levelsSchema": { "alias": "levelsSchema"; "required": false; "isSignal": true; }; "levelLogs": { "alias": "levelLogs"; "required": false; "isSignal": true; }; "productType": { "alias": "productType"; "required": false; "isSignal": true; }; }, { "loadLevelLogs": "loadLevelLogs"; }, never, never, true, never>;
3268
+ }
3269
+
3270
+ declare class ChartSettingsDrawer {
3271
+ private dialogRef;
3272
+ private drawerConfig;
3273
+ readonly modal: ModalService;
3274
+ /** The chart item signal - reactive for proper change detection */
3275
+ readonly item: _angular_core.WritableSignal<DashboardChartItem | null>;
3276
+ constructor();
3277
+ /** Determine the type of manage UI to show */
3278
+ readonly manageType: _angular_core.Signal<QuickManageType>;
3279
+ /** Default config (full config for DefaultControlUi) */
3280
+ readonly defaultConfig: _angular_core.Signal<{}>;
3281
+ /** Pie chart config - note: typo "Overried" matches old implementation */
3282
+ readonly pieConfig: _angular_core.Signal<any>;
3283
+ /** Bar chart config */
3284
+ readonly barConfig: _angular_core.Signal<any>;
3285
+ /** Stack bar chart config */
3286
+ readonly stackBarConfig: _angular_core.Signal<any>;
3287
+ /** Snapshot bar chart config */
3288
+ readonly snapshotBarConfig: _angular_core.Signal<any>;
3289
+ /** Update default config */
3290
+ onDefaultConfigChange(config: any): void;
3291
+ /** Update pie chart config - note: typo "Overried" matches old implementation */
3292
+ onPieConfigChange(config: any): void;
3293
+ /** Update bar chart config */
3294
+ onBarConfigChange(config: any): void;
3295
+ /** Update stack bar chart config */
3296
+ onStackBarConfigChange(config: any): void;
3297
+ /** Update snapshot bar chart config */
3298
+ onSnapshotBarConfigChange(config: any): void;
3299
+ /** Apply changes and close drawer */
3300
+ apply(): void;
3301
+ /** Close without changes */
3302
+ close(): void;
3303
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartSettingsDrawer, never>;
3304
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartSettingsDrawer, "mt-chart-settings-drawer", never, {}, {}, never, never, true, never>;
3305
+ }
3306
+
3307
+ interface DefaultControlConfig {
3308
+ title: string;
3309
+ titleFontSize: number;
3310
+ titleColor: string;
3311
+ showSubtitle: boolean;
3312
+ subtitle: string;
3313
+ subtitleFontSize: number;
3314
+ subtitleColor: string;
3315
+ backgroundColor: string;
3316
+ borderColor: string;
3317
+ borderRadius: number;
3318
+ padding: number;
3319
+ }
3320
+ declare class DefaultControlUi implements ControlValueAccessor {
3321
+ readonly config: _angular_core.WritableSignal<DefaultControlConfig>;
3322
+ readonly fontSizeOptions: {
3323
+ label: string;
3324
+ value: number;
3325
+ }[];
3326
+ private onChange;
3327
+ private onTouched;
3328
+ writeValue(value: DefaultControlConfig): void;
3329
+ registerOnChange(fn: (value: DefaultControlConfig) => void): void;
3330
+ registerOnTouched(fn: () => void): void;
3331
+ updateConfig(partial: Partial<DefaultControlConfig>): void;
3332
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DefaultControlUi, never>;
3333
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DefaultControlUi, "mt-default-control-ui", never, {}, {}, never, never, true, never>;
3334
+ }
3335
+
3336
+ /**
3337
+ * Pie Chart Configuration - Matches old implementation exactly
3338
+ */
3339
+ interface PieControlConfig {
3340
+ radius?: number;
3341
+ thickness?: number;
3342
+ padAngle?: number;
3343
+ borderRadius?: number;
3344
+ centerX?: number;
3345
+ centerY?: number;
3346
+ startAngle?: number;
3347
+ endAngle?: number;
3348
+ roseType?: boolean | 'radius' | 'area';
3349
+ useEnhancedLegend?: boolean;
3350
+ legendPosition?: 'left' | 'right' | 'top' | 'bottom';
3351
+ legendVerticalAlign?: 'top' | 'middle' | 'bottom';
3352
+ legendOrientation?: 'horizontal' | 'vertical';
3353
+ legendType?: 'scroll' | 'plain';
3354
+ legendFontSize?: number;
3355
+ legendFontColor?: string;
3356
+ legendIcon?: string;
3357
+ labelFontSize?: number;
3358
+ totalValueFontSize?: number;
3359
+ labelFontColor?: string;
3360
+ labelFormatter?: string;
3361
+ tooltipTrigger?: 'item' | 'axis' | 'none';
3362
+ labelPosition?: string;
3363
+ showLabelLine?: boolean;
3364
+ explode?: number;
3365
+ animation?: boolean;
3366
+ animationDuration?: number;
3367
+ tooltipBackgroundColor?: string;
3368
+ tooltipBorderColor?: string;
3369
+ tooltipBorderWidth?: number;
3370
+ }
3371
+ declare class PieControlUi implements ControlValueAccessor {
3372
+ readonly config: _angular_core.WritableSignal<PieControlConfig>;
3373
+ readonly roseTypeOptions: ({
3374
+ label: string;
3375
+ value: boolean;
3376
+ } | {
3377
+ label: string;
3378
+ value: string;
3379
+ })[];
3380
+ readonly labelPositionOptions: {
3381
+ label: string;
3382
+ value: string;
3383
+ }[];
3384
+ readonly legendPositionOptions: {
3385
+ label: string;
3386
+ value: string;
3387
+ }[];
3388
+ readonly legendVerticalAlignOptions: {
3389
+ label: string;
3390
+ value: string;
3391
+ }[];
3392
+ readonly legendOrientationOptions: {
3393
+ label: string;
3394
+ value: string;
3395
+ }[];
3396
+ readonly legendTypeOptions: {
3397
+ label: string;
3398
+ value: string;
3399
+ }[];
3400
+ readonly legendIconOptions: {
3401
+ label: string;
3402
+ value: string;
3403
+ }[];
3404
+ readonly labelFormatterOptions: {
3405
+ label: string;
3406
+ value: string;
3407
+ }[];
3408
+ readonly tooltipTriggerOptions: {
3409
+ label: string;
3410
+ value: string;
3411
+ }[];
3412
+ readonly fontSizeOptions: {
3413
+ label: string;
3414
+ value: number;
3415
+ }[];
3416
+ private onChange;
3417
+ private onTouched;
3418
+ writeValue(value: PieControlConfig): void;
3419
+ registerOnChange(fn: (value: PieControlConfig) => void): void;
3420
+ registerOnTouched(fn: () => void): void;
3421
+ updateConfig(partial: Partial<PieControlConfig>): void;
3422
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieControlUi, never>;
3423
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieControlUi, "mt-pie-control-ui", never, {}, {}, never, never, true, never>;
3424
+ }
3425
+
3426
+ interface BarControlConfig {
3427
+ barWidth?: number;
3428
+ barGap?: number;
3429
+ barCategoryGap?: number;
3430
+ barType?: 'bar' | 'line';
3431
+ xAxisShow?: boolean;
3432
+ yAxisShow?: boolean;
3433
+ yAxisFormat?: string;
3434
+ showCurrency?: boolean;
3435
+ xAxisFontSize?: number;
3436
+ yAxisFontSize?: number;
3437
+ xAxisFontColor?: string;
3438
+ yAxisFontColor?: string;
3439
+ xAxisLineColor?: string;
3440
+ yAxisLineColor?: string;
3441
+ gridTop?: number;
3442
+ gridBottom?: number;
3443
+ gridLeft?: number;
3444
+ gridRight?: number;
3445
+ labelShow?: boolean;
3446
+ labelPosition?: 'top' | 'left' | 'right' | 'bottom' | 'inside';
3447
+ labelFontSize?: number;
3448
+ labelFontColor?: string;
3449
+ labelFormatter?: string;
3450
+ tooltipShow?: boolean;
3451
+ tooltipTrigger?: 'item' | 'axis' | 'none';
3452
+ tooltipBackgroundColor?: string;
3453
+ tooltipBorderColor?: string;
3454
+ tooltipBorderWidth?: number;
3455
+ borderRadius?: boolean;
3456
+ showValueOnlyInTooltip?: boolean;
3457
+ maxCharsPerLine?: number;
3458
+ isGrouped?: boolean;
3459
+ }
3460
+ declare class BarControlUi implements ControlValueAccessor {
3461
+ readonly config: _angular_core.WritableSignal<BarControlConfig>;
3462
+ readonly barTypeOptions: {
3463
+ label: string;
3464
+ value: string;
3465
+ }[];
3466
+ readonly yAxisFormatOptions: {
3467
+ label: string;
3468
+ value: string;
3469
+ }[];
3470
+ readonly labelPositionOptions: {
3471
+ label: string;
3472
+ value: string;
3473
+ }[];
3474
+ readonly tooltipTriggerOptions: {
3475
+ label: string;
3476
+ value: string;
3477
+ }[];
3478
+ readonly labelFormatterOptions: {
3479
+ label: string;
3480
+ value: string;
3481
+ }[];
3482
+ readonly fontSizeOptions: {
3483
+ label: string;
3484
+ value: number;
3485
+ }[];
3486
+ private onChange;
3487
+ private onTouched;
3488
+ writeValue(value: BarControlConfig): void;
3489
+ registerOnChange(fn: (value: BarControlConfig) => void): void;
3490
+ registerOnTouched(fn: () => void): void;
3491
+ updateConfig(partial: Partial<BarControlConfig>): void;
3492
+ onYAxisFormatChange(value: string): void;
3493
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarControlUi, never>;
3494
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BarControlUi, "mt-bar-control-ui", never, {}, {}, never, never, true, never>;
3495
+ }
3496
+
3497
+ interface StackBarControlConfig {
3498
+ barWidth?: number;
3499
+ hasLines?: boolean;
3500
+ barType?: 'bar' | 'line';
3501
+ xAxisLabelRotate?: number;
3502
+ xAxisFontSize?: number;
3503
+ yAxisShow?: boolean;
3504
+ yAxisFormat?: {
3505
+ type: string;
3506
+ [key: string]: any;
3507
+ };
3508
+ legendPositionY?: 'top' | 'bottom';
3509
+ legendPositionX?: 'start' | 'center' | 'end';
3510
+ legendFontSize?: number;
3511
+ legendFontColor?: string;
3512
+ showLabel?: boolean;
3513
+ labelFontSize?: number;
3514
+ labelFontColor?: string;
3515
+ tooltipBackgroundColor?: string;
3516
+ tooltipBorderColor?: string;
3517
+ tooltipBorderWidth?: number;
3518
+ gridLeft?: string | number;
3519
+ gridRight?: string | number;
3520
+ gridTop?: string | number;
3521
+ gridBottom?: string | number;
3522
+ isStacked?: boolean;
3523
+ borderRadius?: string | number;
3524
+ }
3525
+ declare class StackBarControlUi implements ControlValueAccessor {
3526
+ readonly config: _angular_core.WritableSignal<StackBarControlConfig>;
3527
+ readonly legendPositionYOptions: {
3528
+ label: string;
3529
+ value: string;
3530
+ }[];
3531
+ readonly legendPositionXOptions: {
3532
+ label: string;
3533
+ value: string;
3534
+ }[];
3535
+ readonly barTypeOptions: {
3536
+ label: string;
3537
+ value: string;
3538
+ }[];
3539
+ readonly yAxisFormatOptions: ({
3540
+ label: string;
3541
+ value: null;
3542
+ } | {
3543
+ label: string;
3544
+ value: string;
3545
+ })[];
3546
+ readonly fontSizeOptions: {
3547
+ label: string;
3548
+ value: number;
3549
+ }[];
3550
+ private onChange;
3551
+ private onTouched;
3552
+ writeValue(value: StackBarControlConfig): void;
3553
+ registerOnChange(fn: (value: StackBarControlConfig) => void): void;
3554
+ registerOnTouched(fn: () => void): void;
3555
+ updateConfig(partial: Partial<StackBarControlConfig>): void;
3556
+ onYAxisFormatChange(formatType: string | null): void;
3557
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackBarControlUi, never>;
3558
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StackBarControlUi, "mt-stack-bar-control-ui", never, {}, {}, never, never, true, never>;
3559
+ }
3560
+
3561
+ /**
3562
+ * Manage Item Component (Drawer)
3563
+ *
3564
+ * Main drawer component for configuring chart/widget items.
3565
+ * Uses tabs to organize different configuration sections.
3566
+ * Provides ManageItemService for state sharing between child components.
3567
+ */
3568
+ declare class ManageItem implements OnInit {
3569
+ private _dashboardService;
3570
+ private _manageItemService;
3571
+ private _dialogConfig;
3572
+ readonly modal: ModalService;
3573
+ ref: ModalRef<any> | null;
3574
+ /** Input data from drawer - supports both input() and dialog data */
3575
+ readonly data: _angular_core.InputSignal<{
3576
+ chart?: DashboardChartItem;
3577
+ isDialog?: boolean;
3578
+ isNew?: boolean;
3579
+ chartType?: ChartTypeConfig;
3580
+ defaultSize?: {
3581
+ cols: number;
3582
+ rows: number;
3583
+ };
3584
+ } | null>;
3585
+ /** Whether chart type is pre-selected (hides type selection) */
3586
+ readonly hasPreselectedType: _angular_core.Signal<boolean>;
3587
+ /** Tab options with translation keys */
3588
+ readonly tabOptions: _angular_core.WritableSignal<{
3589
+ label: string;
3590
+ value: string;
3591
+ icon: string;
3592
+ }[]>;
3593
+ /** Active tab */
3594
+ readonly activeTab: _angular_core.WritableSignal<string>;
3595
+ /** Chart configuration being edited - from service */
3596
+ readonly config: _angular_core.Signal<ItemConfig | null>;
3597
+ /** Chart type ID - from service */
3598
+ readonly chartTypeId: _angular_core.Signal<string>;
3599
+ /** Selected chart type info */
3600
+ readonly selectedChartType: _angular_core.WritableSignal<ChartTypeConfig | null>;
3601
+ /** Is this a dialog item */
3602
+ readonly isDialog: _angular_core.Signal<any>;
3603
+ /** Is this a new item */
3604
+ readonly isNew: _angular_core.Signal<any>;
3605
+ /** Saving state */
3606
+ readonly saving: _angular_core.WritableSignal<boolean>;
3607
+ /** Validation state */
3608
+ readonly isValid: _angular_core.Signal<boolean>;
3609
+ /** Initialize from dialog data effect */
3610
+ private _initEffect;
3611
+ ngOnInit(): void;
3612
+ save(): void;
3613
+ cancel(): void;
3614
+ /** Update config from child components */
3615
+ onConfigUpdate(partialConfig: Partial<ItemConfig>): void;
3616
+ /** Update service config */
3617
+ onServiceConfigUpdate(partialConfig: Partial<ItemConfig['serviceConfig']>): void;
3618
+ /** Update client config */
3619
+ onClientConfigUpdate(partialConfig: Partial<ItemConfig['clientConfig']>): void;
3620
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageItem, never>;
3621
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageItem, "mt-manage-item", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3622
+ }
3623
+
3624
+ /**
3625
+ * General Settings Component
3626
+ *
3627
+ * Handles general chart configuration:
3628
+ * - Chart type selection (visual grid)
3629
+ * - Title (English & Arabic)
3630
+ * - Component name
3631
+ */
3632
+ declare class GeneralSettings {
3633
+ private transloco;
3634
+ /** Current configuration */
3635
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
3636
+ /** Is dialog item (hides chart type selection) */
3637
+ readonly isDialog: _angular_core.InputSignal<boolean>;
3638
+ /** Whether chart type is pre-selected (hides chart type selection) */
3639
+ readonly hasPreselectedType: _angular_core.InputSignal<boolean>;
3640
+ /** Emit config changes */
3641
+ readonly configChange: _angular_core.OutputEmitterRef<Partial<ItemConfig>>;
3642
+ /** Emit chart type selection */
3643
+ readonly chartTypeChange: _angular_core.OutputEmitterRef<ChartTypeConfig>;
3644
+ /** All available chart types */
3645
+ readonly chartTypes: _angular_core.WritableSignal<ChartTypeConfig[]>;
3646
+ /** Chart types filtered (not hidden) */
3647
+ readonly chartTypesFiltered: _angular_core.Signal<ChartTypeConfig[]>;
3648
+ /** Grouped chart types by category */
3649
+ readonly chartTypesByCategory: _angular_core.Signal<{
3650
+ card: ChartTypeConfig[];
3651
+ chart: ChartTypeConfig[];
3652
+ table: ChartTypeConfig[];
3653
+ special: ChartTypeConfig[];
3654
+ layout: ChartTypeConfig[];
3655
+ }>;
3656
+ /** Currently selected chart type */
3657
+ readonly selectedChartType: _angular_core.Signal<ChartTypeConfig | null | undefined>;
3658
+ /**
3659
+ * Select a chart type
3660
+ */
3661
+ selectChartType(type: ChartTypeConfig): void;
3662
+ /**
3663
+ * Check if a chart type is selected
3664
+ */
3665
+ isTypeSelected(type: ChartTypeConfig): boolean;
3666
+ /**
3667
+ * Update title field
3668
+ */
3669
+ updateTitle(lang: 'en' | 'ar', value: string): void;
3670
+ /**
3671
+ * Update component name
3672
+ */
3673
+ updateComponentName(value: string): void;
3674
+ /**
3675
+ * Get category label
3676
+ */
3677
+ getCategoryLabel(category: string): string;
3678
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GeneralSettings, never>;
3679
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GeneralSettings, "mt-general-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "isDialog": { "alias": "isDialog"; "required": false; "isSignal": true; }; "hasPreselectedType": { "alias": "hasPreselectedType"; "required": false; "isSignal": true; }; }, { "configChange": "configChange"; "chartTypeChange": "chartTypeChange"; }, never, never, true, never>;
3680
+ }
3681
+
3682
+ /**
3683
+ * Selection module info for linking - includes properties for each selection
3684
+ */
3685
+ interface SelectionModule {
3686
+ selectionId: number;
3687
+ selector: string;
3688
+ moduleType: string;
3689
+ moduleTypeName: string;
3690
+ moduleName: string;
3691
+ properties: IProperty[];
3692
+ }
3693
+
3694
+ /**
3695
+ * Chart Query Series
3696
+ */
3697
+ interface ChartQuerySeries {
3698
+ key: string;
3699
+ color: string;
3700
+ valueProperty: string | null;
3701
+ aggregateFunction: string;
3702
+ groupByProperties: string[];
3703
+ autoStack: boolean;
3704
+ stackProperties: string[];
3705
+ autoStackByProperty: string | null;
3706
+ filters: ChartQuerySeriesFilter[];
3707
+ extraProperties: string[];
3708
+ formula?: string;
3709
+ showAdvancedSettings?: boolean;
3710
+ barType?: 'bar' | 'line' | 'lineAccumulated';
3711
+ }
3712
+ /**
3713
+ * Chart Query Series Filter
3714
+ */
3715
+ interface ChartQuerySeriesFilter {
3716
+ propertyKey: string | null;
3717
+ value: any;
3718
+ operator: string;
3719
+ }
3720
+ /**
3721
+ * Chart Query Configuration
3722
+ */
3723
+ interface ChartQuery {
3724
+ categoryProperty: string;
3725
+ series: ChartQuerySeries[];
3726
+ }
3727
+
3728
+ /** Properties grouped by module for select with [group]="true" */
3729
+ interface PropertyGroup {
3730
+ label: string;
3731
+ items: IProperty[];
3732
+ }
3733
+ /**
3734
+ * Aggregation Property Configuration
3735
+ */
3736
+ interface AggregationProperty {
3737
+ propertyKey: string | null;
3738
+ aggregateFunction: string;
3739
+ alias?: string;
3740
+ }
3741
+ /**
3742
+ * Table Query Configuration Value
3743
+ */
3744
+ interface TableQueryValue {
3745
+ selectedProperties: string[];
3746
+ AggregationProperties: AggregationProperty[];
3747
+ lookupProperty: string;
3748
+ PivotProperties: string[];
3749
+ }
3750
+ /**
3751
+ * Table Query Component
3752
+ *
3753
+ * Handles query configuration for table/dialog chart types.
3754
+ * Implements ControlValueAccessor for form integration.
3755
+ */
3756
+ declare class TableQuery implements ControlValueAccessor {
3757
+ private fb;
3758
+ /** Available properties (flat) */
3759
+ readonly propertiesFlat: _angular_core.InputSignal<IProperty[]>;
3760
+ /** Properties grouped by module for grouped select */
3761
+ readonly propertiesGrouped: _angular_core.InputSignal<PropertyGroup[]>;
3762
+ /** Whether to use grouped select (when multiple modules) */
3763
+ readonly useGroupedSelect: _angular_core.Signal<boolean>;
3764
+ /** Options config for multi-select */
3765
+ readonly optionsConfig: _angular_core.Signal<{
3766
+ optionValue: string;
3767
+ optionLabel: string;
3768
+ items: IProperty[];
3769
+ }>;
3770
+ /** Aggregate function options */
3771
+ readonly aggregateFunctions: {
3772
+ value: string;
3773
+ label: string;
3774
+ }[];
3775
+ /** Main form */
3776
+ readonly queryForm: FormGroup<{
3777
+ selectedProperties: _angular_forms.FormControl<string[] | null>;
3778
+ AggregationProperties: FormArray<FormGroup<any>>;
3779
+ lookupProperty: _angular_forms.FormControl<string | null>;
3780
+ PivotProperties: _angular_forms.FormControl<string[] | null>;
3781
+ }>;
3782
+ /** Disabled state */
3783
+ disabled: boolean;
3784
+ /** ControlValueAccessor callbacks */
3785
+ private onChange;
3786
+ private onTouched;
3787
+ constructor();
3788
+ writeValue(value: TableQueryValue): void;
3789
+ registerOnChange(fn: (value: TableQueryValue) => void): void;
3790
+ registerOnTouched(fn: () => void): void;
3791
+ setDisabledState(isDisabled: boolean): void;
3792
+ validate(): ValidationErrors | null;
3793
+ get aggregationArray(): FormArray;
3794
+ createAggregationFormGroup(agg?: Partial<AggregationProperty>): FormGroup;
3795
+ addAggregation(): void;
3796
+ removeAggregation(index: number): void;
3797
+ trackByIndex(index: number): number;
3798
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableQuery, never>;
3799
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableQuery, "mt-table-query", never, { "propertiesFlat": { "alias": "propertiesFlat"; "required": false; "isSignal": true; }; "propertiesGrouped": { "alias": "propertiesGrouped"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3800
+ }
3801
+
3802
+ /** Module properties response */
3803
+ interface ModuleProperties {
3804
+ /** Module type (e.g., "Level") */
3805
+ moduleName: string;
3806
+ /** Display name for the specific selector (e.g., "Projects" for "Level:7") */
3807
+ selectorName: string | null;
3808
+ /** Full selector (e.g., "Level:7") */
3809
+ selector: string;
3810
+ moduleId?: number;
3811
+ properties: IProperty[];
3812
+ }
3813
+ /**
3814
+ * Query component type based on chart type and component name
3815
+ */
3816
+ type QueryComponentType = 'general' | 'table' | 'timeline' | 'timelineMultiLevel' | 'map' | 'splitter' | 'properties' | 'snapshot' | 'phaseGate' | 'repeater' | 'none';
3817
+ /**
3818
+ * Data Source Settings Component
3819
+ *
3820
+ * Comprehensive data source configuration:
3821
+ * - Module/Data source selection via SelectionConfiguration
3822
+ * - Source links for multiple selections via SourceLinkConfiguration
3823
+ * - Query configuration based on chart type (GeneralQuery, TableQuery, etc.)
3824
+ */
3825
+ declare class DataSourceSettings {
3826
+ private dashboardService;
3827
+ /** Current configuration */
3828
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
3829
+ /** Selected chart type */
3830
+ readonly chartType: _angular_core.InputSignal<ChartTypeConfig | null>;
3831
+ /** Emit service config changes */
3832
+ readonly serviceConfigChange: _angular_core.OutputEmitterRef<Partial<ServiceConfig>>;
3833
+ /** Properties grouped by module */
3834
+ readonly modulesProperties: _angular_core.WritableSignal<ModuleProperties[]>;
3835
+ /** Flattened properties list with grouping info */
3836
+ readonly propertiesFlat: _angular_core.Signal<IPropertyWithGroup[]>;
3837
+ /**
3838
+ * Properties grouped for select field with [group]="true"
3839
+ * Structure: [{ label: 'Projects', items: [{ name, key }, ...] }, ...]
3840
+ * Uses selectorName for display (e.g., "Projects" instead of "Level")
3841
+ */
3842
+ readonly propertiesGrouped: _angular_core.Signal<{
3843
+ label: string;
3844
+ items: IProperty[];
3845
+ }[]>;
3846
+ /**
3847
+ * Selection modules for source link configuration
3848
+ * Built from selections with their loaded module info
3849
+ */
3850
+ readonly selectionModules: _angular_core.Signal<SelectionModule[]>;
3851
+ /** Query component type based on chart type and component name */
3852
+ readonly queryComponentType: _angular_core.Signal<QueryComponentType>;
3853
+ /** Loading states */
3854
+ readonly loadingProperties: _angular_core.WritableSignal<boolean>;
3855
+ /** Tab state: 'selection' or 'customApi' */
3856
+ readonly activeTab: _angular_core.WritableSignal<"selection" | "customApi">;
3857
+ /** Tab options for display */
3858
+ readonly tabOptions: {
3859
+ id: string;
3860
+ label: string;
3861
+ }[];
3862
+ /** Custom API configuration */
3863
+ readonly customApi: _angular_core.WritableSignal<CustomApi | null>;
3864
+ /** Internal selections state */
3865
+ readonly selections: _angular_core.WritableSignal<ISelection[]>;
3866
+ readonly sourceLinks: _angular_core.WritableSignal<SourceLink[]>;
3867
+ readonly query: _angular_core.WritableSignal<any>;
3868
+ readonly isNormalized: _angular_core.WritableSignal<boolean>;
3869
+ readonly groupByMultiple: _angular_core.WritableSignal<string[]>;
3870
+ /** Repeater dashboard selection */
3871
+ readonly repeaterDashboardId: _angular_core.WritableSignal<number | null>;
3872
+ readonly availableDashboards: _angular_core.WritableSignal<{
3873
+ id: number;
3874
+ name: string;
3875
+ }[]>;
3876
+ /** Show source links when multiple selections exist */
3877
+ readonly showSourceLinks: _angular_core.Signal<boolean>;
3878
+ /** Hide selection config for layout, snapshot, phaseGate types (they don't need data source selection) */
3879
+ readonly hideSelectionConfig: _angular_core.Signal<boolean>;
3880
+ /** Show groupByMultiple for table queries (non-report mode) */
3881
+ readonly showGroupByMultiple: _angular_core.Signal<boolean>;
3882
+ /**
3883
+ * Derived signal: Extract module keys from selections for change detection
3884
+ * Only changes when actual selectors change, not on every selection update
3885
+ */
3886
+ private readonly moduleKeysSignature;
3887
+ /** Track last loaded module signature to prevent duplicate requests */
3888
+ private lastLoadedSignature;
3889
+ constructor();
3890
+ /**
3891
+ * Load properties for all selections using bulk API
3892
+ * Single POST request to /metadata/modules/properties
3893
+ * Enriches response with selectorName from tree data
3894
+ */
3895
+ loadPropertiesForSelections(selections: ISelection[]): void;
3896
+ /**
3897
+ * Handle selection changes
3898
+ */
3899
+ onSelectionsChange(selections: ISelection[]): void;
3900
+ /**
3901
+ * Handle module change - update selections, effect handles property loading
3902
+ */
3903
+ onModuleChange(event: {
3904
+ selectionId: number;
3905
+ selector: string;
3906
+ selectorName?: string | null;
3907
+ }): void;
3908
+ /**
3909
+ * Extract module type from selector (e.g., "Level:7" -> "Level")
3910
+ */
3911
+ private extractModuleTypeFromSelector;
3912
+ /**
3913
+ * Handle source links change
3914
+ */
3915
+ onSourceLinksChange(links: SourceLink[]): void;
3916
+ /**
3917
+ * Handle query change (general query)
3918
+ */
3919
+ onQueryChange(query: ChartQuery): void;
3920
+ /**
3921
+ * Handle table query change
3922
+ */
3923
+ onTableQueryChange(query: TableQuery): void;
3924
+ /**
3925
+ * Handle timeline query change
3926
+ */
3927
+ onTimelineQueryChange(query: any): void;
3928
+ /**
3929
+ * Handle map query change
3930
+ */
3931
+ onMapQueryChange(query: any): void;
3932
+ /**
3933
+ * Handle splitter query change
3934
+ */
3935
+ onSplitterQueryChange(query: any): void;
3936
+ /**
3937
+ * Handle properties query change
3938
+ */
3939
+ onPropertiesQueryChange(query: any): void;
3940
+ /**
3941
+ * Handle snapshot query change
3942
+ */
3943
+ onSnapshotQueryChange(query: any): void;
3944
+ /**
3945
+ * Handle groupByMultiple change
3946
+ */
3947
+ onGroupByMultipleChange(values: string[]): void;
3948
+ /**
3949
+ * Handle repeater dashboard selection
3950
+ */
3951
+ onRepeaterDashboardChange(dashboardId: number): void;
3952
+ /**
3953
+ * Handle isNormalized change
3954
+ */
3955
+ onIsNormalizedChange(value: boolean): void;
3956
+ /**
3957
+ * Handle tab change
3958
+ */
3959
+ onTabChange(tabId: string): void;
3960
+ /**
3961
+ * Handle custom API change
3962
+ */
3963
+ onCustomApiChange(customApi: CustomApi | null): void;
3964
+ /**
3965
+ * Get chart type id for query component
3966
+ */
3967
+ getChartTypeId(): string;
3968
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataSourceSettings, never>;
3969
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataSourceSettings, "mt-data-source-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartType": { "alias": "chartType"; "required": false; "isSignal": true; }; }, { "serviceConfigChange": "serviceConfigChange"; }, never, never, true, never>;
3970
+ }
3971
+
3972
+ /** Shadow configuration */
3973
+ interface ShadowConfig {
3974
+ x: number;
3975
+ y: number;
3976
+ blur: number;
3977
+ spread: number;
3978
+ color: string;
3979
+ }
3980
+ /** Override label configuration */
3981
+ interface OverrideLabel {
3982
+ en: string;
3983
+ ar: string;
3984
+ }
3985
+ /** Card style configuration */
3986
+ interface CardStyleConfig {
3987
+ borderRadius?: number;
3988
+ backgroundColor?: string;
3989
+ shadows?: ShadowConfig[];
3990
+ }
3991
+ /** Header card configuration */
3992
+ interface HeaderCardConfig {
3993
+ isHeaderCentered?: boolean;
3994
+ isHeaderHidden?: boolean;
3995
+ headerColor?: string;
3996
+ headerFontSize?: number;
3997
+ }
3998
+ /** Label center configuration */
3999
+ interface LabelCenterConfig {
4000
+ hide?: boolean;
4001
+ text?: {
4002
+ en?: string;
4003
+ ar?: string;
4004
+ };
4005
+ }
4006
+ /** Sort data bars configuration */
4007
+ interface SortDataBarsConfig {
4008
+ enable?: boolean;
4009
+ sortBy?: string;
4010
+ order?: 'asc' | 'desc' | string;
4011
+ direction?: 'asc' | 'desc' | string;
4012
+ }
4013
+ /** Card info configuration */
4014
+ interface CardInfoConfig {
4015
+ show?: boolean;
4016
+ value?: any;
4017
+ type?: string;
4018
+ }
4019
+ /** Format configuration */
4020
+ interface FormatConfig {
4021
+ type?: string | null;
4022
+ showCurrency?: boolean;
4023
+ handleLang?: boolean;
4024
+ customText?: string | null;
4025
+ customDateFormat?: string | null;
4026
+ showCurrencyTooltip?: boolean;
4027
+ hideSuffixes?: boolean;
4028
+ }
4029
+ /** Table format configuration */
4030
+ interface TableFormatConfig {
4031
+ thTextColor?: string | null;
4032
+ thBackgroundColor?: string | null;
4033
+ tdTextColor?: string | null;
4034
+ groupBackgroundColor?: string | null;
4035
+ groupTextColor?: string | null;
4036
+ thFontBold?: boolean;
4037
+ tdFontBold?: boolean;
4038
+ thFontSize?: number | null;
4039
+ tdFontSize?: number | null;
4040
+ hideTableSubheader?: boolean;
4041
+ disableCurrencyFormat?: boolean;
4042
+ showPercentageAsProgressBar?: boolean;
4043
+ showPercentageStatus?: boolean;
4044
+ hiddenColumns?: string[];
4045
+ sortConfig?: {
4046
+ column: string;
4047
+ direction: 'asc' | 'desc';
4048
+ };
4049
+ }
4050
+ /** Color condition configuration */
4051
+ interface ColorCondition {
4052
+ color: string;
4053
+ type: 'equal' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'between';
4054
+ value1?: number;
4055
+ value2?: number;
4056
+ labelEn?: string;
4057
+ labelAr?: string;
4058
+ }
4059
+ /** Color conditions by bar index */
4060
+ interface ColorConditionsByIndex {
4061
+ [key: number]: ColorCondition[];
4062
+ }
4063
+ /** Ring gauge configuration */
4064
+ interface RingGaugeConfig {
4065
+ centerProperty?: string;
4066
+ statusProperty?: string;
4067
+ hiddenProperties?: string[];
4068
+ }
4069
+ /** Order configuration */
4070
+ interface OrderConfig {
4071
+ order?: string[];
4072
+ operation?: string;
4073
+ orderBy?: string;
4074
+ }
4075
+ /** Card list configuration */
4076
+ interface CardListConfig {
4077
+ hideProperties?: string[];
4078
+ }
4079
+ /** Property translation entry */
4080
+ interface PropertyTranslation {
4081
+ ar: string;
4082
+ en: string;
4083
+ }
4084
+ /** Property translations map */
4085
+ interface PropertyTranslationsMap {
4086
+ [key: string]: PropertyTranslation;
4087
+ }
4088
+ /** Property color entry */
4089
+ interface PropertyColorEntry {
4090
+ selectedKey: string;
4091
+ }
4092
+ /** Property colors map */
4093
+ interface PropertyColorsMap {
4094
+ [key: string]: PropertyColorEntry;
4095
+ }
4096
+ /** Props config as index item */
4097
+ interface PropsConfigAsIndexItem {
4098
+ width?: string;
4099
+ colorAsProperty?: string;
4100
+ hidden?: boolean;
4101
+ border?: string[];
4102
+ }
4103
+ /** Format X-Axis configuration */
4104
+ interface FormatXAxisConfig {
4105
+ type?: string | null;
4106
+ shortFormate?: boolean;
4107
+ }
4108
+ /** Extra column from lookup configuration */
4109
+ interface ExtraColumnFromLookupConfig {
4110
+ extraCoulmnFromLookup?: boolean;
4111
+ lookupId?: number | null;
4112
+ groupedBy?: string | null;
4113
+ propKey?: string | null;
4114
+ }
4115
+ /** Timeline header colors config (single) */
4116
+ interface TimelineHeaderSingleConfig {
4117
+ bgColor?: string;
4118
+ color?: string;
4119
+ }
4120
+ /**
4121
+ * Display Settings Component
4122
+ *
4123
+ * Comprehensive visual/display configuration with chart-type-aware field visibility.
4124
+ * Shows only relevant settings based on the selected chart type.
4125
+ */
4126
+ declare class DisplaySettings {
4127
+ /** Current configuration */
4128
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
4129
+ /** Selected chart type */
4130
+ readonly chartType: _angular_core.InputSignal<ChartTypeConfig | null>;
4131
+ /** Available properties (for property-based configs) */
4132
+ readonly availableProperties: _angular_core.InputSignal<any[]>;
4133
+ /** Selected properties from query */
4134
+ readonly selectedProperties: _angular_core.InputSignal<string[]>;
4135
+ /** Available lookups for extra column from lookup */
4136
+ readonly lookups: _angular_core.InputSignal<any[]>;
4137
+ /** Emit client config changes */
4138
+ readonly clientConfigChange: _angular_core.OutputEmitterRef<Partial<ClientConfig>>;
4139
+ /** Color condition expansion state */
4140
+ readonly colorConditionExpanded: _angular_core.WritableSignal<Record<number, boolean>>;
4141
+ /** Property translations paste state */
4142
+ readonly showPropertyTranslationsPaste: _angular_core.WritableSignal<boolean>;
4143
+ readonly propertyTranslationsPasteText: _angular_core.WritableSignal<string>;
4144
+ readonly propertyTranslationsPasteError: _angular_core.WritableSignal<string>;
4145
+ /** Property colors paste state */
4146
+ readonly showPropertyColorsPaste: _angular_core.WritableSignal<boolean>;
4147
+ readonly propertyColorsPasteText: _angular_core.WritableSignal<string>;
4148
+ readonly propertyColorsPasteError: _angular_core.WritableSignal<string>;
4149
+ /**
4150
+ * Chart type to fields mapping
4151
+ * Each chart type maps to comma-separated list of visible fields
4152
+ */
4153
+ private readonly chartTypeFieldsMap;
4154
+ /** Computed fields to show based on chart type */
4155
+ readonly fieldsToShow: _angular_core.Signal<string>;
4156
+ /** Check if a field should be shown */
4157
+ shouldShowField(fieldName: string): boolean;
4158
+ /** Position options */
4159
+ readonly positionOptions: {
4160
+ label: string;
4161
+ value: string;
4162
+ }[];
4163
+ /** Legend position options */
4164
+ readonly legendPositionOptions: {
4165
+ label: string;
4166
+ value: string;
4167
+ }[];
4168
+ /** Legend icon type options */
4169
+ readonly legendIconOptions: {
4170
+ label: string;
4171
+ value: string;
4172
+ }[];
4173
+ /** Label position options */
4174
+ readonly labelPositionOptions: {
4175
+ label: string;
4176
+ value: string;
4177
+ }[];
4178
+ /** Map options */
4179
+ readonly mapOptions: {
4180
+ label: string;
4181
+ value: string;
4182
+ }[];
4183
+ /** Order type options */
4184
+ readonly orderTypeOptions: {
4185
+ label: string;
4186
+ value: string;
4187
+ }[];
4188
+ /** Order operation options */
4189
+ readonly orderOperationOptions: {
4190
+ label: string;
4191
+ value: string;
4192
+ }[];
4193
+ /** Border options for props config */
4194
+ readonly borderOptions: {
4195
+ label: string;
4196
+ value: string;
4197
+ }[];
4198
+ /** Color condition type options */
4199
+ readonly colorConditionTypeOptions: {
4200
+ label: string;
4201
+ value: string;
4202
+ }[];
4203
+ /** Format type options */
4204
+ readonly formatTypeOptions: ({
4205
+ label: string;
4206
+ value: null;
4207
+ } | {
4208
+ label: string;
4209
+ value: string;
4210
+ })[];
4211
+ /** Format X-Axis type options */
4212
+ readonly formatXAxisTypeOptions: ({
4213
+ label: string;
4214
+ value: null;
4215
+ } | {
4216
+ label: string;
4217
+ value: string;
4218
+ })[];
4219
+ /** Default color palette */
4220
+ readonly defaultColorPalette: string[];
4221
+ /** Current style config */
4222
+ readonly styleConfig: _angular_core.Signal<StyleConfig>;
4223
+ /** Current config as type */
4224
+ readonly configAsType: _angular_core.Signal<{
4225
+ [key: string]: any;
4226
+ icon?: string;
4227
+ breadcrumb?: any[];
4228
+ }>;
4229
+ /** Current card info */
4230
+ readonly cardInfo: _angular_core.Signal<CardInfoConfig>;
4231
+ /** Current header card config */
4232
+ readonly headerCardConfig: _angular_core.Signal<HeaderCardConfig>;
4233
+ /** Current card style config */
4234
+ readonly cardStyleConfig: _angular_core.Signal<CardStyleConfig>;
4235
+ /** Current label config */
4236
+ readonly labelConfig: _angular_core.Signal<{
4237
+ show?: boolean;
4238
+ showTotalInTop?: boolean;
4239
+ position?: string;
4240
+ }>;
4241
+ /** Current legend config */
4242
+ readonly legendConfig: _angular_core.Signal<{
4243
+ show?: boolean;
4244
+ position?: string;
4245
+ iconType?: string;
4246
+ }>;
4247
+ /** Current label center config */
4248
+ readonly labelCenterConfig: _angular_core.Signal<LabelCenterConfig>;
4249
+ /** Current sort data bars config */
4250
+ readonly sortDataBarsConfig: _angular_core.Signal<SortDataBarsConfig>;
4251
+ /** Current override labels */
4252
+ readonly overrideLabels: _angular_core.Signal<OverrideLabel[]>;
4253
+ /** Current default colors */
4254
+ readonly defaultColors: _angular_core.Signal<string[]>;
4255
+ /** Current order config */
4256
+ readonly orderConfig: _angular_core.Signal<any>;
4257
+ /** Current format config */
4258
+ readonly formatConfig: _angular_core.Signal<FormatConfig>;
4259
+ /** Current table format config */
4260
+ readonly tableFormatConfig: _angular_core.Signal<TableFormatConfig>;
4261
+ /** Current color by condition */
4262
+ readonly colorByCondition: _angular_core.Signal<ColorConditionsByIndex>;
4263
+ /** Current ring gauge config */
4264
+ readonly ringGaugeConfig: _angular_core.Signal<RingGaugeConfig>;
4265
+ /** Current card list config */
4266
+ readonly cardListConfig: _angular_core.Signal<CardListConfig>;
4267
+ /** Props config as index */
4268
+ readonly propsConfigAsIndex: _angular_core.Signal<PropsConfigAsIndexItem[]>;
4269
+ /** Property translations map */
4270
+ readonly propertyTranslations: _angular_core.Signal<PropertyTranslationsMap>;
4271
+ /** Property colors map */
4272
+ readonly propertyColors: _angular_core.Signal<PropertyColorsMap>;
4273
+ /** Format X-Axis config */
4274
+ readonly formatXAxisConfig: _angular_core.Signal<FormatXAxisConfig>;
4275
+ /** Table columns config (extra column from lookup) */
4276
+ readonly tableColumnsConfig: _angular_core.Signal<ExtraColumnFromLookupConfig>;
4277
+ /** Timeline header colors config (single object for old format) */
4278
+ readonly timelineHeaderColorsSingle: _angular_core.Signal<TimelineHeaderSingleConfig>;
4279
+ /** Toggle association */
4280
+ readonly toggleAssociation: _angular_core.Signal<boolean>;
4281
+ /** Selected properties resolved from input or config */
4282
+ readonly resolvedSelectedProperties: _angular_core.Signal<any[]>;
4283
+ /** Available properties resolved from input or selected properties */
4284
+ readonly resolvedAvailableProperties: _angular_core.Signal<any[]>;
4285
+ /** Available properties as options */
4286
+ readonly propertyOptions: _angular_core.Signal<{
4287
+ label: any;
4288
+ value: any;
4289
+ }[]>;
4290
+ /** Available translation options (exclude used) */
4291
+ readonly availableTranslationOptions: _angular_core.Signal<{
4292
+ label: any;
4293
+ value: any;
4294
+ }[]>;
4295
+ /** Available color options (exclude used) */
4296
+ readonly availableColorOptions: _angular_core.Signal<{
4297
+ label: any;
4298
+ value: any;
4299
+ }[]>;
4300
+ /** All property options (full list) */
4301
+ readonly allPropertyKeyOptions: _angular_core.Signal<{
4302
+ label: any;
4303
+ value: any;
4304
+ }[]>;
4305
+ /** Ring gauge hidden properties options */
4306
+ readonly ringGaugeHiddenOptions: _angular_core.Signal<{
4307
+ label: any;
4308
+ value: any;
4309
+ }[]>;
4310
+ /** Update style config property */
4311
+ updateStyleConfig(key: keyof StyleConfig | string, value: any): void;
4312
+ /** Update configAsType property */
4313
+ updateConfigAsType(key: string, value: any): void;
4314
+ /** Update nested configAsType property */
4315
+ updateNestedConfigAsType(parentKey: string, key: string, value: any): void;
4316
+ /** Update header card config */
4317
+ updateHeaderCardConfig(key: keyof HeaderCardConfig, value: any): void;
4318
+ /** Update legend settings */
4319
+ updateLegend(key: string, value: unknown): void;
4320
+ /** Update label settings */
4321
+ updateLabel(key: string, value: unknown): void;
4322
+ /** Update label center config */
4323
+ updateLabelCenterConfig(key: string, value: any): void;
4324
+ /** Update label center text */
4325
+ updateLabelCenterText(lang: 'en' | 'ar', value: string): void;
4326
+ /** Update card style config */
4327
+ updateCardStyleConfig(key: keyof CardStyleConfig, value: any): void;
4328
+ /** Update sort data bars config */
4329
+ updateSortDataBarsConfig(key: string, value: any): void;
4330
+ /** Update card info config */
4331
+ updateCardInfoConfig(key: string, value: any): void;
4332
+ /** Update border top visibility */
4333
+ updateBorderTopShow(show: boolean): void;
4334
+ /** Update border top color */
4335
+ updateBorderTopColor(color: string): void;
4336
+ /** Update map type */
4337
+ updateMapType(value: string): void;
4338
+ /** Add a new shadow */
4339
+ addShadow(): void;
4340
+ /** Remove a shadow */
4341
+ removeShadow(index: number): void;
4342
+ /** Update a shadow property */
4343
+ updateShadow(index: number, key: keyof ShadowConfig, value: any): void;
4344
+ /** Add override label */
4345
+ addOverrideLabel(): void;
4346
+ /** Remove override label */
4347
+ removeOverrideLabel(index: number): void;
4348
+ /** Update override label */
4349
+ updateOverrideLabel(index: number, lang: 'en' | 'ar', value: string): void;
4350
+ /** Add a default color */
4351
+ addDefaultColor(color: string): void;
4352
+ /** Remove a default color */
4353
+ removeDefaultColor(index: number): void;
4354
+ /** Update a default color */
4355
+ updateDefaultColor(index: number, color: string): void;
4356
+ trackByIndex(index: number): number;
4357
+ /** Update format config */
4358
+ updateFormatConfig(key: keyof FormatConfig, value: any): void;
4359
+ /** Update table format config */
4360
+ updateTableFormatConfig(key: keyof TableFormatConfig, value: any): void;
4361
+ /** Update table format sort config */
4362
+ updateTableFormatSortConfig(key: 'column' | 'direction', value: string): void;
4363
+ /** Reset table format to default */
4364
+ resetTableFormat(): void;
4365
+ /** Get color condition indexes */
4366
+ getColorConditionIndexes(): number[];
4367
+ /** Check if a bar index is expanded */
4368
+ isColorConditionExpanded(index: number): boolean;
4369
+ /** Toggle bar index expansion */
4370
+ toggleColorConditionExpanded(index: number): void;
4371
+ /** Add bar index for color conditions */
4372
+ addColorConditionIndex(): void;
4373
+ /** Remove bar index */
4374
+ removeColorConditionIndex(index: number): void;
4375
+ /** Add condition to bar index */
4376
+ addColorCondition(index: number): void;
4377
+ /** Remove condition from bar index */
4378
+ removeColorCondition(index: number, conditionIndex: number): void;
4379
+ /** Update color condition */
4380
+ updateColorCondition(index: number, conditionIndex: number, key: keyof ColorCondition, value: any): void;
4381
+ /** Update ring gauge config */
4382
+ updateRingGaugeConfig(key: keyof RingGaugeConfig, value: any): void;
4383
+ /** Update card list hide properties */
4384
+ updateCardListHideProperties(properties: string[]): void;
4385
+ /** Add props config item */
4386
+ addPropsConfigItem(): void;
4387
+ /** Remove props config item */
4388
+ removePropsConfigItem(index: number): void;
4389
+ /** Update props config item */
4390
+ updatePropsConfigItem(index: number, key: keyof PropsConfigAsIndexItem, value: any): void;
4391
+ /** Update order config field */
4392
+ updateOrderConfig(key: keyof OrderConfig, value: any): void;
4393
+ /** Add order item */
4394
+ addOrderItem(): void;
4395
+ /** Remove order item */
4396
+ removeOrderItem(index: number): void;
4397
+ /** Update order item */
4398
+ updateOrderItem(index: number, value: string): void;
4399
+ /** Move order item up */
4400
+ moveOrderItemUp(index: number): void;
4401
+ /** Move order item down */
4402
+ moveOrderItemDown(index: number): void;
4403
+ /** Get property translation keys */
4404
+ getPropertyTranslationKeys(): string[];
4405
+ /** Add property translation */
4406
+ addPropertyTranslation(propertyKey: string): void;
4407
+ /** Remove property translation */
4408
+ removePropertyTranslation(propertyKey: string): void;
4409
+ /** Update property translation */
4410
+ updatePropertyTranslation(propertyKey: string, lang: 'ar' | 'en', value: string): void;
4411
+ /** Get property color keys */
4412
+ getPropertyColorKeys(): string[];
4413
+ /** Add property color */
4414
+ addPropertyColor(propertyKey: string): void;
4415
+ /** Copy property translations */
4416
+ copyPropertyTranslations(): void;
4417
+ /** Toggle property translations paste area */
4418
+ togglePropertyTranslationsPaste(): void;
4419
+ /** Apply pasted property translations */
4420
+ applyPropertyTranslationsPaste(): void;
4421
+ /** Remove property color */
4422
+ removePropertyColor(propertyKey: string): void;
4423
+ /** Update property color */
4424
+ updatePropertyColor(propertyKey: string, selectedKey: string): void;
4425
+ /** Copy property colors */
4426
+ copyPropertyColors(): void;
4427
+ /** Toggle property colors paste area */
4428
+ togglePropertyColorsPaste(): void;
4429
+ /** Apply pasted property colors */
4430
+ applyPropertyColorsPaste(): void;
4431
+ /** Update format X-Axis config */
4432
+ updateFormatXAxisConfig(key: keyof FormatXAxisConfig, value: any): void;
4433
+ /** Update table columns config */
4434
+ updateTableColumnsConfig(key: keyof ExtraColumnFromLookupConfig, value: any): void;
4435
+ /** Update timeline header colors (single config) */
4436
+ updateTimelineHeaderColorSingle(key: 'bgColor' | 'color', value: string): void;
4437
+ /** Update toggle association */
4438
+ updateToggleAssociation(value: boolean): void;
4439
+ /** Selected property for adding translations */
4440
+ readonly selectedPropertyForTranslation: _angular_core.WritableSignal<string>;
4441
+ /** Selected property for adding colors */
4442
+ readonly selectedPropertyForColor: _angular_core.WritableSignal<string>;
4443
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DisplaySettings, never>;
4444
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DisplaySettings, "mt-display-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartType": { "alias": "chartType"; "required": false; "isSignal": true; }; "availableProperties": { "alias": "availableProperties"; "required": false; "isSignal": true; }; "selectedProperties": { "alias": "selectedProperties"; "required": false; "isSignal": true; }; "lookups": { "alias": "lookups"; "required": false; "isSignal": true; }; }, { "clientConfigChange": "clientConfigChange"; }, never, never, true, never>;
4445
+ }
4446
+
4447
+ /** Action type option */
4448
+ interface ActionTypeOption {
4449
+ readonly label: string;
4450
+ readonly value: string;
4451
+ readonly icon: string;
4452
+ }
4453
+ /** Trigger option */
4454
+ interface TriggerOption {
4455
+ readonly label: string;
4456
+ readonly value: string;
4457
+ readonly icon: string;
4458
+ }
4459
+ /** Dynamic/Static key pair */
4460
+ interface KeyPair {
4461
+ propertyKey: string;
4462
+ propertyValue: string;
4463
+ }
4464
+ /**
4465
+ * Actions Settings Component
4466
+ *
4467
+ * Handles chart action configuration:
4468
+ * - Click actions (open dialog, navigate, custom function)
4469
+ * - Trigger types (click, double-click, hover)
4470
+ * - Action configuration
4471
+ */
4472
+ declare class ActionsSettings {
4473
+ /** Current configuration */
4474
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
4475
+ /** Emit client config changes */
4476
+ readonly clientConfigChange: _angular_core.OutputEmitterRef<Partial<ClientConfig>>;
4477
+ /** Action type options - using valid icons from icons.json */
4478
+ readonly actionTypeOptions: readonly ActionTypeOption[];
4479
+ /** Trigger type options - using valid icons from icons.json */
4480
+ readonly triggerOptions: readonly TriggerOption[];
4481
+ /** Current actions list */
4482
+ readonly actions: _angular_core.Signal<ActionConfig[]>;
4483
+ /**
4484
+ * Get current actions array safely
4485
+ */
4486
+ private getCurrentActions;
4487
+ /**
4488
+ * Emit updated actions
4489
+ */
4490
+ private emitActions;
4491
+ /**
4492
+ * Get action at index safely
4493
+ */
4494
+ private getActionAt;
4495
+ /**
4496
+ * Add a new action
4497
+ */
4498
+ addAction(): void;
4499
+ /**
4500
+ * Remove an action
4501
+ */
4502
+ removeAction(index: number): void;
4503
+ /**
4504
+ * Duplicate an action
4505
+ */
4506
+ duplicateAction(index: number): void;
4507
+ /**
4508
+ * Update an action property
4509
+ */
4510
+ updateAction<K extends keyof ActionConfig>(index: number, key: K, value: ActionConfig[K]): void;
4511
+ /**
4512
+ * Update action config object
4513
+ */
4514
+ updateActionConfig(index: number, configKey: string, value: unknown): void;
4515
+ /**
4516
+ * Move action up in the list
4517
+ */
4518
+ moveActionUp(index: number): void;
4519
+ /**
4520
+ * Move action down in the list
4521
+ */
4522
+ moveActionDown(index: number): void;
4523
+ /**
4524
+ * Get action type label
4525
+ */
4526
+ getActionTypeLabel(actionType: string): string;
4527
+ /**
4528
+ * Get trigger type label
4529
+ */
4530
+ getTriggerLabel(trigger: string): string;
4531
+ /**
4532
+ * Add a dynamic key to action
4533
+ */
4534
+ addDynamicKey(actionIndex: number): void;
4535
+ /**
4536
+ * Remove a dynamic key from action
4537
+ */
4538
+ removeDynamicKey(actionIndex: number, keyIndex: number): void;
4539
+ /**
4540
+ * Update a dynamic key
4541
+ */
4542
+ updateDynamicKey(actionIndex: number, keyIndex: number, field: keyof KeyPair, value: string): void;
4543
+ /**
4544
+ * Add a static key to action
4545
+ */
4546
+ addStaticKey(actionIndex: number): void;
4547
+ /**
4548
+ * Remove a static key from action
4549
+ */
4550
+ removeStaticKey(actionIndex: number, keyIndex: number): void;
4551
+ /**
4552
+ * Update a static key
4553
+ */
4554
+ updateStaticKey(actionIndex: number, keyIndex: number, field: keyof KeyPair, value: string): void;
4555
+ /**
4556
+ * Track by action id for ngFor
4557
+ */
4558
+ trackByActionId(_index: number, action: ActionConfig): string;
4559
+ /**
4560
+ * Track by index helper
4561
+ */
4562
+ trackByIndex(index: number): number;
4563
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionsSettings, never>;
4564
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionsSettings, "mt-actions-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, { "clientConfigChange": "clientConfigChange"; }, never, never, true, never>;
4565
+ }
4566
+
4567
+ /**
4568
+ * Chart Viewer Component
4569
+ *
4570
+ * Simple preview component that wraps dashboard-item.
4571
+ * Used in manage-item to show live preview of the chart being configured.
4572
+ */
4573
+ declare class ChartViewer {
4574
+ /** Chart configuration */
4575
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
4576
+ /** Chart type ID */
4577
+ readonly chartTypeId: _angular_core.InputSignal<string>;
4578
+ /** Loading state for refresh */
4579
+ readonly loading: _angular_core.WritableSignal<boolean>;
4580
+ /** Refresh the preview */
4581
+ refresh(): void;
4582
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartViewer, never>;
4583
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartViewer, "mt-chart-viewer", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "chartTypeId": { "alias": "chartTypeId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4584
+ }
4585
+
4586
+ /**
4587
+ * Filter items by group ID
4588
+ *
4589
+ * Returns items that belong to a specific group, sorted by orderInGroup
4590
+ */
4591
+ declare class FilterByGroupPipe implements PipeTransform {
4592
+ transform(items: DashboardChartItem[], groupId?: string): DashboardChartItem[];
4593
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterByGroupPipe, never>;
4594
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<FilterByGroupPipe, "filterByGroup", true>;
4595
+ }
4596
+
4597
+ /**
4598
+ * Get dialog actions for a chart
4599
+ *
4600
+ * Returns menu items for dialog management (add, edit, delete)
4601
+ * Used in the "Advanced" popover menu
4602
+ */
4603
+ declare class GetChartActionsPipe implements PipeTransform {
4604
+ private transloco;
4605
+ transform(chart: DashboardChartItem, context: ChartActionsContext): MTMenuItem[];
4606
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GetChartActionsPipe, never>;
4607
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<GetChartActionsPipe, "getChartActions", true>;
4608
+ }
4609
+
4610
+ /**
4611
+ * Deep clone an object
4612
+ */
4613
+ declare function cloneDeep<T>(obj: T): T;
4614
+
4615
+ export { ActionsSettings, BarChartHandler, BarControlUi, CHART_TYPES, CardContentComponent, CardFilterComponent, ChartCardComponent, ChartDataService, ChartSettingsDrawer, ChartViewer, ComparisonChartHandler, DashboardBuilder, DashboardBuilderService, DashboardItem, DashboardItemStoreService, DashboardList, DashboardStoreService, DashboardViewer, DataSourceSettings, DefaultControlUi, DisplaySettings, DynamicFiltersConfig, EChartComponent, EntityInfoComponent, EntityPreviewCardComponent, FilterByGroupPipe, GaugeChartHandler, GeneralSettings, GetChartActionsPipe, HTTPMethod, HeaderCardComponent, LevelCardHandler, LevelCardListComponent, LineChartHandler, ListStatisticCardComponent, ManageBreadcrumb, ManageFilterOnPage, ManageItem, ManageItemService, ManagePages, MapChartHandler, OverviewCardHandler, PhaseGateStepperHandler, PieChartHandler, PieControlUi, RingGaugeChartHandler, SPlusChartHandler, SkeletonCardComponent, SnapshotHandler, SplitterChartHandler, StackBarChartHandler, StackBarControlUi, StatisticCardComponent, TableCardComponent, TableViewHandler, TimelineHandler, addCommasToNumber, axisFormatters, cloneDeep, createAxisFormatter, createTooltipFormatter, dynamicReorder, dynamicTextReplace, formatCurrency, formatDate, formatNumber, formatPercentage, formatValue, formatWordsUnderBar, generalConfiguration, getColorFromConditions, getLanguageCode, getLocalizedTitle, getNestedData, groupDatesByYearAndMonth, handleFilterForCard, handleFilterForSnapshot, handleFiltersForCustom, isMobilePlatform, sortChartData, sortDataTableView, switchAllKeysSmall, switchAllKeysToLower };
4616
+ export type { ActionConfig, ApiResponse, BarChartData, BreadcrumbItem, BulkLinkChartRequest, BulkLinkChartResponse, BulkPropertiesRequest, BulkPropertiesResponse, BulkPropertiesResponseItem, BulkPropertyRequestItem, CardBorderStyleConfig, CardStyleConfig$1 as CardStyleConfig, ChartActionEvent, ChartActionsContext, ChartData, ChartDataHandled, ChartLabel, ChartLinkConfiguration, ChartTypeConfig, ClientConfig, ComponentType, CustomApi, DashboardChartItem, DashboardDialogItem, DashboardItemStore, DashboardListEvent, DashboardPage, DisplayConfig, EChartSeriesItem, ExcelSheet, FilterConfig, FilterOption, GroupedModuleOption, HandleAction, HeaderCardConfig$1 as HeaderCardConfig, IModule, IModuleType, IProperty, IPropertyWithGroup, ISelection, ItemConfig, LevelCardData, LevelCardProperty, LinkChartRequest, LocalizedName, ModuleItem, ModuleSelectOption, ModuleType, ModuleValue, ModulesTreeRequest, ModulesTreeResponse, PhaseGateProperty, PhaseGateStep, PieChartData, PropertiesResponse, PropertyItem$1 as PropertyItem, PropertyItemOption, PropertyItemsResponse, QuickManageType, Report, ReportChartLink, ReportDashboardConfig, ReportExcelConfig, ReportType, ReportUrl, RequestType, SelectionFilter, ServiceConfig, ServiceItem, SourceLink, StatisticCardData, StyleConfig, TableColumn$1 as TableColumn, TableViewData, TimelineData, TimelineItem, UnlinkChartRequest };