@masterteam/dashboard-builder 0.0.2 → 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.
@@ -703,7 +703,7 @@ declare class DashboardBuilder implements OnInit, OnDestroy {
703
703
  /** Reference to chart settings drawer */
704
704
  private chartSettingsRef;
705
705
  readonly languageCode: _angular_core.Signal<string>;
706
- readonly direction: _angular_core.Signal<"rtl" | "ltr">;
706
+ readonly direction: _angular_core.Signal<"ltr" | "rtl">;
707
707
  readonly chartActionsContext: ChartActionsContext;
708
708
  readonly options: GridsterConfig;
709
709
  private subscription;
@@ -831,16 +831,16 @@ declare class DashboardViewer implements OnInit, OnDestroy {
831
831
  readonly dialogs: _angular_core.WritableSignal<DashboardDialogItem[]>;
832
832
  readonly filters: _angular_core.WritableSignal<any[]>;
833
833
  readonly languageCode: _angular_core.Signal<string>;
834
- readonly direction: _angular_core.Signal<"rtl" | "ltr">;
834
+ readonly direction: _angular_core.Signal<"ltr" | "rtl">;
835
835
  readonly options: GridsterConfig;
836
836
  private subscription;
837
837
  private chartsDataEffect;
838
838
  private dialogsDataEffect;
839
839
  private filtersDataEffect;
840
+ private pageIdEffect;
840
841
  ngOnInit(): void;
841
842
  ngOnDestroy(): void;
842
843
  private setupSubscriptions;
843
- private loadPageIfNeeded;
844
844
  loadPage(id: string | number): void;
845
845
  reloadPage(): void;
846
846
  /**
@@ -1153,8 +1153,31 @@ interface FilterConfig {
1153
1153
  * Filter option
1154
1154
  */
1155
1155
  interface FilterOption {
1156
- 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;
1157
1176
  value: any;
1177
+ label: {
1178
+ en: string;
1179
+ ar: string;
1180
+ };
1158
1181
  icon?: string;
1159
1182
  color?: string;
1160
1183
  }
@@ -1257,6 +1280,9 @@ interface HeaderCardConfig$1 {
1257
1280
  showHeader?: boolean;
1258
1281
  isHeaderHidden?: boolean;
1259
1282
  headerClickable?: boolean;
1283
+ isHeaderCentered?: boolean;
1284
+ headerFontSize?: number;
1285
+ headerColor?: string;
1260
1286
  icon?: string;
1261
1287
  iconColor?: string;
1262
1288
  titleColor?: string;
@@ -1274,6 +1300,10 @@ interface CardBorderStyleConfig {
1274
1300
  'background-color'?: string;
1275
1301
  'box-shadow'?: string;
1276
1302
  'border-radius'?: number;
1303
+ color?: string;
1304
+ 'font-size'?: string;
1305
+ iconColor?: string;
1306
+ iconBgColor?: string;
1277
1307
  }
1278
1308
  interface CardStyleConfig$1 {
1279
1309
  backgroundColor?: string;
@@ -1298,9 +1328,9 @@ declare class CardContentComponent {
1298
1328
  /** Card style configuration (background, shadows, border radius) */
1299
1329
  readonly cardStyleConfig: _angular_core.InputSignal<CardStyleConfig$1 | null>;
1300
1330
  /** Whether to show header */
1301
- readonly showHeaderInput: _angular_core.InputSignal<boolean>;
1331
+ readonly showHeader: _angular_core.InputSignal<boolean>;
1302
1332
  /** Whether header is clickable */
1303
- readonly headerClickableInput: _angular_core.InputSignal<boolean>;
1333
+ readonly headerClickable: _angular_core.InputSignal<boolean>;
1304
1334
  /** No top end content flag */
1305
1335
  readonly isNoTopEnd: _angular_core.InputSignal<boolean>;
1306
1336
  /** Whether this card contains a chart (disables horizontal scroll) */
@@ -1308,16 +1338,18 @@ declare class CardContentComponent {
1308
1338
  /** Header click event */
1309
1339
  readonly headerClick: _angular_core.OutputEmitterRef<void>;
1310
1340
  /** Computed show header */
1311
- readonly showHeader: _angular_core.Signal<boolean>;
1341
+ readonly showHeaderState: _angular_core.Signal<boolean>;
1312
1342
  /** Computed header clickable */
1313
- 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>;
1314
1346
  /** Computed card styles from StyleConfig and cardStyleConfig */
1315
1347
  readonly cardStyles: _angular_core.Signal<Record<string, string>>;
1316
1348
  /** Computed border radius style */
1317
1349
  readonly borderRadiusStyle: _angular_core.Signal<string>;
1318
1350
  onHeaderClick(): void;
1319
1351
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardContentComponent, never>;
1320
- 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>;
1321
1353
  }
1322
1354
 
1323
1355
  declare class CardFilterComponent implements OnInit {
@@ -1339,9 +1371,9 @@ declare class CardFilterComponent implements OnInit {
1339
1371
  /** Language code */
1340
1372
  readonly langCode: _angular_core.Signal<string>;
1341
1373
  /** Filter type */
1342
- readonly filterType: _angular_core.Signal<"select" | "date" | "text" | "multiselect" | "multiSelect" | "daterange">;
1374
+ readonly filterType: _angular_core.Signal<"date" | "text" | "select" | "multiselect" | "multiSelect" | "daterange">;
1343
1375
  /** Filter options */
1344
- readonly options: _angular_core.Signal<FilterOption[]>;
1376
+ readonly options: _angular_core.Signal<_masterteam_dashboard_builder.FilterOption[]>;
1345
1377
  /** Placeholder text */
1346
1378
  readonly placeholder: _angular_core.Signal<string>;
1347
1379
  ngOnInit(): void;
@@ -1349,7 +1381,207 @@ declare class CardFilterComponent implements OnInit {
1349
1381
  onMultiFilterChange(values: any[]): void;
1350
1382
  onDateChange(): void;
1351
1383
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardFilterComponent, never>;
1352
- 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>;
1353
1585
  }
1354
1586
 
1355
1587
  declare class ChartCardComponent implements OnInit, OnDestroy {
@@ -1376,19 +1608,29 @@ declare class ChartCardComponent implements OnInit, OnDestroy {
1376
1608
  readonly title: _angular_core.Signal<string>;
1377
1609
  /** Show filter flag */
1378
1610
  readonly showFilter: _angular_core.Signal<any>;
1379
- /** Show top end section (filter or extra filters) */
1611
+ /** Show top end section (filter or extra filters or cardInfo or static/dynamic filters) */
1380
1612
  readonly showTopEnd: _angular_core.Signal<any>;
1613
+ /** Card info configuration */
1614
+ readonly cardInfoConfig: _angular_core.Signal<any>;
1381
1615
  /** Filter configuration */
1382
1616
  readonly filterConfig: _angular_core.Signal<{
1383
1617
  [key: string]: any;
1384
1618
  configs?: any[];
1385
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>;
1386
1628
  ngOnInit(): void;
1387
1629
  ngOnDestroy(): void;
1388
1630
  onChartClick(event: any): void;
1389
1631
  onHeaderClick(): void;
1390
1632
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartCardComponent, never>;
1391
- 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>;
1392
1634
  }
1393
1635
 
1394
1636
  type EChartsType = any;
@@ -1490,7 +1732,7 @@ declare class EChartComponent implements OnInit, AfterViewInit, OnChanges, OnDes
1490
1732
  */
1491
1733
  getChartInstance(): EChartsType | null;
1492
1734
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EChartComponent, never>;
1493
- 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>;
1494
1736
  }
1495
1737
 
1496
1738
  interface EntityData {
@@ -1591,7 +1833,11 @@ declare class EntityPreviewCardComponent implements OnInit, OnDestroy {
1591
1833
  interface StatusItem {
1592
1834
  label: string;
1593
1835
  color: string;
1594
- shape?: 'circle' | 'square';
1836
+ shape?: 'circle' | 'square' | 'rectangul' | 'rhombic' | 'rect';
1837
+ borderColor?: string;
1838
+ borderBottomColor?: string;
1839
+ iconClass?: string;
1840
+ iconSize?: number;
1595
1841
  }
1596
1842
  declare class HeaderCardComponent implements OnInit, OnDestroy {
1597
1843
  private readonly storeService;
@@ -1649,7 +1895,7 @@ declare class HeaderCardComponent implements OnInit, OnDestroy {
1649
1895
  onArrowClick(): void;
1650
1896
  onClick(): void;
1651
1897
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderCardComponent, never>;
1652
- 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>;
1653
1899
  }
1654
1900
 
1655
1901
  interface LevelCardData$1 {
@@ -1747,7 +1993,7 @@ declare class ListStatisticCardComponent implements OnInit, OnDestroy {
1747
1993
  */
1748
1994
  doActions(event: any, type: string): void;
1749
1995
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListStatisticCardComponent, never>;
1750
- 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>;
1751
1997
  }
1752
1998
 
1753
1999
  interface SkeletonConfig {
@@ -1767,7 +2013,7 @@ declare class SkeletonCardComponent implements OnInit, OnDestroy {
1767
2013
  ngOnDestroy(): void;
1768
2014
  private getSkeletonsForComponent;
1769
2015
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonCardComponent, never>;
1770
- 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>;
1771
2017
  }
1772
2018
 
1773
2019
  declare class StatisticCardComponent implements OnInit {
@@ -1918,7 +2164,7 @@ declare class TableCardComponent implements OnInit, OnDestroy {
1918
2164
  */
1919
2165
  onHeaderClick(): void;
1920
2166
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCardComponent, never>;
1921
- 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>;
1922
2168
  }
1923
2169
 
1924
2170
  declare class DashboardItemStoreService {
@@ -2130,15 +2376,16 @@ declare class ChartDataService {
2130
2376
  }
2131
2377
 
2132
2378
  declare class BarChartHandler {
2379
+ private readonly storeService;
2133
2380
  /**
2134
2381
  * handleBarChart - matches functionName from CHART_TYPES
2135
2382
  * Returns ECharts option directly (exactly like old BarChartService.handleBarChart)
2136
2383
  */
2137
2384
  handleBarChart(dataResponse: any, config: ItemConfig): any;
2138
2385
  /**
2139
- * Format X axis value
2386
+ * Format X axis value using the formatXAxis utility
2140
2387
  */
2141
- private formatXAxis;
2388
+ private formatXAxisValue;
2142
2389
  /**
2143
2390
  * Apply bar override configurations
2144
2391
  */
@@ -2147,6 +2394,11 @@ declare class BarChartHandler {
2147
2394
  * Build grouped bar chart
2148
2395
  */
2149
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;
2150
2402
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartHandler, never>;
2151
2403
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<BarChartHandler>;
2152
2404
  }
@@ -2170,6 +2422,7 @@ declare class PieChartHandler {
2170
2422
  }
2171
2423
 
2172
2424
  declare class StackBarChartHandler {
2425
+ private readonly storeService;
2173
2426
  /**
2174
2427
  * Helper method to convert legend position based on language
2175
2428
  */
@@ -2244,7 +2497,7 @@ declare class OverviewCardHandler {
2244
2497
  * handleHeader - for header component
2245
2498
  * Extracts title from first value (same as old PropertiesService.handleHeader)
2246
2499
  */
2247
- handleHeader(data: any, config: ItemConfig): any;
2500
+ handleHeader(data: any, _config: ItemConfig): any;
2248
2501
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OverviewCardHandler, never>;
2249
2502
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<OverviewCardHandler>;
2250
2503
  }
@@ -2412,18 +2665,18 @@ declare class LevelCardHandler {
2412
2665
  * Returns data directly like old LevelCardService:
2413
2666
  * result?.map(data => data?.details?.map(...).sort(...))
2414
2667
  */
2415
- handlelevelCards(result: any, config: ItemConfig): any;
2668
+ handlelevelCards(result: any, _config: ItemConfig): any;
2416
2669
  /**
2417
2670
  * handlelevelCardsWithFilter - matches functionName from CHART_TYPES
2418
2671
  * Returns data directly like old LevelCardService:
2419
2672
  * [[{ data: levelProps }]]
2420
2673
  */
2421
- handlelevelCardsWithFilter(result: any, config: ItemConfig): any;
2674
+ handlelevelCardsWithFilter(result: any, _config: ItemConfig): any;
2422
2675
  /**
2423
2676
  * Handle grouped level cards (multiple selections)
2424
2677
  * Returns data directly
2425
2678
  */
2426
- handleGrouped(dataResponse: any[], config: ItemConfig): any;
2679
+ handleGrouped(dataResponse: any[], _config: ItemConfig): any;
2427
2680
  /**
2428
2681
  * Parse level cards from details array (standard API response)
2429
2682
  */
@@ -2660,10 +2913,32 @@ declare function createTooltipFormatter(config?: {
2660
2913
  }): (value: number) => string;
2661
2914
  /**
2662
2915
  * Format words with underscores for display
2916
+ * Matches old formatterWordsUnderBar from Formatters.ts
2663
2917
  * @param text - Text to format
2664
- * @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
2665
2940
  */
2666
- declare function formatWordsUnderBar(text: string, maxLength?: number): string;
2941
+ declare function formatXAxis(value: string | Date, configFormat?: FormatXAxisConfig$1): string;
2667
2942
 
2668
2943
  /**
2669
2944
  * Chart Helpers
@@ -3040,7 +3315,10 @@ declare class DashboardStoreService {
3040
3315
  /** Language code */
3041
3316
  readonly languageCode: _angular_core.WritableSignal<string>;
3042
3317
  /** Direction */
3043
- 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>;
3044
3322
  /** Reload current page subject */
3045
3323
  private reloadCurrentPageSubject;
3046
3324
  readonly reloadCurrentPage$: rxjs.Observable<void>;
@@ -3056,6 +3334,11 @@ declare class DashboardStoreService {
3056
3334
  * Update stop actions flag
3057
3335
  */
3058
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;
3059
3342
  /**
3060
3343
  * Update dynamic key in store
3061
3344
  */
@@ -3137,61 +3420,6 @@ declare class ManageBreadcrumb implements OnInit {
3137
3420
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageBreadcrumb, "mt-manage-breadcrumb", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3138
3421
  }
3139
3422
 
3140
- /**
3141
- * Filter Field Models
3142
- *
3143
- * Defines the structure for dynamic filter fields configuration
3144
- * used in dashboard page filtering.
3145
- */
3146
- /** Localized text with English and Arabic translations */
3147
- interface LocalizedText {
3148
- en: string;
3149
- ar: string;
3150
- }
3151
- /** Filter field types supported by the system */
3152
- type FilterFieldType = 'dropdownTVService' | 'lookup' | 'status' | 'phaseGate' | 'user' | 'date' | 'section' | 'separator' | 'year' | 'month' | 'quarter' | 'checkbox' | 'schemaSettings' | 'schemaSettingsLeafs';
3153
- /** Selection item for dropdown configuration */
3154
- interface FilterSelectionItem {
3155
- id: number;
3156
- moduleType?: string;
3157
- moduleId?: number;
3158
- filters?: any[];
3159
- modules?: any[];
3160
- properties?: any[];
3161
- }
3162
- /** Filter field configuration details */
3163
- interface FilterFieldConfiguration {
3164
- payload?: {
3165
- dashboardId: number;
3166
- selection: FilterSelectionItem[];
3167
- chartType: string;
3168
- query: {
3169
- selectedProperties: string[];
3170
- };
3171
- };
3172
- lookupId?: number;
3173
- schemaLevelId?: number;
3174
- logId?: number;
3175
- isRequird?: boolean;
3176
- isMultiple?: boolean;
3177
- checked?: boolean;
3178
- minYear?: number;
3179
- maxYear?: number;
3180
- }
3181
- /** Filter field definition */
3182
- interface FilterField {
3183
- key?: string;
3184
- name?: LocalizedText;
3185
- type: FilterFieldType;
3186
- configuration?: FilterFieldConfiguration;
3187
- }
3188
- /** Filter field type option for dropdown */
3189
- interface FilterFieldTypeOption {
3190
- value: FilterFieldType;
3191
- label: string;
3192
- products: string[];
3193
- }
3194
-
3195
3423
  /**
3196
3424
  * Manage Filter On Page Component
3197
3425
  *
@@ -3292,6 +3520,18 @@ declare class ChartSettingsDrawer {
3292
3520
  /** The chart item signal - reactive for proper change detection */
3293
3521
  readonly item: _angular_core.WritableSignal<DashboardChartItem | null>;
3294
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>;
3295
3535
  /** Determine the type of manage UI to show */
3296
3536
  readonly manageType: _angular_core.Signal<QuickManageType>;
3297
3537
  /** Default config (full config for DefaultControlUi) */
@@ -3314,6 +3554,8 @@ declare class ChartSettingsDrawer {
3314
3554
  onStackBarConfigChange(config: any): void;
3315
3555
  /** Update snapshot bar chart config */
3316
3556
  onSnapshotBarConfigChange(config: any): void;
3557
+ /** Update client config from DisplaySettings */
3558
+ onClientConfigUpdate(partialClientConfig: Partial<ClientConfig>): void;
3317
3559
  /** Apply changes and close drawer */
3318
3560
  apply(): void;
3319
3561
  /** Close without changes */
@@ -3322,135 +3564,610 @@ declare class ChartSettingsDrawer {
3322
3564
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartSettingsDrawer, "mt-chart-settings-drawer", never, {}, {}, never, never, true, never>;
3323
3565
  }
3324
3566
 
3325
- interface DefaultControlConfig {
3326
- title: string;
3327
- titleFontSize: number;
3328
- titleColor: string;
3329
- showSubtitle: boolean;
3330
- subtitle: string;
3331
- subtitleFontSize: number;
3332
- subtitleColor: string;
3333
- backgroundColor: string;
3334
- borderColor: string;
3335
- borderRadius: number;
3336
- padding: number;
3567
+ /** Shadow configuration */
3568
+ interface ShadowConfig {
3569
+ x: number;
3570
+ y: number;
3571
+ blur: number;
3572
+ spread: number;
3573
+ color: string;
3337
3574
  }
3338
- declare class DefaultControlUi implements ControlValueAccessor {
3339
- readonly config: _angular_core.WritableSignal<DefaultControlConfig>;
3340
- readonly fontSizeOptions: {
3341
- label: string;
3342
- value: number;
3343
- }[];
3344
- private onChange;
3345
- private onTouched;
3346
- writeValue(value: DefaultControlConfig): void;
3347
- registerOnChange(fn: (value: DefaultControlConfig) => void): void;
3348
- registerOnTouched(fn: () => void): void;
3349
- updateConfig(partial: Partial<DefaultControlConfig>): void;
3350
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DefaultControlUi, never>;
3351
- 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;
3352
3579
  }
3353
-
3354
- /**
3355
- * Pie Chart Configuration - Matches old implementation exactly
3356
- */
3357
- interface PieControlConfig {
3358
- radius?: number;
3359
- thickness?: number;
3360
- padAngle?: number;
3580
+ /** Card style configuration */
3581
+ interface CardStyleConfig {
3361
3582
  borderRadius?: number;
3362
- centerX?: number;
3363
- centerY?: number;
3364
- startAngle?: number;
3365
- endAngle?: number;
3366
- roseType?: boolean | 'radius' | 'area';
3367
- useEnhancedLegend?: boolean;
3368
- legendPosition?: 'left' | 'right' | 'top' | 'bottom';
3369
- legendVerticalAlign?: 'top' | 'middle' | 'bottom';
3370
- legendOrientation?: 'horizontal' | 'vertical';
3371
- legendType?: 'scroll' | 'plain';
3372
- legendFontSize?: number;
3373
- legendFontColor?: string;
3374
- legendIcon?: string;
3375
- labelFontSize?: number;
3376
- totalValueFontSize?: number;
3377
- labelFontColor?: string;
3378
- labelFormatter?: string;
3379
- tooltipTrigger?: 'item' | 'axis' | 'none';
3380
- labelPosition?: string;
3381
- showLabelLine?: boolean;
3382
- explode?: number;
3383
- animation?: boolean;
3384
- animationDuration?: number;
3385
- tooltipBackgroundColor?: string;
3386
- tooltipBorderColor?: string;
3387
- tooltipBorderWidth?: number;
3583
+ backgroundColor?: string;
3584
+ shadows?: ShadowConfig[];
3388
3585
  }
3389
- declare class PieControlUi implements ControlValueAccessor {
3390
- readonly config: _angular_core.WritableSignal<PieControlConfig>;
3391
- readonly roseTypeOptions: ({
3392
- label: string;
3393
- value: boolean;
3394
- } | {
3395
- label: string;
3396
- value: string;
3397
- })[];
3398
- 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: {
3399
3755
  label: string;
3400
3756
  value: string;
3401
3757
  }[];
3758
+ /** Legend position options */
3402
3759
  readonly legendPositionOptions: {
3403
3760
  label: string;
3404
3761
  value: string;
3405
3762
  }[];
3406
- readonly legendVerticalAlignOptions: {
3763
+ /** Legend icon type options */
3764
+ readonly legendIconOptions: {
3407
3765
  label: string;
3408
3766
  value: string;
3409
3767
  }[];
3410
- readonly legendOrientationOptions: {
3768
+ /** Label position options */
3769
+ readonly labelPositionOptions: {
3411
3770
  label: string;
3412
3771
  value: string;
3413
3772
  }[];
3414
- readonly legendTypeOptions: {
3773
+ /** Map options */
3774
+ readonly mapOptions: {
3415
3775
  label: string;
3416
3776
  value: string;
3417
3777
  }[];
3418
- readonly legendIconOptions: {
3778
+ /** Order type options */
3779
+ readonly orderTypeOptions: {
3419
3780
  label: string;
3420
3781
  value: string;
3421
3782
  }[];
3422
- readonly labelFormatterOptions: {
3783
+ /** Order operation options */
3784
+ readonly orderOperationOptions: {
3423
3785
  label: string;
3424
3786
  value: string;
3425
3787
  }[];
3426
- readonly tooltipTriggerOptions: {
3788
+ /** Border options for props config */
3789
+ readonly borderOptions: {
3427
3790
  label: string;
3428
3791
  value: string;
3429
3792
  }[];
3430
- readonly fontSizeOptions: {
3793
+ /** Color condition type options */
3794
+ readonly colorConditionTypeOptions: {
3431
3795
  label: string;
3432
- value: number;
3796
+ value: string;
3433
3797
  }[];
3434
- private onChange;
3435
- private onTouched;
3436
- writeValue(value: PieControlConfig): void;
3437
- registerOnChange(fn: (value: PieControlConfig) => void): void;
3438
- registerOnTouched(fn: () => void): void;
3439
- updateConfig(partial: Partial<PieControlConfig>): void;
3440
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieControlUi, never>;
3441
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieControlUi, "mt-pie-control-ui", never, {}, {}, never, never, true, never>;
3442
- }
3443
-
3444
- interface BarControlConfig {
3445
- barWidth?: number;
3446
- barGap?: number;
3447
- barCategoryGap?: number;
3448
- barType?: 'bar' | 'line';
3449
- xAxisShow?: boolean;
3450
- yAxisShow?: boolean;
3451
- yAxisFormat?: string;
3452
- showCurrency?: boolean;
3453
- xAxisFontSize?: number;
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';
4166
+ xAxisShow?: boolean;
4167
+ yAxisShow?: boolean;
4168
+ yAxisFormat?: string;
4169
+ showCurrency?: boolean;
4170
+ xAxisFontSize?: number;
3454
4171
  yAxisFontSize?: number;
3455
4172
  xAxisFontColor?: string;
3456
4173
  yAxisFontColor?: string;
@@ -3540,926 +4257,449 @@ interface StackBarControlConfig {
3540
4257
  isStacked?: boolean;
3541
4258
  borderRadius?: string | number;
3542
4259
  }
3543
- declare class StackBarControlUi implements ControlValueAccessor {
3544
- readonly config: _angular_core.WritableSignal<StackBarControlConfig>;
3545
- readonly legendPositionYOptions: {
3546
- label: string;
3547
- value: string;
3548
- }[];
3549
- readonly legendPositionXOptions: {
3550
- label: string;
3551
- value: string;
3552
- }[];
3553
- readonly barTypeOptions: {
3554
- label: string;
3555
- value: string;
3556
- }[];
3557
- readonly yAxisFormatOptions: ({
3558
- label: string;
3559
- value: null;
3560
- } | {
3561
- label: string;
3562
- value: string;
3563
- })[];
3564
- readonly fontSizeOptions: {
3565
- label: string;
3566
- value: number;
3567
- }[];
3568
- private onChange;
3569
- private onTouched;
3570
- writeValue(value: StackBarControlConfig): void;
3571
- registerOnChange(fn: (value: StackBarControlConfig) => void): void;
3572
- registerOnTouched(fn: () => void): void;
3573
- updateConfig(partial: Partial<StackBarControlConfig>): void;
3574
- onYAxisFormatChange(formatType: string | null): void;
3575
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackBarControlUi, never>;
3576
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StackBarControlUi, "mt-stack-bar-control-ui", never, {}, {}, never, never, true, never>;
3577
- }
3578
-
3579
- /**
3580
- * Manage Item Component (Drawer)
3581
- *
3582
- * Main drawer component for configuring chart/widget items.
3583
- * Uses tabs to organize different configuration sections.
3584
- * Provides ManageItemService for state sharing between child components.
3585
- */
3586
- declare class ManageItem implements OnInit {
3587
- private _dashboardService;
3588
- private _manageItemService;
3589
- private _dialogConfig;
3590
- readonly modal: ModalService;
3591
- ref: ModalRef<any> | null;
3592
- /** Input data from drawer - supports both input() and dialog data */
3593
- readonly data: _angular_core.InputSignal<{
3594
- chart?: DashboardChartItem;
3595
- isDialog?: boolean;
3596
- isNew?: boolean;
3597
- chartType?: ChartTypeConfig;
3598
- defaultSize?: {
3599
- cols: number;
3600
- rows: number;
3601
- };
3602
- } | null>;
3603
- /** Whether chart type is pre-selected (hides type selection) */
3604
- readonly hasPreselectedType: _angular_core.Signal<boolean>;
3605
- /** Tab options with translation keys */
3606
- readonly tabOptions: _angular_core.WritableSignal<{
3607
- label: string;
3608
- value: string;
3609
- icon: string;
3610
- }[]>;
3611
- /** Active tab */
3612
- readonly activeTab: _angular_core.WritableSignal<string>;
3613
- /** Chart configuration being edited - from service */
3614
- readonly config: _angular_core.Signal<ItemConfig | null>;
3615
- /** Chart type ID - from service */
3616
- readonly chartTypeId: _angular_core.Signal<string>;
3617
- /** Selected chart type info */
3618
- readonly selectedChartType: _angular_core.WritableSignal<ChartTypeConfig | null>;
3619
- /** Is this a dialog item */
3620
- readonly isDialog: _angular_core.Signal<any>;
3621
- /** Is this a new item */
3622
- readonly isNew: _angular_core.Signal<any>;
3623
- /** Saving state */
3624
- readonly saving: _angular_core.WritableSignal<boolean>;
3625
- /** Validation state */
3626
- readonly isValid: _angular_core.Signal<boolean>;
3627
- /** Initialize from dialog data effect */
3628
- private _initEffect;
3629
- ngOnInit(): void;
3630
- save(): void;
3631
- cancel(): void;
3632
- /** Update config from child components */
3633
- onConfigUpdate(partialConfig: Partial<ItemConfig>): void;
3634
- /** Update service config */
3635
- onServiceConfigUpdate(partialConfig: Partial<ItemConfig['serviceConfig']>): void;
3636
- /** Update client config */
3637
- onClientConfigUpdate(partialConfig: Partial<ItemConfig['clientConfig']>): void;
3638
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ManageItem, never>;
3639
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ManageItem, "mt-manage-item", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3640
- }
3641
-
3642
- /**
3643
- * General Settings Component
3644
- *
3645
- * Handles general chart configuration:
3646
- * - Chart type selection (visual grid)
3647
- * - Title (English & Arabic)
3648
- * - Component name
3649
- */
3650
- declare class GeneralSettings {
3651
- private transloco;
3652
- /** Current configuration */
3653
- readonly config: _angular_core.InputSignal<ItemConfig | null>;
3654
- /** Is dialog item (hides chart type selection) */
3655
- readonly isDialog: _angular_core.InputSignal<boolean>;
3656
- /** Whether chart type is pre-selected (hides chart type selection) */
3657
- readonly hasPreselectedType: _angular_core.InputSignal<boolean>;
3658
- /** Emit config changes */
3659
- readonly configChange: _angular_core.OutputEmitterRef<Partial<ItemConfig>>;
3660
- /** Emit chart type selection */
3661
- readonly chartTypeChange: _angular_core.OutputEmitterRef<ChartTypeConfig>;
3662
- /** All available chart types */
3663
- readonly chartTypes: _angular_core.WritableSignal<ChartTypeConfig[]>;
3664
- /** Chart types filtered (not hidden) */
3665
- readonly chartTypesFiltered: _angular_core.Signal<ChartTypeConfig[]>;
3666
- /** Grouped chart types by category */
3667
- readonly chartTypesByCategory: _angular_core.Signal<{
3668
- card: ChartTypeConfig[];
3669
- chart: ChartTypeConfig[];
3670
- table: ChartTypeConfig[];
3671
- special: ChartTypeConfig[];
3672
- layout: ChartTypeConfig[];
3673
- }>;
3674
- /** Currently selected chart type */
3675
- readonly selectedChartType: _angular_core.Signal<ChartTypeConfig | null | undefined>;
3676
- /**
3677
- * Select a chart type
3678
- */
3679
- selectChartType(type: ChartTypeConfig): void;
3680
- /**
3681
- * Check if a chart type is selected
3682
- */
3683
- isTypeSelected(type: ChartTypeConfig): boolean;
3684
- /**
3685
- * Update title field
3686
- */
3687
- updateTitle(lang: 'en' | 'ar', value: string): void;
3688
- /**
3689
- * Update component name
3690
- */
3691
- updateComponentName(value: string): void;
3692
- /**
3693
- * Get category label
3694
- */
3695
- getCategoryLabel(category: string): string;
3696
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<GeneralSettings, never>;
3697
- 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>;
3698
- }
3699
-
3700
- /**
3701
- * Selection module info for linking - includes properties for each selection
3702
- */
3703
- interface SelectionModule {
3704
- selectionId: number;
3705
- selector: string;
3706
- moduleType: string;
3707
- moduleTypeName: string;
3708
- moduleName: string;
3709
- properties: IProperty[];
3710
- }
3711
-
3712
- /**
3713
- * Chart Query Series
3714
- */
3715
- interface ChartQuerySeries {
3716
- key: string;
3717
- color: string;
3718
- valueProperty: string | null;
3719
- aggregateFunction: string;
3720
- groupByProperties: string[];
3721
- autoStack: boolean;
3722
- stackProperties: string[];
3723
- autoStackByProperty: string | null;
3724
- filters: ChartQuerySeriesFilter[];
3725
- extraProperties: string[];
3726
- formula?: string;
3727
- showAdvancedSettings?: boolean;
3728
- barType?: 'bar' | 'line' | 'lineAccumulated';
3729
- }
3730
- /**
3731
- * Chart Query Series Filter
3732
- */
3733
- interface ChartQuerySeriesFilter {
3734
- propertyKey: string | null;
3735
- value: any;
3736
- operator: string;
3737
- }
3738
- /**
3739
- * Chart Query Configuration
3740
- */
3741
- interface ChartQuery {
3742
- categoryProperty: string;
3743
- series: ChartQuerySeries[];
3744
- }
3745
-
3746
- /** Properties grouped by module for select with [group]="true" */
3747
- interface PropertyGroup {
3748
- label: string;
3749
- items: IProperty[];
3750
- }
3751
- /**
3752
- * Aggregation Property Configuration
3753
- */
3754
- interface AggregationProperty {
3755
- propertyKey: string | null;
3756
- aggregateFunction: string;
3757
- alias?: string;
3758
- }
3759
- /**
3760
- * Table Query Configuration Value
3761
- */
3762
- interface TableQueryValue {
3763
- selectedProperties: string[];
3764
- AggregationProperties: AggregationProperty[];
3765
- lookupProperty: string;
3766
- PivotProperties: string[];
3767
- }
3768
- /**
3769
- * Table Query Component
3770
- *
3771
- * Handles query configuration for table/dialog chart types.
3772
- * Implements ControlValueAccessor for form integration.
3773
- */
3774
- declare class TableQuery implements ControlValueAccessor {
3775
- private fb;
3776
- /** Available properties (flat) */
3777
- readonly propertiesFlat: _angular_core.InputSignal<IProperty[]>;
3778
- /** Properties grouped by module for grouped select */
3779
- readonly propertiesGrouped: _angular_core.InputSignal<PropertyGroup[]>;
3780
- /** Whether to use grouped select (when multiple modules) */
3781
- readonly useGroupedSelect: _angular_core.Signal<boolean>;
3782
- /** Options config for multi-select */
3783
- readonly optionsConfig: _angular_core.Signal<{
3784
- optionValue: string;
3785
- optionLabel: string;
3786
- items: IProperty[];
3787
- }>;
3788
- /** Aggregate function options */
3789
- readonly aggregateFunctions: {
4260
+ declare class StackBarControlUi implements ControlValueAccessor {
4261
+ readonly config: _angular_core.WritableSignal<StackBarControlConfig>;
4262
+ readonly legendPositionYOptions: {
4263
+ label: string;
3790
4264
  value: string;
4265
+ }[];
4266
+ readonly legendPositionXOptions: {
3791
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;
3792
4284
  }[];
3793
- /** Main form */
3794
- readonly queryForm: FormGroup<{
3795
- selectedProperties: _angular_forms.FormControl<string[] | null>;
3796
- AggregationProperties: FormArray<FormGroup<any>>;
3797
- lookupProperty: _angular_forms.FormControl<string | null>;
3798
- PivotProperties: _angular_forms.FormControl<string[] | null>;
3799
- }>;
3800
- /** Disabled state */
3801
- disabled: boolean;
3802
- /** ControlValueAccessor callbacks */
3803
4285
  private onChange;
3804
4286
  private onTouched;
3805
- constructor();
3806
- writeValue(value: TableQueryValue): void;
3807
- registerOnChange(fn: (value: TableQueryValue) => void): void;
4287
+ writeValue(value: StackBarControlConfig): void;
4288
+ registerOnChange(fn: (value: StackBarControlConfig) => void): void;
3808
4289
  registerOnTouched(fn: () => void): void;
3809
- setDisabledState(isDisabled: boolean): void;
3810
- validate(): ValidationErrors | null;
3811
- get aggregationArray(): FormArray;
3812
- createAggregationFormGroup(agg?: Partial<AggregationProperty>): FormGroup;
3813
- addAggregation(): void;
3814
- removeAggregation(index: number): void;
3815
- trackByIndex(index: number): number;
3816
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableQuery, never>;
3817
- 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>;
3818
4294
  }
3819
4295
 
3820
- /** Module properties response */
3821
- interface ModuleProperties {
3822
- /** Module type (e.g., "Level") */
3823
- moduleName: string;
3824
- /** Display name for the specific selector (e.g., "Projects" for "Level:7") */
3825
- selectorName: string | null;
3826
- /** Full selector (e.g., "Level:7") */
3827
- selector: string;
3828
- moduleId?: number;
3829
- properties: IProperty[];
3830
- }
3831
- /**
3832
- * Query component type based on chart type and component name
3833
- */
3834
- type QueryComponentType = 'general' | 'table' | 'timeline' | 'timelineMultiLevel' | 'map' | 'splitter' | 'properties' | 'snapshot' | 'phaseGate' | 'repeater' | 'none';
3835
4296
  /**
3836
- * Data Source Settings Component
4297
+ * Manage Item Component (Drawer)
3837
4298
  *
3838
- * Comprehensive data source configuration:
3839
- * - Module/Data source selection via SelectionConfiguration
3840
- * - Source links for multiple selections via SourceLinkConfiguration
3841
- * - 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.
3842
4302
  */
3843
- declare class DataSourceSettings {
3844
- private dashboardService;
3845
- /** Current configuration */
3846
- readonly config: _angular_core.InputSignal<ItemConfig | null>;
3847
- /** Selected chart type */
3848
- readonly chartType: _angular_core.InputSignal<ChartTypeConfig | null>;
3849
- /** Emit service config changes */
3850
- readonly serviceConfigChange: _angular_core.OutputEmitterRef<Partial<ServiceConfig>>;
3851
- /** Properties grouped by module */
3852
- readonly modulesProperties: _angular_core.WritableSignal<ModuleProperties[]>;
3853
- /** Flattened properties list with grouping info */
3854
- readonly propertiesFlat: _angular_core.Signal<IPropertyWithGroup[]>;
3855
- /**
3856
- * Properties grouped for select field with [group]="true"
3857
- * Structure: [{ label: 'Projects', items: [{ name, key }, ...] }, ...]
3858
- * Uses selectorName for display (e.g., "Projects" instead of "Level")
3859
- */
3860
- readonly propertiesGrouped: _angular_core.Signal<{
3861
- label: string;
3862
- items: IProperty[];
3863
- }[]>;
3864
- /**
3865
- * Selection modules for source link configuration
3866
- * Built from selections with their loaded module info
3867
- */
3868
- readonly selectionModules: _angular_core.Signal<SelectionModule[]>;
3869
- /** Query component type based on chart type and component name */
3870
- readonly queryComponentType: _angular_core.Signal<QueryComponentType>;
3871
- /** Loading states */
3872
- readonly loadingProperties: _angular_core.WritableSignal<boolean>;
3873
- /** Tab state: 'selection' or 'customApi' */
3874
- readonly activeTab: _angular_core.WritableSignal<"selection" | "customApi">;
3875
- /** Tab options for display */
3876
- readonly tabOptions: {
3877
- 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<{
3878
4324
  label: string;
3879
- }[];
3880
- /** Custom API configuration */
3881
- readonly customApi: _angular_core.WritableSignal<CustomApi | null>;
3882
- /** Internal selections state */
3883
- readonly selections: _angular_core.WritableSignal<ISelection[]>;
3884
- readonly sourceLinks: _angular_core.WritableSignal<SourceLink[]>;
3885
- readonly query: _angular_core.WritableSignal<any>;
3886
- readonly isNormalized: _angular_core.WritableSignal<boolean>;
3887
- readonly groupByMultiple: _angular_core.WritableSignal<string[]>;
3888
- /** Repeater dashboard selection */
3889
- readonly repeaterDashboardId: _angular_core.WritableSignal<number | null>;
3890
- readonly availableDashboards: _angular_core.WritableSignal<{
3891
- id: number;
3892
- name: string;
4325
+ value: string;
4326
+ icon: string;
3893
4327
  }[]>;
3894
- /** Show source links when multiple selections exist */
3895
- readonly showSourceLinks: _angular_core.Signal<boolean>;
3896
- /** Hide selection config for layout, snapshot, phaseGate types (they don't need data source selection) */
3897
- readonly hideSelectionConfig: _angular_core.Signal<boolean>;
3898
- /** Show groupByMultiple for table queries (non-report mode) */
3899
- readonly showGroupByMultiple: _angular_core.Signal<boolean>;
3900
- /**
3901
- * Derived signal: Extract module keys from selections for change detection
3902
- * Only changes when actual selectors change, not on every selection update
3903
- */
3904
- private readonly moduleKeysSignature;
3905
- /** Track last loaded module signature to prevent duplicate requests */
3906
- private lastLoadedSignature;
3907
- constructor();
3908
- /**
3909
- * Load properties for all selections using bulk API
3910
- * Single POST request to /metadata/modules/properties
3911
- * Enriches response with selectorName from tree data
3912
- */
3913
- loadPropertiesForSelections(selections: ISelection[]): void;
3914
- /**
3915
- * Handle selection changes
3916
- */
3917
- onSelectionsChange(selections: ISelection[]): void;
3918
- /**
3919
- * Handle module change - update selections, effect handles property loading
3920
- */
3921
- onModuleChange(event: {
3922
- selectionId: number;
3923
- selector: string;
3924
- selectorName?: string | null;
3925
- }): void;
3926
- /**
3927
- * Extract module type from selector (e.g., "Level:7" -> "Level")
3928
- */
3929
- private extractModuleTypeFromSelector;
3930
- /**
3931
- * Handle source links change
3932
- */
3933
- onSourceLinksChange(links: SourceLink[]): void;
3934
- /**
3935
- * Handle query change (general query)
3936
- */
3937
- onQueryChange(query: ChartQuery): void;
3938
- /**
3939
- * Handle table query change
3940
- */
3941
- onTableQueryChange(query: TableQuery): void;
3942
- /**
3943
- * Handle timeline query change
3944
- */
3945
- onTimelineQueryChange(query: any): void;
3946
- /**
3947
- * Handle map query change
3948
- */
3949
- onMapQueryChange(query: any): void;
3950
- /**
3951
- * Handle splitter query change
3952
- */
3953
- onSplitterQueryChange(query: any): void;
3954
- /**
3955
- * Handle properties query change
3956
- */
3957
- onPropertiesQueryChange(query: any): void;
3958
- /**
3959
- * Handle snapshot query change
3960
- */
3961
- onSnapshotQueryChange(query: any): void;
3962
- /**
3963
- * Handle groupByMultiple change
3964
- */
3965
- 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>;
3966
4391
  /**
3967
- * Handle repeater dashboard selection
4392
+ * Select a chart type
3968
4393
  */
3969
- onRepeaterDashboardChange(dashboardId: number): void;
4394
+ selectChartType(type: ChartTypeConfig): void;
3970
4395
  /**
3971
- * Handle isNormalized change
4396
+ * Check if a chart type is selected
3972
4397
  */
3973
- onIsNormalizedChange(value: boolean): void;
4398
+ isTypeSelected(type: ChartTypeConfig): boolean;
3974
4399
  /**
3975
- * Handle tab change
4400
+ * Update title field
3976
4401
  */
3977
- onTabChange(tabId: string): void;
4402
+ updateTitle(lang: 'en' | 'ar', value: string): void;
3978
4403
  /**
3979
- * Handle custom API change
4404
+ * Update component name
3980
4405
  */
3981
- onCustomApiChange(customApi: CustomApi | null): void;
4406
+ updateComponentName(value: string): void;
3982
4407
  /**
3983
- * Get chart type id for query component
4408
+ * Get category label
3984
4409
  */
3985
- getChartTypeId(): string;
3986
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataSourceSettings, never>;
3987
- 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>;
3988
4413
  }
3989
4414
 
3990
- /** Shadow configuration */
3991
- interface ShadowConfig {
3992
- x: number;
3993
- y: number;
3994
- blur: number;
3995
- spread: number;
3996
- color: string;
3997
- }
3998
- /** Override label configuration */
3999
- interface OverrideLabel {
4000
- en: string;
4001
- ar: string;
4002
- }
4003
- /** Card style configuration */
4004
- interface CardStyleConfig {
4005
- borderRadius?: number;
4006
- backgroundColor?: string;
4007
- shadows?: ShadowConfig[];
4008
- }
4009
- /** Header card configuration */
4010
- interface HeaderCardConfig {
4011
- isHeaderCentered?: boolean;
4012
- isHeaderHidden?: boolean;
4013
- headerColor?: string;
4014
- headerFontSize?: number;
4015
- }
4016
- /** Label center configuration */
4017
- interface LabelCenterConfig {
4018
- hide?: boolean;
4019
- text?: {
4020
- en?: string;
4021
- ar?: string;
4022
- };
4023
- }
4024
- /** Sort data bars configuration */
4025
- interface SortDataBarsConfig {
4026
- enable?: boolean;
4027
- sortBy?: string;
4028
- order?: 'asc' | 'desc' | string;
4029
- direction?: 'asc' | 'desc' | string;
4030
- }
4031
- /** Card info configuration */
4032
- interface CardInfoConfig {
4033
- show?: boolean;
4034
- value?: any;
4035
- type?: string;
4036
- }
4037
- /** Format configuration */
4038
- interface FormatConfig {
4039
- type?: string | null;
4040
- showCurrency?: boolean;
4041
- handleLang?: boolean;
4042
- customText?: string | null;
4043
- customDateFormat?: string | null;
4044
- showCurrencyTooltip?: boolean;
4045
- hideSuffixes?: boolean;
4046
- }
4047
- /** Table format configuration */
4048
- interface TableFormatConfig {
4049
- thTextColor?: string | null;
4050
- thBackgroundColor?: string | null;
4051
- tdTextColor?: string | null;
4052
- groupBackgroundColor?: string | null;
4053
- groupTextColor?: string | null;
4054
- thFontBold?: boolean;
4055
- tdFontBold?: boolean;
4056
- thFontSize?: number | null;
4057
- tdFontSize?: number | null;
4058
- hideTableSubheader?: boolean;
4059
- disableCurrencyFormat?: boolean;
4060
- showPercentageAsProgressBar?: boolean;
4061
- showPercentageStatus?: boolean;
4062
- hiddenColumns?: string[];
4063
- sortConfig?: {
4064
- column: string;
4065
- direction: 'asc' | 'desc';
4066
- };
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[];
4067
4425
  }
4068
- /** Color condition configuration */
4069
- interface ColorCondition {
4426
+
4427
+ /**
4428
+ * Chart Query Series
4429
+ */
4430
+ interface ChartQuerySeries {
4431
+ key: string;
4070
4432
  color: string;
4071
- type: 'equal' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'between';
4072
- value1?: number;
4073
- value2?: number;
4074
- labelEn?: string;
4075
- labelAr?: string;
4076
- }
4077
- /** Color conditions by bar index */
4078
- interface ColorConditionsByIndex {
4079
- [key: number]: ColorCondition[];
4080
- }
4081
- /** Ring gauge configuration */
4082
- interface RingGaugeConfig {
4083
- centerProperty?: string;
4084
- statusProperty?: string;
4085
- hiddenProperties?: string[];
4086
- }
4087
- /** Order configuration */
4088
- interface OrderConfig {
4089
- order?: string[];
4090
- operation?: string;
4091
- orderBy?: string;
4092
- }
4093
- /** Card list configuration */
4094
- interface CardListConfig {
4095
- hideProperties?: string[];
4096
- }
4097
- /** Property translation entry */
4098
- interface PropertyTranslation {
4099
- ar: string;
4100
- 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';
4101
4444
  }
4102
- /** Property translations map */
4103
- interface PropertyTranslationsMap {
4104
- [key: string]: PropertyTranslation;
4445
+ /**
4446
+ * Chart Query Series Filter
4447
+ */
4448
+ interface ChartQuerySeriesFilter {
4449
+ propertyKey: string | null;
4450
+ value: any;
4451
+ operator: string;
4105
4452
  }
4106
- /** Property color entry */
4107
- interface PropertyColorEntry {
4108
- selectedKey: string;
4453
+ /**
4454
+ * Chart Query Configuration
4455
+ */
4456
+ interface ChartQuery {
4457
+ categoryProperty: string;
4458
+ series: ChartQuerySeries[];
4109
4459
  }
4110
- /** Property colors map */
4111
- interface PropertyColorsMap {
4112
- [key: string]: PropertyColorEntry;
4460
+
4461
+ /** Properties grouped by module for select with [group]="true" */
4462
+ interface PropertyGroup {
4463
+ label: string;
4464
+ items: IProperty[];
4113
4465
  }
4114
- /** Props config as index item */
4115
- interface PropsConfigAsIndexItem {
4116
- width?: string;
4117
- colorAsProperty?: string;
4118
- hidden?: boolean;
4119
- border?: string[];
4466
+ /**
4467
+ * Aggregation Property Configuration
4468
+ */
4469
+ interface AggregationProperty {
4470
+ propertyKey: string | null;
4471
+ aggregateFunction: string;
4472
+ alias?: string;
4120
4473
  }
4121
- /** Format X-Axis configuration */
4122
- interface FormatXAxisConfig {
4123
- type?: string | null;
4124
- shortFormate?: boolean;
4474
+ /**
4475
+ * Table Query Configuration Value
4476
+ */
4477
+ interface TableQueryValue {
4478
+ selectedProperties: string[];
4479
+ AggregationProperties: AggregationProperty[];
4480
+ lookupProperty: string;
4481
+ PivotProperties: string[];
4125
4482
  }
4126
- /** Extra column from lookup configuration */
4127
- interface ExtraColumnFromLookupConfig {
4128
- extraCoulmnFromLookup?: boolean;
4129
- lookupId?: number | null;
4130
- groupedBy?: string | null;
4131
- 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>;
4132
4533
  }
4133
- /** Timeline header colors config (single) */
4134
- interface TimelineHeaderSingleConfig {
4135
- bgColor?: string;
4136
- 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[];
4137
4545
  }
4138
4546
  /**
4139
- * 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
4140
4552
  *
4141
- * Comprehensive visual/display configuration with chart-type-aware field visibility.
4142
- * 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.)
4143
4557
  */
4144
- declare class DisplaySettings {
4558
+ declare class DataSourceSettings {
4559
+ private dashboardService;
4145
4560
  /** Current configuration */
4146
4561
  readonly config: _angular_core.InputSignal<ItemConfig | null>;
4147
4562
  /** Selected chart type */
4148
4563
  readonly chartType: _angular_core.InputSignal<ChartTypeConfig | null>;
4149
- /** Available properties (for property-based configs) */
4150
- readonly availableProperties: _angular_core.InputSignal<any[]>;
4151
- /** Selected properties from query */
4152
- readonly selectedProperties: _angular_core.InputSignal<string[]>;
4153
- /** Available lookups for extra column from lookup */
4154
- readonly lookups: _angular_core.InputSignal<any[]>;
4155
- /** Emit client config changes */
4156
- readonly clientConfigChange: _angular_core.OutputEmitterRef<Partial<ClientConfig>>;
4157
- /** Color condition expansion state */
4158
- readonly colorConditionExpanded: _angular_core.WritableSignal<Record<number, boolean>>;
4159
- /** Property translations paste state */
4160
- readonly showPropertyTranslationsPaste: _angular_core.WritableSignal<boolean>;
4161
- readonly propertyTranslationsPasteText: _angular_core.WritableSignal<string>;
4162
- readonly propertyTranslationsPasteError: _angular_core.WritableSignal<string>;
4163
- /** Property colors paste state */
4164
- readonly showPropertyColorsPaste: _angular_core.WritableSignal<boolean>;
4165
- readonly propertyColorsPasteText: _angular_core.WritableSignal<string>;
4166
- 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[]>;
4167
4570
  /**
4168
- * Chart type to fields mapping
4169
- * 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")
4170
4574
  */
4171
- private readonly chartTypeFieldsMap;
4172
- /** Computed fields to show based on chart type */
4173
- readonly fieldsToShow: _angular_core.Signal<string>;
4174
- /** Check if a field should be shown */
4175
- shouldShowField(fieldName: string): boolean;
4176
- /** Position options */
4177
- readonly positionOptions: {
4178
- label: string;
4179
- value: string;
4180
- }[];
4181
- /** Legend position options */
4182
- readonly legendPositionOptions: {
4183
- label: string;
4184
- value: string;
4185
- }[];
4186
- /** Legend icon type options */
4187
- readonly legendIconOptions: {
4188
- label: string;
4189
- value: string;
4190
- }[];
4191
- /** Label position options */
4192
- readonly labelPositionOptions: {
4193
- label: string;
4194
- value: string;
4195
- }[];
4196
- /** Map options */
4197
- readonly mapOptions: {
4198
- label: string;
4199
- value: string;
4200
- }[];
4201
- /** Order type options */
4202
- readonly orderTypeOptions: {
4203
- label: string;
4204
- value: string;
4205
- }[];
4206
- /** Order operation options */
4207
- readonly orderOperationOptions: {
4208
- label: string;
4209
- value: string;
4210
- }[];
4211
- /** Border options for props config */
4212
- readonly borderOptions: {
4213
- label: string;
4214
- value: string;
4215
- }[];
4216
- /** Color condition type options */
4217
- readonly colorConditionTypeOptions: {
4218
- label: string;
4219
- value: string;
4220
- }[];
4221
- /** Format type options */
4222
- readonly formatTypeOptions: ({
4223
- label: string;
4224
- value: null;
4225
- } | {
4226
- label: string;
4227
- value: string;
4228
- })[];
4229
- /** Format X-Axis type options */
4230
- readonly formatXAxisTypeOptions: ({
4231
- label: string;
4232
- value: null;
4233
- } | {
4575
+ readonly propertiesGrouped: _angular_core.Signal<{
4234
4576
  label: string;
4235
- value: string;
4236
- })[];
4237
- /** Default color palette */
4238
- readonly defaultColorPalette: string[];
4239
- /** Current style config */
4240
- readonly styleConfig: _angular_core.Signal<StyleConfig>;
4241
- /** Current config as type */
4242
- readonly configAsType: _angular_core.Signal<{
4243
- [key: string]: any;
4244
- icon?: string;
4245
- breadcrumb?: any[];
4246
- }>;
4247
- /** Current card info */
4248
- readonly cardInfo: _angular_core.Signal<CardInfoConfig>;
4249
- /** Current header card config */
4250
- readonly headerCardConfig: _angular_core.Signal<HeaderCardConfig>;
4251
- /** Current card style config */
4252
- readonly cardStyleConfig: _angular_core.Signal<CardStyleConfig>;
4253
- /** Current label config */
4254
- readonly labelConfig: _angular_core.Signal<{
4255
- show?: boolean;
4256
- showTotalInTop?: boolean;
4257
- position?: string;
4258
- }>;
4259
- /** Current legend config */
4260
- readonly legendConfig: _angular_core.Signal<{
4261
- show?: boolean;
4262
- position?: string;
4263
- iconType?: string;
4264
- }>;
4265
- /** Current label center config */
4266
- readonly labelCenterConfig: _angular_core.Signal<LabelCenterConfig>;
4267
- /** Current sort data bars config */
4268
- readonly sortDataBarsConfig: _angular_core.Signal<SortDataBarsConfig>;
4269
- /** Current override labels */
4270
- readonly overrideLabels: _angular_core.Signal<OverrideLabel[]>;
4271
- /** Current default colors */
4272
- readonly defaultColors: _angular_core.Signal<string[]>;
4273
- /** Current order config */
4274
- readonly orderConfig: _angular_core.Signal<any>;
4275
- /** Current format config */
4276
- readonly formatConfig: _angular_core.Signal<FormatConfig>;
4277
- /** Current table format config */
4278
- readonly tableFormatConfig: _angular_core.Signal<TableFormatConfig>;
4279
- /** Current color by condition */
4280
- readonly colorByCondition: _angular_core.Signal<ColorConditionsByIndex>;
4281
- /** Current ring gauge config */
4282
- readonly ringGaugeConfig: _angular_core.Signal<RingGaugeConfig>;
4283
- /** Current card list config */
4284
- readonly cardListConfig: _angular_core.Signal<CardListConfig>;
4285
- /** Props config as index */
4286
- readonly propsConfigAsIndex: _angular_core.Signal<PropsConfigAsIndexItem[]>;
4287
- /** Property translations map */
4288
- readonly propertyTranslations: _angular_core.Signal<PropertyTranslationsMap>;
4289
- /** Property colors map */
4290
- readonly propertyColors: _angular_core.Signal<PropertyColorsMap>;
4291
- /** Format X-Axis config */
4292
- readonly formatXAxisConfig: _angular_core.Signal<FormatXAxisConfig>;
4293
- /** Table columns config (extra column from lookup) */
4294
- readonly tableColumnsConfig: _angular_core.Signal<ExtraColumnFromLookupConfig>;
4295
- /** Timeline header colors config (single object for old format) */
4296
- readonly timelineHeaderColorsSingle: _angular_core.Signal<TimelineHeaderSingleConfig>;
4297
- /** Toggle association */
4298
- readonly toggleAssociation: _angular_core.Signal<boolean>;
4299
- /** Selected properties resolved from input or config */
4300
- readonly resolvedSelectedProperties: _angular_core.Signal<any[]>;
4301
- /** Available properties resolved from input or selected properties */
4302
- readonly resolvedAvailableProperties: _angular_core.Signal<any[]>;
4303
- /** Available properties as options */
4304
- readonly propertyOptions: _angular_core.Signal<{
4305
- label: any;
4306
- value: any;
4307
- }[]>;
4308
- /** Available translation options (exclude used) */
4309
- readonly availableTranslationOptions: _angular_core.Signal<{
4310
- label: any;
4311
- value: any;
4312
- }[]>;
4313
- /** Available color options (exclude used) */
4314
- readonly availableColorOptions: _angular_core.Signal<{
4315
- label: any;
4316
- value: any;
4317
- }[]>;
4318
- /** All property options (full list) */
4319
- readonly allPropertyKeyOptions: _angular_core.Signal<{
4320
- label: any;
4321
- value: any;
4577
+ items: IProperty[];
4322
4578
  }[]>;
4323
- /** Ring gauge hidden properties options */
4324
- readonly ringGaugeHiddenOptions: _angular_core.Signal<{
4325
- label: any;
4326
- 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;
4327
4608
  }[]>;
4328
- /** Update style config property */
4329
- updateStyleConfig(key: keyof StyleConfig | string, value: any): void;
4330
- /** Update configAsType property */
4331
- updateConfigAsType(key: string, value: any): void;
4332
- /** Update nested configAsType property */
4333
- updateNestedConfigAsType(parentKey: string, key: string, value: any): void;
4334
- /** Update header card config */
4335
- updateHeaderCardConfig(key: keyof HeaderCardConfig, value: any): void;
4336
- /** Update legend settings */
4337
- updateLegend(key: string, value: unknown): void;
4338
- /** Update label settings */
4339
- updateLabel(key: string, value: unknown): void;
4340
- /** Update label center config */
4341
- updateLabelCenterConfig(key: string, value: any): void;
4342
- /** Update label center text */
4343
- updateLabelCenterText(lang: 'en' | 'ar', value: string): void;
4344
- /** Update card style config */
4345
- updateCardStyleConfig(key: keyof CardStyleConfig, value: any): void;
4346
- /** Update sort data bars config */
4347
- updateSortDataBarsConfig(key: string, value: any): void;
4348
- /** Update card info config */
4349
- updateCardInfoConfig(key: string, value: any): void;
4350
- /** Update border top visibility */
4351
- updateBorderTopShow(show: boolean): void;
4352
- /** Update border top color */
4353
- updateBorderTopColor(color: string): void;
4354
- /** Update map type */
4355
- updateMapType(value: string): void;
4356
- /** Add a new shadow */
4357
- addShadow(): void;
4358
- /** Remove a shadow */
4359
- removeShadow(index: number): void;
4360
- /** Update a shadow property */
4361
- updateShadow(index: number, key: keyof ShadowConfig, value: any): void;
4362
- /** Add override label */
4363
- addOverrideLabel(): void;
4364
- /** Remove override label */
4365
- removeOverrideLabel(index: number): void;
4366
- /** Update override label */
4367
- updateOverrideLabel(index: number, lang: 'en' | 'ar', value: string): void;
4368
- /** Add a default color */
4369
- addDefaultColor(color: string): void;
4370
- /** Remove a default color */
4371
- removeDefaultColor(index: number): void;
4372
- /** Update a default color */
4373
- updateDefaultColor(index: number, color: string): void;
4374
- trackByIndex(index: number): number;
4375
- /** Update format config */
4376
- updateFormatConfig(key: keyof FormatConfig, value: any): void;
4377
- /** Update table format config */
4378
- updateTableFormatConfig(key: keyof TableFormatConfig, value: any): void;
4379
- /** Update table format sort config */
4380
- updateTableFormatSortConfig(key: 'column' | 'direction', value: string): void;
4381
- /** Reset table format to default */
4382
- resetTableFormat(): void;
4383
- /** Get color condition indexes */
4384
- getColorConditionIndexes(): number[];
4385
- /** Check if a bar index is expanded */
4386
- isColorConditionExpanded(index: number): boolean;
4387
- /** Toggle bar index expansion */
4388
- toggleColorConditionExpanded(index: number): void;
4389
- /** Add bar index for color conditions */
4390
- addColorConditionIndex(): void;
4391
- /** Remove bar index */
4392
- removeColorConditionIndex(index: number): void;
4393
- /** Add condition to bar index */
4394
- addColorCondition(index: number): void;
4395
- /** Remove condition from bar index */
4396
- removeColorCondition(index: number, conditionIndex: number): void;
4397
- /** Update color condition */
4398
- updateColorCondition(index: number, conditionIndex: number, key: keyof ColorCondition, value: any): void;
4399
- /** Update ring gauge config */
4400
- updateRingGaugeConfig(key: keyof RingGaugeConfig, value: any): void;
4401
- /** Update card list hide properties */
4402
- updateCardListHideProperties(properties: string[]): void;
4403
- /** Add props config item */
4404
- addPropsConfigItem(): void;
4405
- /** Remove props config item */
4406
- removePropsConfigItem(index: number): void;
4407
- /** Update props config item */
4408
- updatePropsConfigItem(index: number, key: keyof PropsConfigAsIndexItem, value: any): void;
4409
- /** Update order config field */
4410
- updateOrderConfig(key: keyof OrderConfig, value: any): void;
4411
- /** Add order item */
4412
- addOrderItem(): void;
4413
- /** Remove order item */
4414
- removeOrderItem(index: number): void;
4415
- /** Update order item */
4416
- updateOrderItem(index: number, value: string): void;
4417
- /** Move order item up */
4418
- moveOrderItemUp(index: number): void;
4419
- /** Move order item down */
4420
- moveOrderItemDown(index: number): void;
4421
- /** Get property translation keys */
4422
- getPropertyTranslationKeys(): string[];
4423
- /** Add property translation */
4424
- addPropertyTranslation(propertyKey: string): void;
4425
- /** Remove property translation */
4426
- removePropertyTranslation(propertyKey: string): void;
4427
- /** Update property translation */
4428
- updatePropertyTranslation(propertyKey: string, lang: 'ar' | 'en', value: string): void;
4429
- /** Get property color keys */
4430
- getPropertyColorKeys(): string[];
4431
- /** Add property color */
4432
- addPropertyColor(propertyKey: string): void;
4433
- /** Copy property translations */
4434
- copyPropertyTranslations(): void;
4435
- /** Toggle property translations paste area */
4436
- togglePropertyTranslationsPaste(): void;
4437
- /** Apply pasted property translations */
4438
- applyPropertyTranslationsPaste(): void;
4439
- /** Remove property color */
4440
- removePropertyColor(propertyKey: string): void;
4441
- /** Update property color */
4442
- updatePropertyColor(propertyKey: string, selectedKey: string): void;
4443
- /** Copy property colors */
4444
- copyPropertyColors(): void;
4445
- /** Toggle property colors paste area */
4446
- togglePropertyColorsPaste(): void;
4447
- /** Apply pasted property colors */
4448
- applyPropertyColorsPaste(): void;
4449
- /** Update format X-Axis config */
4450
- updateFormatXAxisConfig(key: keyof FormatXAxisConfig, value: any): void;
4451
- /** Update table columns config */
4452
- updateTableColumnsConfig(key: keyof ExtraColumnFromLookupConfig, value: any): void;
4453
- /** Update timeline header colors (single config) */
4454
- updateTimelineHeaderColorSingle(key: 'bgColor' | 'color', value: string): void;
4455
- /** Update toggle association */
4456
- updateToggleAssociation(value: boolean): void;
4457
- /** Selected property for adding translations */
4458
- readonly selectedPropertyForTranslation: _angular_core.WritableSignal<string>;
4459
- /** Selected property for adding colors */
4460
- readonly selectedPropertyForColor: _angular_core.WritableSignal<string>;
4461
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DisplaySettings, never>;
4462
- 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>;
4463
4703
  }
4464
4704
 
4465
4705
  /** Action type option */
@@ -4573,10 +4813,6 @@ declare class ActionsSettings {
4573
4813
  /**
4574
4814
  * Track by action id for ngFor
4575
4815
  */
4576
- trackByActionId(_index: number, action: ActionConfig): string;
4577
- /**
4578
- * Track by index helper
4579
- */
4580
4816
  trackByIndex(index: number): number;
4581
4817
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionsSettings, never>;
4582
4818
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionsSettings, "mt-actions-settings", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; }, { "clientConfigChange": "clientConfigChange"; }, never, never, true, never>;
@@ -4630,5 +4866,5 @@ declare class GetChartActionsPipe implements PipeTransform {
4630
4866
  */
4631
4867
  declare function cloneDeep<T>(obj: T): T;
4632
4868
 
4633
- 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 };
4634
- 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, DashboardBuilderData, 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 };