@masterteam/dashboard-builder 0.0.1 → 0.0.3

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.
@@ -327,6 +327,15 @@ interface DashboardDialogItem {
327
327
  chartTypeId?: string;
328
328
  loading?: boolean;
329
329
  }
330
+ /**
331
+ * Standalone dashboard builder data payload
332
+ */
333
+ interface DashboardBuilderData {
334
+ page?: DashboardPage | null;
335
+ charts?: DashboardChartItem[];
336
+ dialogs?: DashboardDialogItem[];
337
+ filters?: any[];
338
+ }
330
339
  /**
331
340
  * Dashboard page configuration
332
341
  * Alias for Report with Dashboard type - used for backwards compatibility
@@ -650,6 +659,10 @@ declare class DashboardBuilder implements OnInit, OnDestroy {
650
659
  readonly backButton: _angular_core.InputSignal<boolean>;
651
660
  /** Dashboard/Page ID to load */
652
661
  readonly pageId: _angular_core.InputSignal<string | number | null>;
662
+ /** Standalone mode (when true, builder runs without API calls) */
663
+ readonly standalone: _angular_core.InputSignal<boolean>;
664
+ /** Standalone dashboard data model */
665
+ readonly dashboardData: _angular_core.ModelSignal<DashboardBuilderData | null>;
653
666
  /** Read-only mode */
654
667
  readonly readonly: _angular_core.InputSignal<boolean>;
655
668
  /** Emit when page config changes */
@@ -690,13 +703,15 @@ declare class DashboardBuilder implements OnInit, OnDestroy {
690
703
  /** Reference to chart settings drawer */
691
704
  private chartSettingsRef;
692
705
  readonly languageCode: _angular_core.Signal<string>;
693
- readonly direction: _angular_core.Signal<"rtl" | "ltr">;
706
+ readonly direction: _angular_core.Signal<"ltr" | "rtl">;
694
707
  readonly chartActionsContext: ChartActionsContext;
695
708
  readonly options: GridsterConfig;
696
709
  private subscription;
697
710
  private isDragging;
698
711
  private scrollInterval;
699
712
  private dragStartY;
713
+ private applyingDashboardData;
714
+ private emittingDashboardData;
700
715
  readonly menuItems: _angular_core.Signal<MenuItem[]>;
701
716
  ngOnInit(): void;
702
717
  ngOnDestroy(): void;
@@ -760,8 +775,11 @@ declare class DashboardBuilder implements OnInit, OnDestroy {
760
775
  private handleDragEnd;
761
776
  private startAutoScroll;
762
777
  private stopAutoScroll;
778
+ constructor();
779
+ private applyDashboardData;
780
+ private emitDashboardDataChange;
763
781
  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>;
782
+ 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; }; "standalone": { "alias": "standalone"; "required": false; "isSignal": true; }; "dashboardData": { "alias": "dashboardData"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "dashboardData": "dashboardDataChange"; "pageChange": "pageChange"; "chartsChange": "chartsChange"; "onSave": "onSave"; "onBack": "onBack"; "onAddChart": "onAddChart"; "onEditChart": "onEditChart"; }, never, never, true, never>;
765
783
  }
766
784
 
767
785
  /**
@@ -813,16 +831,16 @@ declare class DashboardViewer implements OnInit, OnDestroy {
813
831
  readonly dialogs: _angular_core.WritableSignal<DashboardDialogItem[]>;
814
832
  readonly filters: _angular_core.WritableSignal<any[]>;
815
833
  readonly languageCode: _angular_core.Signal<string>;
816
- readonly direction: _angular_core.Signal<"rtl" | "ltr">;
834
+ readonly direction: _angular_core.Signal<"ltr" | "rtl">;
817
835
  readonly options: GridsterConfig;
818
836
  private subscription;
819
837
  private chartsDataEffect;
820
838
  private dialogsDataEffect;
821
839
  private filtersDataEffect;
840
+ private pageIdEffect;
822
841
  ngOnInit(): void;
823
842
  ngOnDestroy(): void;
824
843
  private setupSubscriptions;
825
- private loadPageIfNeeded;
826
844
  loadPage(id: string | number): void;
827
845
  reloadPage(): void;
828
846
  /**
@@ -1135,8 +1153,31 @@ interface FilterConfig {
1135
1153
  * Filter option
1136
1154
  */
1137
1155
  interface FilterOption {
1138
- label: string;
1156
+ key?: string;
1157
+ label: string | Record<string, string>;
1158
+ value: any;
1159
+ icon?: string;
1160
+ color?: string;
1161
+ }
1162
+ /**
1163
+ * Static filter configuration for button-group style filtering
1164
+ */
1165
+ interface StaticFilterConfig {
1166
+ show: boolean;
1167
+ filters: StaticFilterItem[];
1168
+ defaultIndex?: number;
1169
+ style?: 'buttons' | 'pills' | 'tabs';
1170
+ }
1171
+ /**
1172
+ * Static filter item
1173
+ */
1174
+ interface StaticFilterItem {
1175
+ key: string;
1139
1176
  value: any;
1177
+ label: {
1178
+ en: string;
1179
+ ar: string;
1180
+ };
1140
1181
  icon?: string;
1141
1182
  color?: string;
1142
1183
  }
