@meshmakers/octo-meshboard 3.5.520 → 3.5.550

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,19 +1,19 @@
1
- import { ProcessWidgetSpecificConfig } from '@meshmakers/octo-process-diagrams';
1
+ import { ProcessWidgetSpecificConfig, ExpressionEvaluatorService } from '@meshmakers/octo-process-diagrams';
2
2
  import * as _angular_core from '@angular/core';
3
- import { Signal, AfterViewInit, OnChanges, EventEmitter, SimpleChanges, Type, OnDestroy, OnInit, EnvironmentProviders, InjectionToken, Provider } from '@angular/core';
3
+ import { Signal, AfterViewInit, OnChanges, EventEmitter, SimpleChanges, Type, OnDestroy, OnInit, QueryList, ElementRef, EnvironmentProviders, InjectionToken, Provider } from '@angular/core';
4
4
  import { Observable, Subject } from 'rxjs';
5
5
  import * as Types from '@meshmakers/octo-services';
6
6
  import { SortDto, FieldFilterDto, QueryModeDto, ResolveSeriesQueryInputDto, CkRollupFunctionDto, SeriesResolutionSignalDto, CkTypeSelectorItem, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource, AttributeItem, TenantIdProvider, TenantFeaturesStatus, HealthCheck } from '@meshmakers/octo-services';
7
7
  export { RuntimeEntityDialogDataSource, RuntimeEntityItem, RuntimeEntitySelectDataSource, TENANT_ID_PROVIDER, TenantIdProvider } from '@meshmakers/octo-services';
8
8
  import { ControlValueAccessor } from '@angular/forms';
9
9
  import * as i1 from '@meshmakers/shared-ui';
10
- import { EntitySelectDialogDataSource, ColumnDefinition, DialogFetchOptions, DialogFetchResult, EntitySelectInputComponent, TimeRange, FetchDataOptions, FetchResultTyped, TableColumn as TableColumn$1, ListViewMessages, EntitySelectInputMessages, HasUnsavedChanges, TimeRangePickerLabels, TimeRangeSelection as TimeRangeSelection$1 } from '@meshmakers/shared-ui';
10
+ import { EntitySelectDialogDataSource, ColumnDefinition, DialogFetchOptions, DialogFetchResult, EntitySelectInputComponent, TimeRange, FetchDataOptions, FetchResultTyped, TableColumn as TableColumn$1, MM_ACTION_ICONS, ListViewMessages, EntitySelectInputMessages, HasUnsavedChanges, TimeRangePickerLabels, TimeRangeSelection as TimeRangeSelection$1 } from '@meshmakers/shared-ui';
11
11
  import { EntitySelectDataSource, EntitySelectResult } from '@meshmakers/shared-services';
12
12
  import * as Apollo from 'apollo-angular';
13
13
  import { CkTypeSelectorInputComponent, AttributeValueTypeDto, FieldFilterItem, FilterVariable, PropertyGridItem, PropertyGridConfig, OctoGraphQlDataSource, FieldFilterEditorComponent } from '@meshmakers/octo-ui';
14
14
  import * as _meshmakers_octo_meshboard from '@meshmakers/octo-meshboard';
15
15
  import * as _progress_kendo_svg_icons from '@progress/kendo-svg-icons';
16
- import { SVGIcon } from '@progress/kendo-svg-icons';
16
+ import { arrowUpIcon, arrowDownIcon, plusIcon, SVGIcon } from '@progress/kendo-svg-icons';
17
17
  import * as ngx_markdown from 'ngx-markdown';
18
18
  import { TileLayoutReorderEvent, TileLayoutResizeEvent } from '@progress/kendo-angular-layout';
19
19
 
@@ -105,6 +105,83 @@ interface DiagramPropertyMapping {
105
105
  * ```
106
106
  */
107
107
  expression?: string;
108
+ /**
109
+ * Name of the {@link ProcessWidgetBinding} that supplies the value (AB#8023).
110
+ * Absent ⇒ {@link DEFAULT_PROCESS_BINDING_NAME} — the implicit binding built
111
+ * from the legacy single-binding fields. An unknown name is reported once in
112
+ * the console and leaves the property at its default value.
113
+ */
114
+ bindingName?: string;
115
+ /**
116
+ * How a column value is reduced over all rows of the binding's selector scope
117
+ * (AB#8024). Absent or `first` ⇒ the first row, exactly as before. `sum`,
118
+ * `avg`, `min`, `max` reduce the numeric cells (null / non-numeric cells are
119
+ * skipped; no numeric cell ⇒ no value). The mapping `expression` is applied to
120
+ * the aggregated value. Only for `column` mappings of a persistent-query
121
+ * binding and `number` properties; otherwise the validator reports it and the
122
+ * widget falls back to `first`.
123
+ */
124
+ aggregate?: ProcessValueAggregate;
125
+ }
126
+ /**
127
+ * Reduction of a mapped value over the rows of a query binding (AB#8024).
128
+ */
129
+ type ProcessValueAggregate = 'first' | 'sum' | 'avg' | 'min' | 'max';
130
+ /**
131
+ * One named data binding of a Process Widget (AB#8023).
132
+ *
133
+ * A widget can hold several bindings, each scoped by its own entity selector,
134
+ * so one flow picture shows values of several CK types of the picked site.
135
+ * Property mappings refer to a binding by {@link DiagramPropertyMapping.bindingName}.
136
+ *
137
+ * @example
138
+ * ```yaml
139
+ * bindings:
140
+ * - name: pv
141
+ * mode: persistentQuery
142
+ * queryRtId: 6650a1b2c3d4e5f601234567
143
+ * queryFamily: runtime
144
+ * entitySelectorId: pv
145
+ * - name: batterie
146
+ * mode: runtimeEntity
147
+ * ckTypeId: <domain-model>/Battery
148
+ * entitySelectorId: batterie # no rtId: the selector's current entity is loaded
149
+ * ```
150
+ */
151
+ interface ProcessWidgetBinding {
152
+ /** Unique name within the widget; mappings refer to it. */
153
+ name: string;
154
+ /** What the binding loads: one runtime entity or the rows of a persistent query. */
155
+ mode: Exclude<ProcessDataBindingMode, 'none'>;
156
+ /**
157
+ * CK type of the bound entity (`runtimeEntity`). May be omitted when the
158
+ * entity comes from an entity selector without `childScope` — the selector's
159
+ * `ckTypeId` is used then.
160
+ */
161
+ ckTypeId?: string;
162
+ /**
163
+ * Fixed runtime ID (variables such as `${selectedEntity}` are resolved).
164
+ * Absent ⇒ the current entity of `entitySelectorId` is loaded.
165
+ */
166
+ rtId?: string;
167
+ /** Runtime ID of the persistent query (`persistentQuery`). */
168
+ queryRtId?: string;
169
+ /** Display name of the persistent query (for UI). */
170
+ queryName?: string;
171
+ /** Query family (`runtime` / `streamData`); looked up once when absent. */
172
+ queryFamily?: QueryFamily;
173
+ /** Stream data: do not bind the MeshBoard time filter (see `bindingIgnoreTimeFilter`). */
174
+ ignoreTimeFilter?: boolean;
175
+ /**
176
+ * Id of the entity selector that scopes this binding: a query gets the
177
+ * selector's resolved rtIds as scope, a runtime-entity binding without
178
+ * `rtId` loads the selector's current entity. A pending scope keeps the
179
+ * binding without value (the other bindings still render); an empty scope
180
+ * gives no value, never a stale one.
181
+ */
182
+ entitySelectorId?: string;
183
+ /** Field filters applied to the binding's query. */
184
+ filters?: WidgetFilterConfig[];
108
185
  }
109
186
  /**
110
187
  * Data binding mode for Process Widget
@@ -203,6 +280,15 @@ interface ProcessWidgetConfig extends WidgetConfig, ProcessWidgetSpecificConfig
203
280
  * ```
204
281
  */
205
282
  propertyMappings?: DiagramPropertyMapping[];
283
+ /**
284
+ * Named data bindings, each with its own entity selector (AB#8023). When
285
+ * present and non-empty they replace the legacy single-binding fields above
286
+ * at runtime; a config without `bindings` is read as one implicit binding
287
+ * named {@link DEFAULT_PROCESS_BINDING_NAME} built from the legacy fields.
288
+ * Bindings load in parallel; a failing or pending binding does not block
289
+ * the others.
290
+ */
291
+ bindings?: ProcessWidgetBinding[];
206
292
  }
207
293
 
208
294
  /**
@@ -514,12 +600,14 @@ interface KpiWidgetConfig extends WidgetConfig {
514
600
  decimalPlaces?: number;
515
601
  /**
516
602
  * Scale factor applied to a NUMERIC query value before display (non-numeric
517
- * values pass through unchanged). Use case: cumulated energy from uniformly
518
- * sampled power — a stream-data SUM aggregation over kW samples taken every
519
- * 10 s becomes kWh with `valueMultiplier: 10/3600 ≈ 0.0027778` (the factor is
520
- * window-independent because SUM is linear, so the KPI stays correct for any
521
- * dashboard time-filter range). Negate to display signed magnitudes (e.g.
522
- * battery discharge from a `< 0`-filtered SUM).
603
+ * values and null pass through unchanged). Energy KPIs (AB#7921): bind the KPI
604
+ * to a stream-data aggregation query with an `Integral` column
605
+ * (`queryValueField: 'importpower_integral'`) — the Integral is in value × hours
606
+ * over the board's time window, whatever the sampling rate of the site — and use
607
+ * the factor only as the unit factor: `1` for kW → kWh, `0.001` for W → kWh.
608
+ * Do not use `SUM × interval/3600` (e.g. `10/3600`): it is only correct for
609
+ * strictly uniform rows and is off for sites that write every 5 s or on change.
610
+ * Negate to display signed magnitudes (e.g. battery discharge).
523
611
  */
524
612
  valueMultiplier?: number;
525
613
  /**
@@ -794,7 +882,25 @@ interface BarChartWidgetConfig extends WidgetConfig {
794
882
  colorThresholds?: BarChartColorThreshold[];
795
883
  /** Default bar color when value exceeds all thresholds */
796
884
  defaultBarColor?: string;
