@meshmakers/octo-meshboard 3.4.160 → 3.4.170

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.
@@ -1,13 +1,13 @@
1
1
  import { ProcessWidgetSpecificConfig } from '@meshmakers/octo-process-diagrams';
2
2
  import * as _angular_core from '@angular/core';
3
- import { Signal, AfterViewInit, EventEmitter, Type, OnInit, OnChanges, SimpleChanges, OnDestroy, EnvironmentProviders, InjectionToken } from '@angular/core';
3
+ import { Signal, AfterViewInit, OnChanges, EventEmitter, SimpleChanges, Type, OnInit, OnDestroy, EnvironmentProviders, InjectionToken } from '@angular/core';
4
4
  import { ControlValueAccessor } from '@angular/forms';
5
5
  import * as i1 from '@meshmakers/shared-ui';
6
- import { EntitySelectDialogDataSource, ColumnDefinition, DialogFetchOptions, DialogFetchResult, EntitySelectInputComponent, FetchDataOptions, FetchResultTyped, TableColumn as TableColumn$1, HasUnsavedChanges, TimeRangePickerLabels, TimeRangeSelection as TimeRangeSelection$1, TimeRange } from '@meshmakers/shared-ui';
6
+ import { EntitySelectDialogDataSource, ColumnDefinition, DialogFetchOptions, DialogFetchResult, EntitySelectInputComponent, TimeRange, FetchDataOptions, FetchResultTyped, TableColumn as TableColumn$1, HasUnsavedChanges, TimeRangePickerLabels, TimeRangeSelection as TimeRangeSelection$1 } from '@meshmakers/shared-ui';
7
7
  import { Observable, Subject } from 'rxjs';
8
8
  import { EntitySelectDataSource, EntitySelectResult } from '@meshmakers/shared-services';
9
9
  import * as _meshmakers_octo_services from '@meshmakers/octo-services';
10
- import { Exact, InputMaybe, Scalars, SearchFilterDto, FieldFilterDto, SortDto, CkTypeSelectorItem, RuntimeEntityItem as RuntimeEntityItem$1, RuntimeEntitySelectDataSource as RuntimeEntitySelectDataSource$1, RuntimeEntityDialogDataSource as RuntimeEntityDialogDataSource$1, AttributeItem, TenantIdProvider } from '@meshmakers/octo-services';
10
+ import { Exact, InputMaybe, Scalars, SearchFilterDto, FieldFilterDto, SortDto, CkTypeSelectorItem, RuntimeEntityItem as RuntimeEntityItem$1, RuntimeEntitySelectDataSource as RuntimeEntitySelectDataSource$1, RuntimeEntityDialogDataSource as RuntimeEntityDialogDataSource$1, QueryModeDto, AttributeItem, TenantIdProvider } from '@meshmakers/octo-services';
11
11
  export { RuntimeEntityDialogDataSource, RuntimeEntityItem, RuntimeEntitySelectDataSource, TENANT_ID_PROVIDER, TenantIdProvider } from '@meshmakers/octo-services';
12
12
  import * as Apollo from 'apollo-angular';
13
13
  import { CkTypeSelectorInputComponent, AttributeValueTypeDto, FieldFilterItem, FilterVariable, PropertyGridItem, PropertyGridConfig, OctoGraphQlDataSource, FieldFilterEditorComponent } from '@meshmakers/octo-ui';
@@ -16,6 +16,34 @@ import * as _progress_kendo_svg_icons from '@progress/kendo-svg-icons';
16
16
  import { SVGIcon } from '@progress/kendo-svg-icons';
17
17
  import { TileLayoutReorderEvent, TileLayoutResizeEvent } from '@progress/kendo-angular-layout';
18
18
 
19
+ /**
20
+ * Persistent-query family classification.
21
+ *
22
+ * The query builder persists both runtime-data and stream-data queries as
23
+ * `systemPersistentQuery` entities. They are distinguished by the
24
+ * `queryCkTypeId` field, which carries a substring matching one of the
25
+ * known kinds below.
26
+ *
27
+ * Ordering matters: `GroupingAggregationSdQuery` contains `AggregationSdQuery`
28
+ * as a substring, so the grouping variant must be tested first.
29
+ */
30
+ type QueryFamily = 'runtime' | 'streamData';
31
+ type QueryKind = 'simple' | 'aggregation' | 'groupingAggregation' | 'downsampling';
32
+ interface QueryClassification {
33
+ family: QueryFamily;
34
+ kind: QueryKind;
35
+ }
36
+ /**
37
+ * Classify a persistent query by its `queryCkTypeId`.
38
+ * Returns `null` for unknown / legacy values; callers decide how to handle them.
39
+ */
40
+ declare function classifyQuery(queryCkTypeId: string | null | undefined): QueryClassification | null;
41
+ /**
42
+ * Convenience accessor — returns just the family ('runtime' | 'streamData')
43
+ * or null when the query type is unrecognised.
44
+ */
45
+ declare function queryFamily(queryCkTypeId: string | null | undefined): QueryFamily | null;
46
+
19
47
  /**
20
48
  * Mapping from diagram exposed property to runtime data source
21
49
  *
@@ -158,6 +186,7 @@ interface ProcessWidgetConfig extends WidgetConfig, ProcessWidgetSpecificConfig
158
186
  * MeshBoard Widget Models
159
187
  * Defines the interfaces for MeshBoard widgets and their data sources
160
188
  */
189
+
161
190
  /**
162
191
  * All supported data source types
163
192
  */
@@ -186,7 +215,13 @@ interface StaticDataSource extends WidgetDataSource {
186
215
  data?: unknown;
187
216
  }
188
217
  /**
189
- * Data source that executes a persistent query by its rtId
218
+ * Data source that executes a persistent query by its rtId.
219
+ *
220
+ * Both runtime-data and stream-data persistent queries are referenced through
221
+ * this single data-source type — switching between them is a configuration
222
+ * change, not a different widget. The `queryFamily` discriminator lets the
223
+ * widget pick the correct executor without an extra GraphQL round-trip; when
224
+ * absent it is derived from the query's `queryCkTypeId` at load time.
190
225
  */
