@masterteam/dashboard-builder 0.0.35 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/dashboard-builder",
3
- "version": "0.0.35",
3
+ "version": "0.0.37",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/dashboard-builder",
6
6
  "linkDirectory": true,
@@ -21,8 +21,8 @@
21
21
  "primeng": "21.1.5",
22
22
  "rxjs": "^7.8.2",
23
23
  "tailwindcss": "^4.2.2",
24
- "@masterteam/components": "^0.0.191",
25
- "@masterteam/icons": "^0.0.16"
24
+ "@masterteam/icons": "^0.0.16",
25
+ "@masterteam/components": "^0.0.192"
26
26
  },
27
27
  "dependencies": {
28
28
  "tslib": "^2.8.1",
@@ -31,8 +31,9 @@ type ReportType = 'Dashboard' | 'Excel';
31
31
  * Request for modules tree from gateway
32
32
  */
33
33
  interface ModulesTreeRequest {
34
- services: string[];
34
+ services?: string[];
35
35
  includeValues?: boolean;
36
+ workspaceId?: string | number | null;
36
37
  }
37
38
  /**
38
39
  * Module value item from tree response
@@ -42,6 +43,7 @@ interface ModuleValue {
42
43
  name: string;
43
44
  value: string;
44
45
  selector: string;
46
+ workspaceId?: string | number | null;
45
47
  }
46
48
  /**
47
49
  * Module item from tree response
@@ -51,6 +53,7 @@ interface ModuleItem {
51
53
  name: string;
52
54
  description?: string;
53
55
  version?: string;
56
+ workspaceId?: string | number | null;
54
57
  values: ModuleValue[];
55
58
  }
56
59
  /**
@@ -66,6 +69,13 @@ interface ServiceItem {
66
69
  interface ModulesTreeResponse {
67
70
  services: ServiceItem[];
68
71
  }
72
+ /**
73
+ * Workspace option returned by gateway metadata.
74
+ */
75
+ interface WorkspaceOption {
76
+ id: string | number;
77
+ name: string;
78
+ }
69
79
  /**
70
80
  * Grouped module option for select dropdown
71
81
  */
@@ -96,6 +106,7 @@ interface ModuleSelectOption {
96
106
  interface BulkPropertyRequestItem {
97
107
  serviceName: string;
98
108
  selector: string;
109
+ workspaceId?: string | number | null;
99
110
  }
100
111
  /**
101
112
  * Canonical property metadata returned by backend reads.
@@ -123,6 +134,7 @@ interface CatalogPropertyDto {
123
134
  */
124
135
  interface BulkPropertiesRequest {
125
136
  items: BulkPropertyRequestItem[];
137
+ workspaceId?: string | number | null;
126
138
  }
127
139
  /**
128
140
  * Response item from bulk properties lookup
@@ -692,6 +704,8 @@ interface AnyConfig {
692
704
  }
693
705
  /** Normalize a single filter operation (BE expects `Equals`, never `Equal`). */
694
706
  declare function normalizeFilterOperation(op: unknown): unknown;
707
+ /** Normalize legacy misspelled aggregate function values. */
708
+ declare function normalizeAggregateFunction(value: unknown): unknown;
695
709
  /** Normalize an array of filters in place (returns a new array). */
696
710
  declare function normalizeFilters(filters: any[] | undefined): any[] | undefined;
697
711
  /**
@@ -1569,7 +1583,7 @@ declare class ItemContextToolbarComponent {
1569
1583
  readonly action: _angular_core.OutputEmitterRef<ItemContextAction>;
1570
1584
  readonly allActions: _angular_core.Signal<({
1571
1585
  id: string;
1572
- labelEn: string;
1586
+ labelKey: string;
1573
1587
  icon: string;
1574
1588
  actionPayload: {
1575
1589
  type: "open-popover";
@@ -1577,7 +1591,7 @@ declare class ItemContextToolbarComponent {
1577
1591
  };
1578
1592
  } | {
1579
1593
  id: string;
1580
- labelEn: string;
1594
+ labelKey: string;
1581
1595
  icon: string;
1582
1596
  actionPayload: {
1583
1597
  type: "duplicate";
@@ -1585,7 +1599,7 @@ declare class ItemContextToolbarComponent {
1585
1599
  };
1586
1600
  } | {
1587
1601
  id: string;
1588
- labelEn: string;
1602
+ labelKey: string;
1589
1603
  icon: string;
1590
1604
  actionPayload: {
1591
1605
  type: "open-advanced-editor";
@@ -1593,7 +1607,7 @@ declare class ItemContextToolbarComponent {
1593
1607
  };
1594
1608
  } | {
1595
1609
  id: string;
1596
- labelEn: string;
1610
+ labelKey: string;
1597
1611
  icon: string;
1598
1612
  actionPayload: {
1599
1613
  type: "remove";
@@ -1654,13 +1668,20 @@ declare class ItemConfigPopoverComponent {
1654
1668
  /** Persisted config for the schema renderer. */
1655
1669
  readonly persistedConfig: _angular_core.Signal<ItemConfig | null>;
1656
1670
  /** Validation issues. */
1657
- readonly issues: _angular_core.Signal<_masterteam_dashboard_builder.ValidationIssue[]>;
1658
- readonly issuesByDomain: _angular_core.Signal<Record<_masterteam_dashboard_builder.ConfigDomainKey, _masterteam_dashboard_builder.ValidationIssue[]>>;
1671
+ readonly issues: _angular_core.Signal<ValidationIssue[]>;
1672
+ readonly issuesByDomain: _angular_core.Signal<Record<_masterteam_dashboard_builder.ConfigDomainKey, ValidationIssue[]>>;
1659
1673
  readonly hasErrors: _angular_core.Signal<boolean>;
1660
1674
  /** Advanced JSON draft. */
1661
1675
  readonly advancedJsonDraft: _angular_core.WritableSignal<string>;
1662
1676
  readonly advancedJsonError: _angular_core.WritableSignal<string>;
1663
1677
  private advancedJsonInitialized;
1678
+ translatedTabs(t: (key: string) => string): Array<{
1679
+ key: PopoverTab;
1680
+ value: PopoverTab;
1681
+ label: string;
1682
+ icon: string;
1683
+ }>;
1684
+ issueMessage(issue: ValidationIssue, t: (key: string, params?: Record<string, unknown>) => string): string;
1664
1685
  constructor();
1665
1686
  /** Selected style preset key (computed from the current layout). */
1666
1687
  readonly selectedPresetKey: _angular_core.Signal<StylePresetKey | null>;
@@ -1782,15 +1803,16 @@ declare class GuidedConfigDialogComponent {
1782
1803
  }
1783
1804
 
1784
1805
  declare class FilterChipsBarComponent {
1806
+ private readonly transloco;
1785
1807
  readonly chips: _angular_core.InputSignal<FilterChip[]>;
1786
1808
  readonly chipsChange: _angular_core.OutputEmitterRef<FilterChip[]>;
1787
1809
  readonly editingChipId: _angular_core.WritableSignal<string | null>;
1788
1810
  readonly showReadonly: _angular_core.WritableSignal<boolean>;
1789
1811
  readonly visibleChips: _angular_core.Signal<FilterChip[]>;
1790
1812
  readonly hiddenCount: _angular_core.Signal<number>;
1791
- scopeLabel(chip: FilterChip): string;
1792
- operatorLabel(chip: FilterChip): string;
1793
- formatValue(chip: FilterChip): string;
1813
+ scopeLabelKey(scope: FilterChip['scope']): string;
1814
+ operatorLabelKey(operator: FilterOperator): string;
1815
+ formatValue(chip: FilterChip, t?: (key: string, params?: Record<string, unknown>) => string): string;
1794
1816
  editableScope(source: FilterChip['source']): boolean;
1795
1817
  toggle(chip: FilterChip): void;
1796
1818
  remove(chip: FilterChip): void;
@@ -1818,7 +1840,7 @@ declare class FilterBuilderComponent {
1818
1840
  readonly showReadOnly: _angular_core.WritableSignal<boolean>;
1819
1841
  readonly OPERATOR_OPTIONS: {
1820
1842
  value: FilterOperator;
1821
- label: string;
1843
+ labelKey: string;
1822
1844
  group: "common" | "string" | "number" | "list" | "null";
1823
1845
  }[];
1824
1846
  readonly editableChips: _angular_core.Signal<FilterChip[]>;
@@ -1826,9 +1848,9 @@ declare class FilterBuilderComponent {
1826
1848
  readonly readOnlyCount: _angular_core.Signal<number>;
1827
1849
  readonly fieldOptions: _angular_core.Signal<FieldOption[]>;
1828
1850
  isKnownField(key: string): boolean;
1829
- scopeLabel(chip: FilterChip): string;
1830
- operatorReadonlyLabel(op: FilterOperator): string;
1831
- formatReadonlyValue(chip: FilterChip): string;
1851
+ scopeLabelKey(scope: FilterChip['scope']): string;
1852
+ operatorLabelKey(operator: FilterOperator): string;
1853
+ formatReadonlyValue(chip: FilterChip, t?: (key: string, params?: Record<string, unknown>) => string): string;
1832
1854
  formatList(value: unknown): string;
1833
1855
  getBetween(chip: FilterChip, idx: 0 | 1): string | number;
1834
1856
  valueKind(chip: FilterChip): 'list' | 'between' | 'boolean' | 'number' | 'text';
@@ -2042,6 +2064,7 @@ declare class ManageItemService {
2042
2064
  }
2043
2065
 
2044
2066
  declare class DatasourcePanelComponent {
2067
+ private readonly transloco;
2045
2068
  readonly item: _angular_core.InputSignal<DashboardChartItem | null>;
2046
2069
  readonly serviceConfigChange: _angular_core.OutputEmitterRef<Partial<ServiceConfig>>;
2047
2070
  readonly openAdvanced: _angular_core.OutputEmitterRef<void>;
@@ -2058,6 +2081,7 @@ declare class DatasourcePanelComponent {
2058
2081
  missing: string[];
2059
2082
  }>;
2060
2083
  onServiceConfigChange(patch: Partial<ServiceConfig>): void;
2084
+ private t;
2061
2085
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatasourcePanelComponent, never>;
2062
2086
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatasourcePanelComponent, "mt-datasource-panel", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, { "serviceConfigChange": "serviceConfigChange"; "openAdvanced": "openAdvanced"; }, never, never, true, never>;
2063
2087
  }
@@ -2186,7 +2210,9 @@ declare class DashboardBuilder implements OnInit, OnDestroy {
2186
2210
  private removeEventListeners;
2187
2211
  private loadPageIfNeeded;
2188
2212
  loadPage(id: string | number): void;
2189
- saveDash(): void;
2213
+ saveDash(options?: {
2214
+ silent?: boolean;
2215
+ }): void;
2190
2216
  addOrEditPage(page?: DashboardPage): void;
2191
2217
  deleteReport(): void;
2192
2218
  onItemResize(item: GridsterItem, itemComponent: any): void;
@@ -2247,6 +2273,7 @@ declare class DashboardBuilder implements OnInit, OnDestroy {
2247
2273
  * without opening any other surface.
2248
2274
  */
2249
2275
  private requestEditTitle;
2276
+ requestLayoutTitleEdit(chart: DashboardChartItem, event: Event): void;
2250
2277
  /** Whether the chart has a linked dialog (Manage menu shows dialog entries). */
2251
2278
  hasLinkedDialog(chart: DashboardChartItem): boolean;
2252
2279
  /** Whether the chart can have a linked dialog added (chart cards that aren't dialogs themselves). */
@@ -2828,6 +2855,7 @@ declare class DashboardItem implements OnInit, OnDestroy {
2828
2855
  * host level so every renderer (chart, table, statistic, properties,
2829
2856
  * entity-preview, etc.) benefits from a single, consistent CTA.
2830
2857
  */
2858
+ readonly missingRequiredConfiguration: _angular_core.Signal<boolean>;
2831
2859
  readonly needsConfiguration: _angular_core.Signal<boolean>;
2832
2860
  /**
2833
2861
  * Pass-6 guidance state. Surfaces the right title/hint/CTA for the
@@ -3271,8 +3299,8 @@ declare class CardInfoComponent {
3271
3299
  type CardViewMode = 'echart' | 'splitter' | 'timeline' | 'phaseGateStepper' | 'raw';
3272
3300
  declare class ChartCardComponent implements OnInit, OnDestroy {
3273
3301
  private readonly storeService;
3302
+ private readonly dashboardStore;
3274
3303
  private readonly actionService;
3275
- private readonly transloco;
3276
3304
  private readonly subscription;
3277
3305
  /** Dashboard ID for this card */
3278
3306
  readonly dashboardId: _angular_core.InputSignal<string | number>;
@@ -3451,6 +3479,20 @@ declare class EChartComponent implements OnInit, AfterViewInit, OnChanges, OnDes
3451
3479
  * Get chart instance
3452
3480
  */
3453
3481
  getChartInstance(): EChartsType | null;
3482
+ private applyResponsiveOptions;
3483
+ private resolveConfiguredLegendSide;
3484
+ private resolveEffectiveLegendSide;
3485
+ private hasVisibleLegend;
3486
+ private resolveLegendSide;
3487
+ private resolveSingleLegendSide;
3488
+ private isLegendSide;
3489
+ private hasLegendCoordinate;
3490
+ private isCenteredLegendCoordinate;
3491
+ private getResponsiveGridOffsets;
3492
+ private applyResponsiveLegend;
3493
+ private mapLegendConfig;
3494
+ private applyLegendSideCoordinates;
3495
+ private estimateCategoryCount;
3454
3496
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EChartComponent, never>;
3455
3497
  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>;
3456
3498
  }
@@ -3616,7 +3658,7 @@ interface StatusItem {
3616
3658
  }
3617
3659
  declare class HeaderCardComponent implements OnInit, OnDestroy {
3618
3660
  private readonly storeService;
3619
- private readonly transloco;
3661
+ private readonly dashboardStore;
3620
3662
  private readonly subscription;
3621
3663
  /** Dashboard ID */
3622
3664
  readonly dashboardId: _angular_core.InputSignal<string | number>;
@@ -3625,6 +3667,10 @@ declare class HeaderCardComponent implements OnInit, OnDestroy {
3625
3667
  type: string;
3626
3668
  data: any;
3627
3669
  }>;
3670
+ /** Whether title can be edited inline from builder mode. */
3671
+ readonly titleEditable: _angular_core.InputSignal<boolean>;
3672
+ /** Emitted when the title changes. */
3673
+ readonly titleChange: _angular_core.OutputEmitterRef<string>;
3628
3674
  /** Configuration item */
3629
3675
  readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
3630
3676
  /** Data handled (for dynamic text replacement) */
@@ -3667,6 +3713,8 @@ declare class HeaderCardComponent implements OnInit, OnDestroy {
3667
3713
  readonly cardStyles: _angular_core.Signal<any>;
3668
3714
  /** Status indicators */
3669
3715
  readonly statuses: _angular_core.WritableSignal<StatusItem[]>;
3716
+ readonly editingTitle: _angular_core.WritableSignal<boolean>;
3717
+ readonly titleDraft: _angular_core.WritableSignal<string>;
3670
3718
  /** Is clickable */
3671
3719
  readonly isClickable: _angular_core.Signal<boolean>;
3672
3720
  /** Show arrow */
@@ -3675,10 +3723,13 @@ declare class HeaderCardComponent implements OnInit, OnDestroy {
3675
3723
  private processStatuses;
3676
3724
  ngOnDestroy(): void;
3677
3725
  onTitleClick(): void;
3726
+ onTitleInput(value: string): void;
3727
+ onCommitTitle(): void;
3728
+ onCancelTitle(): void;
3678
3729
  onArrowClick(): void;
3679
3730
  onClick(): void;
3680
3731
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderCardComponent, never>;
3681
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderCardComponent, "mt-header-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
3732
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderCardComponent, "mt-header-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "titleEditable": { "alias": "titleEditable"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; "titleChange": "titleChange"; }, never, never, true, never>;
3682
3733
  }
3683
3734
 
3684
3735
  declare class ListStatisticCardComponent implements OnInit, OnDestroy {
@@ -3889,7 +3940,11 @@ declare class TopbarCardComponent implements OnInit, OnDestroy {
3889
3940
  private readonly subscription;
3890
3941
  readonly dashboardId: _angular_core.InputSignal<string | number>;
3891
3942
  readonly defaultBreadcrumbLabel: _angular_core.InputSignal<string>;
3943
+ readonly titleEditable: _angular_core.InputSignal<boolean>;
3944
+ readonly titleChange: _angular_core.OutputEmitterRef<string>;
3892
3945
  readonly configurationItem: _angular_core.WritableSignal<ItemConfig | null>;
3946
+ readonly editingTitle: _angular_core.WritableSignal<boolean>;
3947
+ readonly titleDraft: _angular_core.WritableSignal<string>;
3893
3948
  readonly languageCode: _angular_core.Signal<string>;
3894
3949
  readonly queryParams: _angular_core.Signal<Record<string, any>>;
3895
3950
  readonly styleConfig: _angular_core.Signal<Record<string, any>>;
@@ -3911,8 +3966,12 @@ declare class TopbarCardComponent implements OnInit, OnDestroy {
3911
3966
  ngOnInit(): void;
3912
3967
  ngOnDestroy(): void;
3913
3968
  isExternalLink(link: string): boolean;
3969
+ onStartEditTitle(event: Event): void;
3970
+ onTitleInput(value: string): void;
3971
+ onCommitTitle(): void;
3972
+ onCancelTitle(): void;
3914
3973
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TopbarCardComponent, never>;
3915
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarCardComponent, "mt-topbar-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "defaultBreadcrumbLabel": { "alias": "defaultBreadcrumbLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3974
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarCardComponent, "mt-topbar-card", never, { "dashboardId": { "alias": "dashboardId"; "required": true; "isSignal": true; }; "defaultBreadcrumbLabel": { "alias": "defaultBreadcrumbLabel"; "required": false; "isSignal": true; }; "titleEditable": { "alias": "titleEditable"; "required": false; "isSignal": true; }; }, { "titleChange": "titleChange"; }, never, never, true, never>;
3916
3975
  }
3917
3976
 
3918
3977
  declare class DashboardItemStoreService {
@@ -4179,6 +4238,9 @@ declare class StackBarChartHandler {
4179
4238
  * Helper method to convert legend position based on language
4180
4239
  */
4181
4240
  private getLegendPositionX;
4241
+ private normalizeLegendPosition;
4242
+ private getLegendLayout;
4243
+ private getLegendGridOffset;
4182
4244
  /**
4183
4245
  * handleStackBarChart - matches functionName from CHART_TYPES
4184
4246
  */
@@ -4952,6 +5014,10 @@ interface DashboardTargetTemplateSourceLink {
4952
5014
  isFilterLinkage?: boolean;
4953
5015
  isLeftJoin?: boolean;
4954
5016
  }
5017
+ interface DashboardSaveRequestOptions {
5018
+ /** Suppress host interceptor success toasts for automatic/internal saves. */
5019
+ silent?: boolean;
5020
+ }
4955
5021
  interface DashboardChartTemplate {
4956
5022
  selection: DashboardTargetTemplateSelection[];
4957
5023
  sourceLinks: DashboardTargetTemplateSourceLink[];
@@ -5020,6 +5086,11 @@ declare class DashboardBuilderService {
5020
5086
  * Optional services filter for the modules tree request.
5021
5087
  */
5022
5088
  readonly modulesTreeServices: _angular_core.WritableSignal<readonly string[] | null>;
5089
+ /**
5090
+ * Selected workspace for metadata requests. Hosts with workspace-aware
5091
+ * metadata can set it through the data-source UI; older hosts ignore it.
5092
+ */
5093
+ readonly modulesTreeWorkspaceId: _angular_core.WritableSignal<string | number | null>;
5023
5094
  /**
5024
5095
  * Fixed selections that cannot be removed or edited in SelectionConfiguration.
5025
5096
  * These selections are always shown and are read-only.
@@ -5027,6 +5098,8 @@ declare class DashboardBuilderService {
5027
5098
  readonly fixedSelections: _angular_core.WritableSignal<ISelection[]>;
5028
5099
  /** API configuration */
5029
5100
  private urlPrefix;
5101
+ /** Module tree requests are shared per services/workspace key. */
5102
+ private readonly modulesTreeCache;
5030
5103
  /** HTTP context for gateway requests */
5031
5104
  private gatewayContext;
5032
5105
  constructor();
@@ -5051,6 +5124,7 @@ declare class DashboardBuilderService {
5051
5124
  */
5052
5125
  clearFixedSelections(): void;
5053
5126
  setModulesTreeServices(services: readonly string[] | null | undefined): void;
5127
+ setModulesTreeWorkspaceId(workspaceId: string | number | null | undefined): void;
5054
5128
  /**
5055
5129
  * Add a single fixed selection
5056
5130
  * @param selection Selection to add as fixed
@@ -5097,7 +5171,7 @@ declare class DashboardBuilderService {
5097
5171
  /**
5098
5172
  * Link a chart to a report (creates or updates link)
5099
5173
  */
5100
- linkChart(request: LinkChartRequest): Observable<ApiResponse<void>>;
5174
+ linkChart(request: LinkChartRequest, options?: DashboardSaveRequestOptions): Observable<ApiResponse<void>>;
5101
5175
  /**
5102
5176
  * Bulk link charts to a report.
5103
5177
  *
@@ -5116,24 +5190,30 @@ declare class DashboardBuilderService {
5116
5190
  * If a host backend ever exposes a real bulk route, swap the inner call
5117
5191
  * for a single POST and keep the same outer signature.
5118
5192
  */
5119
- linkChartsBulk(requests: BulkLinkChartRequest[]): Observable<ApiResponse<BulkLinkChartResponse[]>>;
5193
+ linkChartsBulk(requests: BulkLinkChartRequest[], options?: DashboardSaveRequestOptions): Observable<ApiResponse<BulkLinkChartResponse[]>>;
5120
5194
  /**
5121
5195
  * Update chart link configuration
5122
5196
  */
5123
- updateChartLink(request: LinkChartRequest): Observable<ApiResponse<void>>;
5197
+ updateChartLink(request: LinkChartRequest, options?: DashboardSaveRequestOptions): Observable<ApiResponse<void>>;
5124
5198
  /**
5125
5199
  * Unlink a chart from a report
5126
5200
  */
5127
- unlinkChart(request: UnlinkChartRequest): Observable<ApiResponse<void>>;
5201
+ unlinkChart(request: UnlinkChartRequest, options?: DashboardSaveRequestOptions): Observable<ApiResponse<void>>;
5202
+ private messageRequestOptions;
5128
5203
  /**
5129
5204
  * Get all available services from gateway
5130
5205
  */
5131
5206
  getMetadataServices(): Observable<ApiResponse<any[]>>;
5207
+ /**
5208
+ * Get workspace options from gateway metadata. Older gateways may not expose
5209
+ * this route; callers should treat failures as "no workspace filter".
5210
+ */
5211
+ getWorkspaces(): Observable<ApiResponse<WorkspaceOption[]>>;
5132
5212
  /**
5133
5213
  * Get modules tree with all services, modules, and values in a single call
5134
5214
  * This returns the complete tree structure for efficient caching
5135
5215
  */
5136
- getModulesTree(): Observable<ApiResponse<ModulesTreeResponse>>;
5216
+ getModulesTree(request?: ModulesTreeRequest): Observable<ApiResponse<ModulesTreeResponse>>;
5137
5217
  /**
5138
5218
  * Get modules for a specific service
5139
5219
  * @param serviceName The service name (e.g., 'pplus')
@@ -5173,7 +5253,7 @@ declare class DashboardBuilderService {
5173
5253
  * @param items Array of { serviceName, moduleId } items
5174
5254
  * @returns Properties grouped by module (extracted from data.items)
5175
5255
  */
5176
- getBulkProperties(items: BulkPropertyRequestItem[]): Observable<ApiResponse<BulkPropertiesResponseItem[]>>;
5256
+ getBulkProperties(items: BulkPropertyRequestItem[], workspaceId?: string | number | null): Observable<ApiResponse<BulkPropertiesResponseItem[]>>;
5177
5257
  /**
5178
5258
  * Get context-aware dashboard targets for informative authoring.
5179
5259
  */
@@ -6492,6 +6572,7 @@ declare class TableQuery implements ControlValueAccessor {
6492
6572
  addAggregation(): void;
6493
6573
  removeAggregation(index: number): void;
6494
6574
  trackByIndex(index: number): number;
6575
+ private normalizeAggregateFunction;
6495
6576
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableQuery, never>;
6496
6577
  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>;
6497
6578
  }
@@ -6577,6 +6658,10 @@ declare class DataSourceSettings {
6577
6658
  readonly selectionMode: _angular_core.WritableSignal<"advanced" | "context">;
6578
6659
  readonly contextTargetSelector: _angular_core.WritableSignal<string | null>;
6579
6660
  readonly contextTargetApplyToken: _angular_core.WritableSignal<number>;
6661
+ /** Workspace-aware metadata state. Hidden when the gateway has no endpoint. */
6662
+ readonly workspaceOptions: _angular_core.WritableSignal<WorkspaceOption[]>;
6663
+ readonly selectedWorkspaceId: _angular_core.WritableSignal<string | number | null>;
6664
+ readonly showWorkspaceSelector: _angular_core.Signal<boolean>;
6580
6665
  /** Tab options for display */
6581
6666
  readonly tabOptions: _angular_core.Signal<{
6582
6667
  id: string;
@@ -6590,6 +6675,8 @@ declare class DataSourceSettings {
6590
6675
  readonly query: _angular_core.WritableSignal<any>;
6591
6676
  readonly isNormalized: _angular_core.WritableSignal<boolean>;
6592
6677
  readonly groupByMultiple: _angular_core.WritableSignal<string[]>;
6678
+ /** Active registry query schema used by GeneralQuery. */
6679
+ readonly querySchema: _angular_core.Signal<QuerySchema | null>;
6593
6680
  /** Repeater dashboard selection */
6594
6681
  readonly repeaterDashboardId: _angular_core.WritableSignal<number | null>;
6595
6682
  readonly availableDashboards: _angular_core.WritableSignal<{
@@ -6629,6 +6716,7 @@ declare class DataSourceSettings {
6629
6716
  * Handle selection changes
6630
6717
  */
6631
6718
  onSelectionsChange(selections: ISelection[]): void;
6719
+ onWorkspaceChange(workspaceId: string | number | null): void;
6632
6720
  /**
6633
6721
  * Handle context-aware template selection for informative mode.
6634
6722
  */
@@ -6759,6 +6847,7 @@ declare class DataSourceSettings {
6759
6847
  * Get chart type id for query component
6760
6848
  */
6761
6849
  getChartTypeId(): string;
6850
+ private loadWorkspaceOptions;
6762
6851
  private getContextTargetState;
6763
6852
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataSourceSettings, never>;
6764
6853
  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; }; "informativeContext": { "alias": "informativeContext"; "required": false; "isSignal": true; }; }, { "serviceConfigChange": "serviceConfigChange"; }, never, never, true, never>;
@@ -6893,6 +6982,8 @@ declare class ChartViewer {
6893
6982
  readonly chartTypeId: _angular_core.InputSignal<string>;
6894
6983
  /** Loading state for refresh */
6895
6984
  readonly loading: _angular_core.WritableSignal<boolean>;
6985
+ /** Preview only renders when the selected capability has enough config. */
6986
+ readonly canPreview: _angular_core.Signal<boolean>;
6896
6987
  /** Refresh the preview */
6897
6988
  refresh(): void;
6898
6989
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartViewer, never>;
@@ -6928,5 +7019,5 @@ declare class GetChartActionsPipe implements PipeTransform {
6928
7019
  */
6929
7020
  declare function cloneDeep<T>(obj: T): T;
6930
7021
 
6931
- export { ActionsSettings, BarChartHandler, BarControlUi, CHART_CAPABILITIES, CHART_TYPES, CONFIG_DOMAINS, CardContentComponent, CardFilterComponent, CardInfoComponent, ChartCardComponent, ChartDataService, ChartFilterDrawer, ChartSettingsDrawer, ChartViewer, ComparisonChartHandler, DashboardBuilder, DashboardBuilderService, DashboardItem, DashboardItemStoreService, DashboardList, DashboardStoreService, DashboardViewer, DataSourceSettings, DatasourcePanelComponent, DefaultControlUi, DisplaySettings, DynamicFiltersComponent, DynamicFiltersConfig, EChartComponent, PropertiesCardComponent as EntitiesPreviewCardComponent, EntityInfoComponent, EntityPreviewCardComponent, FilterBuilderComponent, FilterByGroupPipe, FilterChipsBarComponent, GaugeChartHandler, GeneralSettings, GetChartActionsPipe, GuidedConfigDialogComponent, HTTPMethod, HeaderCardComponent, ITEM_GUIDANCE_REGISTRY, ItemCardMenuComponent, ItemConfigPopoverComponent, ItemContextToolbarComponent, ItemGuidanceService, LevelCardHandler, LineChartHandler, ListStatisticCardComponent, ManageBreadcrumb, ManageFilterOnPage, ManageItem, ManageItemService, ManagePages, MapChartHandler, OverviewCardHandler, POPOVER_TABS, POPOVER_TAB_SPECS, PhaseGateStepperHandler, PieChartHandler, PieControlUi, PropertiesCardComponent, RingGaugeChartHandler, SPlusChartHandler, STYLE_PRESETS, SchemaControlRendererComponent, SkeletonCardComponent, SnapshotHandler, SplitterChartHandler, StackBarChartHandler, StackBarControlUi, StaticFiltersComponent, StatisticCardComponent, TableCardComponent, TableViewHandler, TimelineHandler, TopbarCardComponent, addCommasToNumber, applyBehaviorToPersisted, applyControlPatchToPersisted, applyControlPatchesToPersisted, applyFilterChipsToPersisted, applyLabelLegendFormatToPersisted, applyLayoutToPersisted, applyStyleToPersisted, applyTitleToPersisted, axisFormatters, behaviorToUi, bindingKey, buildAssembly, buildDisplayFieldPredicate, cloneDeep, createAxisFormatter, createTooltipFormatter, datasourceToUi, deepMerge, describeGuidance, domainsForCapability, dynamicReorder, dynamicTextReplace, fieldsToUi, filtersToUi, findDomain, findPreset, flattenSchema, formatCurrency, formatDate, formatForEditor, formatNumber, formatPercentage, formatValue, formatWordsUnderBar, formatXAxis, generalConfiguration, getBinding, getCapabilityById, getColorFromConditions, getControlSchema, getFallbackControlSchema, getLocalizedTitle, getNestedData, groupDatesByYearAndMonth, groupIssuesByDomain, handleFilterForCard, handleFilterForSnapshot, handleFiltersForCustom, hasBlockingIssues, isMobilePlatform, labelLegendFormatToUi, layoutToUi, listBindings, listBindingsForChart, listControlSchemaIds, listControlSchemas, moduleIdFromSelector, normalizeBeforeRequest, normalizeBeforeSave, normalizeChartTypeForRequest, normalizeFilterOperation, normalizeFilters, normalizeOnLoad, parseAdvancedJson, persistedToUi, presetsForCapability, readBoundValue, readByPath, resolveCapability, resolveDisplayFields, selectorFromLegacy, setByPath, sortChartData, sortDataTableView, styleToUi, switchAllKeysSmall, switchAllKeysToLower, titleToUi, toBackendChartType, toBackendSourceLink, validate };
6932
- export type { ActionConfig, ApiResponse, BackendChartType, BarChartData, BehaviorUi, BindingScope, BreadcrumbItem, BulkLinkChartRequest, BulkLinkChartResponse, BulkPropertiesRequest, BulkPropertiesResponse, BulkPropertiesResponseItem, BulkPropertiesResponseItemDto, BulkPropertyRequestItem, CardBorderStyleConfig, CardInfoConfig$1 as CardInfoConfig, CardStyleConfig$1 as CardStyleConfig, CatalogPropertyDto, ChartActionEvent, ChartActionsContext, ChartCapability, ChartCapabilityLegacyAliases, RequestType$1 as ChartCapabilityRequestType, ChartData, ChartDataHandled, ChartDomainSupport, ChartLabel, ChartLinkConfiguration, ChartTypeConfig, ClientConfig, ComponentType, ConfigDomainKey, ConfigDomainSpec, ConfigLookupShape, ConfigViewAssembly, ControlBinding, ControlBindingIndex, ControlBindingValueAdapter, ControlDomain, ControlField, ControlFieldType, ControlOption, ControlPatch, ControlSchema, ControlSection, ControlSectionScope, ControlVisiblePredicate, CustomApi, DashboardBuilderData, DashboardChartItem, DashboardChartTemplate, DashboardDialogItem, DashboardInformativeContext, DashboardItemStore, DashboardListEvent, DashboardPage, DashboardTargetOption, DashboardTargetPathStep, DashboardTargetTemplateFilter, DashboardTargetTemplateSelection, DashboardTargetTemplateSourceLink, DashboardTargetsContextInfo, DashboardTargetsResponse, DatasourceUi, DisplayConfig, DisplayField, DisplayFieldQuery, DisplaySchema, EChartSeriesItem, ExcelSheet, FieldAssignment, FieldsUi, FilterChip, FilterConfig, FilterOperator, FilterOption, FilterScope, FilterSource, FiltersUi, FlattenedControl, FormatXAxisConfig$1 as FormatXAxisConfig, GroupedModuleOption, GuidanceInput, GuidedConfigDialogData, GuidedConfigDialogResult, GuidedStep, HandleAction, HeaderCardConfig$1 as HeaderCardConfig, IModule, IModuleType, IProperty, IPropertyWithGroup, ISelection, ItemCardMenuAction, ItemConfig, ItemConfigPopoverData, ItemConfigPopoverResult, ItemContextAction, ItemGuidanceAction, ItemGuidanceDescriptor, ItemGuidanceSeverity, ItemGuidanceState, LabelLegendFormatUi, LayoutUi, LevelCardData, LevelCardProperty, LinkChartRequest, LocalizedName, ModuleItem, ModuleSelectOption, ModuleType, ModuleValue, ModulesTreeRequest, ModulesTreeResponse, ParseResult, PersistedItemConfig, PhaseGateProperty, PhaseGateStep, PieChartData, PopoverTab, PopoverTabSpec, Product, PropertiesResponse, PropertyItem, PropertyItemOption, PropertyItemsResponse, QueryEditorKind, QueryField, QuerySchema, QuickManageType, RendererKey, Report, ReportChartLink, ReportDashboardConfig, ReportExcelConfig, ReportType, ReportUrl, RequestType, RuntimeItemConfig, SelectionFilter, ServiceConfig, ServiceItem, SourceLink, StaticFilterConfig, StaticFilterItem, StatisticCardData, StyleConfig, StylePreset, StylePresetKey, StyleUi, TableColumn$1 as TableColumn, TableViewData, TimelineData, TimelineItem, TitleUi, UiItemConfig, UnlinkChartRequest, ValidateOptions, ValidationIssue, ValidationSeverity };
7022
+ export { ActionsSettings, BarChartHandler, BarControlUi, CHART_CAPABILITIES, CHART_TYPES, CONFIG_DOMAINS, CardContentComponent, CardFilterComponent, CardInfoComponent, ChartCardComponent, ChartDataService, ChartFilterDrawer, ChartSettingsDrawer, ChartViewer, ComparisonChartHandler, DashboardBuilder, DashboardBuilderService, DashboardItem, DashboardItemStoreService, DashboardList, DashboardStoreService, DashboardViewer, DataSourceSettings, DatasourcePanelComponent, DefaultControlUi, DisplaySettings, DynamicFiltersComponent, DynamicFiltersConfig, EChartComponent, PropertiesCardComponent as EntitiesPreviewCardComponent, EntityInfoComponent, EntityPreviewCardComponent, FilterBuilderComponent, FilterByGroupPipe, FilterChipsBarComponent, GaugeChartHandler, GeneralSettings, GetChartActionsPipe, GuidedConfigDialogComponent, HTTPMethod, HeaderCardComponent, ITEM_GUIDANCE_REGISTRY, ItemCardMenuComponent, ItemConfigPopoverComponent, ItemContextToolbarComponent, ItemGuidanceService, LevelCardHandler, LineChartHandler, ListStatisticCardComponent, ManageBreadcrumb, ManageFilterOnPage, ManageItem, ManageItemService, ManagePages, MapChartHandler, OverviewCardHandler, POPOVER_TABS, POPOVER_TAB_SPECS, PhaseGateStepperHandler, PieChartHandler, PieControlUi, PropertiesCardComponent, RingGaugeChartHandler, SPlusChartHandler, STYLE_PRESETS, SchemaControlRendererComponent, SkeletonCardComponent, SnapshotHandler, SplitterChartHandler, StackBarChartHandler, StackBarControlUi, StaticFiltersComponent, StatisticCardComponent, TableCardComponent, TableViewHandler, TimelineHandler, TopbarCardComponent, addCommasToNumber, applyBehaviorToPersisted, applyControlPatchToPersisted, applyControlPatchesToPersisted, applyFilterChipsToPersisted, applyLabelLegendFormatToPersisted, applyLayoutToPersisted, applyStyleToPersisted, applyTitleToPersisted, axisFormatters, behaviorToUi, bindingKey, buildAssembly, buildDisplayFieldPredicate, cloneDeep, createAxisFormatter, createTooltipFormatter, datasourceToUi, deepMerge, describeGuidance, domainsForCapability, dynamicReorder, dynamicTextReplace, fieldsToUi, filtersToUi, findDomain, findPreset, flattenSchema, formatCurrency, formatDate, formatForEditor, formatNumber, formatPercentage, formatValue, formatWordsUnderBar, formatXAxis, generalConfiguration, getBinding, getCapabilityById, getColorFromConditions, getControlSchema, getFallbackControlSchema, getLocalizedTitle, getNestedData, groupDatesByYearAndMonth, groupIssuesByDomain, handleFilterForCard, handleFilterForSnapshot, handleFiltersForCustom, hasBlockingIssues, isMobilePlatform, labelLegendFormatToUi, layoutToUi, listBindings, listBindingsForChart, listControlSchemaIds, listControlSchemas, moduleIdFromSelector, normalizeAggregateFunction, normalizeBeforeRequest, normalizeBeforeSave, normalizeChartTypeForRequest, normalizeFilterOperation, normalizeFilters, normalizeOnLoad, parseAdvancedJson, persistedToUi, presetsForCapability, readBoundValue, readByPath, resolveCapability, resolveDisplayFields, selectorFromLegacy, setByPath, sortChartData, sortDataTableView, styleToUi, switchAllKeysSmall, switchAllKeysToLower, titleToUi, toBackendChartType, toBackendSourceLink, validate };
7023
+ export type { ActionConfig, ApiResponse, BackendChartType, BarChartData, BehaviorUi, BindingScope, BreadcrumbItem, BulkLinkChartRequest, BulkLinkChartResponse, BulkPropertiesRequest, BulkPropertiesResponse, BulkPropertiesResponseItem, BulkPropertiesResponseItemDto, BulkPropertyRequestItem, CardBorderStyleConfig, CardInfoConfig$1 as CardInfoConfig, CardStyleConfig$1 as CardStyleConfig, CatalogPropertyDto, ChartActionEvent, ChartActionsContext, ChartCapability, ChartCapabilityLegacyAliases, RequestType$1 as ChartCapabilityRequestType, ChartData, ChartDataHandled, ChartDomainSupport, ChartLabel, ChartLinkConfiguration, ChartTypeConfig, ClientConfig, ComponentType, ConfigDomainKey, ConfigDomainSpec, ConfigLookupShape, ConfigViewAssembly, ControlBinding, ControlBindingIndex, ControlBindingValueAdapter, ControlDomain, ControlField, ControlFieldType, ControlOption, ControlPatch, ControlSchema, ControlSection, ControlSectionScope, ControlVisiblePredicate, CustomApi, DashboardBuilderData, DashboardChartItem, DashboardChartTemplate, DashboardDialogItem, DashboardInformativeContext, DashboardItemStore, DashboardListEvent, DashboardPage, DashboardSaveRequestOptions, DashboardTargetOption, DashboardTargetPathStep, DashboardTargetTemplateFilter, DashboardTargetTemplateSelection, DashboardTargetTemplateSourceLink, DashboardTargetsContextInfo, DashboardTargetsResponse, DatasourceUi, DisplayConfig, DisplayField, DisplayFieldQuery, DisplaySchema, EChartSeriesItem, ExcelSheet, FieldAssignment, FieldsUi, FilterChip, FilterConfig, FilterOperator, FilterOption, FilterScope, FilterSource, FiltersUi, FlattenedControl, FormatXAxisConfig$1 as FormatXAxisConfig, GroupedModuleOption, GuidanceInput, GuidedConfigDialogData, GuidedConfigDialogResult, GuidedStep, HandleAction, HeaderCardConfig$1 as HeaderCardConfig, IModule, IModuleType, IProperty, IPropertyWithGroup, ISelection, ItemCardMenuAction, ItemConfig, ItemConfigPopoverData, ItemConfigPopoverResult, ItemContextAction, ItemGuidanceAction, ItemGuidanceDescriptor, ItemGuidanceSeverity, ItemGuidanceState, LabelLegendFormatUi, LayoutUi, LevelCardData, LevelCardProperty, LinkChartRequest, LocalizedName, ModuleItem, ModuleSelectOption, ModuleType, ModuleValue, ModulesTreeRequest, ModulesTreeResponse, ParseResult, PersistedItemConfig, PhaseGateProperty, PhaseGateStep, PieChartData, PopoverTab, PopoverTabSpec, Product, PropertiesResponse, PropertyItem, PropertyItemOption, PropertyItemsResponse, QueryEditorKind, QueryField, QuerySchema, QuickManageType, RendererKey, Report, ReportChartLink, ReportDashboardConfig, ReportExcelConfig, ReportType, ReportUrl, RequestType, RuntimeItemConfig, SelectionFilter, ServiceConfig, ServiceItem, SourceLink, StaticFilterConfig, StaticFilterItem, StatisticCardData, StyleConfig, StylePreset, StylePresetKey, StyleUi, TableColumn$1 as TableColumn, TableViewData, TimelineData, TimelineItem, TitleUi, UiItemConfig, UnlinkChartRequest, ValidateOptions, ValidationIssue, ValidationSeverity, WorkspaceOption };