885
+ /**
886
+ * Series from other stream-data queries and formula series, drawn after the primary query's
887
+ * series and matched per category value (AB#7953). Same model as the line chart
888
+ * ({@link LineChartSeriesDefinition}); query series carry their own
889
+ * {@link LineChartQuerySeries.categoryField}. `stacked` is ignored (the chart type stacks).
890
+ * Omitted when empty, so a single-query chart encodes exactly as before.
891
+ */
892
+ additionalSeries?: BarChartSeriesDefinition[];
893
+ /**
894
+ * Display options of the primary query's series as a group (AB#7953): only `visible`.
895
+ * Omitted when default.
896
+ */
897
+ primarySeries?: Pick<LineChartSeriesDisplayOptions, 'visible'>;
797
898
  }
899
+ /**
900
+ * An additional series of a bar chart (AB#7953): the line chart series model, aligned per
901
+ * category value instead of per time bucket.
902
+ */
903
+ type BarChartSeriesDefinition = LineChartSeriesDefinition;
798
904
  /**
799
905
  * Color threshold for conditional bar coloring.
800
906
  * Values less than or equal to this threshold get the specified color.
@@ -845,6 +951,85 @@ interface LineChartWidgetConfig extends WidgetConfig {
845
951
  valueAxisTitle?: string;
846
952
  /** Horizontal reference/threshold lines displayed on the value axis */
847
953
  referenceLines?: ChartReferenceLine[];
954
+ /**
955
+ * Series from other stream-data queries, plotted after the primary query's series on one
956
+ * time grid (AB#7951). Their order is the legend and stacking order. Omitted when empty, so a
957
+ * single-query chart encodes exactly as before.
958
+ */
959
+ additionalSeries?: LineChartSeriesDefinition[];
960
+ /**
961
+ * Stack the series of an area chart in their order (primary series first, then
962
+ * {@link additionalSeries}). Ignored for line charts. Omitted when `false`.
963
+ */
964
+ stacked?: boolean;
965
+ /**
966
+ * Display options of the primary query's series as a group (AB#7952): hidden, or drawn as a line
967
+ * over the stack of a stacked area chart. Omitted when both are default (visible, stacked).
968
+ */
969
+ primarySeries?: LineChartSeriesDisplayOptions;
970
+ }
971
+ /**
972
+ * Per-series display options (AB#7952). Both default to `true` and are omitted when default, so a
973
+ * chart that does not use them encodes exactly as before.
974
+ */
975
+ interface LineChartSeriesDisplayOptions {
976
+ /**
977
+ * `false`: the series is not drawn and not in the legend, but stays usable as formula operand.
978
+ */
979
+ visible?: boolean;
980
+ /**
981
+ * `false`: in a stacked area chart the series is not stacked but drawn as a line over the stack.
982
+ * Ignored when the chart does not stack.
983
+ */
984
+ stacked?: boolean;
985
+ }
986
+ /**
987
+ * A line chart series that does not come from the primary data source (AB#7951), discriminated by
988
+ * `kind`: a series of its own stream-data query, or a formula over other series (AB#7952). The bar
989
+ * chart (AB#7953) can reuse the same shape.
990
+ */
991
+ type LineChartSeriesDefinition = LineChartQuerySeries | LineChartFormulaSeries;
992
+ /**
993
+ * A series computed per time bucket from other series of the same chart (AB#7952), e.g.
994
+ * `min(${pv} - ${gridExport} - ${batteryCharge}, ${consumption})`. Operands are the keys of the
995
+ * other additional series (query or formula); the primary query's series are not operands. A null
996
+ * operand or a non-finite result makes the bucket a gap.
997
+ */
998
+ interface LineChartFormulaSeries extends LineChartSeriesDisplayOptions {
999
+ kind: 'formula';
1000
+ /** Stable key, same rules as {@link LineChartQuerySeries.key}; other formulas reference it. */
1001
+ key: string;
1002
+ /** Legend label; the key when absent. */
1003
+ label?: string;
1004
+ /** Formula with `${key}` operands, evaluated by the board formula evaluator (expr-eval). */
1005
+ formula: string;
1006
+ }
1007
+ /**
1008
+ * A series read from its own stream-data query (AB#7951): one line per source, scoped by its
1009
+ * own entity selector, aligned with all other series on the widget's time grid.
1010
+ */
1011
+ interface LineChartQuerySeries extends LineChartSeriesDisplayOptions {
1012
+ kind: 'query';
1013
+ /**
1014
+ * Stable key, unique within the widget; letters, digits and `_`, starting with a letter or `_`.
1015
+ * Formula series (AB#7952) reference a series by this key.
1016
+ */
1017
+ key: string;
1018
+ /** Legend label; the key when absent. */
1019
+ label?: string;
1020
+ /**
1021
+ * The stream-data query of this series with its own time-filter opt-out, entity-selector scope
1022
+ * and resolution-aware routing (same fields as the primary data source; `aggregateSeriesByGroup`
1023
+ * is ignored — one source is one series).
1024
+ */
1025
+ dataSource: PersistentQueryDataSource;
1026
+ /** Numeric column plotted for this series (doubles as the resolver's source path). */
1027
+ valueField: string;
1028
+ /**
1029
+ * Bar chart only (AB#7953): column whose value is the category of a row; rows of all sources
1030
+ * are matched by this value. Ignored by the line chart (it aligns on the time grid).
1031
+ */
1032
+ categoryField?: string;
848
1033
  }
849
1034
  /**
850
1035
  * Configuration for a horizontal reference/threshold line on the chart value axis
@@ -2009,6 +2194,12 @@ interface QueryExecutionOptions {
2009
2194
  scopeRtIds?: string[] | null;
2010
2195
  /** Force a network round-trip instead of using the Apollo cache. */
2011
2196
  forceRefresh?: boolean;
2197
+ /**
2198
+ * Stream-data only (AB#7985): errors of this call are logged to the console, never
2199
+ * toasted by the global GraphQL error link ({@link OCTO_SILENT_ERRORS}). For probe calls
2200
+ * whose caller handles the failure itself (e.g. a retry with a time window).
2201
+ */
2202
+ silentErrors?: boolean;
2012
2203
  }