191
226
  interface PersistentQueryDataSource extends WidgetDataSource {
192
227
  type: 'persistentQuery';
@@ -194,6 +229,8 @@ interface PersistentQueryDataSource extends WidgetDataSource {
194
229
  queryRtId: string;
195
230
  /** Display name of the query (for UI) */
196
231
  queryName?: string;
232
+ /** Query family: 'runtime' or 'streamData'. Derived from queryCkTypeId when absent. */
233
+ queryFamily?: QueryFamily;
197
234
  }
198
235
  /**
199
236
  * Aggregation types supported
@@ -273,6 +310,8 @@ interface RepeaterQueryDataSource extends WidgetDataSource {
273
310
  queryRtId?: string;
274
311
  /** Display name of the query (for UI) */
275
312
  queryName?: string;
313
+ /** Query family for the repeater query: 'runtime' or 'streamData'. Derived from queryCkTypeId when absent. */
314
+ queryFamily?: QueryFamily;
276
315
  /** Load entities by CK type (Entity Mode) */
277
316
  ckTypeId?: string;
278
317
  /** Filters for Entity Mode */
@@ -1044,6 +1083,12 @@ interface MeshBoardConfig {
1044
1083
  timeFilter?: MeshBoardTimeFilterConfig;
1045
1084
  /** Entity selector configurations for the toolbar */
1046
1085
  entitySelectors?: EntitySelectorConfig[];
1086
+ /**
1087
+ * Auto-refresh interval in seconds. `undefined` or `0` disables auto-refresh.
1088
+ * When set, the view polls all widgets at this interval and pauses while the
1089
+ * tab is hidden. Stream-data and runtime widgets refresh identically.
1090
+ */
1091
+ autoRefreshSeconds?: number;
1047
1092
  widgets: AnyWidgetConfig[];
1048
1093
  }
1049
1094
  /** @deprecated Use MeshBoardConfig instead */
@@ -1105,12 +1150,22 @@ type EntityWidget = DashboardWidget<AnyWidgetConfig, RuntimeEntityData>;
1105
1150
  type EntityListWidget = DashboardWidget<AnyWidgetConfig, RuntimeEntityData[]>;
1106
1151
 
1107
1152
  /**
1108
- * Persistent query item for selection in config dialogs
1153
+ * Persistent query item for selection in config dialogs.
1154
+ *
1155
+ * Two CK-type fields are exposed because they mean different things:
1156
+ * - `ckTypeId` — the persistent-query entity's own CK type (e.g.
1157
+ * `RtSimpleSdQuery`, `RtSimpleRtQuery`). This carries
1158
+ * the family marker used for runtime/stream-data
1159
+ * classification.
1160
+ * - `queryCkTypeId` — the CK type the query queries against (e.g.
1161
+ * `Basic.Energy/EnergyMeasurement`). Useful as a label
1162
+ * in pickers; NEVER use for family classification.
1109
1163
  */
1110
1164
  interface PersistentQueryItem {
1111
1165
  rtId: string;
1112
1166
  name: string;
1113
1167
  description?: string | null;
1168
+ ckTypeId?: string | null;
1114
1169
  queryCkTypeId?: string | null;
1115
1170
  }
1116
1171
  /**
@@ -1170,22 +1225,24 @@ declare class GetSystemPersistentQueriesDtoGQL extends Apollo.Query<GetSystemPer
1170
1225
 
1171
1226
  /**
1172
1227
  * Autocomplete data source for persistent query selection.
1173
- * Filters queries by search text using GraphQL.
1228
+ * Filters queries by search text using GraphQL, then narrows by family on the client.
1174
1229
  */
1175
1230
  declare class PersistentQueryAutocompleteDataSource implements EntitySelectDataSource<PersistentQueryItem> {
1176
1231
  private gql;
1177
- constructor(gql: GetSystemPersistentQueriesDtoGQL);
1232
+ private acceptFamilies;
1233
+ constructor(gql: GetSystemPersistentQueriesDtoGQL, acceptFamilies?: readonly QueryFamily[]);
1178
1234
  onFilter(filter: string, take?: number): Promise<EntitySelectResult<PersistentQueryItem>>;
1179
1235
  onDisplayEntity(entity: PersistentQueryItem): string;
1180
1236
  getIdEntity(entity: PersistentQueryItem): string;
1181
1237
  }
1182
1238
  /**
1183
1239
  * Dialog data source for persistent query selection grid.
1184
- * Provides columns and paginated data for the entity select dialog.
1240
+ * Provides columns and paginated data for the entity select dialog, narrowed by family on the client.
1185
1241
  */
1186
1242
  declare class PersistentQueryDialogDataSource implements EntitySelectDialogDataSource<PersistentQueryItem> {
1187
1243
  private gql;
1188
- constructor(gql: GetSystemPersistentQueriesDtoGQL);
1244
+ private acceptFamilies;
1245
+ constructor(gql: GetSystemPersistentQueriesDtoGQL, acceptFamilies?: readonly QueryFamily[]);
1189
1246
  getColumns(): ColumnDefinition[];
1190
1247
  fetchData(options: DialogFetchOptions): Observable<DialogFetchResult<PersistentQueryItem>>;
1191
1248
  onDisplayEntity(entity: PersistentQueryItem): string;
@@ -1206,7 +1263,7 @@ declare class PersistentQueryDialogDataSource implements EntitySelectDialogDataS
1206
1263
  * </mm-query-selector>
1207
1264
  * ```
1208
1265
  */
1209
- declare class QuerySelectorComponent implements ControlValueAccessor, AfterViewInit {
1266
+ declare class QuerySelectorComponent implements ControlValueAccessor, AfterViewInit, OnChanges {
1210
1267
  private readonly getSystemPersistentQueriesGQL;
1211
1268
  entitySelect: EntitySelectInputComponent;
1212
1269
  /** Placeholder text for the input */
@@ -1215,16 +1272,29 @@ declare class QuerySelectorComponent implements ControlValueAccessor, AfterViewI
1215
1272
  hint?: string;
1216
1273
  /** Whether the component is disabled */
1217
1274
  disabled: boolean;
1275
+ /**
1276
+ * Which query families to show in the picker.
1277
+ * Default: both runtime and stream-data.
1278
+ * Set to `['runtime']` for legacy widgets that cannot consume stream-data,
1279
+ * or `['streamData']` for stream-data-only pickers.
1280
+ *
1281
+ * Filtering happens client-side after a server-side fetch — small per-tenant
1282
+ * query counts make this acceptable; a server-side filter would require a
1283
+ * backend change.
1284
+ */
1285
+ acceptFamilies: readonly QueryFamily[];
1218
1286
  /** Emitted when a query is selected */
1219
1287
  querySelected: EventEmitter<PersistentQueryItem | null>;
1220
1288
  /** Emitted when queries are loaded (emits the selected query in a single-item array for compatibility) */
1221
1289
  queriesLoaded: EventEmitter<PersistentQueryItem[]>;
1222
- readonly queryDataSource: PersistentQueryAutocompleteDataSource;
1223
- readonly queryDialogDataSource: PersistentQueryDialogDataSource;
1290
+ queryDataSource: PersistentQueryAutocompleteDataSource;
1291
+ queryDialogDataSource: PersistentQueryDialogDataSource;
1224
1292
  private selectedQuery;
1225
1293
  private onChange;
1226
1294
  private onTouched;
1227
1295
  constructor();
1296
+ ngOnChanges(changes: SimpleChanges): void;
1297
+ private rebuildDataSources;
1228
1298
  ngAfterViewInit(): void;
1229
1299
  /**
1230
1300
  * Called when an entity is selected from the autocomplete or dialog
@@ -1244,7 +1314,7 @@ declare class QuerySelectorComponent implements ControlValueAccessor, AfterViewI
1244
1314
  registerOnTouched(fn: () => void): void;
1245
1315
  setDisabledState(isDisabled: boolean): void;
1246
1316
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuerySelectorComponent, never>;
1247
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuerySelectorComponent, "mm-query-selector", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "querySelected": "querySelected"; "queriesLoaded": "queriesLoaded"; }, never, never, true, never>;
1317
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuerySelectorComponent, "mm-query-selector", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "acceptFamilies": { "alias": "acceptFamilies"; "required": false; }; }, { "querySelected": "querySelected"; "queriesLoaded": "queriesLoaded"; }, never, never, true, never>;
1248
1318
  }
1249
1319
 
1250
1320
  /**
@@ -1593,6 +1663,7 @@ declare class MeshBoardStateService {
1593
1663
  variables?: MeshBoardVariable[];
1594
1664
  timeFilter?: MeshBoardTimeFilterConfig;
1595
1665
  entitySelectors?: EntitySelectorConfig[];
1666
+ autoRefreshSeconds?: number;
1596
1667
  }): void;
1597
1668
  /**
1598
1669
  * Gets current settings for the settings dialog.
@@ -1607,6 +1678,7 @@ declare class MeshBoardStateService {
1607
1678
  variables: MeshBoardVariable[];
1608
1679
  timeFilter?: MeshBoardTimeFilterConfig;
1609
1680
  entitySelectors?: EntitySelectorConfig[];
1681
+ autoRefreshSeconds?: number;
1610
1682
  };
1611
1683
  /**
1612
1684
  * Triggers a refresh of all widgets by creating new config references.
@@ -1675,6 +1747,18 @@ declare class MeshBoardStateService {
1675
1747
  * Gets the time filter configuration.
1676
1748
  */
1677
1749
  getTimeFilterConfig(): MeshBoardTimeFilterConfig | undefined;
1750
+ /**
1751
+ * Resolves the current time-filter selection to a concrete UTC `{from, to}`
1752
+ * range. Returns `null` when the filter is disabled, no selection exists,
1753
+ * or the selection is incomplete.
1754
+ *
1755
+ * Stream-data persistent queries consume this to bound their result set;
1756
+ * runtime queries ignore it.
1757
+ *
1758
+ * IANA-timezone-aware bucket boundaries are tracked separately (AB#4190);
1759
+ * this helper currently returns UTC boundaries derived from the picker.
1760
+ */
1761
+ resolveCurrentTimeRange(): TimeRange | null;
1678
1762
  /**
1679
1763
  * Updates the time filter configuration.
1680
1764
  */
@@ -1773,7 +1857,7 @@ declare class MeshBoardDataService {
1773
1857
  private readonly getDashboardEntityGQL;
1774
1858
  private readonly getCkModelsWithStateGQL;
1775
1859
  private readonly getEntitiesByCkTypeGQL;
1776
- private readonly executeRuntimeQueryGQL;
1860
+ private readonly queryExecutor;
1777
1861
  private readonly getAssociationTargetsGQL;
1778
1862
  private readonly getCkTypeAttributesGQL;
1779
1863
  private readonly apollo;
@@ -1835,10 +1919,12 @@ declare class MeshBoardDataService {
1835
1919
  */
1836
1920
  fetchRepeaterData(dataSource: RepeaterQueryDataSource): Promise<RepeaterDataItem[]>;
1837
1921
  /**
1838
- * Fetches repeater data from a persistent query.
1839
- * Maps query rows to RepeaterDataItem objects.
1922
+ * Fetches repeater data from a persistent query (runtime or stream-data).
1923
+ * Always sends `streamDataArgs` when a time filter is active — the runtime
1924
+ * path ignores the field, so this is safe regardless of the resolved family.
1840
1925
  */
1841
1926
  private fetchRepeaterFromQuery;
1927
+ private buildRepeaterStreamDataArgs;
1842
1928
  /**
1843
1929
  * Fetches repeater data from entities by CK type.
1844
1930
  * Maps entities to RepeaterDataItem objects.
@@ -2269,6 +2355,109 @@ declare class MeshBoardGridService {
2269
2355
  /** @deprecated Use MeshBoardGridService instead */
2270
2356
  declare const DashboardGridService: typeof MeshBoardGridService;
2271
2357
 
2358
+ /**
2359
+ * Time-range and downsampling arguments for stream-data persistent queries.
2360
+ * Mirrors the GraphQL input `StreamDataArguments` so widgets can build it
2361
+ * without importing generated DTO types directly. `queryMode` defaults to
2362
+ * `DEFAULT` when not supplied — the backend resolver requires the field but
2363
+ * the persistent query carries its own intrinsic mode that `arg` overrides.
2364
+ */
2365
+ interface StreamDataExecutionArgs {
2366
+ from?: Date | null;
2367
+ to?: Date | null;
2368
+ interval?: number | null;
2369
+ limit?: number | null;
2370
+ queryMode?: QueryModeDto;
2371
+ }
2372
+ interface QueryExecutionOptions {
2373
+ /** Page size — passed to the GraphQL `first` variable. */
2374
+ first?: number | null;
2375
+ /** Cursor — passed to the GraphQL `after` variable. */
2376
+ after?: string | null;
2377
+ /** Optional column / row sort definitions. */
2378
+ sortOrder?: SortDto[] | null;
2379
+ /** Field filters applied to the query rows. */
2380
+ fieldFilter?: FieldFilterDto[] | null;
2381
+ /** Stream-data-only: time-range, interval, limit, queryMode. Ignored for runtime queries. */
2382
+ streamDataArgs?: StreamDataExecutionArgs | null;
2383
+ /** Force a network round-trip instead of using the Apollo cache. */
2384
+ forceRefresh?: boolean;
2385
+ }
2386
+ interface QueryColumnInfo {
2387
+ attributePath: string;
2388
+ attributeValueType?: string | null;
2389
+ aggregationType?: string | null;
2390
+ }
2391
+ interface QueryCell {
2392
+ attributePath: string;
2393
+ value: unknown;
2394
+ }
2395
+ /**
2396
+ * Unified result-row shape across runtime and stream-data queries.
2397
+ * `__typename` lets callers distinguish row kinds when needed
2398
+ * (`RtSimpleQueryRow`, `RtAggregationQueryRow`, `RtGroupingAggregationQueryRow`,
2399
+ * `StreamDataQueryRow`).
2400
+ *
2401
+ * Stream-data rows surface `timestamp`, `rtWellKnownName`,
2402
+ * `rtCreationDateTime`, and `rtChangedDateTime` directly on the row — useful
2403
+ * for time-series x-axes. Runtime rows leave those fields undefined.
2404
+ */
2405
+ interface QueryResultRow {
2406
+ __typename?: string;
2407
+ rtId?: string | null;
2408
+ ckTypeId?: string | null;
2409
+ timestamp?: Date | null;
2410
+ rtWellKnownName?: string | null;
2411
+ rtCreationDateTime?: Date | null;
2412
+ rtChangedDateTime?: Date | null;
2413
+ cells: QueryCell[];
2414
+ }
2415
+ interface QueryExecutionResult {
2416
+ family: QueryFamily;
2417
+ queryRtId?: string | null;
2418
+ associatedCkTypeId?: string | null;
2419
+ columns: QueryColumnInfo[];
2420
+ rows: QueryResultRow[];
2421
+ totalCount: number;
2422
+ hasNextPage: boolean;
2423
+ endCursor?: string | null;
2424
+ }
2425
+ /**
2426
+ * Executes persistent queries by rtId and returns a unified result shape
2427
+ * regardless of whether the underlying query is runtime-data or stream-data.
2428
+ *
2429
+ * Widgets consume `QueryExecutionResult` and stay agnostic about which family
2430
+ * the saved query belongs to — switching a widget's data source between
2431
+ * runtime and stream-data is purely a configuration change.
2432
+ */
2433
+ declare class QueryExecutorService {
2434
+ private readonly runtimeGql;
2435
+ private readonly streamDataGql;
2436
+ private readonly persistentQueriesGql;
2437
+ /**
2438
+ * Cache of resolved query families, keyed by query rtId. Filled lazily for
2439
+ * legacy widget configs that pre-date the `queryFamily` field — saves a
2440
+ * round-trip on every refresh.
2441
+ */
2442
+ private readonly familyCache;
2443
+ execute(family: QueryFamily | undefined, queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
2444
+ /**
2445
+ * Resolves the family of a persistent query by rtId. Falls back to
2446
+ * `'runtime'` when the query type cannot be classified — this matches the
2447
+ * pre-Phase-1 behavior.
2448
+ */
2449
+ resolveFamily(queryRtId: string): Promise<QueryFamily>;
2450
+ executeRuntime(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
2451
+ executeStreamData(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
2452
+ private buildStreamDataArg;
2453
+ private mapColumns;
2454
+ private mapRuntimeRows;
2455
+ private mapStreamDataRows;
2456
+ private mapCells;
2457
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryExecutorService, never>;
2458
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<QueryExecutorService>;
2459
+ }
2460
+
2272
2461
  declare class EntityCardWidgetComponent implements DashboardWidget<EntityCardWidgetConfig, RuntimeEntityData>, OnInit, OnChanges {
2273
2462
  private readonly dataService;
2274
2463
  config: EntityCardWidgetConfig;
@@ -2345,9 +2534,15 @@ declare class EntityCardConfigDialogComponent implements OnInit {
2345
2534
 
2346
2535
  declare class KpiWidgetComponent implements DashboardWidget<KpiWidgetConfig, RuntimeEntityData>, OnInit, OnChanges {
2347
2536
  private readonly dataService;
2348
- private readonly executeRuntimeQueryGQL;
2537
+ private readonly queryExecutor;
2349
2538
  private readonly stateService;
2350
2539
  private readonly variableService;
2540
+ /**
2541
+ * Row __typenames KPI extraction recognises.
2542
+ * Runtime queries discriminate; stream-data queries collapse all kinds
2543
+ * (simple / aggregation / grouped / downsampling) into `StreamDataQueryRow`.
2544
+ */
2545
+ private static readonly SUPPORTED_ROW_TYPES;
2351
2546
  config: KpiWidgetConfig;
2352
2547
  protected readonly arrowUpIcon: _progress_kendo_svg_icons.SVGIcon;
2353
2548
  protected readonly arrowDownIcon: _progress_kendo_svg_icons.SVGIcon;
@@ -2385,6 +2580,7 @@ declare class KpiWidgetComponent implements DashboardWidget<KpiWidgetConfig, Run
2385
2580
  private loadData;
2386
2581
  private loadCountData;
2387
2582
  private loadPersistentQueryData;
2583
+ private buildStreamDataArgs;
2388
2584
  private extractAggregationValue;
2389
2585
  private extractGroupedAggregationValue;
2390
2586
  /**
@@ -2416,6 +2612,7 @@ interface KpiConfigResult extends WidgetConfigResult {
2416
2612
  labelAttribute?: string;
2417
2613
  queryRtId?: string;
2418
2614
  queryName?: string;
2615
+ queryFamily?: QueryFamily;
2419
2616
  queryMode?: KpiQueryMode;
2420
2617
  queryValueField?: string;
2421
2618
  queryCategoryField?: string;
@@ -2439,8 +2636,13 @@ declare class KpiConfigDialogComponent implements OnInit {
2439
2636
  private readonly getEntitiesByCkTypeGQL;
2440
2637
  private readonly ckTypeSelectorService;
2441
2638
  private readonly attributeSelectorService;
2442
- private readonly executeRuntimeQueryGQL;
2443
2639
  private readonly getRuntimeQueryColumnsGQL;
2640
+ private readonly queryExecutor;
2641
+ /**
2642
+ * Row __typenames the dialog recognises when collecting distinct category
2643
+ * values from a query result for the grouped-aggregation category picker.
2644
+ */
2645
+ private static readonly INTROSPECTION_ROW_TYPES;
2444
2646
  private readonly meshBoardStateService;
2445
2647
  private readonly windowRef;
2446
2648
  ckTypeSelectorInput?: CkTypeSelectorInputComponent;
@@ -2457,6 +2659,7 @@ declare class KpiConfigDialogComponent implements OnInit {
2457
2659
  initialDataSourceType?: KpiDataSourceType;
2458
2660
  initialQueryRtId?: string;
2459
2661
  initialQueryName?: string;
2662
+ initialQueryFamily?: QueryFamily;
2460
2663
  initialQueryMode?: KpiQueryMode;
2461
2664
  initialQueryValueField?: string;
2462
2665
  initialQueryCategoryField?: string;
@@ -2518,11 +2721,18 @@ declare class KpiConfigDialogComponent implements OnInit {
2518
2721
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
2519
2722
  onQueryModeChange(mode: KpiQueryMode): Promise<void>;
2520
2723
  private loadQueryColumnsAndValues;
2724
+ /**
2725
+ * Loads column metadata for the picker. Runtime queries use the
2726
+ * metadata-only resolver (no aggregation executed); stream-data queries
2727
+ * fall back to executing the query with `first: 1`. When `family` is
2728
+ * unknown (legacy configs), the executor resolves it once by rtId lookup.
2729
+ */
2730
+ private fetchColumnsForFamily;
2521
2731
  onCategoryFieldChange(categoryField: string): Promise<void>;
2522
2732
  private loadCategoryValuesForField;
2523
2733
  onFiltersChange(updatedFilters: FieldFilterItem[]): void;
2524
2734
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KpiConfigDialogComponent, never>;
2525
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KpiConfigDialogComponent, "mm-kpi-config-dialog", never, { "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialRtId": { "alias": "initialRtId"; "required": false; }; "initialValueAttribute": { "alias": "initialValueAttribute"; "required": false; }; "initialLabelAttribute": { "alias": "initialLabelAttribute"; "required": false; }; "initialPrefix": { "alias": "initialPrefix"; "required": false; }; "initialSuffix": { "alias": "initialSuffix"; "required": false; }; "initialTrend": { "alias": "initialTrend"; "required": false; }; "initialComparisonText": { "alias": "initialComparisonText"; "required": false; }; "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryMode": { "alias": "initialQueryMode"; "required": false; }; "initialQueryValueField": { "alias": "initialQueryValueField"; "required": false; }; "initialQueryCategoryField": { "alias": "initialQueryCategoryField"; "required": false; }; "initialQueryCategoryValue": { "alias": "initialQueryCategoryValue"; "required": false; }; "initialStaticValue": { "alias": "initialStaticValue"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
2735
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KpiConfigDialogComponent, "mm-kpi-config-dialog", never, { "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialRtId": { "alias": "initialRtId"; "required": false; }; "initialValueAttribute": { "alias": "initialValueAttribute"; "required": false; }; "initialLabelAttribute": { "alias": "initialLabelAttribute"; "required": false; }; "initialPrefix": { "alias": "initialPrefix"; "required": false; }; "initialSuffix": { "alias": "initialSuffix"; "required": false; }; "initialTrend": { "alias": "initialTrend"; "required": false; }; "initialComparisonText": { "alias": "initialComparisonText"; "required": false; }; "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; "initialQueryMode": { "alias": "initialQueryMode"; "required": false; }; "initialQueryValueField": { "alias": "initialQueryValueField"; "required": false; }; "initialQueryCategoryField": { "alias": "initialQueryCategoryField"; "required": false; }; "initialQueryCategoryValue": { "alias": "initialQueryCategoryValue"; "required": false; }; "initialStaticValue": { "alias": "initialStaticValue"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
2526
2736
  }
2527
2737
 
2528
2738
  interface GroupedAssociation {
@@ -2795,7 +3005,7 @@ interface QueryColumn {
2795
3005
  */
2796
3006
  declare class TableWidgetDataSourceDirective extends OctoGraphQlDataSource<Record<string, unknown>> {
2797
3007
  private readonly getEntitiesByCkTypeGQL;
2798
- private readonly executeRuntimeQueryGQL;
3008
+ private readonly queryExecutor;
2799
3009
  private readonly stateService;
2800
3010
  private readonly variableService;
2801
3011
  private _config;
@@ -2817,10 +3027,27 @@ declare class TableWidgetDataSourceDirective extends OctoGraphQlDataSource<Recor
2817
3027
  */
2818
3028
  private flattenAttributes;
2819
3029
  /**
2820
- * Fetches data from a persistent query.
2821
- * Extracts columns from the query response and transforms cells to flat records.
3030
+ * Row __typenames the table widget knows how to flatten. Runtime queries
3031
+ * use three discriminated variants; stream-data queries collapse all
3032
+ * kinds (simple / aggregation / grouped / downsampling) into a single
3033
+ * `StreamDataQueryRow` type.
3034
+ */
3035
+ private static readonly SUPPORTED_ROW_TYPES;
3036
+ /**
3037
+ * Fetches data from a persistent query (runtime or stream-data).
3038
+ * Family is determined from the cached `queryFamily` on the data source
3039
+ * (set by the config dialog when the user picks a query) and defaults to
3040
+ * `'runtime'` for legacy configs that predate stream-data support.
2822
3041
  */
2823
3042
  private fetchPersistentQueryData;
3043
+ /**
3044
+ * Flattens a unified `QueryResultRow` into a Kendo-grid-friendly record.
3045
+ * Cells are stored under their matching column's `attributePath` rather than
3046
+ * the cell's own — the engine emits cell paths in wire-form with a function
3047
+ * suffix (e.g. cell path `meterreading_count` for column path `meterReading`).
3048
+ * `matchesAttributePath` reconciles both forms.
3049
+ */
3050
+ private queryRowToRecord;
2824
3051
  /**
2825
3052
  * Converts query columns to TableColumn format for display.
2826
3053
  */
@@ -2841,6 +3068,12 @@ declare class TableWidgetDataSourceDirective extends OctoGraphQlDataSource<Recor
2841
3068
  * Resolves MeshBoard variables in filter values before conversion.
2842
3069
  */
2843
3070
  private convertFiltersToDto;
3071
+ /**
3072
+ * Builds `StreamDataExecutionArgs` from the MeshBoard's current time filter.
3073
+ * Returns `undefined` when no filter is active so the persistent query's
3074
+ * own bounds apply.
3075
+ */
3076
+ private buildStreamDataArgs;
2844
3077
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableWidgetDataSourceDirective, never>;
2845
3078
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableWidgetDataSourceDirective, "[mmTableWidgetDataSource]", ["mmTableWidgetDataSource"], { "config": { "alias": "config"; "required": false; }; }, { "queryColumnsLoaded": "queryColumnsLoaded"; }, never, never, true, never>;
2846
3079
  }
@@ -2899,6 +3132,8 @@ interface TableConfigResult {
2899
3132
  filters: FieldFilterDto[];
2900
3133
  queryRtId?: string;
2901
3134
  queryName?: string;
3135
+ /** Family of the selected persistent query — 'runtime' or 'streamData'. */
3136
+ queryFamily?: QueryFamily;
2902
3137
  pageSize: number;
2903
3138
  sortable: boolean;
2904
3139
  }
@@ -2933,6 +3168,7 @@ declare class TableConfigDialogComponent implements OnInit {
2933
3168
  initialSortable?: boolean;
2934
3169
  initialQueryRtId?: string;
2935
3170
  initialQueryName?: string;
3171
+ initialQueryFamily?: QueryFamily;
2936
3172
  protected readonly columnsIcon: _progress_kendo_svg_icons.SVGIcon;
2937
3173
  protected readonly sortIcon: _progress_kendo_svg_icons.SVGIcon;
2938
3174
  protected readonly filterIcon: _progress_kendo_svg_icons.SVGIcon;
@@ -2967,7 +3203,7 @@ declare class TableConfigDialogComponent implements OnInit {
2967
3203
  private formatColumnTitle;
2968
3204
  onCancel(): void;
2969
3205
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableConfigDialogComponent, never>;
2970
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableConfigDialogComponent, "mm-table-config-dialog", never, { "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialColumns": { "alias": "initialColumns"; "required": false; }; "initialSorting": { "alias": "initialSorting"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; "initialPageSize": { "alias": "initialPageSize"; "required": false; }; "initialSortable": { "alias": "initialSortable"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; }, {}, never, never, true, never>;
3206
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableConfigDialogComponent, "mm-table-config-dialog", never, { "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialColumns": { "alias": "initialColumns"; "required": false; }; "initialSorting": { "alias": "initialSorting"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; "initialPageSize": { "alias": "initialPageSize"; "required": false; }; "initialSortable": { "alias": "initialSortable"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; }, {}, never, never, true, never>;
2971
3207
  }
2972
3208
 
2973
3209
  declare class GaugeWidgetComponent implements DashboardWidget<GaugeWidgetConfig, RuntimeEntityData>, OnInit, OnChanges {
@@ -2976,7 +3212,8 @@ declare class GaugeWidgetComponent implements DashboardWidget<GaugeWidgetConfig,
2976
3212
  color: string;
2977
3213
  }[];
2978
3214
  private readonly dataService;
2979
- private readonly executeRuntimeQueryGQL;
3215
+ private readonly queryExecutor;
3216
+ private static readonly SUPPORTED_ROW_TYPES;
2980
3217
  private readonly stateService;
2981
3218
  private readonly variableService;
2982
3219
  config: GaugeWidgetConfig;
@@ -2999,6 +3236,7 @@ declare class GaugeWidgetComponent implements DashboardWidget<GaugeWidgetConfig,
2999
3236
  refresh(): void;
3000
3237
  private loadData;
3001
3238
  private loadPersistentQueryData;
3239
+ private buildStreamDataArgs;
3002
3240
  private extractAggregationValue;
3003
3241
  private extractGroupedAggregationValue;
3004
3242
  private parseNumericValue;
@@ -3026,6 +3264,7 @@ interface GaugeConfigResult extends WidgetConfigResult {
3026
3264
  labelAttribute?: string;
3027
3265
  queryRtId?: string;
3028
3266
  queryName?: string;
3267
+ queryFamily?: QueryFamily;
3029
3268
  queryMode?: KpiQueryMode;
3030
3269
  queryValueField?: string;
3031
3270
  queryCategoryField?: string;
@@ -3053,8 +3292,13 @@ declare class GaugeConfigDialogComponent implements OnInit {
3053
3292
  private readonly getEntitiesByCkTypeGQL;
3054
3293
  private readonly ckTypeSelectorService;
3055
3294
  private readonly attributeSelectorService;
3056
- private readonly executeRuntimeQueryGQL;
3057
3295
  private readonly getRuntimeQueryColumnsGQL;
3296
+ private readonly queryExecutor;
3297
+ /**
3298
+ * Row __typenames the dialog recognises when collecting distinct category
3299
+ * values from a query result for the grouped-aggregation category picker.
3300
+ */
3301
+ private static readonly INTROSPECTION_ROW_TYPES;
3058
3302
  private readonly meshBoardStateService;
3059
3303
  private readonly windowRef;
3060
3304
  ckTypeSelectorInput?: CkTypeSelectorInputComponent;
@@ -3075,6 +3319,7 @@ declare class GaugeConfigDialogComponent implements OnInit {
3075
3319
  initialDataSourceType?: GaugeDataSourceType;
3076
3320
  initialQueryRtId?: string;
3077
3321
  initialQueryName?: string;
3322
+ initialQueryFamily?: QueryFamily;
3078
3323
  initialQueryMode?: KpiQueryMode;
3079
3324
  initialQueryValueField?: string;
3080
3325
  initialQueryCategoryField?: string;
@@ -3137,11 +3382,18 @@ declare class GaugeConfigDialogComponent implements OnInit {
3137
3382
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
3138
3383
  onQueryModeChange(mode: KpiQueryMode): Promise<void>;
3139
3384
  private loadQueryColumnsAndValues;
3385
+ /**
3386
+ * Runtime queries use the metadata-only resolver (no aggregation executed);
3387
+ * stream-data queries fall back to executing the query with `first: 1`.
3388
+ * When `family` is unknown (legacy configs), the executor resolves it once
3389
+ * by rtId lookup.
3390
+ */
3391
+ private fetchColumnsForFamily;
3140
3392
  onCategoryFieldChange(categoryField: string): Promise<void>;
3141
3393
  private loadCategoryValuesForField;
3142
3394
  onFiltersChange(updatedFilters: FieldFilterItem[]): void;
3143
3395
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<GaugeConfigDialogComponent, never>;
3144
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<GaugeConfigDialogComponent, "mm-gauge-config-dialog", never, { "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialRtId": { "alias": "initialRtId"; "required": false; }; "initialGaugeType": { "alias": "initialGaugeType"; "required": false; }; "initialValueAttribute": { "alias": "initialValueAttribute"; "required": false; }; "initialLabelAttribute": { "alias": "initialLabelAttribute"; "required": false; }; "initialMin": { "alias": "initialMin"; "required": false; }; "initialMax": { "alias": "initialMax"; "required": false; }; "initialRanges": { "alias": "initialRanges"; "required": false; }; "initialShowLabel": { "alias": "initialShowLabel"; "required": false; }; "initialPrefix": { "alias": "initialPrefix"; "required": false; }; "initialSuffix": { "alias": "initialSuffix"; "required": false; }; "initialReverse": { "alias": "initialReverse"; "required": false; }; "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryMode": { "alias": "initialQueryMode"; "required": false; }; "initialQueryValueField": { "alias": "initialQueryValueField"; "required": false; }; "initialQueryCategoryField": { "alias": "initialQueryCategoryField"; "required": false; }; "initialQueryCategoryValue": { "alias": "initialQueryCategoryValue"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3396
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GaugeConfigDialogComponent, "mm-gauge-config-dialog", never, { "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialRtId": { "alias": "initialRtId"; "required": false; }; "initialGaugeType": { "alias": "initialGaugeType"; "required": false; }; "initialValueAttribute": { "alias": "initialValueAttribute"; "required": false; }; "initialLabelAttribute": { "alias": "initialLabelAttribute"; "required": false; }; "initialMin": { "alias": "initialMin"; "required": false; }; "initialMax": { "alias": "initialMax"; "required": false; }; "initialRanges": { "alias": "initialRanges"; "required": false; }; "initialShowLabel": { "alias": "initialShowLabel"; "required": false; }; "initialPrefix": { "alias": "initialPrefix"; "required": false; }; "initialSuffix": { "alias": "initialSuffix"; "required": false; }; "initialReverse": { "alias": "initialReverse"; "required": false; }; "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; "initialQueryMode": { "alias": "initialQueryMode"; "required": false; }; "initialQueryValueField": { "alias": "initialQueryValueField"; "required": false; }; "initialQueryCategoryField": { "alias": "initialQueryCategoryField"; "required": false; }; "initialQueryCategoryValue": { "alias": "initialQueryCategoryValue"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3145
3397
  }
3146
3398
 
3147
3399
  /**
@@ -3152,7 +3404,8 @@ interface ChartDataItem {
3152
3404
  value: number;
3153
3405
  }
3154
3406
  declare class PieChartWidgetComponent implements DashboardWidget<PieChartWidgetConfig, ChartDataItem[]>, OnInit, OnChanges {
3155
- private readonly executeRuntimeQueryGQL;
3407
+ private readonly queryExecutor;
3408
+ private static readonly SUPPORTED_ROW_TYPES;
3156
3409
  private readonly dataService;
3157
3410
  private readonly stateService;
3158
3411
  private readonly variableService;
@@ -3200,6 +3453,7 @@ declare class PieChartWidgetComponent implements DashboardWidget<PieChartWidgetC
3200
3453
  * Note: isNotConfigured() check in loadData() ensures queryRtId is set.
3201
3454
  */
3202
3455
  private loadPersistentQueryData;
3456
+ private buildStreamDataArgs;
3203
3457
  /**
3204
3458
  * Converts widget filter configuration to GraphQL FieldFilterDto format.
3205
3459
  * Resolves MeshBoard variables in filter values before conversion.
@@ -3216,6 +3470,7 @@ interface PieChartConfigResult extends WidgetConfigResult {
3216
3470
  dataSourceType: DataSourceType;
3217
3471
  queryRtId?: string;
3218
3472
  queryName?: string;
3473
+ queryFamily?: QueryFamily;
3219
3474
  categoryField: string;
3220
3475
  valueField: string;
3221
3476
  ckQueryTarget?: CkQueryTarget;
@@ -3231,12 +3486,14 @@ interface PieChartConfigResult extends WidgetConfigResult {
3231
3486
  */
3232
3487
  declare class PieChartConfigDialogComponent implements OnInit, AfterViewInit {
3233
3488
  private readonly getRuntimeQueryColumnsGQL;
3489
+ private readonly queryExecutor;
3234
3490
  private readonly stateService;
3235
3491
  private readonly windowRef;
3236
3492
  querySelector?: QuerySelectorComponent;
3237
3493
  initialDataSourceType?: DataSourceType;
3238
3494
  initialQueryRtId?: string;
3239
3495
  initialQueryName?: string;
3496
+ initialQueryFamily?: QueryFamily;
3240
3497
  initialChartType?: PieChartType;
3241
3498
  initialCategoryField?: string;
3242
3499
  initialValueField?: string;
@@ -3288,11 +3545,17 @@ declare class PieChartConfigDialogComponent implements OnInit, AfterViewInit {
3288
3545
  private updateCkGroupByOptions;
3289
3546
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
3290
3547
  private loadQueryColumns;
3548
+ /**
3549
+ * Runtime queries use the metadata-only resolver (no aggregation executed);
3550
+ * stream-data queries fall back to executing the query with `first: 1`
3551
+ * because the SD path has no dedicated column-introspection endpoint today.
3552
+ */
3553
+ private fetchColumnsForFamily;
3291
3554
  onFiltersChange(updatedFilters: FieldFilterItem[]): void;
3292
3555
  onSave(): void;
3293
3556
  onCancel(): void;
3294
3557
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieChartConfigDialogComponent, never>;
3295
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieChartConfigDialogComponent, "mm-pie-chart-config-dialog", never, { "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialChartType": { "alias": "initialChartType"; "required": false; }; "initialCategoryField": { "alias": "initialCategoryField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialShowLabels": { "alias": "initialShowLabels"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialCkQueryTarget": { "alias": "initialCkQueryTarget"; "required": false; }; "initialCkGroupBy": { "alias": "initialCkGroupBy"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3558
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieChartConfigDialogComponent, "mm-pie-chart-config-dialog", never, { "initialDataSourceType": { "alias": "initialDataSourceType"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; "initialChartType": { "alias": "initialChartType"; "required": false; }; "initialCategoryField": { "alias": "initialCategoryField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialShowLabels": { "alias": "initialShowLabels"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialCkQueryTarget": { "alias": "initialCkQueryTarget"; "required": false; }; "initialCkGroupBy": { "alias": "initialCkGroupBy"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3296
3559
  }
3297
3560
 
3298
3561
  /**
@@ -3304,7 +3567,8 @@ interface SeriesData {
3304
3567
  color?: string;
3305
3568
  }
3306
3569
  declare class BarChartWidgetComponent implements DashboardWidget<BarChartWidgetConfig, SeriesData[]>, OnInit, OnChanges {
3307
- private readonly executeRuntimeQueryGQL;
3570
+ private readonly queryExecutor;
3571
+ private static readonly SUPPORTED_ROW_TYPES;
3308
3572
  private readonly stateService;
3309
3573
  private readonly variableService;
3310
3574
  config: BarChartWidgetConfig;
@@ -3346,6 +3610,7 @@ declare class BarChartWidgetComponent implements DashboardWidget<BarChartWidgetC
3346
3610
  private isDynamicSeriesMode;
3347
3611
  formatValue(value: number): string;
3348
3612
  private loadData;
3613
+ private buildStreamDataArgs;
3349
3614
  /**
3350
3615
  * Processes data in Static Series Mode.
3351
3616
  * Each series in config.series corresponds to a separate numeric field.
@@ -3395,6 +3660,7 @@ type SeriesMode = 'static' | 'dynamic';
3395
3660
  interface BarChartConfigResult extends WidgetConfigResult {
3396
3661
  queryRtId: string;
3397
3662
  queryName?: string;
3663
+ queryFamily?: QueryFamily;
3398
3664
  chartType: BarChartType;
3399
3665
  categoryField: string;
3400
3666
  series: BarChartSeries[];
@@ -3415,11 +3681,13 @@ interface BarChartConfigResult extends WidgetConfigResult {
3415
3681
  */
3416
3682
  declare class BarChartConfigDialogComponent implements OnInit {
3417
3683
  private readonly getRuntimeQueryColumnsGQL;
3684
+ private readonly queryExecutor;
3418
3685
  private readonly stateService;
3419
3686
  private readonly windowRef;
3420
3687
  querySelector?: QuerySelectorComponent;
3421
3688
  initialQueryRtId?: string;
3422
3689
  initialQueryName?: string;
3690
+ initialQueryFamily?: QueryFamily;
3423
3691
  initialChartType?: BarChartType;
3424
3692
  initialCategoryField?: string;
3425
3693
  initialSeries?: BarChartSeries[];
@@ -3464,6 +3732,12 @@ declare class BarChartConfigDialogComponent implements OnInit {
3464
3732
  ngOnInit(): Promise<void>;
3465
3733
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
3466
3734
  private loadQueryColumns;
3735
+ /**
3736
+ * Runtime queries use the metadata-only resolver (no aggregation executed);
3737
+ * stream-data queries fall back to executing the query with `first: 1`
3738
+ * because the SD path has no dedicated column-introspection endpoint today.
3739
+ */
3740
+ private fetchColumnsForFamily;
3467
3741
  onSeriesFieldsChange(fields: string[]): void;
3468
3742
  onFiltersChange(updatedFilters: FieldFilterItem[]): void;
3469
3743
  onSave(): void;
@@ -3471,7 +3745,7 @@ declare class BarChartConfigDialogComponent implements OnInit {
3471
3745
  removeColorThreshold(index: number): void;
3472
3746
  onCancel(): void;
3473
3747
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartConfigDialogComponent, never>;
3474
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BarChartConfigDialogComponent, "mm-bar-chart-config-dialog", never, { "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialChartType": { "alias": "initialChartType"; "required": false; }; "initialCategoryField": { "alias": "initialCategoryField"; "required": false; }; "initialSeries": { "alias": "initialSeries"; "required": false; }; "initialSeriesGroupField": { "alias": "initialSeriesGroupField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialShowDataLabels": { "alias": "initialShowDataLabels"; "required": false; }; "initialColorThresholds": { "alias": "initialColorThresholds"; "required": false; }; "initialDefaultBarColor": { "alias": "initialDefaultBarColor"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3748
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BarChartConfigDialogComponent, "mm-bar-chart-config-dialog", never, { "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; "initialChartType": { "alias": "initialChartType"; "required": false; }; "initialCategoryField": { "alias": "initialCategoryField"; "required": false; }; "initialSeries": { "alias": "initialSeries"; "required": false; }; "initialSeriesGroupField": { "alias": "initialSeriesGroupField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialShowDataLabels": { "alias": "initialShowDataLabels"; "required": false; }; "initialColorThresholds": { "alias": "initialColorThresholds"; "required": false; }; "initialDefaultBarColor": { "alias": "initialDefaultBarColor"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3475
3749
  }
3476
3750
 
3477
3751
  /**
@@ -3492,7 +3766,8 @@ interface ValueAxisConfig {
3492
3766
  position: 'left' | 'right';
3493
3767
  }
3494
3768
  declare class LineChartWidgetComponent implements DashboardWidget<LineChartWidgetConfig, LineSeriesData[]>, OnInit, OnChanges {
3495
- private readonly executeRuntimeQueryGQL;
3769
+ private readonly queryExecutor;
3770
+ private static readonly SUPPORTED_ROW_TYPES;
3496
3771
  private readonly stateService;
3497
3772
  private readonly variableService;
3498
3773
  config: LineChartWidgetConfig;
@@ -3545,6 +3820,7 @@ declare class LineChartWidgetComponent implements DashboardWidget<LineChartWidge
3545
3820
  formatValue(value: number): string;
3546
3821
  getUnitForSeries(seriesName: string): string;
3547
3822
  private loadData;
3823
+ private buildStreamDataArgs;
3548
3824
  /**
3549
3825
  * Processes query rows into line chart data.
3550
3826
  * Groups by seriesGroupField, orders by categoryField (date), supports multi-axis by unitField.
@@ -3570,6 +3846,7 @@ declare class LineChartWidgetComponent implements DashboardWidget<LineChartWidge
3570
3846
  interface LineChartConfigResult extends WidgetConfigResult {
3571
3847
  queryRtId: string;
3572
3848
  queryName?: string;
3849
+ queryFamily?: QueryFamily;
3573
3850
  chartType: LineChartType;
3574
3851
  categoryField: string;
3575
3852
  seriesGroupField: string;
@@ -3587,11 +3864,13 @@ interface LineChartConfigResult extends WidgetConfigResult {
3587
3864
  */
3588
3865
  declare class LineChartConfigDialogComponent implements OnInit {
3589
3866
  private readonly getRuntimeQueryColumnsGQL;
3867
+ private readonly queryExecutor;
3590
3868
  private readonly stateService;
3591
3869
  private readonly windowRef;
3592
3870
  querySelector?: QuerySelectorComponent;
3593
3871
  initialQueryRtId?: string;
3594
3872
  initialQueryName?: string;
3873
+ initialQueryFamily?: QueryFamily;
3595
3874
  initialChartType?: LineChartType;
3596
3875
  initialCategoryField?: string;
3597
3876
  initialSeriesGroupField?: string;
@@ -3629,13 +3908,19 @@ declare class LineChartConfigDialogComponent implements OnInit {
3629
3908
  ngOnInit(): Promise<void>;
3630
3909
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
3631
3910
  private loadQueryColumns;
3911
+ /**
3912
+ * Runtime queries use the metadata-only resolver (no aggregation executed);
3913
+ * stream-data queries fall back to executing the query with `first: 1`
3914
+ * because the SD path has no dedicated column-introspection endpoint today.
3915
+ */
3916
+ private fetchColumnsForFamily;
3632
3917
  onFiltersChange(updatedFilters: FieldFilterItem[]): void;
3633
3918
  onSave(): void;
3634
3919
  addReferenceLine(): void;
3635
3920
  removeReferenceLine(index: number): void;
3636
3921
  onCancel(): void;
3637
3922
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LineChartConfigDialogComponent, never>;
3638
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LineChartConfigDialogComponent, "mm-line-chart-config-dialog", never, { "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialChartType": { "alias": "initialChartType"; "required": false; }; "initialCategoryField": { "alias": "initialCategoryField"; "required": false; }; "initialSeriesGroupField": { "alias": "initialSeriesGroupField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialUnitField": { "alias": "initialUnitField"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialShowMarkers": { "alias": "initialShowMarkers"; "required": false; }; "initialReferenceLines": { "alias": "initialReferenceLines"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3923
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LineChartConfigDialogComponent, "mm-line-chart-config-dialog", never, { "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; "initialChartType": { "alias": "initialChartType"; "required": false; }; "initialCategoryField": { "alias": "initialCategoryField"; "required": false; }; "initialSeriesGroupField": { "alias": "initialSeriesGroupField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialUnitField": { "alias": "initialUnitField"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialShowMarkers": { "alias": "initialShowMarkers"; "required": false; }; "initialReferenceLines": { "alias": "initialReferenceLines"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3639
3924
  }
3640
3925
 
3641
3926
  /**
@@ -3652,7 +3937,8 @@ interface HeatmapDataItem {
3652
3937
  color: string;
3653
3938
  }
3654
3939
  declare class HeatmapWidgetComponent implements DashboardWidget<HeatmapWidgetConfig, HeatmapDataItem[]>, OnInit, OnChanges {
3655
- private readonly executeRuntimeQueryGQL;
3940
+ private readonly queryExecutor;
3941
+ private static readonly SUPPORTED_ROW_TYPES;
3656
3942
  private readonly stateService;
3657
3943
  private readonly variableService;
3658
3944
  config: HeatmapWidgetConfig;
@@ -3690,6 +3976,7 @@ declare class HeatmapWidgetComponent implements DashboardWidget<HeatmapWidgetCon
3690
3976
  value: string;
3691
3977
  }) => string;
3692
3978
  private loadData;
3979
+ private buildStreamDataArgs;
3693
3980
  /**
3694
3981
  * Processes query rows into heatmap data.
3695
3982
  * When dateEndField is configured, auto-detects the interval width and shows sub-hour columns.
@@ -3728,6 +4015,7 @@ declare class HeatmapWidgetComponent implements DashboardWidget<HeatmapWidgetCon
3728
4015
  interface HeatmapConfigResult extends WidgetConfigResult {
3729
4016
  queryRtId: string;
3730
4017
  queryName?: string;
4018
+ queryFamily?: QueryFamily;
3731
4019
  dateField: string;
3732
4020
  dateEndField?: string;
3733
4021
  valueField?: string;
@@ -3742,11 +4030,13 @@ interface HeatmapConfigResult extends WidgetConfigResult {
3742
4030
  }
3743
4031
  declare class HeatmapConfigDialogComponent implements OnInit {
3744
4032
  private readonly getRuntimeQueryColumnsGQL;
4033
+ private readonly queryExecutor;
3745
4034
  private readonly stateService;
3746
4035
  private readonly windowRef;
3747
4036
  querySelector?: QuerySelectorComponent;
3748
4037
  initialQueryRtId?: string;
3749
4038
  initialQueryName?: string;
4039
+ initialQueryFamily?: QueryFamily;
3750
4040
  initialDateField?: string;
3751
4041
  initialDateEndField?: string;
3752
4042
  initialValueField?: string;
@@ -3799,11 +4089,17 @@ declare class HeatmapConfigDialogComponent implements OnInit {
3799
4089
  ngOnInit(): Promise<void>;
3800
4090
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
3801
4091
  private loadQueryColumns;
4092
+ /**
4093
+ * Runtime queries use the metadata-only resolver (no aggregation executed);
4094
+ * stream-data queries fall back to executing the query with `first: 1`
4095
+ * because the SD path has no dedicated column-introspection endpoint today.
4096
+ */
4097
+ private fetchColumnsForFamily;
3802
4098
  onFiltersChange(updatedFilters: FieldFilterItem[]): void;
3803
4099
  onSave(): void;
3804
4100
  onCancel(): void;
3805
4101
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeatmapConfigDialogComponent, never>;
3806
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeatmapConfigDialogComponent, "mm-heatmap-config-dialog", never, { "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialDateField": { "alias": "initialDateField"; "required": false; }; "initialDateEndField": { "alias": "initialDateEndField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialAggregation": { "alias": "initialAggregation"; "required": false; }; "initialColorScheme": { "alias": "initialColorScheme"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialDecimalPlaces": { "alias": "initialDecimalPlaces"; "required": false; }; "initialCompactNumbers": { "alias": "initialCompactNumbers"; "required": false; }; "initialValueMultiplier": { "alias": "initialValueMultiplier"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
4102
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeatmapConfigDialogComponent, "mm-heatmap-config-dialog", never, { "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; "initialDateField": { "alias": "initialDateField"; "required": false; }; "initialDateEndField": { "alias": "initialDateEndField"; "required": false; }; "initialValueField": { "alias": "initialValueField"; "required": false; }; "initialAggregation": { "alias": "initialAggregation"; "required": false; }; "initialColorScheme": { "alias": "initialColorScheme"; "required": false; }; "initialShowLegend": { "alias": "initialShowLegend"; "required": false; }; "initialLegendPosition": { "alias": "initialLegendPosition"; "required": false; }; "initialDecimalPlaces": { "alias": "initialDecimalPlaces"; "required": false; }; "initialCompactNumbers": { "alias": "initialCompactNumbers"; "required": false; }; "initialValueMultiplier": { "alias": "initialValueMultiplier"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
3807
4103
  }
3808
4104
 
3809
4105
  interface StatValue {
@@ -4119,6 +4415,7 @@ interface WidgetGroupConfigResult extends WidgetConfigResult {
4119
4415
  dataSourceMode: WidgetGroupDataSourceMode;
4120
4416
  queryRtId?: string;
4121
4417
  queryName?: string;
4418
+ queryFamily?: QueryFamily;
4122
4419
  filters?: FieldFilterDto[];
4123
4420
  maxItems?: number;
4124
4421
  childTemplate: WidgetGroupChildTemplate;
@@ -4136,6 +4433,7 @@ declare class WidgetGroupConfigDialogComponent implements OnInit {
4136
4433
  private readonly ckTypeSelectorService;
4137
4434
  private readonly attributeSelectorService;
4138
4435
  private readonly getRuntimeQueryColumnsGQL;
4436
+ private readonly queryExecutor;
4139
4437
  private readonly getCkTypeAvailableQueryColumnsGQL;
4140
4438
  private readonly meshBoardStateService;
4141
4439
  private readonly windowRef;
@@ -4143,6 +4441,7 @@ declare class WidgetGroupConfigDialogComponent implements OnInit {
4143
4441
  initialDataSourceMode?: WidgetGroupDataSourceMode;
4144
4442
  initialQueryRtId?: string;
4145
4443
  initialQueryName?: string;
4444
+ initialQueryFamily?: QueryFamily;
4146
4445
  initialCkTypeId?: string;
4147
4446
  initialFilters?: WidgetFilterConfig[];
4148
4447
  initialMaxItems?: number;
@@ -4194,6 +4493,12 @@ declare class WidgetGroupConfigDialogComponent implements OnInit {
4194
4493
  onDataSourceModeChange(mode: WidgetGroupDataSourceMode): void;
4195
4494
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
4196
4495
  private loadQueryColumns;
4496
+ /**
4497
+ * Runtime queries use the metadata-only resolver (no aggregation executed);
4498
+ * stream-data queries fall back to executing the query with `first: 1`
4499
+ * because the SD path has no dedicated column-introspection endpoint today.
4500
+ */
4501
+ private fetchColumnsForFamily;
4197
4502
  private loadInitialCkTypeValues;
4198
4503
  onCkTypeSelected(ckType: CkTypeSelectorItem): void;
4199
4504
  onCkTypeCleared(): void;
@@ -4204,7 +4509,7 @@ declare class WidgetGroupConfigDialogComponent implements OnInit {
4204
4509
  private buildStaticConfig;
4205
4510
  onCancel(): void;
4206
4511
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WidgetGroupConfigDialogComponent, never>;
4207
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WidgetGroupConfigDialogComponent, "mm-widget-group-config-dialog", never, { "initialDataSourceMode": { "alias": "initialDataSourceMode"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; "initialMaxItems": { "alias": "initialMaxItems"; "required": false; }; "initialChildTemplate": { "alias": "initialChildTemplate"; "required": false; }; "initialLayout": { "alias": "initialLayout"; "required": false; }; "initialGridColumns": { "alias": "initialGridColumns"; "required": false; }; "initialMinChildWidth": { "alias": "initialMinChildWidth"; "required": false; }; "initialGap": { "alias": "initialGap"; "required": false; }; "initialEmptyMessage": { "alias": "initialEmptyMessage"; "required": false; }; }, {}, never, never, true, never>;
4512
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WidgetGroupConfigDialogComponent, "mm-widget-group-config-dialog", never, { "initialDataSourceMode": { "alias": "initialDataSourceMode"; "required": false; }; "initialQueryRtId": { "alias": "initialQueryRtId"; "required": false; }; "initialQueryName": { "alias": "initialQueryName"; "required": false; }; "initialQueryFamily": { "alias": "initialQueryFamily"; "required": false; }; "initialCkTypeId": { "alias": "initialCkTypeId"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; "initialMaxItems": { "alias": "initialMaxItems"; "required": false; }; "initialChildTemplate": { "alias": "initialChildTemplate"; "required": false; }; "initialLayout": { "alias": "initialLayout"; "required": false; }; "initialGridColumns": { "alias": "initialGridColumns"; "required": false; }; "initialMinChildWidth": { "alias": "initialMinChildWidth"; "required": false; }; "initialGap": { "alias": "initialGap"; "required": false; }; "initialEmptyMessage": { "alias": "initialEmptyMessage"; "required": false; }; }, {}, never, never, true, never>;
4208
4513
  }
4209
4514
 
4210
4515
  declare class MarkdownWidgetComponent implements DashboardWidget<MarkdownWidgetConfig, string>, OnInit, OnChanges {
@@ -4953,6 +5258,9 @@ declare class MeshBoardViewComponent implements OnInit, OnDestroy, HasUnsavedCha
4953
5258
  protected editingWidget: AnyWidgetConfig | null;
4954
5259
  private configDialogSubscription;
4955
5260
  private navigationSubscription;
5261
+ private autoRefreshTimerId;
5262
+ private autoRefreshActiveSeconds;
5263
+ private readonly visibilityListener;
4956
5264
  protected readonly config: _angular_core.Signal<MeshBoardConfig>;
4957
5265
  protected readonly isEditMode: _angular_core.Signal<boolean>;
4958
5266
  protected readonly isSaving: _angular_core.Signal<boolean>;
@@ -5001,6 +5309,16 @@ declare class MeshBoardViewComponent implements OnInit, OnDestroy, HasUnsavedCha
5001
5309
  */
5002
5310
  private loadMeshBoardById;
5003
5311
  ngOnDestroy(): void;
5312
+ /**
5313
+ * Starts, restarts, or stops the auto-refresh timer based on the MeshBoard
5314
+ * config and document visibility. Called on init, whenever config changes,
5315
+ * and whenever the tab visibility changes.
5316
+ *
5317
+ * Pause-on-hidden saves bandwidth and avoids Apollo cache thrashing when
5318
+ * the user has the tab in the background.
5319
+ */
5320
+ private evaluateAutoRefresh;
5321
+ private stopAutoRefresh;
5004
5322
  /**
5005
5323
  * Preloads data for all widgets to improve initial rendering performance.
5006
5324
  */
@@ -5231,7 +5549,8 @@ declare class MeshBoardSettingsResult {
5231
5549
  timeFilter?: MeshBoardTimeFilterConfig | undefined;
5232
5550
  rtWellKnownName?: string | undefined;
5233
5551
  entitySelectors?: EntitySelectorConfig[] | undefined;
5234
- constructor(name: string, description: string, columns: number, rowHeight: number, gap: number, variables: MeshBoardVariable[], timeFilter?: MeshBoardTimeFilterConfig | undefined, rtWellKnownName?: string | undefined, entitySelectors?: EntitySelectorConfig[] | undefined);
5552
+ autoRefreshSeconds?: number | undefined;
5553
+ constructor(name: string, description: string, columns: number, rowHeight: number, gap: number, variables: MeshBoardVariable[], timeFilter?: MeshBoardTimeFilterConfig | undefined, rtWellKnownName?: string | undefined, entitySelectors?: EntitySelectorConfig[] | undefined, autoRefreshSeconds?: number | undefined);
5235
5554
  }
5236
5555
  /**
5237
5556
  * Dialog for editing MeshBoard settings.
@@ -5245,6 +5564,12 @@ declare class MeshBoardSettingsDialogComponent {
5245
5564
  columns: number;
5246
5565
  rowHeight: number;
5247
5566
  gap: number;
5567
+ /**
5568
+ * Auto-refresh interval in seconds. `0` disables auto-refresh and is the default.
5569
+ * When > 0 the MeshBoard view re-polls all widgets at this interval while the
5570
+ * tab is visible.
5571
+ */
5572
+ autoRefreshSeconds: number;
5248
5573
  variables: MeshBoardVariable[];
5249
5574
  entitySelectors: EntitySelectorConfig[];
5250
5575
  entitySelectorEditing: boolean;
@@ -5267,6 +5592,7 @@ declare class MeshBoardSettingsDialogComponent {
5267
5592
  variables?: MeshBoardVariable[];
5268
5593
  timeFilter?: MeshBoardTimeFilterConfig;
5269
5594
  entitySelectors?: EntitySelectorConfig[];
5595
+ autoRefreshSeconds?: number;
5270
5596
  }): void;
5271
5597
  /**
5272
5598
  * Handles default selection change from the time range picker.
@@ -5463,5 +5789,5 @@ declare class MeshBoardManagerDialogComponent implements OnInit {
5463
5789
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MeshBoardManagerDialogComponent, "mm-meshboard-manager-dialog", never, {}, {}, never, never, true, never>;
5464
5790
  }
5465
5791
 
5466
- export { AddWidgetDialogComponent, AiInsightsConfigDialogComponent, AiInsightsService, AiInsightsWidgetComponent, AlertBannerConfigDialogComponent, AlertBannerWidgetComponent, AlertListConfigDialogComponent, AlertListWidgetComponent, AssociationsConfigDialogComponent, BarChartConfigDialogComponent, BarChartWidgetComponent, DashboardDataService, DashboardGridService, EditModeStateService, EditWidgetDialogComponent, EntityAssociationsWidgetComponent, EntityCardConfigDialogComponent, EntityCardWidgetComponent, EntityDetailDialogComponent, EntitySelectorEditorComponent, EntitySelectorToolbarComponent, GaugeConfigDialogComponent, GaugeWidgetComponent, HeatmapConfigDialogComponent, HeatmapWidgetComponent, KpiConfigDialogComponent, KpiWidgetComponent, LineChartConfigDialogComponent, LineChartWidgetComponent, MESHBOARD_OPTIONS, MESHBOARD_TENANT_ID_PROVIDER, MarkdownConfigDialogComponent, MarkdownWidgetComponent, MeshBoardDataService, MeshBoardGridService, MeshBoardManagerDialogComponent, MeshBoardPersistenceService, MeshBoardSettingsDialogComponent, MeshBoardSettingsResult, MeshBoardStateService, MeshBoardViewComponent, PieChartConfigDialogComponent, PieChartWidgetComponent, QuerySelectorComponent, RuntimeEntitySelectorComponent, ServiceHealthConfigDialogComponent, ServiceHealthWidgetComponent, StatsGridConfigDialogComponent, StatsGridWidgetComponent, StatusIndicatorConfigDialogComponent, StatusIndicatorWidgetComponent, StatusListConfigDialogComponent, StatusListWidgetComponent, SummaryCardConfigDialogComponent, SummaryCardWidgetComponent, TableConfigDialogComponent, TableWidgetComponent, TableWidgetDataSourceDirective, WidgetFactoryService, WidgetGroupComponent, WidgetGroupConfigDialogComponent, WidgetNotConfiguredComponent, WidgetRegistryService, provideDefaultWidgets, provideMeshBoard, provideProcessWidget, provideWidgetRegistrations, registerDefaultWidgets, registerProcessWidget };
5467
- export type { AggregationDataSource, AggregationQuery, AggregationType, AiInsightsConfigResult, AiInsightsWidgetConfig, AlertBannerConfigResult, AlertBannerWidgetConfig, AlertListConfigResult, AlertListWidgetConfig, AnyWidgetConfig, AssociationsConfigResult, BarChartColorThreshold, BarChartConfigResult, BarChartSeries, BarChartType, BarChartWidgetConfig, BaseWidgetConfig, CategoryValueItem, ChartReferenceLine, CkQueryResult, CkQueryTarget, CkTypeAttributeInfo, ConfigDialogResult, ConfigResultApplier, ConstructionKitQueryDataSource, DashboardConfig, DashboardWidget, DataSource, DataSourceType, DiagramPropertyMapping, EntityAssociation, EntityAttribute, EntityCardConfigResult, EntityCardWidgetConfig, EntityListWidget, EntitySelectorAttributeMapping, EntitySelectorClearEvent, EntitySelectorConfig, EntitySelectorEvent, EntityWidget, EntityWithAssociationsWidgetConfig, GaugeConfigResult, GaugeRange, GaugeType, GaugeWidgetConfig, GridCell, GridPosition, GroupChildWidgetType, GroupedDataItem, HeatmapAggregation, HeatmapColorScheme, HeatmapConfigResult, HeatmapWidgetConfig, KpiConfigResult, KpiDataSourceType, KpiQueryMode, KpiWidgetConfig, LineChartConfigResult, LineChartType, LineChartWidgetConfig, MarkdownConfigResult, MarkdownTextAlign, MarkdownWidgetConfig, MeshBoardConfig, MeshBoardOptions, MeshBoardTimeFilterConfig, MeshBoardVariable, MeshBoardVariableSource, MeshBoardVariableType, ParentAssociationMode, PersistedDashboard, PersistedMeshBoard, PersistedWidget, PersistedWidgetData, PersistentQueryDataSource, PersistentQueryItem, PieChartConfigResult, PieChartType, PieChartWidgetConfig, ProcessWidgetConfig, Quarter, QueryColumn, QueryColumnItem, RelativeTimeUnit, RepeaterDataItem, RepeaterQueryDataSource, RuntimeEntityData, RuntimeEntityDataSource, RuntimeEntitySelectorValue, ServiceCallDataSource, ServiceCallType, ServiceHealthConfigResult, ServiceHealthWidgetConfig, StatColor, StatItem, StaticDataSource, StatsGridConfigResult, StatsGridWidgetConfig, StatusIndicatorConfigResult, StatusIndicatorWidgetConfig, StatusListConfigResult, StatusListWidgetConfig, SummaryCardConfigResult, SummaryCardTile, SummaryCardWidgetConfig, TableColumn, TableColumnStatusIconMapping, TableConfigResult, TableFilterConfig, TableSortConfig, TableWidgetConfig, TargetEntityWithAttributes, TimeRangePickerConfig, TimeRangeSelection, TimeRangeType, UpdateDashboardResult, VariableResolutionError, WidgetConfig, WidgetConfigDialog, WidgetConfigDialogSize, WidgetConfigResult, WidgetCreationOptions, WidgetDataSource, WidgetFilterConfig, WidgetGroupAttributeMappings, WidgetGroupChildTemplate, WidgetGroupConfig, WidgetGroupConfigResult, WidgetGroupLayout, WidgetPersistenceData, WidgetPositionUpdate, WidgetRegistration, WidgetType, WidgetZone };
5792
+ export { AddWidgetDialogComponent, AiInsightsConfigDialogComponent, AiInsightsService, AiInsightsWidgetComponent, AlertBannerConfigDialogComponent, AlertBannerWidgetComponent, AlertListConfigDialogComponent, AlertListWidgetComponent, AssociationsConfigDialogComponent, BarChartConfigDialogComponent, BarChartWidgetComponent, DashboardDataService, DashboardGridService, EditModeStateService, EditWidgetDialogComponent, EntityAssociationsWidgetComponent, EntityCardConfigDialogComponent, EntityCardWidgetComponent, EntityDetailDialogComponent, EntitySelectorEditorComponent, EntitySelectorToolbarComponent, GaugeConfigDialogComponent, GaugeWidgetComponent, HeatmapConfigDialogComponent, HeatmapWidgetComponent, KpiConfigDialogComponent, KpiWidgetComponent, LineChartConfigDialogComponent, LineChartWidgetComponent, MESHBOARD_OPTIONS, MESHBOARD_TENANT_ID_PROVIDER, MarkdownConfigDialogComponent, MarkdownWidgetComponent, MeshBoardDataService, MeshBoardGridService, MeshBoardManagerDialogComponent, MeshBoardPersistenceService, MeshBoardSettingsDialogComponent, MeshBoardSettingsResult, MeshBoardStateService, MeshBoardViewComponent, PieChartConfigDialogComponent, PieChartWidgetComponent, QueryExecutorService, QuerySelectorComponent, RuntimeEntitySelectorComponent, ServiceHealthConfigDialogComponent, ServiceHealthWidgetComponent, StatsGridConfigDialogComponent, StatsGridWidgetComponent, StatusIndicatorConfigDialogComponent, StatusIndicatorWidgetComponent, StatusListConfigDialogComponent, StatusListWidgetComponent, SummaryCardConfigDialogComponent, SummaryCardWidgetComponent, TableConfigDialogComponent, TableWidgetComponent, TableWidgetDataSourceDirective, WidgetFactoryService, WidgetGroupComponent, WidgetGroupConfigDialogComponent, WidgetNotConfiguredComponent, WidgetRegistryService, classifyQuery, provideDefaultWidgets, provideMeshBoard, provideProcessWidget, provideWidgetRegistrations, queryFamily, registerDefaultWidgets, registerProcessWidget };
5793
+ export type { AggregationDataSource, AggregationQuery, AggregationType, AiInsightsConfigResult, AiInsightsWidgetConfig, AlertBannerConfigResult, AlertBannerWidgetConfig, AlertListConfigResult, AlertListWidgetConfig, AnyWidgetConfig, AssociationsConfigResult, BarChartColorThreshold, BarChartConfigResult, BarChartSeries, BarChartType, BarChartWidgetConfig, BaseWidgetConfig, CategoryValueItem, ChartReferenceLine, CkQueryResult, CkQueryTarget, CkTypeAttributeInfo, ConfigDialogResult, ConfigResultApplier, ConstructionKitQueryDataSource, DashboardConfig, DashboardWidget, DataSource, DataSourceType, DiagramPropertyMapping, EntityAssociation, EntityAttribute, EntityCardConfigResult, EntityCardWidgetConfig, EntityListWidget, EntitySelectorAttributeMapping, EntitySelectorClearEvent, EntitySelectorConfig, EntitySelectorEvent, EntityWidget, EntityWithAssociationsWidgetConfig, GaugeConfigResult, GaugeRange, GaugeType, GaugeWidgetConfig, GridCell, GridPosition, GroupChildWidgetType, GroupedDataItem, HeatmapAggregation, HeatmapColorScheme, HeatmapConfigResult, HeatmapWidgetConfig, KpiConfigResult, KpiDataSourceType, KpiQueryMode, KpiWidgetConfig, LineChartConfigResult, LineChartType, LineChartWidgetConfig, MarkdownConfigResult, MarkdownTextAlign, MarkdownWidgetConfig, MeshBoardConfig, MeshBoardOptions, MeshBoardTimeFilterConfig, MeshBoardVariable, MeshBoardVariableSource, MeshBoardVariableType, ParentAssociationMode, PersistedDashboard, PersistedMeshBoard, PersistedWidget, PersistedWidgetData, PersistentQueryDataSource, PersistentQueryItem, PieChartConfigResult, PieChartType, PieChartWidgetConfig, ProcessWidgetConfig, Quarter, QueryCell, QueryClassification, QueryColumn, QueryColumnInfo, QueryColumnItem, QueryExecutionOptions, QueryExecutionResult, QueryFamily, QueryKind, QueryResultRow, RelativeTimeUnit, RepeaterDataItem, RepeaterQueryDataSource, RuntimeEntityData, RuntimeEntityDataSource, RuntimeEntitySelectorValue, ServiceCallDataSource, ServiceCallType, ServiceHealthConfigResult, ServiceHealthWidgetConfig, StatColor, StatItem, StaticDataSource, StatsGridConfigResult, StatsGridWidgetConfig, StatusIndicatorConfigResult, StatusIndicatorWidgetConfig, StatusListConfigResult, StatusListWidgetConfig, StreamDataExecutionArgs, SummaryCardConfigResult, SummaryCardTile, SummaryCardWidgetConfig, TableColumn, TableColumnStatusIconMapping, TableConfigResult, TableFilterConfig, TableSortConfig, TableWidgetConfig, TargetEntityWithAttributes, TimeRangePickerConfig, TimeRangeSelection, TimeRangeType, UpdateDashboardResult, VariableResolutionError, WidgetConfig, WidgetConfigDialog, WidgetConfigDialogSize, WidgetConfigResult, WidgetCreationOptions, WidgetDataSource, WidgetFilterConfig, WidgetGroupAttributeMappings, WidgetGroupChildTemplate, WidgetGroupConfig, WidgetGroupConfigResult, WidgetGroupLayout, WidgetPersistenceData, WidgetPositionUpdate, WidgetRegistration, WidgetType, WidgetZone };