@@ -1239,6 +1280,9 @@ interface HeaderCardConfig$1 {
1239
1280
  showHeader?: boolean;
1240
1281
  isHeaderHidden?: boolean;
1241
1282
  headerClickable?: boolean;
1283
+ isHeaderCentered?: boolean;
1284
+ headerFontSize?: number;
1285
+ headerColor?: string;
1242
1286
  icon?: string;
1243
1287
  iconColor?: string;
1244
1288
  titleColor?: string;
@@ -1256,6 +1300,10 @@ interface CardBorderStyleConfig {
1256
1300
  'background-color'?: string;
1257
1301
  'box-shadow'?: string;
1258
1302
  'border-radius'?: number;
1303
+ color?: string;
1304
+ 'font-size'?: string;
1305
+ iconColor?: string;
1306
+ iconBgColor?: string;
1259
1307
  }
1260
1308
  interface CardStyleConfig$1 {
1261
1309
  backgroundColor?: string;
@@ -1280,9 +1328,9 @@ declare class CardContentComponent {
1280
1328
  /** Card style configuration (background, shadows, border radius) */
1281
1329
  readonly cardStyleConfig: _angular_core.InputSignal<CardStyleConfig$1 | null>;
1282
1330
  /** Whether to show header */
1283
- readonly showHeaderInput: _angular_core.InputSignal<boolean>;
1331
+ readonly showHeader: _angular_core.InputSignal<boolean>;
1284
1332
  /** Whether header is clickable */
1285
- readonly headerClickableInput: _angular_core.InputSignal<boolean>;
1333
+ readonly headerClickable: _angular_core.InputSignal<boolean>;
1286
1334
  /** No top end content flag */
1287
1335
  readonly isNoTopEnd: _angular_core.InputSignal<boolean>;
1288
1336
  /** Whether this card contains a chart (disables horizontal scroll) */
@@ -1290,16 +1338,18 @@ declare class CardContentComponent {
1290
1338
  /** Header click event */
1291
1339
  readonly headerClick: _angular_core.OutputEmitterRef<void>;
1292
1340
  /** Computed show header */
1293
- readonly showHeader: _angular_core.Signal<boolean>;
1341
+ readonly showHeaderState: _angular_core.Signal<boolean>;
1294
1342
  /** Computed header clickable */
1295
- readonly headerClickable: _angular_core.Signal<boolean>;
1343
+ readonly headerClickableState: _angular_core.Signal<boolean>;
1344
+ /** Computed header row styles from StyleConfig (color, font-size passed through) */
1345
+ readonly headerRowStyles: _angular_core.Signal<Record<string, string> | null>;
1296
1346
  /** Computed card styles from StyleConfig and cardStyleConfig */
1297
1347
  readonly cardStyles: _angular_core.Signal<Record<string, string>>;
1298
1348
  /** Computed border radius style */
1299
1349
  readonly borderRadiusStyle: _angular_core.Signal<string>;
1300
1350
  onHeaderClick(): void;
1301
1351
  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>;
1352
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardContentComponent, "mt-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; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "headerClickable": { "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
1353
  }
1304
1354
 
1305
1355
  declare class CardFilterComponent implements OnInit {
@@ -1323,7 +1373,7 @@ declare class CardFilterComponent implements OnInit {
1323
1373
  /** Filter type */
1324
1374
  readonly filterType: _angular_core.Signal<"date" | "text" | "select" | "multiselect" | "multiSelect" | "daterange">;
1325
1375
  /** Filter options */
1326
- readonly options: _angular_core.Signal<FilterOption[]>;
1376
+ readonly options: _angular_core.Signal<_masterteam_dashboard_builder.FilterOption[]>;
1327
1377
  /** Placeholder text */
1328
1378
  readonly placeholder: _angular_core.Signal<string>;
1329
1379
  ngOnInit(): void;
@@ -1331,7 +1381,207 @@ declare class CardFilterComponent implements OnInit {
1331
1381
  onMultiFilterChange(values: any[]): void;
1332
1382
  onDateChange(): void;
1333
1383
  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>;
1384
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardFilterComponent, "mt-card-filter", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "dashboardId": { "alias": "dashboardId"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; }, never, never, true, never>;
1385
+ }
1386
+
1387
+ declare class StaticFiltersComponent implements OnInit {
1388
+ private readonly storeService;
1389
+ private readonly transloco;
1390
+ /** Static filter configuration */
1391
+ readonly config: _angular_core.InputSignal<StaticFilterConfig | null>;
1392
+ /** Dashboard ID for store updates */
1393
+ readonly dashboardId: _angular_core.InputSignal<string | number | undefined>;
1394
+ /** Filter change event */
1395
+ readonly filterChange: _angular_core.OutputEmitterRef<{
1396
+ key: string;
1397
+ value: any;
1398
+ }>;
1399
+ /** Currently active filter index */
1400
+ readonly activeIndex: _angular_core.WritableSignal<number>;
1401
+ /** Language code */
1402
+ readonly langCode: _angular_core.Signal<string>;
1403
+ /** Filter items */
1404
+ readonly filters: _angular_core.Signal<StaticFilterItem[]>;
1405
+ /**
1406
+ * Get localized label for filter
1407
+ */
1408
+ getLabel(filter: StaticFilterItem): string;
1409
+ /**
1410
+ * Handle filter button click
1411
+ */
1412
+ onFilterClick(filter: StaticFilterItem, index: number): void;
1413
+ /**
1414
+ * Initialize with default filter if configured
1415
+ */
1416
+ ngOnInit(): void;
1417
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StaticFiltersComponent, never>;
1418
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StaticFiltersComponent, "mt-static-filters", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "dashboardId": { "alias": "dashboardId"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; }, never, never, true, never>;
1419
+ }
1420
+
1421
+ /**
1422
+ * Filter Field Models
1423
+ *
1424
+ * Defines the structure for dynamic filter fields configuration
1425
+ * used in dashboard page filtering.
1426
+ */
1427
+ /** Localized text with English and Arabic translations */
1428
+ interface LocalizedText {
1429
+ en: string;
1430
+ ar: string;
1431
+ }
1432
+ /** Filter field types supported by the system */
1433
+ type FilterFieldType = 'dropdownTVService' | 'lookup' | 'status' | 'phaseGate' | 'user' | 'date' | 'section' | 'separator' | 'year' | 'month' | 'quarter' | 'checkbox' | 'schemaSettings' | 'schemaSettingsLeafs';
1434
+ /** Selection item for dropdown configuration */
1435
+ interface FilterSelectionItem {
1436
+ id: number;
1437
+ moduleType?: string;
1438
+ moduleId?: number;
1439
+ filters?: any[];
1440
+ modules?: any[];
1441
+ properties?: any[];
1442
+ }
1443
+ /** Filter field configuration details */
1444
+ interface FilterFieldConfiguration {
1445
+ payload?: {
1446
+ dashboardId: number;
1447
+ selection: FilterSelectionItem[];
1448
+ chartType: string;
1449
+ query: {
1450
+ selectedProperties: string[];
1451
+ };
1452
+ };
1453
+ lookupId?: number;
1454
+ schemaLevelId?: number;
1455
+ logId?: number;
1456
+ isRequird?: boolean;
1457
+ isMultiple?: boolean;
1458
+ checked?: boolean;
1459
+ minYear?: number;
1460
+ maxYear?: number;
1461
+ }
1462
+ /** Filter field definition */
1463
+ interface FilterField {
1464
+ key?: string;
1465
+ name?: LocalizedText;
1466
+ type: FilterFieldType;
1467
+ configuration?: FilterFieldConfiguration;
1468
+ }
1469
+ /** Filter field type option for dropdown */
1470
+ interface FilterFieldTypeOption {
1471
+ value: FilterFieldType;
1472
+ label: string;
1473
+ products: string[];
1474
+ }
1475
+ /**
1476
+ * Dynamic Filter Field
1477
+ *
1478
+ * An extended filter definition with options and loading state
1479
+ * for chart-level dynamic filtering.
1480
+ */
1481
+ interface DynamicFilterField extends FilterField {
1482
+ /** Options loaded from API */
1483
+ options?: DynamicFilterOption[];
1484
+ /** Loading state for async options */
1485
+ loading?: boolean;
1486
+ /** Currently selected value(s) */
1487
+ selectedValue?: any;
1488
+ }
1489
+ /**
1490
+ * Dynamic Filter Option
1491
+ *
1492
+ * A single option in a dynamic filter dropdown.
1493
+ */
1494
+ interface DynamicFilterOption {
1495
+ id: number | string;
1496
+ name: string | LocalizedText;
1497
+ value?: any;
1498
+ color?: string;
1499
+ icon?: string;
1500
+ }
1501
+
1502
+ declare class DynamicFiltersComponent implements OnInit {
1503
+ private readonly storeService;
1504
+ private readonly transloco;
1505
+ /** Dynamic filter fields configuration */
1506
+ readonly fields: _angular_core.InputSignal<DynamicFilterField[]>;
1507
+ /** Dashboard ID for store updates */
1508
+ readonly dashboardId: _angular_core.InputSignal<string | number | undefined>;
1509
+ /** Whether to show labels above filters */
1510
+ readonly showLabels: _angular_core.InputSignal<boolean>;
1511
+ /** Filter change event */
1512
+ readonly filterChange: _angular_core.OutputEmitterRef<{
1513
+ key: string;
1514
+ value: any;
1515
+ }>;
1516
+ /** All filters change event - emitted with all current values */
1517
+ readonly filtersChange: _angular_core.OutputEmitterRef<Record<string, any>>;
1518
+ /** Current filter values */
1519
+ private currentValues;
1520
+ /** Language code */
1521
+ readonly langCode: _angular_core.Signal<string>;
1522
+ /** Month options */
1523
+ readonly months: {
1524
+ value: number;
1525
+ labelEn: string;
1526
+ labelAr: string;
1527
+ }[];
1528
+ /** Quarter options */
1529
+ readonly quarters: {
1530
+ value: number;
1531
+ labelEn: string;
1532
+ labelAr: string;
1533
+ }[];
1534
+ ngOnInit(): void;
1535
+ /**
1536
+ * Get localized field label
1537
+ */
1538
+ getFieldLabel(field: DynamicFilterField): string;
1539
+ /**
1540
+ * Get localized option label
1541
+ */
1542
+ getOptionLabel(option: any): string;
1543
+ /**
1544
+ * Get selected value for a field
1545
+ */
1546
+ getSelectedValue(field: DynamicFilterField): any;
1547
+ /**
1548
+ * Get year options based on configuration
1549
+ */
1550
+ getYearOptions(field: DynamicFilterField): number[];
1551
+ /**
1552
+ * Handle field value change
1553
+ */
1554
+ onFieldChange(field: DynamicFilterField, value: any): void;
1555
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicFiltersComponent, never>;
1556
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicFiltersComponent, "mt-dynamic-filters", never, { "fields": { "alias": "fields"; "required": false; "isSignal": true; }; "dashboardId": { "alias": "dashboardId"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; }, { "filterChange": "filterChange"; "filtersChange": "filtersChange"; }, never, never, true, never>;
1557
+ }
1558
+
1559
+ interface CardInfoConfig$1 {
1560
+ show?: boolean;
1561
+ type?: 'text' | 'html';
1562
+ value?: string | {
1563
+ html?: string;
1564
+ keys?: Array<{
1565
+ key: string;
1566
+ en?: string;
1567
+ ar?: string;
1568
+ }>;
1569
+ };
1570
+ }
1571
+ declare class CardInfoComponent {
1572
+ private readonly transloco;
1573
+ readonly cardInfo: _angular_core.InputSignal<CardInfoConfig$1 | null>;
1574
+ readonly showInfo: _angular_core.Signal<string | false | {
1575
+ html?: string;
1576
+ keys?: Array<{
1577
+ key: string;
1578
+ en?: string;
1579
+ ar?: string;
1580
+ }>;
1581
+ } | undefined>;
1582
+ readonly tooltipContent: _angular_core.Signal<string>;
1583
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardInfoComponent, never>;
1584
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardInfoComponent, "mt-card-info", never, { "cardInfo": { "alias": "cardInfo"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1335
1585
  }
1336
1586
 
1337
1587
  declare class ChartCardComponent implements OnInit, OnDestroy {
@@ -1358,19 +1608,29 @@ declare class ChartCardComponent implements OnInit, OnDestroy {
1358
1608
  readonly title: _angular_core.Signal<string>;
1359
1609
  /** Show filter flag */
1360
1610
  readonly showFilter: _angular_core.Signal<any>;
1361
- /** Show top end section (filter or extra filters) */
1611
+ /** Show top end section (filter or extra filters or cardInfo or static/dynamic filters) */
1362
1612
  readonly showTopEnd: _angular_core.Signal<any>;
1613
+ /** Card info configuration */
1614
+ readonly cardInfoConfig: _angular_core.Signal<any>;
1363
1615
  /** Filter configuration */
1364
1616
  readonly filterConfig: _angular_core.Signal<{
1365
1617
  [key: string]: any;
1366
1618
  configs?: any[];
1367
1619
  } | undefined>;
1620
+ /** Static filter configuration */
1621
+ readonly staticFilterConfig: _angular_core.Signal<StaticFilterConfig | null>;
1622
+ /** Dynamic filter fields */
1623
+ readonly dynamicFilterFields: _angular_core.Signal<DynamicFilterField[]>;
1624
+ /** Show static filters */
1625
+ readonly showStaticFilters: _angular_core.Signal<boolean | undefined>;
1626
+ /** Show dynamic filters */
1627
+ readonly showDynamicFilters: _angular_core.Signal<boolean>;
1368
1628
  ngOnInit(): void;
1369
1629
  ngOnDestroy(): void;
1370
1630
  onChartClick(event: any): void;
1371
1631
  onHeaderClick(): void;
1372
1632
  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>;
1633
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartCardComponent, "mt-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
1634
  }
1375
1635
 
1376
1636
  type EChartsType = any;
@@ -1472,7 +1732,7 @@ declare class EChartComponent implements OnInit, AfterViewInit, OnChanges, OnDes
1472
1732
  */
1473
1733
  getChartInstance(): EChartsType | null;
1474
1734
  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>;
1735
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EChartComponent, "mt-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
1736
  }
1477
1737
 
1478
1738
  interface EntityData {
@@ -1573,7 +1833,11 @@ declare class EntityPreviewCardComponent implements OnInit, OnDestroy {
1573
1833
  interface StatusItem {
1574
1834
  label: string;
1575
1835
  color: string;
1576
- shape?: 'circle' | 'square';
1836
+ shape?: 'circle' | 'square' | 'rectangul' | 'rhombic' | 'rect';
1837
+ borderColor?: string;
1838
+ borderBottomColor?: string;
1839
+ iconClass?: string;
1840
+ iconSize?: number;
1577
1841
  }
1578
1842
  declare class HeaderCardComponent implements OnInit, OnDestroy {
1579
1843
  private readonly storeService;
@@ -1631,7 +1895,7 @@ declare class HeaderCardComponent implements OnInit, OnDestroy {
1631
1895
  onArrowClick(): void;
1632
1896
  onClick(): void;
1633
1897
  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>;
1898
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderCardComponent, "mt-header-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
1635
1899
  }
1636
1900
 
1637
1901
  interface LevelCardData$1 {
@@ -1729,7 +1993,7 @@ declare class ListStatisticCardComponent implements OnInit, OnDestroy {
1729
1993
  */
1730
1994
  doActions(event: any, type: string): void;
1731
1995
  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>;
1996
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListStatisticCardComponent, "mt-list-statistic-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1733
1997
  }
1734
1998
 
1735
1999
  interface SkeletonConfig {
@@ -1749,7 +2013,7 @@ declare class SkeletonCardComponent implements OnInit, OnDestroy {
1749
2013
  ngOnDestroy(): void;
1750
2014
  private getSkeletonsForComponent;
1751
2015
  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>;
2016
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonCardComponent, "mt-skeleton-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1753
2017
  }
1754
2018
 
1755
2019
  declare class StatisticCardComponent implements OnInit {
@@ -1900,7 +2164,7 @@ declare class TableCardComponent implements OnInit, OnDestroy {
1900
2164
  */
1901
2165
  onHeaderClick(): void;
1902
2166
  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>;
2167
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCardComponent, "mt-table-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "inGroup": { "alias": "inGroup"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
1904
2168
  }
1905
2169
 
1906
2170
  declare class DashboardItemStoreService {
@@ -2112,15 +2376,16 @@ declare class ChartDataService {
2112
2376
  }
2113
2377
 
2114
2378
  declare class BarChartHandler {
2379
+ private readonly storeService;
2115
2380
  /**
2116
2381
  * handleBarChart - matches functionName from CHART_TYPES
2117
2382
  * Returns ECharts option directly (exactly like old BarChartService.handleBarChart)
2118
2383
  */
2119
2384
  handleBarChart(dataResponse: any, config: ItemConfig): any;
2120
2385
  /**
2121
- * Format X axis value
2386
+ * Format X axis value using the formatXAxis utility
2122
2387
  */
2123
- private formatXAxis;
2388
+ private formatXAxisValue;
2124
2389
  /**
2125
2390
  * Apply bar override configurations
2126
2391
  */
@@ -2129,6 +2394,11 @@ declare class BarChartHandler {
2129
2394
  * Build grouped bar chart
2130
2395
  */
2131
2396
  private buildGroupedBarChart;
2397
+ /**
2398
+ * handleEntityPreviewWithFormula - matches old entityPreviewWithFormula component
2399
+ * Transforms bar chart data into entity preview format (flat array of properties)
2400
+ */
2401
+ handleEntityPreviewWithFormula(dataResponse: any, config: ItemConfig): any;
2132
2402
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartHandler, never>;
2133
2403
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<BarChartHandler>;
2134
2404
  }
@@ -2152,6 +2422,7 @@ declare class PieChartHandler {
2152
2422
  }
2153
2423
 
2154
2424
  declare class StackBarChartHandler {
2425
+ private readonly storeService;
2155
2426
  /**
2156
2427
  * Helper method to convert legend position based on language
2157
2428
  */
@@ -2226,7 +2497,7 @@ declare class OverviewCardHandler {
2226
2497
  * handleHeader - for header component
2227
2498
  * Extracts title from first value (same as old PropertiesService.handleHeader)
2228
2499
  */
2229
- handleHeader(data: any, config: ItemConfig): any;
2500
+ handleHeader(data: any, _config: ItemConfig): any;
2230
2501
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OverviewCardHandler, never>;
2231
2502
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<OverviewCardHandler>;
2232
2503
  }
@@ -2394,18 +2665,18 @@ declare class LevelCardHandler {
2394
2665
  * Returns data directly like old LevelCardService:
2395
2666
  * result?.map(data => data?.details?.map(...).sort(...))
2396
2667
  */
2397
- handlelevelCards(result: any, config: ItemConfig): any;
2668
+ handlelevelCards(result: any, _config: ItemConfig): any;
2398
2669
  /**
2399
2670
  * handlelevelCardsWithFilter - matches functionName from CHART_TYPES
2400
2671
  * Returns data directly like old LevelCardService:
2401
2672
  * [[{ data: levelProps }]]
2402
2673
  */
2403
- handlelevelCardsWithFilter(result: any, config: ItemConfig): any;
2674
+ handlelevelCardsWithFilter(result: any, _config: ItemConfig): any;
2404
2675
  /**
2405
2676
  * Handle grouped level cards (multiple selections)
2406
2677
  * Returns data directly
2407
2678
  */
2408
- handleGrouped(dataResponse: any[], config: ItemConfig): any;
2679
+ handleGrouped(dataResponse: any[], _config: ItemConfig): any;
2409
2680
  /**
2410
2681
  * Parse level cards from details array (standard API response)
2411
2682
  */
@@ -2642,10 +2913,32 @@ declare function createTooltipFormatter(config?: {
2642
2913
  }): (value: number) => string;
2643
2914
  /**
2644
2915
  * Format words with underscores for display
2916
+ * Matches old formatterWordsUnderBar from Formatters.ts
2645
2917
  * @param text - Text to format
2646
- * @param maxLength - Optional max length to truncate to
2918
+ * @param maxCharsPerLine - Max characters per line before wrapping
2919
+ * @param insideReport - When true, return full text with line breaks (no truncation)
2920
+ */
2921
+ declare function formatWordsUnderBar(text: string, maxCharsPerLine?: number, insideReport?: boolean): string;
2922
+ /**
2923
+ * Format X Axis Configuration
2924
+ */
2925
+ interface FormatXAxisConfig$1 {
2926
+ /** Format type: dateToMonth, month, date, custom */
2927
+ type?: 'dateToMonth' | 'month' | 'date' | 'custom';
2928
+ /** Use short month format (Jan vs January) */
2929
+ shortFormate?: boolean;
2930
+ /** Custom date format string (for 'date' type) */
2931
+ customDateFormat?: string;
2932
+ /** Custom text suffix (for 'custom' type) */
2933
+ customText?: string;
2934
+ }
2935
+ /**
2936
+ * Format X-axis value based on configuration
2937
+ * Matches old FormaterXAxis function from dashboardBuilder
2938
+ * @param value - The X-axis category value (typically a date string)
2939
+ * @param configFormat - Configuration object with type and format options
2647
2940
  */
2648
- declare function formatWordsUnderBar(text: string, maxLength?: number): string;
2941
+ declare function formatXAxis(value: string | Date, configFormat?: FormatXAxisConfig$1): string;
2649
2942
 
2650
2943
  /**
2651
2944
  * Chart Helpers
@@ -3022,7 +3315,10 @@ declare class DashboardStoreService {
3022
3315
  /** Language code */
3023
3316
  readonly languageCode: _angular_core.WritableSignal<string>;
3024
3317
  /** Direction */
3025
- readonly direction: _angular_core.WritableSignal<"rtl" | "ltr">;
3318
+ readonly direction: _angular_core.WritableSignal<"ltr" | "rtl">;
3319
+ /** Inside Report Viewer flag - controls text truncation in charts */
3320
+ private insideReportViewerSignal;
3321
+ readonly insideReportViewer: _angular_core.Signal<boolean>;
3026
3322
  /** Reload current page subject */
3027
3323
  private reloadCurrentPageSubject;
3028
3324
  readonly reloadCurrentPage$: rxjs.Observable<void>;
@@ -3038,6 +3334,11 @@ declare class DashboardStoreService {
3038
3334
  * Update stop actions flag
3039
3335
  */
3040
3336
  updateStopActions(value: boolean): void;
3337
+ /**
3338
+ * Set inside report viewer mode
3339
+ * When true, axis labels won't be truncated and custom legends may be skipped
3340
+ */
3341
+ setInsideReportViewer(value: boolean): void;
3041
3342
  /**
3042
3343
  * Update dynamic key in store
3043
3344
  */
@@ -3119,61 +3420,6 @@ declare class ManageBreadcrumb implements OnInit {
3119
3420
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageBreadcrumb, "mt-manage-breadcrumb", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3120
3421
  }
3121
3422
 
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
3423
  /**
3178
3424
  * Manage Filter On Page Component
3179
3425
  *
@@ -3274,6 +3520,18 @@ declare class ChartSettingsDrawer {
3274
3520
  /** The chart item signal - reactive for proper change detection */
3275
3521
  readonly item: _angular_core.WritableSignal<DashboardChartItem | null>;
3276
3522
  constructor();
3523
+ /** Active tab: 'display' or 'chartControls' */
3524
+ readonly activeTab: _angular_core.WritableSignal<string>;
3525
+ /** Tab options - always show Display, show Chart Controls only when a chart control UI exists */
3526
+ readonly tabOptions: _angular_core.Signal<{
3527
+ label: string;
3528
+ value: string;
3529
+ icon: string;
3530
+ }[]>;
3531
+ /** Resolve ChartTypeConfig from CHART_TYPES based on item config */
3532
+ readonly resolvedChartType: _angular_core.Signal<ChartTypeConfig | null>;
3533
+ /** ItemConfig computed for DisplaySettings input */
3534
+ readonly itemConfig: _angular_core.Signal<ItemConfig | null>;
3277
3535
  /** Determine the type of manage UI to show */
3278
3536
  readonly manageType: _angular_core.Signal<QuickManageType>;
3279
3537
  /** Default config (full config for DefaultControlUi) */
@@ -3296,6 +3554,8 @@ declare class ChartSettingsDrawer {
3296
3554
  onStackBarConfigChange(config: any): void;
3297
3555
  /** Update snapshot bar chart config */
3298
3556
  onSnapshotBarConfigChange(config: any): void;
3557
+ /** Update client config from DisplaySettings */
3558
+ onClientConfigUpdate(partialClientConfig: Partial<ClientConfig>): void;
3299
3559
  /** Apply changes and close drawer */
3300
3560
  apply(): void;
3301
3561
  /** Close without changes */
@@ -3304,130 +3564,605 @@ declare class ChartSettingsDrawer {
3304
3564
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartSettingsDrawer, "mt-chart-settings-drawer", never, {}, {}, never, never, true, never>;
3305
3565
  }
3306
3566
 
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;
3567
+ /** Shadow configuration */
3568
+ interface ShadowConfig {
3569
+ x: number;
3570
+ y: number;
3571
+ blur: number;
3572
+ spread: number;
3573
+ color: string;
3319
3574
  }
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>;
3575
+ /** Override label configuration */
3576
+ interface OverrideLabel {
3577
+ en: string;
3578
+ ar: string;
3334
3579
  }
3335
-
3336
- /**
3337
- * Pie Chart Configuration - Matches old implementation exactly
3338
- */
3339
- interface PieControlConfig {
3340
- radius?: number;
3341
- thickness?: number;
3342
- padAngle?: number;
3580
+ /** Card style configuration */
3581
+ interface CardStyleConfig {
3343
3582
  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;
3583
+ backgroundColor?: string;
3584
+ shadows?: ShadowConfig[];
3370
3585
  }
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: {
3586
+ /** Header card configuration */
3587
+ interface HeaderCardConfig {
3588
+ isHeaderCentered?: boolean;
3589
+ isHeaderHidden?: boolean;
3590
+ headerColor?: string;
3591
+ headerFontSize?: number;
3592
+ }
3593
+ /** Label center configuration */
3594
+ interface LabelCenterConfig {
3595
+ hide?: boolean;
3596
+ text?: {
3597
+ en?: string;
3598
+ ar?: string;
3599
+ };
3600
+ }
3601
+ /** Sort data bars configuration */
3602
+ interface SortDataBarsConfig {
3603
+ enable?: boolean;
3604
+ sortBy?: string;
3605
+ order?: 'asc' | 'desc' | string;
3606
+ direction?: 'asc' | 'desc' | string;
3607
+ }
3608
+ /** Card info configuration */
3609
+ interface CardInfoConfig {
3610
+ show?: boolean;
3611
+ value?: any;
3612
+ type?: string;
3613
+ }
3614
+ /** Format configuration */
3615
+ interface FormatConfig {
3616
+ type?: string | null;
3617
+ showCurrency?: boolean;
3618
+ handleLang?: boolean;
3619
+ customText?: string | null;
3620
+ customDateFormat?: string | null;
3621
+ showCurrencyTooltip?: boolean;
3622
+ hideSuffixes?: boolean;
3623
+ }
3624
+ /** Table format configuration */
3625
+ interface TableFormatConfig {
3626
+ thTextColor?: string | null;
3627
+ thBackgroundColor?: string | null;
3628
+ tdTextColor?: string | null;
3629
+ groupBackgroundColor?: string | null;
3630
+ groupTextColor?: string | null;
3631
+ thFontBold?: boolean;
3632
+ tdFontBold?: boolean;
3633
+ thFontSize?: number | null;
3634
+ tdFontSize?: number | null;
3635
+ hideTableSubheader?: boolean;
3636
+ disableCurrencyFormat?: boolean;
3637
+ showPercentageAsProgressBar?: boolean;
3638
+ showPercentageStatus?: boolean;
3639
+ hiddenColumns?: string[];
3640
+ sortConfig?: {
3641
+ column: string;
3642
+ direction: 'asc' | 'desc';
3643
+ };
3644
+ }
3645
+ /** Color condition configuration */
3646
+ interface ColorCondition {
3647
+ color: string;
3648
+ type: 'equal' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'between';
3649
+ value1?: number;
3650
+ value2?: number;
3651
+ labelEn?: string;
3652
+ labelAr?: string;
3653
+ }
3654
+ /** Color conditions by bar index */
3655
+ interface ColorConditionsByIndex {
3656
+ [key: number]: ColorCondition[];
3657
+ }
3658
+ /** Ring gauge configuration */
3659
+ interface RingGaugeConfig {
3660
+ centerProperty?: string;
3661
+ statusProperty?: string;
3662
+ hiddenProperties?: string[];
3663
+ }
3664
+ /** Order configuration */
3665
+ interface OrderConfig {
3666
+ order?: string[];
3667
+ operation?: string;
3668
+ orderBy?: string;
3669
+ }
3670
+ /** Card list configuration */
3671
+ interface CardListConfig {
3672
+ hideProperties?: string[];
3673
+ }
3674
+ /** Property translation entry */
3675
+ interface PropertyTranslation {
3676
+ ar: string;
3677
+ en: string;
3678
+ }
3679
+ /** Property translations map */
3680
+ interface PropertyTranslationsMap {
3681
+ [key: string]: PropertyTranslation;
3682
+ }
3683
+ /** Property color entry */
3684
+ interface PropertyColorEntry {
3685
+ selectedKey: string;
3686
+ }
3687
+ /** Property colors map */
3688
+ interface PropertyColorsMap {
3689
+ [key: string]: PropertyColorEntry;
3690
+ }
3691
+ /** Props config as index item */
3692
+ interface PropsConfigAsIndexItem {
3693
+ width?: string;
3694
+ colorAsProperty?: string;
3695
+ hidden?: boolean;
3696
+ border?: string[];
3697
+ }
3698
+ /** Format X-Axis configuration */
3699
+ interface FormatXAxisConfig {
3700
+ type?: string | null;
3701
+ shortFormate?: boolean;
3702
+ }
3703
+ /** Extra column from lookup configuration */
3704
+ interface ExtraColumnFromLookupConfig {
3705
+ extraCoulmnFromLookup?: boolean;
3706
+ lookupId?: number | null;
3707
+ groupedBy?: string | null;
3708
+ propKey?: string | null;
3709
+ }
3710
+ /** Timeline header colors config (single) */
3711
+ interface TimelineHeaderSingleConfig {
3712
+ bgColor?: string;
3713
+ color?: string;
3714
+ }
3715
+ /**
3716
+ * Display Settings Component
3717
+ *
3718
+ * Comprehensive visual/display configuration with chart-type-aware field visibility.
3719
+ * Shows only relevant settings based on the selected chart type.
3720
+ */
3721
+ declare class DisplaySettings {
3722
+ /** Current configuration */
3723
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
3724
+ /** Selected chart type */
3725
+ readonly chartType: _angular_core.InputSignal<ChartTypeConfig | null>;
3726
+ /** Available properties (for property-based configs) */
3727
+ readonly availableProperties: _angular_core.InputSignal<any[]>;
3728
+ /** Selected properties from query */
3729
+ readonly selectedProperties: _angular_core.InputSignal<string[]>;
3730
+ /** Available lookups for extra column from lookup */
3731
+ readonly lookups: _angular_core.InputSignal<any[]>;
3732
+ /** Emit client config changes */
3733
+ readonly clientConfigChange: _angular_core.OutputEmitterRef<Partial<ClientConfig>>;
3734
+ /** Color condition expansion state */
3735
+ readonly colorConditionExpanded: _angular_core.WritableSignal<Record<number, boolean>>;
3736
+ /** Property translations paste state */
3737
+ readonly showPropertyTranslationsPaste: _angular_core.WritableSignal<boolean>;
3738
+ readonly propertyTranslationsPasteText: _angular_core.WritableSignal<string>;
3739
+ readonly propertyTranslationsPasteError: _angular_core.WritableSignal<string>;
3740
+ /** Property colors paste state */
3741
+ readonly showPropertyColorsPaste: _angular_core.WritableSignal<boolean>;
3742
+ readonly propertyColorsPasteText: _angular_core.WritableSignal<string>;
3743
+ readonly propertyColorsPasteError: _angular_core.WritableSignal<string>;
3744
+ /**
3745
+ * Chart type to fields mapping
3746
+ * Each chart type maps to comma-separated list of visible fields
3747
+ */
3748
+ private readonly chartTypeFieldsMap;
3749
+ /** Computed fields to show based on chart type */
3750
+ readonly fieldsToShow: _angular_core.Signal<string>;
3751
+ /** Check if a field should be shown */
3752
+ shouldShowField(fieldName: string): boolean;
3753
+ /** Position options */
3754
+ readonly positionOptions: {
3381
3755
  label: string;
3382
3756
  value: string;
3383
3757
  }[];
3758
+ /** Legend position options */
3384
3759
  readonly legendPositionOptions: {
3385
3760
  label: string;
3386
3761
  value: string;
3387
3762
  }[];
3388
- readonly legendVerticalAlignOptions: {
3763
+ /** Legend icon type options */
3764
+ readonly legendIconOptions: {
3389
3765
  label: string;
3390
3766
  value: string;
3391
3767
  }[];
3392
- readonly legendOrientationOptions: {
3768
+ /** Label position options */
3769
+ readonly labelPositionOptions: {
3393
3770
  label: string;
3394
3771
  value: string;
3395
3772
  }[];
3396
- readonly legendTypeOptions: {
3773
+ /** Map options */
3774
+ readonly mapOptions: {
3397
3775
  label: string;
3398
3776
  value: string;
3399
3777
  }[];
3400
- readonly legendIconOptions: {
3778
+ /** Order type options */
3779
+ readonly orderTypeOptions: {
3401
3780
  label: string;
3402
3781
  value: string;
3403
3782
  }[];
3404
- readonly labelFormatterOptions: {
3783
+ /** Order operation options */
3784
+ readonly orderOperationOptions: {
3405
3785
  label: string;
3406
3786
  value: string;
3407
3787
  }[];
3408
- readonly tooltipTriggerOptions: {
3788
+ /** Border options for props config */
3789
+ readonly borderOptions: {
3409
3790
  label: string;
3410
3791
  value: string;
3411
3792
  }[];
3412
- readonly fontSizeOptions: {
3793
+ /** Color condition type options */
3794
+ readonly colorConditionTypeOptions: {
3413
3795
  label: string;
3414
- value: number;
3796
+ value: string;
3415
3797
  }[];
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';
3798
+ /** Format type options */
3799
+ readonly formatTypeOptions: ({
3800
+ label: string;
3801
+ value: null;
3802
+ } | {
3803
+ label: string;
3804
+ value: string;
3805
+ })[];
3806
+ /** Format X-Axis type options */
3807
+ readonly formatXAxisTypeOptions: ({
3808
+ label: string;
3809
+ value: null;
3810
+ } | {
3811
+ label: string;
3812
+ value: string;
3813
+ })[];
3814
+ /** Default color palette */
3815
+ readonly defaultColorPalette: string[];
3816
+ /** Current style config */
3817
+ readonly styleConfig: _angular_core.Signal<StyleConfig>;
3818
+ /** Current config as type */
3819
+ readonly configAsType: _angular_core.Signal<{
3820
+ [key: string]: any;
3821
+ icon?: string;
3822
+ breadcrumb?: any[];
3823
+ }>;
3824
+ /** Current card info */
3825
+ readonly cardInfo: _angular_core.Signal<CardInfoConfig>;
3826
+ /** Current header card config */
3827
+ readonly headerCardConfig: _angular_core.Signal<HeaderCardConfig>;
3828
+ /** Current card style config */
3829
+ readonly cardStyleConfig: _angular_core.Signal<CardStyleConfig>;
3830
+ /** Current label config */
3831
+ readonly labelConfig: _angular_core.Signal<{
3832
+ show?: boolean;
3833
+ showTotalInTop?: boolean;
3834
+ position?: string;
3835
+ }>;
3836
+ /** Current legend config */
3837
+ readonly legendConfig: _angular_core.Signal<{
3838
+ show?: boolean;
3839
+ position?: string;
3840
+ iconType?: string;
3841
+ }>;
3842
+ /** Current label center config */
3843
+ readonly labelCenterConfig: _angular_core.Signal<LabelCenterConfig>;
3844
+ /** Current sort data bars config */
3845
+ readonly sortDataBarsConfig: _angular_core.Signal<SortDataBarsConfig>;
3846
+ /** Current override labels */
3847
+ readonly overrideLabels: _angular_core.Signal<OverrideLabel[]>;
3848
+ /** Current default colors */
3849
+ readonly defaultColors: _angular_core.Signal<string[]>;
3850
+ /** Current order config */
3851
+ readonly orderConfig: _angular_core.Signal<any>;
3852
+ /** Current format config */
3853
+ readonly formatConfig: _angular_core.Signal<FormatConfig>;
3854
+ /** Current table format config */
3855
+ readonly tableFormatConfig: _angular_core.Signal<TableFormatConfig>;
3856
+ /** Current color by condition */
3857
+ readonly colorByCondition: _angular_core.Signal<ColorConditionsByIndex>;
3858
+ /** Current ring gauge config */
3859
+ readonly ringGaugeConfig: _angular_core.Signal<RingGaugeConfig>;
3860
+ /** Current card list config */
3861
+ readonly cardListConfig: _angular_core.Signal<CardListConfig>;
3862
+ /** Props config as index */
3863
+ readonly propsConfigAsIndex: _angular_core.Signal<PropsConfigAsIndexItem[]>;
3864
+ /** Property translations map */
3865
+ readonly propertyTranslations: _angular_core.Signal<PropertyTranslationsMap>;
3866
+ /** Property colors map */
3867
+ readonly propertyColors: _angular_core.Signal<PropertyColorsMap>;
3868
+ /** Format X-Axis config */
3869
+ readonly formatXAxisConfig: _angular_core.Signal<FormatXAxisConfig>;
3870
+ /** Table columns config (extra column from lookup) */
3871
+ readonly tableColumnsConfig: _angular_core.Signal<ExtraColumnFromLookupConfig>;
3872
+ /** Timeline header colors config (single object for old format) */
3873
+ readonly timelineHeaderColorsSingle: _angular_core.Signal<TimelineHeaderSingleConfig>;
3874
+ /** Toggle association */
3875
+ readonly toggleAssociation: _angular_core.Signal<boolean>;
3876
+ /** Selected properties resolved from input or config */
3877
+ readonly resolvedSelectedProperties: _angular_core.Signal<any[]>;
3878
+ /** Available properties resolved from input or selected properties */
3879
+ readonly resolvedAvailableProperties: _angular_core.Signal<any[]>;
3880
+ /** Available properties as options */
3881
+ readonly propertyOptions: _angular_core.Signal<{
3882
+ label: any;
3883
+ value: any;
3884
+ }[]>;
3885
+ /** Available translation options (exclude used) */
3886
+ readonly availableTranslationOptions: _angular_core.Signal<{
3887
+ label: any;
3888
+ value: any;
3889
+ }[]>;
3890
+ /** Available color options (exclude used) */
3891
+ readonly availableColorOptions: _angular_core.Signal<{
3892
+ label: any;
3893
+ value: any;
3894
+ }[]>;
3895
+ /** All property options (full list) */
3896
+ readonly allPropertyKeyOptions: _angular_core.Signal<{
3897
+ label: any;
3898
+ value: any;
3899
+ }[]>;
3900
+ /** Ring gauge hidden properties options */
3901
+ readonly ringGaugeHiddenOptions: _angular_core.Signal<{
3902
+ label: any;
3903
+ value: any;
3904
+ }[]>;
3905
+ /** Update style config property */
3906
+ updateStyleConfig(key: keyof StyleConfig | string, value: any): void;
3907
+ /** Update configAsType property */
3908
+ updateConfigAsType(key: string, value: any): void;
3909
+ /** Update nested configAsType property */
3910
+ updateNestedConfigAsType(parentKey: string, key: string, value: any): void;
3911
+ /** Update header card config */
3912
+ updateHeaderCardConfig(key: keyof HeaderCardConfig, value: any): void;
3913
+ /** Update legend settings */
3914
+ updateLegend(key: string, value: unknown): void;
3915
+ /** Update label settings */
3916
+ updateLabel(key: string, value: unknown): void;
3917
+ /** Update label center config */
3918
+ updateLabelCenterConfig(key: string, value: any): void;
3919
+ /** Update label center text */
3920
+ updateLabelCenterText(lang: 'en' | 'ar', value: string): void;
3921
+ /** Update card style config */
3922
+ updateCardStyleConfig(key: keyof CardStyleConfig, value: any): void;
3923
+ /** Update sort data bars config */
3924
+ updateSortDataBarsConfig(key: string, value: any): void;
3925
+ /** Update card info config */
3926
+ updateCardInfoConfig(key: string, value: any): void;
3927
+ /** Update border top visibility */
3928
+ updateBorderTopShow(show: boolean): void;
3929
+ /** Update border top color */
3930
+ updateBorderTopColor(color: string): void;
3931
+ /** Update map type */
3932
+ updateMapType(value: string): void;
3933
+ /** Add a new shadow */
3934
+ addShadow(): void;
3935
+ /** Remove a shadow */
3936
+ removeShadow(index: number): void;
3937
+ /** Update a shadow property */
3938
+ updateShadow(index: number, key: keyof ShadowConfig, value: any): void;
3939
+ /** Add override label */
3940
+ addOverrideLabel(): void;
3941
+ /** Remove override label */
3942
+ removeOverrideLabel(index: number): void;
3943
+ /** Update override label */
3944
+ updateOverrideLabel(index: number, lang: 'en' | 'ar', value: string): void;
3945
+ /** Add a default color */
3946
+ addDefaultColor(color: string): void;
3947
+ /** Remove a default color */
3948
+ removeDefaultColor(index: number): void;
3949
+ /** Update a default color */
3950
+ updateDefaultColor(index: number, color: string): void;
3951
+ trackByIndex(index: number): number;
3952
+ /** Update format config */
3953
+ updateFormatConfig(key: keyof FormatConfig, value: any): void;
3954
+ /** Update table format config */
3955
+ updateTableFormatConfig(key: keyof TableFormatConfig, value: any): void;
3956
+ /** Update table format sort config */
3957
+ updateTableFormatSortConfig(key: 'column' | 'direction', value: string): void;
3958
+ /** Reset table format to default */
3959
+ resetTableFormat(): void;
3960
+ /** Get color condition indexes */
3961
+ getColorConditionIndexes(): number[];
3962
+ /** Check if a bar index is expanded */
3963
+ isColorConditionExpanded(index: number): boolean;
3964
+ /** Toggle bar index expansion */
3965
+ toggleColorConditionExpanded(index: number): void;
3966
+ /** Add bar index for color conditions */
3967
+ addColorConditionIndex(): void;
3968
+ /** Remove bar index */
3969
+ removeColorConditionIndex(index: number): void;
3970
+ /** Add condition to bar index */
3971
+ addColorCondition(index: number): void;
3972
+ /** Remove condition from bar index */
3973
+ removeColorCondition(index: number, conditionIndex: number): void;
3974
+ /** Update color condition */
3975
+ updateColorCondition(index: number, conditionIndex: number, key: keyof ColorCondition, value: any): void;
3976
+ /** Update ring gauge config */
3977
+ updateRingGaugeConfig(key: keyof RingGaugeConfig, value: any): void;
3978
+ /** Update card list hide properties */
3979
+ updateCardListHideProperties(properties: string[]): void;
3980
+ /** Add props config item */
3981
+ addPropsConfigItem(): void;
3982
+ /** Remove props config item */
3983
+ removePropsConfigItem(index: number): void;
3984
+ /** Update props config item */
3985
+ updatePropsConfigItem(index: number, key: keyof PropsConfigAsIndexItem, value: any): void;
3986
+ /** Update order config field */
3987
+ updateOrderConfig(key: keyof OrderConfig, value: any): void;
3988
+ /** Add order item */
3989
+ addOrderItem(): void;
3990
+ /** Remove order item */
3991
+ removeOrderItem(index: number): void;
3992
+ /** Update order item */
3993
+ updateOrderItem(index: number, value: string): void;
3994
+ /** Move order item up */
3995
+ moveOrderItemUp(index: number): void;
3996
+ /** Move order item down */
3997
+ moveOrderItemDown(index: number): void;
3998
+ /** Get property translation keys */
3999
+ getPropertyTranslationKeys(): string[];
4000
+ /** Add property translation */
4001
+ addPropertyTranslation(propertyKey: string): void;
4002
+ /** Remove property translation */
4003
+ removePropertyTranslation(propertyKey: string): void;
4004
+ /** Update property translation */
4005
+ updatePropertyTranslation(propertyKey: string, lang: 'ar' | 'en', value: string): void;
4006
+ /** Get property color keys */
4007
+ getPropertyColorKeys(): string[];
4008
+ /** Add property color */
4009
+ addPropertyColor(propertyKey: string): void;
4010
+ /** Copy property translations */
4011
+ copyPropertyTranslations(): void;
4012
+ /** Toggle property translations paste area */
4013
+ togglePropertyTranslationsPaste(): void;
4014
+ /** Apply pasted property translations */
4015
+ applyPropertyTranslationsPaste(): void;
4016
+ /** Remove property color */
4017
+ removePropertyColor(propertyKey: string): void;
4018
+ /** Update property color */
4019
+ updatePropertyColor(propertyKey: string, selectedKey: string): void;
4020
+ /** Copy property colors */
4021
+ copyPropertyColors(): void;
4022
+ /** Toggle property colors paste area */
4023
+ togglePropertyColorsPaste(): void;
4024
+ /** Apply pasted property colors */
4025
+ applyPropertyColorsPaste(): void;
4026
+ /** Update format X-Axis config */
4027
+ updateFormatXAxisConfig(key: keyof FormatXAxisConfig, value: any): void;
4028
+ /** Update table columns config */
4029
+ updateTableColumnsConfig(key: keyof ExtraColumnFromLookupConfig, value: any): void;
4030
+ /** Update timeline header colors (single config) */
4031
+ updateTimelineHeaderColorSingle(key: 'bgColor' | 'color', value: string): void;
4032
+ /** Update toggle association */
4033
+ updateToggleAssociation(value: boolean): void;
4034
+ /** Selected property for adding translations */
4035
+ readonly selectedPropertyForTranslation: _angular_core.WritableSignal<string>;
4036
+ /** Selected property for adding colors */
4037
+ readonly selectedPropertyForColor: _angular_core.WritableSignal<string>;
4038
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DisplaySettings, never>;
4039
+ 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>;
4040
+ }
4041
+
4042
+ interface DefaultControlConfig {
4043
+ title: string;
4044
+ titleFontSize: number;
4045
+ titleColor: string;
4046
+ showSubtitle: boolean;
4047
+ subtitle: string;
4048
+ subtitleFontSize: number;
4049
+ subtitleColor: string;
4050
+ backgroundColor: string;
4051
+ borderColor: string;
4052
+ borderRadius: number;
4053
+ padding: number;
4054
+ }
4055
+ declare class DefaultControlUi implements ControlValueAccessor {
4056
+ readonly config: _angular_core.WritableSignal<DefaultControlConfig>;
4057
+ readonly fontSizeOptions: {
4058
+ label: string;
4059
+ value: number;
4060
+ }[];
4061
+ private onChange;
4062
+ private onTouched;
4063
+ writeValue(value: DefaultControlConfig): void;
4064
+ registerOnChange(fn: (value: DefaultControlConfig) => void): void;
4065
+ registerOnTouched(fn: () => void): void;
4066
+ updateConfig(partial: Partial<DefaultControlConfig>): void;
4067
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DefaultControlUi, never>;
4068
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DefaultControlUi, "mt-default-control-ui", never, {}, {}, never, never, true, never>;
4069
+ }
4070
+
4071
+ /**
4072
+ * Pie Chart Configuration - Matches old implementation exactly
4073
+ */
4074
+ interface PieControlConfig {
4075
+ radius?: number;
4076
+ thickness?: number;
4077
+ padAngle?: number;
4078
+ borderRadius?: number;
4079
+ centerX?: number;
4080
+ centerY?: number;
4081
+ startAngle?: number;
4082
+ endAngle?: number;
4083
+ roseType?: boolean | 'radius' | 'area';
4084
+ useEnhancedLegend?: boolean;
4085
+ legendPosition?: 'left' | 'right' | 'top' | 'bottom';
4086
+ legendVerticalAlign?: 'top' | 'middle' | 'bottom';
4087
+ legendOrientation?: 'horizontal' | 'vertical';
4088
+ legendType?: 'scroll' | 'plain';
4089
+ legendFontSize?: number;
4090
+ legendFontColor?: string;
4091
+ legendIcon?: string;
4092
+ labelFontSize?: number;
4093
+ totalValueFontSize?: number;
4094
+ labelFontColor?: string;
4095
+ labelFormatter?: string;
4096
+ tooltipTrigger?: 'item' | 'axis' | 'none';
4097
+ labelPosition?: string;
4098
+ showLabelLine?: boolean;
4099
+ explode?: number;
4100
+ animation?: boolean;
4101
+ animationDuration?: number;
4102
+ tooltipBackgroundColor?: string;
4103
+ tooltipBorderColor?: string;
4104
+ tooltipBorderWidth?: number;
4105
+ }
4106
+ declare class PieControlUi implements ControlValueAccessor {
4107
+ readonly config: _angular_core.WritableSignal<PieControlConfig>;
4108
+ readonly roseTypeOptions: ({
4109
+ label: string;
4110
+ value: boolean;
4111
+ } | {
4112
+ label: string;
4113
+ value: string;
4114
+ })[];
4115
+ readonly labelPositionOptions: {
4116
+ label: string;
4117
+ value: string;
4118
+ }[];
4119
+ readonly legendPositionOptions: {
4120
+ label: string;
4121
+ value: string;
4122
+ }[];
4123
+ readonly legendVerticalAlignOptions: {
4124
+ label: string;
4125
+ value: string;
4126
+ }[];
4127
+ readonly legendOrientationOptions: {
4128
+ label: string;
4129
+ value: string;
4130
+ }[];
4131
+ readonly legendTypeOptions: {
4132
+ label: string;
4133
+ value: string;
4134
+ }[];
4135
+ readonly legendIconOptions: {
4136
+ label: string;
4137
+ value: string;
4138
+ }[];
4139
+ readonly labelFormatterOptions: {
4140
+ label: string;
4141
+ value: string;
4142
+ }[];
4143
+ readonly tooltipTriggerOptions: {
4144
+ label: string;
4145
+ value: string;
4146
+ }[];
4147
+ readonly fontSizeOptions: {
4148
+ label: string;
4149
+ value: number;
4150
+ }[];
4151
+ private onChange;
4152
+ private onTouched;
4153
+ writeValue(value: PieControlConfig): void;
4154
+ registerOnChange(fn: (value: PieControlConfig) => void): void;
4155
+ registerOnTouched(fn: () => void): void;
4156
+ updateConfig(partial: Partial<PieControlConfig>): void;
4157
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieControlUi, never>;
4158
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieControlUi, "mt-pie-control-ui", never, {}, {}, never, never, true, never>;
4159
+ }
4160
+
4161
+ interface BarControlConfig {
4162
+ barWidth?: number;
4163
+ barGap?: number;
4164
+ barCategoryGap?: number;
4165
+ barType?: 'bar' | 'line';
3431
4166
  xAxisShow?: boolean;
3432
4167
  yAxisShow?: boolean;
3433
4168
  yAxisFormat?: string;
@@ -3522,926 +4257,449 @@ interface StackBarControlConfig {
3522
4257
  isStacked?: boolean;
3523
4258
  borderRadius?: string | number;
3524
4259
  }
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: {
4260
+ declare class StackBarControlUi implements ControlValueAccessor {
4261
+ readonly config: _angular_core.WritableSignal<StackBarControlConfig>;
4262
+ readonly legendPositionYOptions: {
4263
+ label: string;
3772
4264
  value: string;
4265
+ }[];
4266
+ readonly legendPositionXOptions: {
3773
4267
  label: string;
4268
+ value: string;
4269
+ }[];
4270
+ readonly barTypeOptions: {
4271
+ label: string;
4272
+ value: string;
4273
+ }[];
4274
+ readonly yAxisFormatOptions: ({
4275
+ label: string;
4276
+ value: null;
4277
+ } | {
4278
+ label: string;
4279
+ value: string;
4280
+ })[];
4281
+ readonly fontSizeOptions: {
4282
+ label: string;
4283
+ value: number;
3774
4284
  }[];
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
4285
  private onChange;
3786
4286
  private onTouched;
3787
- constructor();
3788
- writeValue(value: TableQueryValue): void;
3789
- registerOnChange(fn: (value: TableQueryValue) => void): void;
4287
+ writeValue(value: StackBarControlConfig): void;
4288
+ registerOnChange(fn: (value: StackBarControlConfig) => void): void;
3790
4289
  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>;
4290
+ updateConfig(partial: Partial<StackBarControlConfig>): void;
4291
+ onYAxisFormatChange(formatType: string | null): void;
4292
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackBarControlUi, never>;
4293
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StackBarControlUi, "mt-stack-bar-control-ui", never, {}, {}, never, never, true, never>;
3800
4294
  }
3801
4295
 
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
4296
  /**
3818
- * Data Source Settings Component
4297
+ * Manage Item Component (Drawer)
3819
4298
  *
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.)
4299
+ * Main drawer component for configuring chart/widget items.
4300
+ * Uses tabs to organize different configuration sections.
4301
+ * Provides ManageItemService for state sharing between child components.
3824
4302
  */
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;
4303
+ declare class ManageItem implements OnInit {
4304
+ private _dashboardService;
4305
+ private _manageItemService;
4306
+ private _dialogConfig;
4307
+ readonly modal: ModalService;
4308
+ ref: ModalRef<any> | null;
4309
+ /** Input data from drawer - supports both input() and dialog data */
4310
+ readonly data: _angular_core.InputSignal<{
4311
+ chart?: DashboardChartItem;
4312
+ isDialog?: boolean;
4313
+ isNew?: boolean;
4314
+ chartType?: ChartTypeConfig;
4315
+ defaultSize?: {
4316
+ cols: number;
4317
+ rows: number;
4318
+ };
4319
+ } | null>;
4320
+ /** Whether chart type is pre-selected (hides type selection) */
4321
+ readonly hasPreselectedType: _angular_core.Signal<boolean>;
4322
+ /** Tab options with translation keys */
4323
+ readonly tabOptions: _angular_core.WritableSignal<{
3860
4324
  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;
4325
+ value: string;
4326
+ icon: string;
3875
4327
  }[]>;
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;
4328
+ /** Active tab */
4329
+ readonly activeTab: _angular_core.WritableSignal<string>;
4330
+ /** Chart configuration being edited - from service */
4331
+ readonly config: _angular_core.Signal<ItemConfig | null>;
4332
+ /** Chart type ID - from service */
4333
+ readonly chartTypeId: _angular_core.Signal<string>;
4334
+ /** Selected chart type info */
4335
+ readonly selectedChartType: _angular_core.WritableSignal<ChartTypeConfig | null>;
4336
+ /** Is this a dialog item */
4337
+ readonly isDialog: _angular_core.Signal<any>;
4338
+ /** Is this a new item */
4339
+ readonly isNew: _angular_core.Signal<any>;
4340
+ /** Saving state */
4341
+ readonly saving: _angular_core.WritableSignal<boolean>;
4342
+ /** Validation state */
4343
+ readonly isValid: _angular_core.Signal<boolean>;
4344
+ ngOnInit(): void;
4345
+ save(): void;
4346
+ cancel(): void;
4347
+ /** Update config from child components */
4348
+ onConfigUpdate(partialConfig: Partial<ItemConfig>): void;
4349
+ /** Update service config */
4350
+ onServiceConfigUpdate(partialConfig: Partial<ItemConfig['serviceConfig']>): void;
4351
+ /** Update client config */
4352
+ onClientConfigUpdate(partialConfig: Partial<ItemConfig['clientConfig']>): void;
4353
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageItem, never>;
4354
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageItem, "mt-manage-item", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4355
+ }
4356
+
4357
+ /**
4358
+ * General Settings Component
4359
+ *
4360
+ * Handles general chart configuration:
4361
+ * - Chart type selection (visual grid)
4362
+ * - Title (English & Arabic)
4363
+ * - Component name
4364
+ */
4365
+ declare class GeneralSettings {
4366
+ private transloco;
4367
+ /** Current configuration */
4368
+ readonly config: _angular_core.InputSignal<ItemConfig | null>;
4369
+ /** Is dialog item (hides chart type selection) */
4370
+ readonly isDialog: _angular_core.InputSignal<boolean>;
4371
+ /** Whether chart type is pre-selected (hides chart type selection) */
4372
+ readonly hasPreselectedType: _angular_core.InputSignal<boolean>;
4373
+ /** Emit config changes */
4374
+ readonly configChange: _angular_core.OutputEmitterRef<Partial<ItemConfig>>;
4375
+ /** Emit chart type selection */
4376
+ readonly chartTypeChange: _angular_core.OutputEmitterRef<ChartTypeConfig>;
4377
+ /** All available chart types */
4378
+ readonly chartTypes: _angular_core.WritableSignal<ChartTypeConfig[]>;
4379
+ /** Chart types filtered (not hidden) */
4380
+ readonly chartTypesFiltered: _angular_core.Signal<ChartTypeConfig[]>;
4381
+ /** Grouped chart types by category */
4382
+ readonly chartTypesByCategory: _angular_core.Signal<{
4383
+ card: ChartTypeConfig[];
4384
+ chart: ChartTypeConfig[];
4385
+ table: ChartTypeConfig[];
4386
+ special: ChartTypeConfig[];
4387
+ layout: ChartTypeConfig[];
4388
+ }>;
4389
+ /** Currently selected chart type */
4390
+ readonly selectedChartType: _angular_core.Signal<ChartTypeConfig | null | undefined>;
3948
4391
  /**
3949
- * Handle repeater dashboard selection
4392
+ * Select a chart type
3950
4393
  */
3951
- onRepeaterDashboardChange(dashboardId: number): void;
4394
+ selectChartType(type: ChartTypeConfig): void;
3952
4395
  /**
3953
- * Handle isNormalized change
4396
+ * Check if a chart type is selected
3954
4397
  */
3955
- onIsNormalizedChange(value: boolean): void;
4398
+ isTypeSelected(type: ChartTypeConfig): boolean;
3956
4399
  /**
3957
- * Handle tab change
4400
+ * Update title field
3958
4401
  */
3959
- onTabChange(tabId: string): void;
4402
+ updateTitle(lang: 'en' | 'ar', value: string): void;
3960
4403
  /**
3961
- * Handle custom API change
4404
+ * Update component name
3962
4405
  */
3963
- onCustomApiChange(customApi: CustomApi | null): void;
4406
+ updateComponentName(value: string): void;
3964
4407
  /**
3965
- * Get chart type id for query component
4408
+ * Get category label
3966
4409
  */
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>;
4410
+ getCategoryLabel(category: string): string;
4411
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GeneralSettings, never>;
4412
+ 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>;
3970
4413
  }
3971
4414
 
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
- };
4415
+ /**
4416
+ * Selection module info for linking - includes properties for each selection
4417
+ */
4418
+ interface SelectionModule {
4419
+ selectionId: number;
4420
+ selector: string;
4421
+ moduleType: string;
4422
+ moduleTypeName: string;
4423
+ moduleName: string;
4424
+ properties: IProperty[];
4049
4425
  }
4050
- /** Color condition configuration */
4051
- interface ColorCondition {
4426
+
4427
+ /**
4428
+ * Chart Query Series
4429
+ */
4430
+ interface ChartQuerySeries {
4431
+ key: string;
4052
4432
  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;
4433
+ valueProperty: string | null;
4434
+ aggregateFunction: string;
4435
+ groupByProperties: string[];
4436
+ autoStack: boolean;
4437
+ stackProperties: string[];
4438
+ autoStackByProperty: string | null;
4439
+ filters: ChartQuerySeriesFilter[];
4440
+ extraProperties: string[];
4441
+ formula?: string;
4442
+ showAdvancedSettings?: boolean;
4443
+ barType?: 'bar' | 'line' | 'lineAccumulated';
4083
4444
  }
4084
- /** Property translations map */
4085
- interface PropertyTranslationsMap {
4086
- [key: string]: PropertyTranslation;
4445
+ /**
4446
+ * Chart Query Series Filter
4447
+ */
4448
+ interface ChartQuerySeriesFilter {
4449
+ propertyKey: string | null;
4450
+ value: any;
4451
+ operator: string;
4087
4452
  }
4088
- /** Property color entry */
4089
- interface PropertyColorEntry {
4090
- selectedKey: string;
4453
+ /**
4454
+ * Chart Query Configuration
4455
+ */
4456
+ interface ChartQuery {
4457
+ categoryProperty: string;
4458
+ series: ChartQuerySeries[];
4091
4459
  }
4092
- /** Property colors map */
4093
- interface PropertyColorsMap {
4094
- [key: string]: PropertyColorEntry;
4460
+
4461
+ /** Properties grouped by module for select with [group]="true" */
4462
+ interface PropertyGroup {
4463
+ label: string;
4464
+ items: IProperty[];
4095
4465
  }
4096
- /** Props config as index item */
4097
- interface PropsConfigAsIndexItem {
4098
- width?: string;
4099
- colorAsProperty?: string;
4100
- hidden?: boolean;
4101
- border?: string[];
4466
+ /**
4467
+ * Aggregation Property Configuration
4468
+ */
4469
+ interface AggregationProperty {
4470
+ propertyKey: string | null;
4471
+ aggregateFunction: string;
4472
+ alias?: string;
4102
4473
  }
4103
- /** Format X-Axis configuration */
4104
- interface FormatXAxisConfig {
4105
- type?: string | null;
4106
- shortFormate?: boolean;
4474
+ /**
4475
+ * Table Query Configuration Value
4476
+ */
4477
+ interface TableQueryValue {
4478
+ selectedProperties: string[];
4479
+ AggregationProperties: AggregationProperty[];
4480
+ lookupProperty: string;
4481
+ PivotProperties: string[];
4107
4482
  }
4108
- /** Extra column from lookup configuration */
4109
- interface ExtraColumnFromLookupConfig {
4110
- extraCoulmnFromLookup?: boolean;
4111
- lookupId?: number | null;
4112
- groupedBy?: string | null;
4113
- propKey?: string | null;
4483
+ /**
4484
+ * Table Query Component
4485
+ *
4486
+ * Handles query configuration for table/dialog chart types.
4487
+ * Implements ControlValueAccessor for form integration.
4488
+ */
4489
+ declare class TableQuery implements ControlValueAccessor {
4490
+ private fb;
4491
+ /** Available properties (flat) */
4492
+ readonly propertiesFlat: _angular_core.InputSignal<IProperty[]>;
4493
+ /** Properties grouped by module for grouped select */
4494
+ readonly propertiesGrouped: _angular_core.InputSignal<PropertyGroup[]>;
4495
+ /** Whether to use grouped select (when multiple modules) */
4496
+ readonly useGroupedSelect: _angular_core.Signal<boolean>;
4497
+ /** Options config for multi-select */
4498
+ readonly optionsConfig: _angular_core.Signal<{
4499
+ optionValue: string;
4500
+ optionLabel: string;
4501
+ items: IProperty[];
4502
+ }>;
4503
+ /** Aggregate function options */
4504
+ readonly aggregateFunctions: {
4505
+ value: string;
4506
+ label: string;
4507
+ }[];
4508
+ /** Main form */
4509
+ readonly queryForm: FormGroup<{
4510
+ selectedProperties: _angular_forms.FormControl<string[] | null>;
4511
+ AggregationProperties: FormArray<FormGroup<any>>;
4512
+ lookupProperty: _angular_forms.FormControl<string | null>;
4513
+ PivotProperties: _angular_forms.FormControl<string[] | null>;
4514
+ }>;
4515
+ /** Disabled state */
4516
+ disabled: boolean;
4517
+ /** ControlValueAccessor callbacks */
4518
+ private onChange;
4519
+ private onTouched;
4520
+ constructor();
4521
+ writeValue(value: TableQueryValue): void;
4522
+ registerOnChange(fn: (value: TableQueryValue) => void): void;
4523
+ registerOnTouched(fn: () => void): void;
4524
+ setDisabledState(isDisabled: boolean): void;
4525
+ validate(): ValidationErrors | null;
4526
+ get aggregationArray(): FormArray;
4527
+ createAggregationFormGroup(agg?: Partial<AggregationProperty>): FormGroup;
4528
+ addAggregation(): void;
4529
+ removeAggregation(index: number): void;
4530
+ trackByIndex(index: number): number;
4531
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableQuery, never>;
4532
+ 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>;
4114
4533
  }
4115
- /** Timeline header colors config (single) */
4116
- interface TimelineHeaderSingleConfig {
4117
- bgColor?: string;
4118
- color?: string;
4534
+
4535
+ /** Module properties response */
4536
+ interface ModuleProperties {
4537
+ /** Module type (e.g., "Level") */
4538
+ moduleName: string;
4539
+ /** Display name for the specific selector (e.g., "Projects" for "Level:7") */
4540
+ selectorName: string | null;
4541
+ /** Full selector (e.g., "Level:7") */
4542
+ selector: string;
4543
+ moduleId?: number;
4544
+ properties: IProperty[];
4119
4545
  }
4120
4546
  /**
4121
- * Display Settings Component
4547
+ * Query component type based on chart type and component name
4548
+ */
4549
+ type QueryComponentType = 'general' | 'table' | 'timeline' | 'timelineMultiLevel' | 'map' | 'splitter' | 'properties' | 'snapshot' | 'phaseGate' | 'repeater' | 'none';
4550
+ /**
4551
+ * Data Source Settings Component
4122
4552
  *
4123
- * Comprehensive visual/display configuration with chart-type-aware field visibility.
4124
- * Shows only relevant settings based on the selected chart type.
4553
+ * Comprehensive data source configuration:
4554
+ * - Module/Data source selection via SelectionConfiguration
4555
+ * - Source links for multiple selections via SourceLinkConfiguration
4556
+ * - Query configuration based on chart type (GeneralQuery, TableQuery, etc.)
4125
4557
  */
4126
- declare class DisplaySettings {
4558
+ declare class DataSourceSettings {
4559
+ private dashboardService;
4127
4560
  /** Current configuration */
4128
4561
  readonly config: _angular_core.InputSignal<ItemConfig | null>;
4129
4562
  /** Selected chart type */
4130
4563
  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>;
4564
+ /** Emit service config changes */
4565
+ readonly serviceConfigChange: _angular_core.OutputEmitterRef<Partial<ServiceConfig>>;
4566
+ /** Properties grouped by module */
4567
+ readonly modulesProperties: _angular_core.WritableSignal<ModuleProperties[]>;
4568
+ /** Flattened properties list with grouping info */
4569
+ readonly propertiesFlat: _angular_core.Signal<IPropertyWithGroup[]>;
4149
4570
  /**
4150
- * Chart type to fields mapping
4151
- * Each chart type maps to comma-separated list of visible fields
4571
+ * Properties grouped for select field with [group]="true"
4572
+ * Structure: [{ label: 'Projects', items: [{ name, key }, ...] }, ...]
4573
+ * Uses selectorName for display (e.g., "Projects" instead of "Level")
4152
4574
  */
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
- } | {
4575
+ readonly propertiesGrouped: _angular_core.Signal<{
4216
4576
  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;
4577
+ items: IProperty[];
4304
4578
  }[]>;
4305
- /** Ring gauge hidden properties options */
4306
- readonly ringGaugeHiddenOptions: _angular_core.Signal<{
4307
- label: any;
4308
- value: any;
4579
+ /**
4580
+ * Selection modules for source link configuration
4581
+ * Built from selections with their loaded module info
4582
+ */
4583
+ readonly selectionModules: _angular_core.Signal<SelectionModule[]>;
4584
+ /** Query component type based on chart type and component name */
4585
+ readonly queryComponentType: _angular_core.Signal<QueryComponentType>;
4586
+ /** Loading states */
4587
+ readonly loadingProperties: _angular_core.WritableSignal<boolean>;
4588
+ /** Tab state: 'selection' or 'customApi' */
4589
+ readonly activeTab: _angular_core.WritableSignal<"selection" | "customApi">;
4590
+ /** Tab options for display */
4591
+ readonly tabOptions: {
4592
+ id: string;
4593
+ label: string;
4594
+ }[];
4595
+ /** Custom API configuration */
4596
+ readonly customApi: _angular_core.WritableSignal<CustomApi | null>;
4597
+ /** Internal selections state */
4598
+ readonly selections: _angular_core.WritableSignal<ISelection[]>;
4599
+ readonly sourceLinks: _angular_core.WritableSignal<SourceLink[]>;
4600
+ readonly query: _angular_core.WritableSignal<any>;
4601
+ readonly isNormalized: _angular_core.WritableSignal<boolean>;
4602
+ readonly groupByMultiple: _angular_core.WritableSignal<string[]>;
4603
+ /** Repeater dashboard selection */
4604
+ readonly repeaterDashboardId: _angular_core.WritableSignal<number | null>;
4605
+ readonly availableDashboards: _angular_core.WritableSignal<{
4606
+ id: number;
4607
+ name: string;
4309
4608
  }[]>;
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>;
4609
+ /** Show source links when multiple selections exist */
4610
+ readonly showSourceLinks: _angular_core.Signal<boolean>;
4611
+ /** Hide selection config for layout, snapshot, phaseGate types (they don't need data source selection) */
4612
+ readonly hideSelectionConfig: _angular_core.Signal<boolean>;
4613
+ /** Show groupByMultiple for table queries (non-report mode) */
4614
+ readonly showGroupByMultiple: _angular_core.Signal<boolean>;
4615
+ /**
4616
+ * Derived signal: Extract module keys from selections for change detection
4617
+ * Only changes when actual selectors change, not on every selection update
4618
+ */
4619
+ private readonly moduleKeysSignature;
4620
+ /** Track last loaded module signature to prevent duplicate requests */
4621
+ private lastLoadedSignature;
4622
+ constructor();
4623
+ /**
4624
+ * Load properties for all selections using bulk API
4625
+ * Single POST request to /metadata/modules/properties
4626
+ * Enriches response with selectorName from tree data
4627
+ */
4628
+ loadPropertiesForSelections(selections: ISelection[]): void;
4629
+ /**
4630
+ * Handle selection changes
4631
+ */
4632
+ onSelectionsChange(selections: ISelection[]): void;
4633
+ /**
4634
+ * Handle module change - update selections, effect handles property loading
4635
+ */
4636
+ onModuleChange(event: {
4637
+ selectionId: number;
4638
+ selector: string;
4639
+ selectorName?: string | null;
4640
+ }): void;
4641
+ /**
4642
+ * Extract module type from selector (e.g., "Level:7" -> "Level")
4643
+ */
4644
+ private extractModuleTypeFromSelector;
4645
+ /**
4646
+ * Handle source links change
4647
+ */
4648
+ onSourceLinksChange(links: SourceLink[]): void;
4649
+ /**
4650
+ * Handle query change (general query)
4651
+ */
4652
+ onQueryChange(query: ChartQuery): void;
4653
+ /**
4654
+ * Handle table query change
4655
+ */
4656
+ onTableQueryChange(query: TableQuery): void;
4657
+ /**
4658
+ * Handle timeline query change
4659
+ */
4660
+ onTimelineQueryChange(query: any): void;
4661
+ /**
4662
+ * Handle map query change
4663
+ */
4664
+ onMapQueryChange(query: any): void;
4665
+ /**
4666
+ * Handle splitter query change
4667
+ */
4668
+ onSplitterQueryChange(query: any): void;
4669
+ /**
4670
+ * Handle properties query change
4671
+ */
4672
+ onPropertiesQueryChange(query: any): void;
4673
+ /**
4674
+ * Handle snapshot query change
4675
+ */
4676
+ onSnapshotQueryChange(query: any): void;
4677
+ /**
4678
+ * Handle groupByMultiple change
4679
+ */
4680
+ onGroupByMultipleChange(values: string[]): void;
4681
+ /**
4682
+ * Handle repeater dashboard selection
4683
+ */
4684
+ onRepeaterDashboardChange(dashboardId: number): void;
4685
+ /**
4686
+ * Handle isNormalized change
4687
+ */
4688
+ onIsNormalizedChange(value: boolean): void;
4689
+ /**
4690
+ * Handle tab change
4691
+ */
4692
+ onTabChange(tabId: string): void;
4693
+ /**
4694
+ * Handle custom API change
4695
+ */
4696
+ onCustomApiChange(customApi: CustomApi | null): void;
4697
+ /**
4698
+ * Get chart type id for query component
4699
+ */
4700
+ getChartTypeId(): string;
4701
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataSourceSettings, never>;
4702
+ 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>;
4445
4703
  }
4446
4704
 
4447
4705
  /** Action type option */
@@ -4555,10 +4813,6 @@ declare class ActionsSettings {
4555
4813
  /**
4556
4814
  * Track by action id for ngFor
4557
4815
  */
4558
- trackByActionId(_index: number, action: ActionConfig): string;
4559
- /**
4560
- * Track by index helper
4561
- */
4562
4816
  trackByIndex(index: number): number;
4563
4817
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionsSettings, never>;
4564
4818
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionsSettings, "mt-actions-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, { "clientConfigChange": "clientConfigChange"; }, never, never, true, never>;
@@ -4612,5 +4866,5 @@ declare class GetChartActionsPipe implements PipeTransform {
4612
4866
  */
4613
4867
  declare function cloneDeep<T>(obj: T): T;
4614
4868
 
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 };
4869
+ export { ActionsSettings, BarChartHandler, BarControlUi, CHART_TYPES, CardContentComponent, CardFilterComponent, CardInfoComponent, ChartCardComponent, ChartDataService, ChartSettingsDrawer, ChartViewer, ComparisonChartHandler, DashboardBuilder, DashboardBuilderService, DashboardItem, DashboardItemStoreService, DashboardList, DashboardStoreService, DashboardViewer, DataSourceSettings, DefaultControlUi, DisplaySettings, DynamicFiltersComponent, 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, StaticFiltersComponent, StatisticCardComponent, TableCardComponent, TableViewHandler, TimelineHandler, addCommasToNumber, axisFormatters, cloneDeep, createAxisFormatter, createTooltipFormatter, dynamicReorder, dynamicTextReplace, formatCurrency, formatDate, formatNumber, formatPercentage, formatValue, formatWordsUnderBar, formatXAxis, generalConfiguration, getColorFromConditions, getLanguageCode, getLocalizedTitle, getNestedData, groupDatesByYearAndMonth, handleFilterForCard, handleFilterForSnapshot, handleFiltersForCustom, isMobilePlatform, sortChartData, sortDataTableView, switchAllKeysSmall, switchAllKeysToLower };
4870
+ export type { ActionConfig, ApiResponse, BarChartData, BreadcrumbItem, BulkLinkChartRequest, BulkLinkChartResponse, BulkPropertiesRequest, BulkPropertiesResponse, BulkPropertiesResponseItem, BulkPropertyRequestItem, CardBorderStyleConfig, CardInfoConfig$1 as CardInfoConfig, CardStyleConfig$1 as CardStyleConfig, ChartActionEvent, ChartActionsContext, ChartData, ChartDataHandled, ChartLabel, ChartLinkConfiguration, ChartTypeConfig, ClientConfig, ComponentType, CustomApi, DashboardBuilderData, DashboardChartItem, DashboardDialogItem, DashboardItemStore, DashboardListEvent, DashboardPage, DisplayConfig, EChartSeriesItem, ExcelSheet, FilterConfig, FilterOption, FormatXAxisConfig$1 as FormatXAxisConfig, 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, StaticFilterConfig, StaticFilterItem, StatisticCardData, StyleConfig, TableColumn$1 as TableColumn, TableViewData, TimelineData, TimelineItem, UnlinkChartRequest };