2013
2204
  interface QueryColumnInfo {
2014
2205
  attributePath: string;
@@ -2081,6 +2272,33 @@ declare class QueryExecutorService {
2081
2272
  resolveFamily(queryRtId: string): Promise<QueryFamily>;
2082
2273
  executeRuntime(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
2083
2274
  executeStreamData(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
2275
+ /**
2276
+ * Column metadata of a persisted stream-data query for the widget config pickers.
2277
+ * Runs the query with `first: 1` and its own window first; a query that cannot run
2278
+ * without a window — an `Integral` column over a raw archive requires from/to
2279
+ * (AB#7921) — fails or returns no columns, so it is run once more with `window`
2280
+ * (the board's time window or a recent default, see `columnProbeWindow`). The error of
2281
+ * the retry propagates. `options.forceRefresh` bypasses the Apollo cache for both calls.
2282
+ *
2283
+ * The first, window-less attempt is a probe: its error is expected for such queries
2284
+ * and is not shown as an error toast (AB#7985). Only the retry's error reaches the
2285
+ * global error handler.
2286
+ */
2287
+ fetchStreamDataColumns(queryRtId: string, window: {
2288
+ from: Date;
2289
+ to: Date;
2290
+ }, options?: Pick<QueryExecutionOptions, 'forceRefresh'>): Promise<QueryColumnInfo[]>;
2291
+ /**
2292
+ * Runs a persisted query for a config picker (column list, category values, AB#7975).
2293
+ * Runtime queries run once as {@link execute}. A stream-data query runs with its own
2294
+ * window first — silently, its refusal is expected for an Integral query without from/to
2295
+ * (AB#7985) — and, when that fails or returns no columns, once more with `window`
2296
+ * (`columnProbeWindow`). The error of the retry propagates and is shown.
2297
+ */
2298
+ executeWithProbeWindow(family: QueryFamily | undefined, queryRtId: string, options: QueryExecutionOptions, window: {
2299
+ from: Date;
2300
+ to: Date;
2301
+ }): Promise<QueryExecutionResult>;
2084
2302
  /**
2085
2303
  * Resolution-aware series routing (AB#4290): asks the backend which archive/rollup to
2086
2304
  * query for a base archive family, time window and target point count — so a widget can
@@ -2466,6 +2684,19 @@ declare class WidgetNotConfiguredComponent {
2466
2684
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WidgetNotConfiguredComponent, "mm-widget-not-configured", never, {}, {}, never, never, true, never>;
2467
2685
  }
2468
2686
 
2687
+ /**
2688
+ * Formula support for MeshBoard widgets (AB#5364).
2689
+ *
2690
+ * A formula is an expr-eval expression whose operands are MeshBoard variables written as
2691
+ * `${name}` or `$name`, e.g. `(${a} - ${b}) / 1000`. Before parsing, every reference is
2692
+ * rewritten to a safe identifier (`__v_<name>`), so a variable called `max`, `E` or `and`
2693
+ * never collides with an expr-eval built-in and names outside the identifier alphabet still work.
2694
+ *
2695
+ * The functions are pure; the evaluator is passed in so a future board-level
2696
+ * `'expression'` variable source can reuse them.
2697
+ */
2698
+ /** The part of the process-diagrams evaluator the formula functions use. */
2699
+ type FormulaEvaluator = Pick<ExpressionEvaluatorService, 'validate' | 'evaluate' | 'getVariables'>;
2469
2700
  interface FormulaValidationResult {
2470
2701
  valid: boolean;
2471
2702
  /** Syntax error or other reason the formula is invalid */
@@ -2523,8 +2754,20 @@ declare class FormulaFieldComponent {
2523
2754
  /** Show the clamp pattern in the hint (widgets with a scale) */
2524
2755
  readonly clampHint: _angular_core.InputSignal<boolean>;
2525
2756
  readonly label: _angular_core.InputSignal<string>;
2757
+ /**
2758
+ * Show the live preview (default). Chart formula series (AB#7952) turn it off: their operands
2759
+ * have one value per bucket, so a single preview value means nothing.
2760
+ */
2761
+ readonly showPreview: _angular_core.InputSignal<boolean>;
2762
+ /** Heading of the insertable names (chart formula series: "Available series"). */
2763
+ readonly variablesLabel: _angular_core.InputSignal<string>;
2764
+ /** What the operands are called in the hint ("variables" / "series"). */
2765
+ readonly namesNoun: _angular_core.InputSignal<string>;
2766
+ /** Reference syntax shown in the hint. */
2767
+ readonly syntaxHint: _angular_core.InputSignal<string>;
2768
+ /** Text shown when there is nothing to insert. */
2769
+ readonly emptyVariablesText: _angular_core.InputSignal<string>;
2526
2770
  readonly placeholder: _angular_core.InputSignal<string>;
2527
- readonly variableSyntaxHint = "${variableName}";
2528
2771
  readonly clampExample = "max(0, min(100, \u2026))";
2529
2772
  private readonly id;
2530
2773
  readonly inputId: string;
@@ -2540,7 +2783,7 @@ declare class FormulaFieldComponent {
2540
2783
  /** Appends a `${name}` reference to the formula */
2541
2784
  insertVariable(name: string): void;
2542
2785
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormulaFieldComponent, never>;
2543
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormulaFieldComponent, "mm-meshboard-formula-field", never, { "formula": { "alias": "formula"; "required": false; "isSignal": true; }; "variables": { "alias": "variables"; "required": false; "isSignal": true; }; "declaredNames": { "alias": "declaredNames"; "required": false; "isSignal": true; }; "numericOnly": { "alias": "numericOnly"; "required": false; "isSignal": true; }; "clampHint": { "alias": "clampHint"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "formula": "formulaChange"; }, never, never, true, never>;
2786
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormulaFieldComponent, "mm-meshboard-formula-field", never, { "formula": { "alias": "formula"; "required": false; "isSignal": true; }; "variables": { "alias": "variables"; "required": false; "isSignal": true; }; "declaredNames": { "alias": "declaredNames"; "required": false; "isSignal": true; }; "numericOnly": { "alias": "numericOnly"; "required": false; "isSignal": true; }; "clampHint": { "alias": "clampHint"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showPreview": { "alias": "showPreview"; "required": false; "isSignal": true; }; "variablesLabel": { "alias": "variablesLabel"; "required": false; "isSignal": true; }; "namesNoun": { "alias": "namesNoun"; "required": false; "isSignal": true; }; "syntaxHint": { "alias": "syntaxHint"; "required": false; "isSignal": true; }; "emptyVariablesText": { "alias": "emptyVariablesText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "formula": "formulaChange"; }, never, never, true, never>;
2544
2787
  }
2545
2788
 
2546
2789
  /**
@@ -4024,6 +4267,8 @@ declare class KpiWidgetComponent implements DashboardWidget<KpiWidgetConfig, Run
4024
4267
  /**
4025
4268
  * Extracts a cell value, preserving strings and converting numbers.
4026
4269
  * Returns the value as-is if it's a string, or parses it as a number.
4270
+ * A null cell is "no data" (e.g. an Integral over an empty window, AB#7921) and
4271
+ * stays null, so the KPI shows its empty state instead of a misleading 0.
4027
4272
  */
4028
4273
  private extractCellValue;
4029
4274
  /**
@@ -4668,7 +4913,8 @@ declare class TableConfigDialogComponent implements OnInit {
4668
4913
  /**
4669
4914
  * The fields a persistent query returns now (`null` when unknown or the lookup failed). Runtime
4670
4915
  * queries use the metadata-only column resolver; stream-data queries execute with `first: 1`
4671
- * (no column-introspection endpoint), like the chart dialogs.
4916
+ * (no column-introspection endpoint) through `fetchStreamDataColumns`, which retries with a
4917
+ * time window for queries that need one (Integral, AB#7975), like the chart dialogs.
4672
4918
  */
4673
4919
  private loadQueryFields;
4674
4920
  onSave(): Promise<void>;
@@ -4748,6 +4994,7 @@ declare class GaugeWidgetComponent implements DashboardWidget<GaugeWidgetConfig,
4748
4994
  private buildStreamDataArgs;
4749
4995
  private extractAggregationValue;
4750
4996
  private extractGroupedAggregationValue;
4997
+ /** Parses a cell value; a null cell stays null ("no data", AB#7975), unparsable text is 0. */
4751
4998
  private parseNumericValue;
4752
4999
  /**
4753
5000
  * Converts widget filter configuration to GraphQL FieldFilterDto format.
@@ -5199,6 +5446,70 @@ declare class PieChartConfigDialogComponent implements OnInit, AfterViewInit {
5199
5446
  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; }; "initialIgnoreTimeFilter": { "alias": "initialIgnoreTimeFilter"; "required": false; }; "initialEntitySelectorId": { "alias": "initialEntitySelectorId"; "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; }; "initialCategoryColors": { "alias": "initialCategoryColors"; "required": false; }; "initialLabelPosition": { "alias": "initialLabelPosition"; "required": false; }; "initialHideLabelsBelowPercent": { "alias": "initialHideLabelsBelowPercent"; "required": false; }; }, {}, never, never, true, never>;
5200
5447
  }
5201
5448
 
5449
+ /** One series of a source: its values per bucket start instant. */
5450
+ interface TimeGridSeriesInput {
5451
+ name: string;
5452
+ points: ReadonlyMap<number, number | null>;
5453
+ unit?: string;
5454
+ }
5455
+ /** The series one source delivered. */
5456
+ interface TimeGridSourceInput {
5457
+ /** Stable source key (the series key; the primary source uses a reserved key). */
5458
+ sourceKey: string;
5459
+ /** Display name used in hints. */
5460
+ sourceLabel: string;
5461
+ series: TimeGridSeriesInput[];
5462
+ }
5463
+ /** One aligned series: `data[i]` belongs to `instants[i]`. */
5464
+ interface AlignedTimeSeries {
5465
+ name: string;
5466
+ sourceKey: string;
5467
+ data: (number | null)[];
5468
+ unit?: string;
5469
+ }
5470
+ /** A source left out because its buckets do not sit on the grid. */
5471
+ interface MisalignedTimeSource {
5472
+ sourceKey: string;
5473
+ sourceLabel: string;
5474
+ /** The source's own bucket step (ms), `null` when it has fewer than two instants. */
5475
+ stepMs: number | null;
5476
+ /** The grid step (ms) its points did not match. */
5477
+ gridStepMs: number;
5478
+ }
5479
+ interface AlignedTimeGrid {
5480
+ /** Bucket start instants (epoch ms), ascending. */
5481
+ instants: number[];
5482
+ /** Grid step (ms), `null` when no source has two instants. */
5483
+ gridStepMs: number | null;
5484
+ series: AlignedTimeSeries[];
5485
+ misaligned: MisalignedTimeSource[];
5486
+ }
5487
+ /**
5488
+ * Typical bucket step of sorted instants: the most frequent positive distance between consecutive
5489
+ * instants (the smaller one on a tie), `null` for fewer than two instants.
5490
+ */
5491
+ declare function bucketStepMs(instants: readonly number[]): number | null;
5492
+ /**
5493
+ * Aligns the sources on one grid. Source order is kept for the series; the first source wins a
5494
+ * tie for the coarsest step (the primary source when it is passed first).
5495
+ */
5496
+ declare function alignOnTimeGrid(sources: readonly TimeGridSourceInput[]): AlignedTimeGrid;
5497
+
5498
+ /**
5499
+ * Pure helpers of the multi-source line chart (AB#7951): turn the rows of each source into
5500
+ * time-keyed series for {@link alignOnTimeGrid}, and label the aligned categories.
5501
+ */
5502
+ /**
5503
+ * A per-source hint of a multi-source chart (AB#7951): a failed source, a source without data,
5504
+ * a source whose buckets do not sit on the chart's time grid, or a formula series whose operand
5505
+ * source failed (AB#7952).
5506
+ */
5507
+ interface LineChartSourceHint {
5508
+ kind: 'error' | 'noData' | 'misaligned' | 'dependency';
5509
+ sourceLabel: string;
5510
+ text: string;
5511
+ }
5512
+
5202
5513
  /**
5203
5514
  * Series data for the bar chart
5204
5515
  */
@@ -5214,6 +5525,7 @@ declare class BarChartWidgetComponent implements DashboardWidget<BarChartWidgetC
5214
5525
  private static readonly SUPPORTED_ROW_TYPES;
5215
5526
  private readonly stateService;
5216
5527
  private readonly variableService;
5528
+ private readonly expressionEvaluator;
5217
5529
  config: BarChartWidgetConfig;
5218
5530
  private readonly _isLoading;
5219
5531
  private readonly _categories;
@@ -5223,6 +5535,10 @@ declare class BarChartWidgetComponent implements DashboardWidget<BarChartWidgetC
5223
5535
  readonly categories: _angular_core.Signal<string[]>;
5224
5536
  readonly seriesData: _angular_core.Signal<SeriesData[]>;
5225
5537
  readonly error: _angular_core.Signal<string | null>;
5538
+ private readonly _sourceHints;
5539
+ readonly sourceHints: _angular_core.Signal<LineChartSourceHint[]>;
5540
+ private readonly _multiSource;
5541
+ readonly isMultiSource: _angular_core.Signal<boolean>;
5226
5542
  readonly data: _angular_core.Signal<SeriesData[]>;
5227
5543
  /**
5228
5544
  * Check if widget is not configured (needs data source setup).
@@ -5251,8 +5567,43 @@ declare class BarChartWidgetComponent implements DashboardWidget<BarChartWidgetC
5251
5567
  * Checks if using dynamic series mode (seriesGroupField + valueField)
5252
5568
  */
5253
5569
  private isDynamicSeriesMode;
5570
+ /** Whether the chart reads series from more than its primary query or has formula series (AB#7953). */
5571
+ hasAdditionalSeries(): boolean;
5572
+ private isLoadableQuerySeries;
5573
+ /**
5574
+ * Shared tooltip rows of the multi-source path (AB#7953): one row per drawn series for the
5575
+ * hovered category; no bar (null) shows "–".
5576
+ */
5577
+ tooltipRows(category: string): {
5578
+ name: string;
5579
+ text: string;
5580
+ }[];
5254
5581
  formatValue(value: number): string;
5255
5582
  private loadData;
5583
+ /**
5584
+ * Multi-source load (AB#7953): the primary query plus every complete query series, each with its
5585
+ * own scope and time-filter opt-out, matched per category value.
5586
+ *
5587
+ * 1. Scope per source: any `pending` → stay loading, no query; `empty` → no series for that
5588
+ * source and a "No data for <source>" hint.
5589
+ * 2. All sources load in parallel; a failing source gives an error hint, the others render.
5590
+ * 3. `valueScale` is applied to every source value, then {@link alignOnCategories} builds the
5591
+ * union of categories (chronological when all are date-times); a category a source lacks is
5592
+ * no bar for its series.
5593
+ * 4. `composeChartSeries` (shared with the line chart) evaluates formula series per category,
5594
+ * drops hidden series and adds "depends on <source>, which failed" hints.
5595
+ */
5596
+ private loadMultiSource;
5597
+ /** Rows of one source of the multi-source path; widget filters apply to the primary query only. */
5598
+ private fetchSourceRows;
5599
+ /**
5600
+ * Category labels of the multi-source path: date-times as dates when every category is a
5601
+ * different day (daily bars), else date and time as the single-query chart shows them; other
5602
+ * values as text. Repeated labels get " (2)" so every category keeps its slot.
5603
+ */
5604
+ private categoryLabels;
5605
+ /** Short message of a failed source for its hint. */
5606
+ private errorMessage;
5256
5607
  private buildStreamDataArgs;
5257
5608
  /**
5258
5609
  * Processes data in Static Series Mode.
@@ -5282,6 +5633,11 @@ declare class BarChartWidgetComponent implements DashboardWidget<BarChartWidgetC
5282
5633
  readonly dataLabelFormat: _angular_core.Signal<string>;
5283
5634
  hasColorThresholds(): boolean;
5284
5635
  private applyColorThresholds;
5636
+ /**
5637
+ * Bar value of a cell: a number, `null` for a null cell ("no data" — Kendo draws no
5638
+ * bar, AB#7975), and 0 for text that is not a number.
5639
+ */
5640
+ private static toBarValue;
5285
5641
  private getColorForValue;
5286
5642
  private formatCategoryValue;
5287
5643
  /**
@@ -5320,6 +5676,10 @@ interface BarChartConfigResult extends WidgetConfigResult {
5320
5676
  filters?: FieldFilterDto[];
5321
5677
  colorThresholds?: BarChartColorThreshold[];
5322
5678
  defaultBarColor?: string;
5679
+ /** Query and formula series matched per category (AB#7953); only for a stream-data primary query. */
5680
+ additionalSeries?: BarChartSeriesDefinition[];
5681
+ /** Display options of the primary query's series (AB#7953): only `visible`. */
5682
+ primarySeries?: BarChartWidgetConfig['primarySeries'];
5323
5683
  }
5324
5684
  /**
5325
5685
  * Configuration dialog for Bar Chart widgets.
@@ -5330,6 +5690,7 @@ declare class BarChartConfigDialogComponent implements OnInit {
5330
5690
  private readonly queryExecutor;
5331
5691
  private readonly stateService;
5332
5692
  private readonly windowRef;
5693
+ private readonly expressionEvaluator;
5333
5694
  querySelector?: QuerySelectorComponent;
5334
5695
  initialQueryRtId?: string;
5335
5696
  initialQueryName?: string;
@@ -5347,6 +5708,14 @@ declare class BarChartConfigDialogComponent implements OnInit {
5347
5708
  initialColorThresholds?: BarChartColorThreshold[];
5348
5709
  initialDefaultBarColor?: string;
5349
5710
  initialFilters?: WidgetFilterConfig[];
5711
+ initialAdditionalSeries?: BarChartSeriesDefinition[];
5712
+ initialPrimarySeries?: BarChartWidgetConfig['primarySeries'];
5713
+ /** Query and formula series of the Series section (AB#7953). */
5714
+ additionalSeries: BarChartSeriesDefinition[];
5715
+ /** Display options of the primary query's series (AB#7953). */
5716
+ primarySeries: LineChartSeriesDisplayOptions | undefined;
5717
+ /** The series that are saved: none unless the primary query is a stream-data query. */
5718
+ get effectiveAdditionalSeries(): BarChartSeriesDefinition[];
5350
5719
  isLoadingInitial: boolean;
5351
5720
  isLoadingColumns: boolean;
5352
5721
  selectedPersistentQuery: PersistentQueryItem | null;
@@ -5401,7 +5770,7 @@ declare class BarChartConfigDialogComponent implements OnInit {
5401
5770
  removeColorThreshold(index: number): void;
5402
5771
  onCancel(): void;
5403
5772
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartConfigDialogComponent, never>;
5404
- 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; }; "initialIgnoreTimeFilter": { "alias": "initialIgnoreTimeFilter"; "required": false; }; "initialEntitySelectorId": { "alias": "initialEntitySelectorId"; "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>;
5773
+ 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; }; "initialIgnoreTimeFilter": { "alias": "initialIgnoreTimeFilter"; "required": false; }; "initialEntitySelectorId": { "alias": "initialEntitySelectorId"; "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; }; "initialAdditionalSeries": { "alias": "initialAdditionalSeries"; "required": false; }; "initialPrimarySeries": { "alias": "initialPrimarySeries"; "required": false; }; }, {}, never, never, true, never>;
5405
5774
  }
5406
5775
 
5407
5776
  /**
@@ -5418,7 +5787,12 @@ interface LineSeriesData {
5418
5787
  unit?: string;
5419
5788
  axisName?: string;
5420
5789
  color?: string;
5790
+ /** Multi-source path (AB#7952): stacked with the other stacked series. */
5791
+ stacked?: boolean;
5792
+ /** Multi-source path (AB#7952): drawn as a line over the stack of a stacked area chart. */
5793
+ asLine?: boolean;
5421
5794
  }
5795
+
5422
5796
  /**
5423
5797
  * Value axis configuration
5424
5798
  */
@@ -5440,6 +5814,7 @@ declare class LineChartWidgetComponent implements DashboardWidget<LineChartWidge
5440
5814
  private static readonly SUPPORTED_ROW_TYPES;
5441
5815
  private readonly stateService;
5442
5816
  private readonly variableService;
5817
+ private readonly expressionEvaluator;
5443
5818
  config: LineChartWidgetConfig;
5444
5819
  private readonly _isLoading;
5445
5820
  private readonly _categories;
@@ -5462,6 +5837,8 @@ declare class LineChartWidgetComponent implements DashboardWidget<LineChartWidge
5462
5837
  points: number;
5463
5838
  total: number;
5464
5839
  } | null>;
5840
+ private readonly _sourceHints;
5841
+ readonly sourceHints: _angular_core.Signal<LineChartSourceHint[]>;
5465
5842
  /**
5466
5843
  * Resolution-aware hint (AB#4290): a short badge describing the archive-selection outcome —
5467
5844
  * `null` for a clean reduction (signal OK), a warning otherwise (fewer points delivered, or no
@@ -5509,6 +5886,32 @@ declare class LineChartWidgetComponent implements DashboardWidget<LineChartWidge
5509
5886
  } | undefined;
5510
5887
  }[]>;
5511
5888
  readonly chartType: _angular_core.Signal<"line" | "area">;
5889
+ /**
5890
+ * Stacking (AB#7951): only an area chart with `stacked` stacks; the series stack in their order
5891
+ * (primary series first, then `additionalSeries`). `false` is Kendo's default, so an existing
5892
+ * chart stacks exactly as before (not at all).
5893
+ */
5894
+ stackSeries(): boolean;
5895
+ /**
5896
+ * Kendo `missingValues` (AB#7951), always set explicitly. A stacked or multi-source chart uses
5897
+ * `'gap'`: a bucket without data is a gap, never drawn or stacked as 0 and never bridged.
5898
+ * Single-query unstacked charts get exactly Kendo's defaults — `'interpolate'` for a line,
5899
+ * `'zero'` for an area series — so they render as before.
5900
+ */
5901
+ missingValues(): 'gap' | 'interpolate' | 'zero';
5902
+ /** Whether the chart reads series from more than its primary query (AB#7951) or has formula series (AB#7952). */
5903
+ hasAdditionalSeries(): boolean;
5904
+ /** Whether the last load went through the multi-source path (aligned grid, AB#7951/AB#7952). */
5905
+ private readonly _multiSource;
5906
+ readonly isMultiSource: _angular_core.Signal<boolean>;
5907
+ /**
5908
+ * Shared tooltip rows of the multi-source path (AB#7952): one row per drawn series for the
5909
+ * hovered category; a gap (null) shows "–".
5910
+ */
5911
+ tooltipRows(category: string): {
5912
+ name: string;
5913
+ text: string;
5914
+ }[];
5512
5915
  readonly labelRotation: _angular_core.Signal<0 | -45>;
5513
5916
  /**
5514
5917
  * Step for category axis labels to avoid overcrowding.
@@ -5567,6 +5970,28 @@ declare class LineChartWidgetComponent implements DashboardWidget<LineChartWidge
5567
5970
  * under `valueField` and the series label under `seriesGroupField`.
5568
5971
  */
5569
5972
  private reshapeResolutionRow;
5973
+ /**
5974
+ * Multi-source load (AB#7951): the primary data source plus every complete query series, each
5975
+ * with its own scope, time-filter opt-out and resolution-aware routing, aligned on one time grid.
5976
+ *
5977
+ * 1. Scope: any source pending → stay loading, no query; an empty scope → the source has no
5978
+ * series and a "No data for <source>" hint.
5979
+ * 2. Prepare: resolution-aware sources resolve their rollup rung.
5980
+ * 3. Common bucket count: the smallest of the pixel-derived target and every resolved
5981
+ * `points` (= the coarsest effective bucket). Every source is downsampled with this count over
5982
+ * the same window, so all of them use the same bucket width.
5983
+ * 4. Fetch all sources in parallel; one failing source gives an error hint, the others render.
5984
+ * 5. {@link alignOnTimeGrid}: shared categories, gaps as null, misaligned sources left out with a hint.
5985
+ */
5986
+ private loadMultiSource;
5987
+ /** Resolution-aware sources resolve their rung first (step 2 of {@link loadMultiSource}). */
5988
+ private prepareSource;
5989
+ /** Fetches one source with the common bucket count (step 4 of {@link loadMultiSource}). */
5990
+ private fetchSource;
5991
+ /** Writes aligned series into the chart signals (multi-source path, AB#7951). */
5992
+ private applyAlignedGrid;
5993
+ /** Short message of a failed source for its hint. */
5994
+ private errorMessage;
5570
5995
  private buildStreamDataArgs;
5571
5996
  /**
5572
5997
  * Bucket count for backend downsampling, sized to the rendered width (~1 bucket / 2 px),
@@ -5621,6 +6046,12 @@ interface LineChartConfigResult extends WidgetConfigResult {
5621
6046
  showDataBadge: boolean;
5622
6047
  filters?: FieldFilterDto[];
5623
6048
  referenceLines?: ChartReferenceLine[];
6049
+ /** Query and formula series after the primary query's series (AB#7951, AB#7952); absent when none. */
6050
+ additionalSeries?: LineChartSeriesDefinition[];
6051
+ /** Display options of the primary query's series (AB#7952); absent when default. */
6052
+ primarySeries?: LineChartSeriesDisplayOptions;
6053
+ /** Stack the series of an area chart (AB#7951). */
6054
+ stacked?: boolean;
5624
6055
  }
5625
6056
  /**
5626
6057
  * Configuration dialog for Line Chart widgets.
@@ -5631,6 +6062,7 @@ declare class LineChartConfigDialogComponent implements OnInit {
5631
6062
  private readonly queryExecutor;
5632
6063
  private readonly stateService;
5633
6064
  private readonly windowRef;
6065
+ private readonly expressionEvaluator;
5634
6066
  querySelector?: QuerySelectorComponent;
5635
6067
  initialQueryRtId?: string;
5636
6068
  initialQueryName?: string;
@@ -5650,6 +6082,13 @@ declare class LineChartConfigDialogComponent implements OnInit {
5650
6082
  initialShowDataBadge?: boolean;
5651
6083
  initialReferenceLines?: ChartReferenceLine[];
5652
6084
  initialFilters?: WidgetFilterConfig[];
6085
+ initialAdditionalSeries?: LineChartSeriesDefinition[];
6086
+ initialStacked?: boolean;
6087
+ initialPrimarySeries?: LineChartSeriesDisplayOptions;
6088
+ /** Query and formula series of the Series section (AB#7951, AB#7952). */
6089
+ additionalSeries: LineChartSeriesDefinition[];
6090
+ /** Display options of the primary query's series (AB#7952). */
6091
+ primarySeries: LineChartSeriesDisplayOptions | undefined;
5653
6092
  isLoadingInitial: boolean;
5654
6093
  isLoadingColumns: boolean;
5655
6094
  selectedPersistentQuery: PersistentQueryItem | null;
@@ -5689,9 +6128,12 @@ declare class LineChartConfigDialogComponent implements OnInit {
5689
6128
  legendPosition: "top" | "bottom" | "left" | "right";
5690
6129
  showMarkers: boolean;
5691
6130
  showDataBadge: boolean;
6131
+ stacked: boolean;
5692
6132
  referenceLines: ChartReferenceLine[];
5693
6133
  };
5694
6134
  get isValid(): boolean;
6135
+ /** The query series that are saved: none unless the primary query is a stream-data query. */
6136
+ get effectiveAdditionalSeries(): LineChartSeriesDefinition[];
5695
6137
  ngOnInit(): Promise<void>;
5696
6138
  onQuerySelected(query: PersistentQueryItem | null): Promise<void>;
5697
6139
  private loadQueryColumns;
@@ -5707,7 +6149,168 @@ declare class LineChartConfigDialogComponent implements OnInit {
5707
6149
  removeReferenceLine(index: number): void;
5708
6150
  onCancel(): void;
5709
6151
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LineChartConfigDialogComponent, never>;
5710
- 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; }; "initialIgnoreTimeFilter": { "alias": "initialIgnoreTimeFilter"; "required": false; }; "initialEntitySelectorId": { "alias": "initialEntitySelectorId"; "required": false; }; "initialResolutionAware": { "alias": "initialResolutionAware"; "required": false; }; "initialRequiredAggregation": { "alias": "initialRequiredAggregation"; "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; }; "initialShowDataBadge": { "alias": "initialShowDataBadge"; "required": false; }; "initialReferenceLines": { "alias": "initialReferenceLines"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; }, {}, never, never, true, never>;
6152
+ 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; }; "initialIgnoreTimeFilter": { "alias": "initialIgnoreTimeFilter"; "required": false; }; "initialEntitySelectorId": { "alias": "initialEntitySelectorId"; "required": false; }; "initialResolutionAware": { "alias": "initialResolutionAware"; "required": false; }; "initialRequiredAggregation": { "alias": "initialRequiredAggregation"; "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; }; "initialShowDataBadge": { "alias": "initialShowDataBadge"; "required": false; }; "initialReferenceLines": { "alias": "initialReferenceLines"; "required": false; }; "initialFilters": { "alias": "initialFilters"; "required": false; }; "initialAdditionalSeries": { "alias": "initialAdditionalSeries"; "required": false; }; "initialStacked": { "alias": "initialStacked"; "required": false; }; "initialPrimarySeries": { "alias": "initialPrimarySeries"; "required": false; }; }, {}, never, never, true, never>;
6153
+ }
6154
+
6155
+ /**
6156
+ * Formula series of charts (AB#7952): a series whose value in each bucket is a formula over the
6157
+ * values of other series in the same bucket, e.g.
6158
+ * `pvDirect = min(${pv} - ${gridExport} - ${batteryCharge}, ${consumption})`.
6159
+ *
6160
+ * Reuses the board formula syntax and evaluator of `meshboard-formula.ts` (`${key}` operands,
6161
+ * expr-eval) — no second expression engine. The functions are pure and work on plain value arrays
6162
+ * (`data[i]` = bucket `i`), so the line chart (time buckets) and the bar chart (categories, AB#7953)
6163
+ * both use them.
6164
+ *
6165
+ * Gap rule: a bucket in which any operand is `null`, or whose result is not a finite number
6166
+ * (division by zero, a string or boolean result, an evaluation error), is `null` — a gap, never 0.
6167
+ */
6168
+ /** A formula series as these functions see it. */
6169
+ interface SeriesFormula {
6170
+ key: string;
6171
+ formula: string;
6172
+ }
6173
+ /** Dependency order of formula series, or the cycle that prevents one. */
6174
+ interface SeriesFormulaOrder {
6175
+ /** Keys of the formula series, every one after the formula series it references. */
6176
+ order: string[];
6177
+ /** Keys of every formula series that is part of a circular reference (self-references included), in input order. */
6178
+ cyclic: string[];
6179
+ }
6180
+ /** Referenced series keys of a formula, distinct, in order of first appearance. */
6181
+ declare function seriesFormulaOperands(formula: string): string[];
6182
+ /**
6183
+ * Orders formula series so every series comes after the formula series it references (Kahn's
6184
+ * algorithm, stable in input order). References to non-formula keys (query series) are leaves.
6185
+ * Series in or behind a cycle are left out of `order`; `cyclic` names the ones in the cycle.
6186
+ */
6187
+ declare function orderSeriesFormulas(formulas: readonly SeriesFormula[]): SeriesFormulaOrder;
6188
+ /** Message of a circular reference, naming the series involved. */
6189
+ declare function circularReferenceMessage(cyclic: readonly string[]): string;
6190
+ /**
6191
+ * Validates every formula series of a chart: syntax and unknown keys exactly like the KPI formula
6192
+ * field (`validateFormula`, series keys as available names), then circular references.
6193
+ * Returns one result per formula, in input order.
6194
+ */
6195
+ declare function validateSeriesFormulas(formulas: readonly SeriesFormula[], availableKeys: readonly string[], evaluator: FormulaEvaluator): FormulaValidationResult[];
6196
+ /**
6197
+ * Evaluates the formula series bucket by bucket over `operands` (key → values, all of `length`).
6198
+ * Formula series are evaluated in dependency order and their results become operands of later
6199
+ * ones. A formula in a cycle, or with an operand key that has no values, is all gaps.
6200
+ * Returns key → values for every formula series.
6201
+ */
6202
+ declare function evaluateSeriesFormulas(formulas: readonly SeriesFormula[], operands: ReadonlyMap<string, readonly (number | null)[]>, length: number, evaluator: FormulaEvaluator): Map<string, (number | null)[]>;
6203
+
6204
+ /** One editor row: the series plus the transient picker state. */
6205
+ interface SeriesRow {
6206
+ uid: number;
6207
+ series: LineChartSeriesDefinition;
6208
+ query: PersistentQueryItem | null;
6209
+ numericColumns: QueryColumnItem[];
6210
+ /** Every column of the query (category field picker of the bar chart, AB#7953). */
6211
+ allColumns: QueryColumnItem[];
6212
+ loadingColumns: boolean;
6213
+ }
6214
+ /**
6215
+ * Series section of the line chart config dialog (AB#7951, wireframe linked in AB#7951): the
6216
+ * series that come after the primary query's series, in legend / stacking order.
6217
+ *
6218
+ * - Query rows: own stream-data query, value field, entity-selector scope, time-filter opt-out and
6219
+ * resolution-aware routing (AB#7951).
6220
+ * - Formula rows (AB#7952): a formula over the other rows' keys in the shared formula field
6221
+ * (series keys as available names, no preview).
6222
+ * - Every row and the primary row: Visible and Stacked (Stacked only in a stacked area chart;
6223
+ * unchecked = drawn as a line over the stack).
6224
+ *
6225
+ * Rows can be added, removed and moved by keyboard; the focus stays on a moved row's button.
6226
+ *
6227
+ * `alignment="category"` (bar chart, AB#7953): rows are matched per category value, so every query
6228
+ * row gets its own category field; Resolution-aware and Stacked are not shown (the chart type
6229
+ * stacks).
6230
+ */
6231
+ declare class LineChartSeriesEditorComponent implements OnChanges {
6232
+ private readonly queryExecutor;
6233
+ private readonly stateService;
6234
+ private readonly cdr;
6235
+ private readonly host;
6236
+ private readonly evaluator;
6237
+ /** The series (query and formula rows), in order. */
6238
+ series: LineChartSeriesDefinition[];
6239
+ /** Display options of the primary query's series (AB#7952). */
6240
+ primary: LineChartSeriesDisplayOptions | undefined;
6241
+ /** The chart stacks (area + stacked): enables the per-series Stacked checkboxes (AB#7952). */
6242
+ stackedChart: boolean;
6243
+ /** Emits the primary display options on change; `undefined` when both are default. */
6244
+ primaryChange: EventEmitter<LineChartSeriesDisplayOptions | undefined>;
6245
+ /** Entity selectors of the board (scope picker). */
6246
+ selectors: EntitySelectorConfig[];
6247
+ /**
6248
+ * How the chart matches series (AB#7953): `timeGrid` (line chart, default) or `category` (bar
6249
+ * chart: per-row category field, no Resolution-aware, no Stacked).
6250
+ */
6251
+ alignment: 'timeGrid' | 'category';
6252
+ /** Category field preset for a new query row in category mode (the primary query's category field). */
6253
+ defaultCategoryField: string | undefined;
6254
+ /** Emits a new array on every change. */
6255
+ seriesChange: EventEmitter<LineChartSeriesDefinition[]>;
6256
+ rowCards?: QueryList<ElementRef<HTMLElement>>;
6257
+ get arrowUpIcon(): typeof arrowUpIcon;
6258
+ get arrowDownIcon(): typeof arrowDownIcon;
6259
+ get plusIcon(): typeof plusIcon;
6260
+ get trashIcon(): typeof MM_ACTION_ICONS.delete;
6261
+ readonly streamDataOnly: readonly ["streamData"];
6262
+ readonly stackedDisabledHint = "Only a stacked area chart stacks series.";
6263
+ readonly keySyntaxHint = "${key}";
6264
+ readonly formulaPlaceholder = "e.g. min(${pv} - ${gridExport}, ${consumption})";
6265
+ readonly aggregationOptions: {
6266
+ value: SeriesAggregationFunction;
6267
+ label: string;
6268
+ }[];
6269
+ /** Rows are matched per category value (bar chart, AB#7953). */
6270
+ get categoryMode(): boolean;
6271
+ rows: SeriesRow[];
6272
+ errors: (string | null)[];
6273
+ private nextUid;
6274
+ private readonly operandCache;
6275
+ /** The array last emitted, so an echo through `[series]` does not rebuild the rows. */
6276
+ private lastEmitted;
6277
+ ngOnChanges(changes: SimpleChanges): void;
6278
+ add(): void;
6279
+ addFormula(): void;
6280
+ /** The row as query series (template narrowing). */
6281
+ asQuery(row: SeriesRow): LineChartQuerySeries | null;
6282
+ /** The row as formula series (template narrowing). */
6283
+ asFormula(row: SeriesRow): LineChartFormulaSeries | null;
6284
+ /**
6285
+ * Names a formula row can insert: the keys of every other row (a self-reference would be a
6286
+ * circular reference). Cached per key set, so the formula field's inputs keep their reference.
6287
+ */
6288
+ operandsFor(row: SeriesRow): MeshBoardVariable[];
6289
+ /**
6290
+ * Message under a row. For a formula row the shared formula field already shows syntax and
6291
+ * unknown-key messages; the row repeats only what the field cannot know (key, circular reference).
6292
+ */
6293
+ rowMessage(index: number): string | null;
6294
+ setOption(row: SeriesRow, option: 'visible' | 'stacked', on: boolean): void;
6295
+ setPrimaryOption(option: 'visible' | 'stacked', on: boolean): void;
6296
+ remove(index: number): void;
6297
+ move(index: number, delta: -1 | 1): void;
6298
+ onQuerySelected(row: SeriesRow, query: PersistentQueryItem | null): Promise<void>;
6299
+ /**
6300
+ * Category mode: a row without a category field gets the primary query's category field when
6301
+ * its query has that column, else `timestamp` when it has one (AB#7953).
6302
+ */
6303
+ private presetCategoryField;
6304
+ private validationOptions;
6305
+ onResolutionAwareChange(row: SeriesRow, on: boolean): void;
6306
+ emit(): void;
6307
+ private createRow;
6308
+ /** Numeric columns of the row's query, probed with the board window (AB#7975). */
6309
+ private loadColumns;
6310
+ private focusAfterRender;
6311
+ private focusAdd;
6312
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LineChartSeriesEditorComponent, never>;
6313
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LineChartSeriesEditorComponent, "mm-line-chart-series-editor", never, { "series": { "alias": "series"; "required": false; }; "primary": { "alias": "primary"; "required": false; }; "stackedChart": { "alias": "stackedChart"; "required": false; }; "selectors": { "alias": "selectors"; "required": false; }; "alignment": { "alias": "alignment"; "required": false; }; "defaultCategoryField": { "alias": "defaultCategoryField"; "required": false; }; }, { "primaryChange": "primaryChange"; "seriesChange": "seriesChange"; }, never, never, true, never>;
5711
6314
  }
5712
6315
 
5713
6316
  /**
@@ -10149,5 +10752,5 @@ declare function pipelineExecutionInputs(children: (unknown | null)[] | null | u
10149
10752
  */
10150
10753
  declare function countPipelineExecutions(pipelines: PipelineExecutionInput[], now?: number): PipelineExecutionCounts;
10151
10754
 
10152
- export { ADAPTER_OFFLINE_GRACE_MS, ASSOCIATION_HOP_SOURCE_BATCH, ASSOCIATION_HOP_TARGETS_PER_SOURCE, ATTENTION_SEVERITY_ORDER, AdaptersAttentionProvider, AddWidgetDialogComponent, AiInsightsConfigDialogComponent, AiInsightsService, AiInsightsWidgetComponent, AlertBannerConfigDialogComponent, AlertBannerWidgetComponent, AlertListConfigDialogComponent, AlertListWidgetComponent, AssociationsConfigDialogComponent, AttentionListConfigDialogComponent, AttentionListWidgetComponent, AutoRefreshTimerService, BUILT_IN_ATTENTION_PROVIDERS, BarChartConfigDialogComponent, BarChartWidgetComponent, BlueprintUpdatesAttentionProvider, COCKPIT_ADAPTER_LIMIT, COCKPIT_ATTENTION_PROVIDERS, COCKPIT_BLUEPRINT_CATALOG_LIMIT, COCKPIT_CHILD_TENANT_IDS, COCKPIT_DATA_FLOW_LIMIT, COCKPIT_EXPLAIN_HANDLER, COCKPIT_FAILED_EXECUTIONS_OPTIONS, COCKPIT_KPI_GATES, COCKPIT_KPI_SLOW_LOADING_MS, COCKPIT_LINK_RESOLVER, COCKPIT_RECENT_ITEMS, COCKPIT_ROLES, COCKPIT_SERVICE_NAMES, COCKPIT_VERSION_SOURCE, COCKPIT_VIEWER_ACCESS, COCKPIT_WIDGET_MESSAGES, COCKPIT_WIDGET_TYPES, CkModelsResolveFailedAttentionProvider, CockpitAdapterStatesService, CockpitAttentionService, CockpitBlueprintStatusService, CockpitChildTenantsService, CockpitCkModelStatesService, CockpitContextService, CockpitDataFlowExecutionsService, CockpitKpiConfigDialogComponent, CockpitKpiService, CockpitKpiWidgetComponent, CockpitServiceHealthService, DAY_MS, DEFAULT_ATTENTION_MAX_ITEMS, DEFAULT_COCKPIT_WIDGET_MESSAGES, DEFAULT_FAILED_EXECUTIONS_OPTIONS, DEFAULT_MESHBOARD_MESSAGES, DEFAULT_RECENT_ITEMS_MAX, DEFAULT_TIME_ZONE_MODE, DashboardDataService, DashboardGridService, EditModeStateService, EditWidgetDialogComponent, EntityAssociationsWidgetComponent, EntityCardConfigDialogComponent, EntityCardWidgetComponent, EntityDetailDialogComponent, EntitySelectorEditorComponent, EntitySelectorScopePathEditorComponent, EntitySelectorToolbarComponent, FALLBACK_SERIES_COLORS, FailedExecutionsAttentionProvider, FeaturesNotInstalledAttentionProvider, FormulaFieldComponent, GaugeConfigDialogComponent, GaugeWidgetComponent, HISTOGRAM_HOURS, HOUR_MS, HeatmapConfigDialogComponent, HeatmapWidgetComponent, KPI_ERROR_TEXT, KpiConfigDialogComponent, KpiWidgetComponent, LazyMarkdownComponent, LineChartConfigDialogComponent, LineChartWidgetComponent, MAX_RECENT_ITEMS, MAX_SCOPE_HOPS, MESHBOARD_CHROME_ROUTE_DATA, MESHBOARD_DESCRIPTION_MARKER, MESHBOARD_EDIT_QUERY_PARAM, MESHBOARD_HEADER_MODE_ROUTE_DATA, MESHBOARD_LABEL_RESOLVER, MESHBOARD_LANGUAGE, MESHBOARD_MESSAGES, MESHBOARD_OPTIONS, MESHBOARD_TENANT_ID_PROVIDER, MarkdownConfigDialogComponent, MarkdownWidgetComponent, MeshBoardDataService, MeshBoardGridService, MeshBoardManagerDialogComponent, MeshBoardPersistenceService, MeshBoardSettingsDialogComponent, MeshBoardSettingsResult, MeshBoardStateService, MeshBoardViewComponent, NOT_AVAILABLE_TEXT, PieChartConfigDialogComponent, PieChartWidgetComponent, QueryExecutorService, QuerySelectorComponent, RecentItemsConfigDialogComponent, RecentItemsWidgetComponent, RuntimeEntitySelectorComponent, SERVICE_MANAGED_BLUEPRINT_PREFIX, STATE_STATUS_BY_KEY, ServiceHealthConfigDialogComponent, ServiceHealthWidgetComponent, ServicesHealthAttentionProvider, StatsGridConfigDialogComponent, StatsGridWidgetComponent, StatusIndicatorConfigDialogComponent, StatusIndicatorWidgetComponent, StatusListConfigDialogComponent, StatusListWidgetComponent, SummaryCardConfigDialogComponent, SummaryCardWidgetComponent, TableConfigDialogComponent, TableWidgetComponent, TableWidgetDataSourceDirective, UnregisteredPoolsAttentionProvider, WidgetFactoryService, WidgetGroupComponent, WidgetGroupConfigDialogComponent, WidgetNotConfiguredComponent, WidgetRegistryService, adapterKpi, adaptersInError, adaptersOffline, blueprintUpdatesKpi, buildHourlyHistogram, categoryStatus, chartSeriesColors, ckModelKpi, classifyQuery, compareBlueprintVersions, compareMeshBoardNavigation, countFlowExecutions, countLabel, countPipelineExecutions, emptyQueryExecutionResult, enabledButNotInstalled, executionKpi, failedExecutionsSeverity, formatCockpitMessage, formatCount, humanizeCategory, isAdapterAtRest, isAdapterExpectedToRun, isAdapterOnline, isCockpitWidgetType, isMeshBoardChrome, isMeshBoardHeaderMode, isServiceConfigured, joinEncodedDescription, kpiKindOf, latestStatisticsUpdate, legacyCockpitLinkTarget, loadNgxMarkdown, nameList, newMeshBoardConfig, normalizeNavigation, observeThemeChanges, parseHostTimeRange, pickLocalizedText, pipelineExecutionInputs, plural, provideCockpitWidgetHost, provideCockpitWidgets, provideDefaultWidgets, provideMeshBoard, provideMeshBoardLanguage, provideMeshBoardMessages, provideProcessWidget, provideWidgetRegistrations, queryFamily, readMeshBoardNavigation, recentRelativeTime, registerCockpitWidgets, registerDefaultWidgets, registerProcessWidget, resolveChartColor, resolveCockpitWidgetMessages, resolveMeshBoardChrome, resolveMeshBoardHeaderMode, resolveMeshBoardLabel, resolveMeshBoardMessages, selectProviders, serviceStateText, servicesHealthKpi, sortAttentionFindings, sparklineGeometry, splitBlueprintId, splitEncodedDescription, statusColor, summarizeAdapterOnline, tenantCountKpi, toBlueprintStatus, toServiceHealthStatus, truncationNote, versionKpi, withMeshBoardNavigation };
10153
- export type { AdapterOnlineFields, AdapterOnlineSummary, AdapterStatusWidgetConfig, AggregationDataSource, AggregationQuery, AggregationType, AiInsightsConfigResult, AiInsightsWidgetConfig, AlertBannerConfigResult, AlertBannerWidgetConfig, AlertListConfigResult, AlertListWidgetConfig, AnyWidgetConfig, AssociationsConfigResult, AttentionContext, AttentionFinding, AttentionLink, AttentionListConfigResult, AttentionListWidgetConfig, AttentionProvider, AttentionProviderInfo, AttentionSeverity, AttentionState, BarChartColorThreshold, BarChartConfigResult, BarChartSeries, BarChartType, BarChartWidgetConfig, BaseWidgetConfig, BlueprintUpdatesWidgetConfig, CategoryStatus, CategoryValueItem, ChartReferenceLine, CkModelStateWidgetConfig, CkQueryResult, CkQueryTarget, CkTypeAttributeInfo, CockpitAdapterState, CockpitAdapterStates, CockpitBlueprintStatus, CockpitBlueprintUpdate, CockpitChildTenants, CockpitCkModelCounts, CockpitDataFlowExecutions, CockpitDataFlowRow, CockpitExecutionCounts, CockpitExplainHandler, CockpitExplainTarget, CockpitKpi, CockpitKpiConfigResult, CockpitKpiKind, CockpitKpiResult, CockpitKpiStatus, CockpitKpiWidgetConfig, CockpitKpiWidgetOptions, CockpitLinkQueryParams, CockpitLinkResolver, CockpitLinkTarget, CockpitRecentItem, CockpitRecentItemKind, CockpitRecentItemsSource, CockpitResolvedLink, CockpitRouteLinkTarget, CockpitServiceHealth, CockpitServiceHealthStatus, CockpitServiceKey, CockpitVersionEntry, CockpitVersionSource, CockpitViewerAccess, CockpitWidgetHost, CockpitWidgetMessages, CockpitWidgetMessagesSource, CockpitWidgetType, ConfigDialogResult, ConfigResultApplier, ConstructionKitQueryDataSource, DashboardConfig, DashboardWidget, DataSource, DataSourceType, DiagramPropertyMapping, EncodedDescription, EntityAssociation, EntityAttribute, EntityCardConfigResult, EntityCardWidgetConfig, EntityListWidget, EntitySelectorAttributeMapping, EntitySelectorChildScope, EntitySelectorClearEvent, EntitySelectorConfig, EntitySelectorEvent, EntitySelectorScopeHop, EntitySelectorScopeSource, EntitySelectorScopeState, EntityWidget, EntityWithAssociationsWidgetConfig, FailedExecutionsAttentionOptions, GaugeConfigResult, GaugeRange, GaugeType, GaugeWidgetConfig, GridCell, GridPosition, GroupChildWidgetType, GroupedDataItem, HeatmapAggregation, HeatmapColorMode, HeatmapColorScheme, HeatmapConfigResult, HeatmapTimeWindow, HeatmapWidgetConfig, HostTimeRangeState, HourlyExecutionBucket, HourlyHistogramOptions, KpiConfigResult, KpiDataSourceType, KpiQueryMode, KpiValueMode, KpiWidgetConfig, LatestExecutionInput, LineChartConfigResult, LineChartType, LineChartWidgetConfig, MarkdownConfigResult, MarkdownTextAlign, MarkdownWidgetConfig, MeshBoardChrome, MeshBoardConfig, MeshBoardHeaderMode, MeshBoardHostTimeRange, MeshBoardLabelKind, MeshBoardLabelRequest, MeshBoardLabelResolver, MeshBoardLanguageSource, MeshBoardMessages, MeshBoardMessagesSource, MeshBoardNavigationConfig, MeshBoardOptions, MeshBoardTimeFilterConfig, MeshBoardTimeFilterControl, MeshBoardTimeZoneMode, MeshBoardVariable, MeshBoardVariableSource, MeshBoardVariableType, ParentAssociationMode, PersistedDashboard, PersistedMeshBoard, PersistedWidget, PersistedWidgetData, PersistentQueryCellMode, PersistentQueryCellSource, PersistentQueryDataSource, PersistentQueryItem, PieChartConfigResult, PieChartLabelPosition, PieChartType, PieChartWidgetConfig, PipelineExecutionCounts, PipelineExecutionInput, PipelineExecutionsWidgetConfig, PipelineStatisticsInput, ProcessWidgetConfig, Quarter, QueryCell, QueryClassification, QueryColumn, QueryColumnInfo, QueryColumnItem, QueryExecutionOptions, QueryExecutionResult, QueryFamily, QueryKind, QueryResultRow, RawHourBucket, RecentItemsConfigResult, RecentItemsWidgetConfig, RelativeTimeUnit, RepeaterDataItem, RepeaterQueryDataSource, RuntimeEntityData, RuntimeEntityDataSource, RuntimeEntitySelectorValue, SeriesAggregationFunction, SeriesResolutionResult, ServiceCallDataSource, ServiceCallType, ServiceHealthConfigResult, ServiceHealthWidgetConfig, ServicesHealthWidgetConfig, SparklineGeometry, StatColor, StatItem, StaticDataSource, StatsGridConfigResult, StatsGridWidgetConfig, StatusIndicatorConfigResult, StatusIndicatorWidgetConfig, StatusListConfigResult, StatusListWidgetConfig, StreamDataExecutionArgs, StreamDataScope, SummaryCardConfigResult, SummaryCardTile, SummaryCardWidgetConfig, TableColumn, TableColumnStatusIconMapping, TableColumnValueLabel, TableConfigResult, TableFilterConfig, TableSortConfig, TableWidgetConfig, TargetEntityWithAttributes, TenantCountWidgetConfig, TimeRangePickerConfig, TimeRangeSelection, TimeRangeType, UpdateDashboardResult, VariableResolutionError, VersionInfoWidgetConfig, WidgetConfig, WidgetConfigDialog, WidgetConfigDialogSize, WidgetConfigResult, WidgetCreationOptions, WidgetDataSource, WidgetFilterConfig, WidgetGroupAttributeMappings, WidgetGroupChildTemplate, WidgetGroupConfig, WidgetGroupConfigResult, WidgetGroupLayout, WidgetPersistenceData, WidgetPositionUpdate, WidgetRegistration, WidgetType, WidgetZone };
10755
+ export { ADAPTER_OFFLINE_GRACE_MS, ASSOCIATION_HOP_SOURCE_BATCH, ASSOCIATION_HOP_TARGETS_PER_SOURCE, ATTENTION_SEVERITY_ORDER, AdaptersAttentionProvider, AddWidgetDialogComponent, AiInsightsConfigDialogComponent, AiInsightsService, AiInsightsWidgetComponent, AlertBannerConfigDialogComponent, AlertBannerWidgetComponent, AlertListConfigDialogComponent, AlertListWidgetComponent, AssociationsConfigDialogComponent, AttentionListConfigDialogComponent, AttentionListWidgetComponent, AutoRefreshTimerService, BUILT_IN_ATTENTION_PROVIDERS, BarChartConfigDialogComponent, BarChartWidgetComponent, BlueprintUpdatesAttentionProvider, COCKPIT_ADAPTER_LIMIT, COCKPIT_ATTENTION_PROVIDERS, COCKPIT_BLUEPRINT_CATALOG_LIMIT, COCKPIT_CHILD_TENANT_IDS, COCKPIT_DATA_FLOW_LIMIT, COCKPIT_EXPLAIN_HANDLER, COCKPIT_FAILED_EXECUTIONS_OPTIONS, COCKPIT_KPI_GATES, COCKPIT_KPI_SLOW_LOADING_MS, COCKPIT_LINK_RESOLVER, COCKPIT_RECENT_ITEMS, COCKPIT_ROLES, COCKPIT_SERVICE_NAMES, COCKPIT_VERSION_SOURCE, COCKPIT_VIEWER_ACCESS, COCKPIT_WIDGET_MESSAGES, COCKPIT_WIDGET_TYPES, CkModelsResolveFailedAttentionProvider, CockpitAdapterStatesService, CockpitAttentionService, CockpitBlueprintStatusService, CockpitChildTenantsService, CockpitCkModelStatesService, CockpitContextService, CockpitDataFlowExecutionsService, CockpitKpiConfigDialogComponent, CockpitKpiService, CockpitKpiWidgetComponent, CockpitServiceHealthService, DAY_MS, DEFAULT_ATTENTION_MAX_ITEMS, DEFAULT_COCKPIT_WIDGET_MESSAGES, DEFAULT_FAILED_EXECUTIONS_OPTIONS, DEFAULT_MESHBOARD_MESSAGES, DEFAULT_RECENT_ITEMS_MAX, DEFAULT_TIME_ZONE_MODE, DashboardDataService, DashboardGridService, EditModeStateService, EditWidgetDialogComponent, EntityAssociationsWidgetComponent, EntityCardConfigDialogComponent, EntityCardWidgetComponent, EntityDetailDialogComponent, EntitySelectorEditorComponent, EntitySelectorScopePathEditorComponent, EntitySelectorToolbarComponent, FALLBACK_SERIES_COLORS, FailedExecutionsAttentionProvider, FeaturesNotInstalledAttentionProvider, FormulaFieldComponent, GaugeConfigDialogComponent, GaugeWidgetComponent, HISTOGRAM_HOURS, HOUR_MS, HeatmapConfigDialogComponent, HeatmapWidgetComponent, KPI_ERROR_TEXT, KpiConfigDialogComponent, KpiWidgetComponent, LazyMarkdownComponent, LineChartConfigDialogComponent, LineChartSeriesEditorComponent, LineChartWidgetComponent, MAX_RECENT_ITEMS, MAX_SCOPE_HOPS, MESHBOARD_CHROME_ROUTE_DATA, MESHBOARD_DESCRIPTION_MARKER, MESHBOARD_EDIT_QUERY_PARAM, MESHBOARD_HEADER_MODE_ROUTE_DATA, MESHBOARD_LABEL_RESOLVER, MESHBOARD_LANGUAGE, MESHBOARD_MESSAGES, MESHBOARD_OPTIONS, MESHBOARD_TENANT_ID_PROVIDER, MarkdownConfigDialogComponent, MarkdownWidgetComponent, MeshBoardDataService, MeshBoardGridService, MeshBoardManagerDialogComponent, MeshBoardPersistenceService, MeshBoardSettingsDialogComponent, MeshBoardSettingsResult, MeshBoardStateService, MeshBoardViewComponent, NOT_AVAILABLE_TEXT, PieChartConfigDialogComponent, PieChartWidgetComponent, QueryExecutorService, QuerySelectorComponent, RecentItemsConfigDialogComponent, RecentItemsWidgetComponent, RuntimeEntitySelectorComponent, SERVICE_MANAGED_BLUEPRINT_PREFIX, STATE_STATUS_BY_KEY, ServiceHealthConfigDialogComponent, ServiceHealthWidgetComponent, ServicesHealthAttentionProvider, StatsGridConfigDialogComponent, StatsGridWidgetComponent, StatusIndicatorConfigDialogComponent, StatusIndicatorWidgetComponent, StatusListConfigDialogComponent, StatusListWidgetComponent, SummaryCardConfigDialogComponent, SummaryCardWidgetComponent, TableConfigDialogComponent, TableWidgetComponent, TableWidgetDataSourceDirective, UnregisteredPoolsAttentionProvider, WidgetFactoryService, WidgetGroupComponent, WidgetGroupConfigDialogComponent, WidgetNotConfiguredComponent, WidgetRegistryService, adapterKpi, adaptersInError, adaptersOffline, alignOnTimeGrid, blueprintUpdatesKpi, bucketStepMs, buildHourlyHistogram, categoryStatus, chartSeriesColors, circularReferenceMessage, ckModelKpi, classifyQuery, compareBlueprintVersions, compareMeshBoardNavigation, countFlowExecutions, countLabel, countPipelineExecutions, emptyQueryExecutionResult, enabledButNotInstalled, evaluateSeriesFormulas, executionKpi, failedExecutionsSeverity, formatCockpitMessage, formatCount, humanizeCategory, isAdapterAtRest, isAdapterExpectedToRun, isAdapterOnline, isCockpitWidgetType, isMeshBoardChrome, isMeshBoardHeaderMode, isServiceConfigured, joinEncodedDescription, kpiKindOf, latestStatisticsUpdate, legacyCockpitLinkTarget, loadNgxMarkdown, nameList, newMeshBoardConfig, normalizeNavigation, observeThemeChanges, orderSeriesFormulas, parseHostTimeRange, pickLocalizedText, pipelineExecutionInputs, plural, provideCockpitWidgetHost, provideCockpitWidgets, provideDefaultWidgets, provideMeshBoard, provideMeshBoardLanguage, provideMeshBoardMessages, provideProcessWidget, provideWidgetRegistrations, queryFamily, readMeshBoardNavigation, recentRelativeTime, registerCockpitWidgets, registerDefaultWidgets, registerProcessWidget, resolveChartColor, resolveCockpitWidgetMessages, resolveMeshBoardChrome, resolveMeshBoardHeaderMode, resolveMeshBoardLabel, resolveMeshBoardMessages, selectProviders, seriesFormulaOperands, serviceStateText, servicesHealthKpi, sortAttentionFindings, sparklineGeometry, splitBlueprintId, splitEncodedDescription, statusColor, summarizeAdapterOnline, tenantCountKpi, toBlueprintStatus, toServiceHealthStatus, truncationNote, validateSeriesFormulas, versionKpi, withMeshBoardNavigation };
10756
+ export type { AdapterOnlineFields, AdapterOnlineSummary, AdapterStatusWidgetConfig, AggregationDataSource, AggregationQuery, AggregationType, AiInsightsConfigResult, AiInsightsWidgetConfig, AlertBannerConfigResult, AlertBannerWidgetConfig, AlertListConfigResult, AlertListWidgetConfig, AlignedTimeGrid, AlignedTimeSeries, AnyWidgetConfig, AssociationsConfigResult, AttentionContext, AttentionFinding, AttentionLink, AttentionListConfigResult, AttentionListWidgetConfig, AttentionProvider, AttentionProviderInfo, AttentionSeverity, AttentionState, BarChartColorThreshold, BarChartConfigResult, BarChartSeries, BarChartSeriesDefinition, BarChartType, BarChartWidgetConfig, BaseWidgetConfig, BlueprintUpdatesWidgetConfig, CategoryStatus, CategoryValueItem, ChartReferenceLine, CkModelStateWidgetConfig, CkQueryResult, CkQueryTarget, CkTypeAttributeInfo, CockpitAdapterState, CockpitAdapterStates, CockpitBlueprintStatus, CockpitBlueprintUpdate, CockpitChildTenants, CockpitCkModelCounts, CockpitDataFlowExecutions, CockpitDataFlowRow, CockpitExecutionCounts, CockpitExplainHandler, CockpitExplainTarget, CockpitKpi, CockpitKpiConfigResult, CockpitKpiKind, CockpitKpiResult, CockpitKpiStatus, CockpitKpiWidgetConfig, CockpitKpiWidgetOptions, CockpitLinkQueryParams, CockpitLinkResolver, CockpitLinkTarget, CockpitRecentItem, CockpitRecentItemKind, CockpitRecentItemsSource, CockpitResolvedLink, CockpitRouteLinkTarget, CockpitServiceHealth, CockpitServiceHealthStatus, CockpitServiceKey, CockpitVersionEntry, CockpitVersionSource, CockpitViewerAccess, CockpitWidgetHost, CockpitWidgetMessages, CockpitWidgetMessagesSource, CockpitWidgetType, ConfigDialogResult, ConfigResultApplier, ConstructionKitQueryDataSource, DashboardConfig, DashboardWidget, DataSource, DataSourceType, DiagramPropertyMapping, EncodedDescription, EntityAssociation, EntityAttribute, EntityCardConfigResult, EntityCardWidgetConfig, EntityListWidget, EntitySelectorAttributeMapping, EntitySelectorChildScope, EntitySelectorClearEvent, EntitySelectorConfig, EntitySelectorEvent, EntitySelectorScopeHop, EntitySelectorScopeSource, EntitySelectorScopeState, EntityWidget, EntityWithAssociationsWidgetConfig, FailedExecutionsAttentionOptions, GaugeConfigResult, GaugeRange, GaugeType, GaugeWidgetConfig, GridCell, GridPosition, GroupChildWidgetType, GroupedDataItem, HeatmapAggregation, HeatmapColorMode, HeatmapColorScheme, HeatmapConfigResult, HeatmapTimeWindow, HeatmapWidgetConfig, HostTimeRangeState, HourlyExecutionBucket, HourlyHistogramOptions, KpiConfigResult, KpiDataSourceType, KpiQueryMode, KpiValueMode, KpiWidgetConfig, LatestExecutionInput, LineChartConfigResult, LineChartFormulaSeries, LineChartQuerySeries, LineChartSeriesDefinition, LineChartSeriesDisplayOptions, LineChartSourceHint, LineChartType, LineChartWidgetConfig, MarkdownConfigResult, MarkdownTextAlign, MarkdownWidgetConfig, MeshBoardChrome, MeshBoardConfig, MeshBoardHeaderMode, MeshBoardHostTimeRange, MeshBoardLabelKind, MeshBoardLabelRequest, MeshBoardLabelResolver, MeshBoardLanguageSource, MeshBoardMessages, MeshBoardMessagesSource, MeshBoardNavigationConfig, MeshBoardOptions, MeshBoardTimeFilterConfig, MeshBoardTimeFilterControl, MeshBoardTimeZoneMode, MeshBoardVariable, MeshBoardVariableSource, MeshBoardVariableType, MisalignedTimeSource, ParentAssociationMode, PersistedDashboard, PersistedMeshBoard, PersistedWidget, PersistedWidgetData, PersistentQueryCellMode, PersistentQueryCellSource, PersistentQueryDataSource, PersistentQueryItem, PieChartConfigResult, PieChartLabelPosition, PieChartType, PieChartWidgetConfig, PipelineExecutionCounts, PipelineExecutionInput, PipelineExecutionsWidgetConfig, PipelineStatisticsInput, ProcessValueAggregate, ProcessWidgetBinding, ProcessWidgetConfig, Quarter, QueryCell, QueryClassification, QueryColumn, QueryColumnInfo, QueryColumnItem, QueryExecutionOptions, QueryExecutionResult, QueryFamily, QueryKind, QueryResultRow, RawHourBucket, RecentItemsConfigResult, RecentItemsWidgetConfig, RelativeTimeUnit, RepeaterDataItem, RepeaterQueryDataSource, RuntimeEntityData, RuntimeEntityDataSource, RuntimeEntitySelectorValue, SeriesAggregationFunction, SeriesFormula, SeriesFormulaOrder, SeriesResolutionResult, ServiceCallDataSource, ServiceCallType, ServiceHealthConfigResult, ServiceHealthWidgetConfig, ServicesHealthWidgetConfig, SparklineGeometry, StatColor, StatItem, StaticDataSource, StatsGridConfigResult, StatsGridWidgetConfig, StatusIndicatorConfigResult, StatusIndicatorWidgetConfig, StatusListConfigResult, StatusListWidgetConfig, StreamDataExecutionArgs, StreamDataScope, SummaryCardConfigResult, SummaryCardTile, SummaryCardWidgetConfig, TableColumn, TableColumnStatusIconMapping, TableColumnValueLabel, TableConfigResult, TableFilterConfig, TableSortConfig, TableWidgetConfig, TargetEntityWithAttributes, TenantCountWidgetConfig, TimeGridSeriesInput, TimeGridSourceInput, TimeRangePickerConfig, TimeRangeSelection, TimeRangeType, UpdateDashboardResult, VariableResolutionError, VersionInfoWidgetConfig, WidgetConfig, WidgetConfigDialog, WidgetConfigDialogSize, WidgetConfigResult, WidgetCreationOptions, WidgetDataSource, WidgetFilterConfig, WidgetGroupAttributeMappings, WidgetGroupChildTemplate, WidgetGroupConfig, WidgetGroupConfigResult, WidgetGroupLayout, WidgetPersistenceData, WidgetPositionUpdate, WidgetRegistration, WidgetType, WidgetZone };