@meshmakers/octo-meshboard 3.5.490 → 3.5.500

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,14 +1,14 @@
1
1
  import { ProcessWidgetSpecificConfig } from '@meshmakers/octo-process-diagrams';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { Signal, AfterViewInit, OnChanges, EventEmitter, SimpleChanges, Type, OnDestroy, OnInit, EnvironmentProviders, InjectionToken, Provider } from '@angular/core';
4
+ import { Observable, Subject } from 'rxjs';
5
+ import * as Types from '@meshmakers/octo-services';
6
+ import { SortDto, FieldFilterDto, QueryModeDto, ResolveSeriesQueryInputDto, CkRollupFunctionDto, SeriesResolutionSignalDto, CkTypeSelectorItem, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource, AttributeItem, TenantIdProvider, TenantFeaturesStatus, HealthCheck } from '@meshmakers/octo-services';
7
+ export { RuntimeEntityDialogDataSource, RuntimeEntityItem, RuntimeEntitySelectDataSource, TENANT_ID_PROVIDER, TenantIdProvider } from '@meshmakers/octo-services';
4
8
  import { ControlValueAccessor } from '@angular/forms';
5
9
  import * as i1 from '@meshmakers/shared-ui';
6
10
  import { EntitySelectDialogDataSource, ColumnDefinition, DialogFetchOptions, DialogFetchResult, EntitySelectInputComponent, TimeRange, FetchDataOptions, FetchResultTyped, TableColumn as TableColumn$1, ListViewMessages, HasUnsavedChanges, TimeRangePickerLabels, TimeRangeSelection as TimeRangeSelection$1 } from '@meshmakers/shared-ui';
7
- import { Observable, Subject } from 'rxjs';
8
11
  import { EntitySelectDataSource, EntitySelectResult } from '@meshmakers/shared-services';
9
- import * as Types from '@meshmakers/octo-services';
10
- import { CkTypeSelectorItem, RuntimeEntityItem, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource, SortDto, FieldFilterDto, QueryModeDto, ResolveSeriesQueryInputDto, CkRollupFunctionDto, SeriesResolutionSignalDto, AttributeItem, TenantIdProvider, TenantFeaturesStatus, HealthCheck } from '@meshmakers/octo-services';
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';
14
14
  import * as _meshmakers_octo_meshboard from '@meshmakers/octo-meshboard';
@@ -1420,6 +1420,17 @@ interface EntitySelectorConfig {
1420
1420
  * own rtId is the scope. See {@link EntitySelectorChildScope}.
1421
1421
  */
1422
1422
  childScope?: EntitySelectorChildScope;
1423
+ /**
1424
+ * Optional id of the selector this one follows (AB#7722). A follower has no
1425
+ * picker of its own and is never written to or read from the URL: it takes
1426
+ * the leader's current pick as its picked entity (its `ckTypeId` is the
1427
+ * leader's) and resolves its own `childScope` and `attributeMappings` from it.
1428
+ * Its `defaultRtId` is used only while the leader has no pick. One level only:
1429
+ * a leader cannot itself be a follower. An unknown or chained leader is
1430
+ * treated as "leader has no pick" (plus a console warning).
1431
+ * See `utils/entity-selector-follow.ts`.
1432
+ */
1433
+ followsSelectorId?: string;
1423
1434
  /** Current selection (transient, not persisted) */
1424
1435
  selectedRtId?: string;
1425
1436
  /** Display name of the currently selected entity */
@@ -1760,6 +1771,284 @@ declare function isMeshBoardChrome(value: unknown): value is MeshBoardChrome;
1760
1771
  */
1761
1772
  declare function resolveMeshBoardChrome(inputChrome: unknown, routeDataChrome: unknown): MeshBoardChrome;
1762
1773
 
1774
+ /**
1775
+ * Result of resolution-aware series routing (AB#4290). The caller runs the existing
1776
+ * stream-data downsampling query against {@link archiveRtId} with `limit = points`
1777
+ * and the column aggregation set to {@link reducingFunction}. `signal` is a truthful
1778
+ * outcome the widget can surface (e.g. a "resolution-limited" hint).
1779
+ *
1780
+ * The coverage signal (AB#5157) rides the same fields: `signal` is `CoverageLimited` when the
1781
+ * resolver's coverage filter skipped a finer rung because it holds no measured data over the
1782
+ * requested window, `actualPoints` / `diagnostic` carry the deliverable count and the rung that
1783
+ * was excluded, and {@link finerRungAvailableFrom} says from when that finer rung could serve.
1784
+ */
1785
+ interface SeriesResolutionResult {
1786
+ archiveRtId: string;
1787
+ effectiveBucketMs: number;
1788
+ points: number;
1789
+ reducingFunction: CkRollupFunctionDto;
1790
+ signal: SeriesResolutionSignalDto;
1791
+ actualPoints: number | null;
1792
+ diagnostic: string | null;
1793
+ /**
1794
+ * Earliest instant from which the coverage-excluded finer rung would be usable (AB#5157).
1795
+ * Set only on `CoverageLimited`, null otherwise. Passed through as the wire delivers it —
1796
+ * a `DateTime` scalar arrives as an ISO string unless a scalar parser turns it into a `Date` —
1797
+ * so read it through `toInstant` / `formatInstant` rather than assuming either shape.
1798
+ * Optional so that code constructing a result (mocks, adapters) written before AB#5157 keeps
1799
+ * compiling; a missing value means the same as `null`.
1800
+ */
1801
+ finerRungAvailableFrom?: Date | string | null;
1802
+ }
1803
+ /**
1804
+ * Time-range and downsampling arguments for stream-data persistent queries.
1805
+ * Mirrors the GraphQL input `StreamDataArguments` so widgets can build it
1806
+ * without importing generated DTO types directly.
1807
+ *
1808
+ * Backend semantics (verified against StreamDataQueryDtoType.cs and
1809
+ * StreamDataVariantExecutor.cs; `queryMode` override added in AB#4233):
1810
+ * - `from` / `to` / `limit` override the persisted query's intrinsic values
1811
+ * when set (`execOverride?.From ?? simple.From` pattern in the resolver).
1812
+ * - `interval` is currently ignored by every variant; the downsampling path
1813
+ * derives `(to - from) / limit` itself.
1814
+ * - `queryMode: DOWNSAMPLING` on a `SimpleSdQuery` (persisted) or the transient
1815
+ * `simple` sub-connection now drives the downsampling execution path: with a
1816
+ * full from/to/limit contract the backend reduces to `limit` buckets per series
1817
+ * (per-type reducers + group-by source rtId). Without all three it falls back
1818
+ * to raw rows. For the other variants the execution shape still comes from the
1819
+ * CK subtype / sub-connection; `queryMode` is a no-op there.
1820
+ */
1821
+ interface StreamDataExecutionArgs {
1822
+ from?: Date | null;
1823
+ to?: Date | null;
1824
+ interval?: number | null;
1825
+ limit?: number | null;
1826
+ /**
1827
+ * `DOWNSAMPLING` switches a SimpleSdQuery / transient `simple` query to the
1828
+ * downsampling path (with from/to/limit); a no-op for the other variants.
1829
+ * Defaults to `Default` (raw rows).
1830
+ */
1831
+ queryMode?: QueryModeDto;
1832
+ /**
1833
+ * Source runtime ids to scope the query to. When set, replaces the persisted
1834
+ * RtIds on the query at execution time — used to scope a stream-data widget to
1835
+ * the entities resolved from a selected asset (e.g. the EnergyMeasurement rtIds
1836
+ * under a picked MeteringPoint). An empty array is treated as "no scope".
1837
+ */
1838
+ rtIds?: string[] | null;
1839
+ }
1840
+ interface QueryExecutionOptions {
1841
+ /** Page size — passed to the GraphQL `first` variable. */
1842
+ first?: number | null;
1843
+ /** Cursor — passed to the GraphQL `after` variable. */
1844
+ after?: string | null;
1845
+ /** Optional column / row sort definitions. */
1846
+ sortOrder?: SortDto[] | null;
1847
+ /** Field filters applied to the query rows. */
1848
+ fieldFilter?: FieldFilterDto[] | null;
1849
+ /** Stream-data-only: time-range, interval, limit, queryMode. Ignored for runtime queries. */
1850
+ streamDataArgs?: StreamDataExecutionArgs | null;
1851
+ /** Force a network round-trip instead of using the Apollo cache. */
1852
+ forceRefresh?: boolean;
1853
+ }
1854
+ interface QueryColumnInfo {
1855
+ attributePath: string;
1856
+ attributeValueType?: string | null;
1857
+ aggregationType?: string | null;
1858
+ }
1859
+ interface QueryCell {
1860
+ attributePath: string;
1861
+ value: unknown;
1862
+ }
1863
+ /**
1864
+ * Unified result-row shape across runtime and stream-data queries.
1865
+ * `__typename` lets callers distinguish row kinds when needed
1866
+ * (`RtSimpleQueryRow`, `RtAggregationQueryRow`, `RtGroupingAggregationQueryRow`,
1867
+ * `StreamDataQueryRow`).
1868
+ *
1869
+ * Stream-data rows surface `timestamp`, `rtWellKnownName`,
1870
+ * `rtCreationDateTime`, and `rtChangedDateTime` directly on the row — useful
1871
+ * for time-series x-axes. Runtime rows leave those fields undefined.
1872
+ */
1873
+ interface QueryResultRow {
1874
+ __typename?: string;
1875
+ rtId?: string | null;
1876
+ ckTypeId?: string | null;
1877
+ timestamp?: Date | null;
1878
+ rtWellKnownName?: string | null;
1879
+ rtCreationDateTime?: Date | null;
1880
+ rtChangedDateTime?: Date | null;
1881
+ cells: QueryCell[];
1882
+ }
1883
+ interface QueryExecutionResult {
1884
+ family: QueryFamily;
1885
+ queryRtId?: string | null;
1886
+ associatedCkTypeId?: string | null;
1887
+ columns: QueryColumnInfo[];
1888
+ rows: QueryResultRow[];
1889
+ totalCount: number;
1890
+ hasNextPage: boolean;
1891
+ endCursor?: string | null;
1892
+ }
1893
+ /**
1894
+ * Executes persistent queries by rtId and returns a unified result shape
1895
+ * regardless of whether the underlying query is runtime-data or stream-data.
1896
+ *
1897
+ * Widgets consume `QueryExecutionResult` and stay agnostic about which family
1898
+ * the saved query belongs to — switching a widget's data source between
1899
+ * runtime and stream-data is purely a configuration change.
1900
+ */
1901
+ declare class QueryExecutorService {
1902
+ private readonly runtimeGql;
1903
+ private readonly streamDataGql;
1904
+ private readonly persistentQueriesGql;
1905
+ private readonly resolveSeriesGql;
1906
+ private readonly queryArchiveGql;
1907
+ private readonly downsampleGql;
1908
+ private readonly entitiesGql;
1909
+ private readonly secretSafeNames;
1910
+ /**
1911
+ * Cache of resolved query families, keyed by query rtId. Filled lazily for
1912
+ * legacy widget configs that pre-date the `queryFamily` field — saves a
1913
+ * round-trip on every refresh.
1914
+ */
1915
+ private readonly familyCache;
1916
+ execute(family: QueryFamily | undefined, queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
1917
+ /**
1918
+ * Resolves the family of a persistent query by rtId. Falls back to
1919
+ * `'runtime'` when the query type cannot be classified — this matches the
1920
+ * pre-Phase-1 behavior.
1921
+ */
1922
+ resolveFamily(queryRtId: string): Promise<QueryFamily>;
1923
+ executeRuntime(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
1924
+ executeStreamData(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
1925
+ /**
1926
+ * Resolution-aware series routing (AB#4290): asks the backend which archive/rollup to
1927
+ * query for a base archive family, time window and target point count — so a widget can
1928
+ * render ~`targetPoints` points without knowing which physical archive holds the data at a
1929
+ * usable grain. The caller then runs {@link executeStreamData} (downsampling) against the
1930
+ * returned `archiveRtId` with `limit = points`. Returns null when StreamData is not enabled.
1931
+ */
1932
+ resolveSeriesQuery(input: ResolveSeriesQueryInputDto): Promise<SeriesResolutionResult | null>;
1933
+ /**
1934
+ * Resolution-aware routing (AB#4290): reads a persisted stream-data query's base archive rtId
1935
+ * and target CK type WITHOUT executing the query (the `rows` sub-connection is not selected), so
1936
+ * a widget can feed the archive to {@link resolveSeriesQuery} and use the CK type to resolve
1937
+ * per-series labels. Also reads the query's persisted RtIds pin
1938
+ * (`System/StreamDataQuery.RtIds`) from the runtime entity — the transient downsampling path
1939
+ * bypasses the persisted query execution, so widgets must re-apply the pin themselves
1940
+ * (AB#4818). `rtIds` is null when the query has no pin (or is not a SimpleSdQuery).
1941
+ * Returns null when the query is missing or has no archive.
1942
+ */
1943
+ fetchQueryArchive(queryRtId: string): Promise<{
1944
+ archiveRtId: string;
1945
+ ckTypeId: string | null;
1946
+ rtIds: string[] | null;
1947
+ } | null>;
1948
+ /**
1949
+ * Resolution-aware routing (AB#4290): runs the AB#4233 downsampling query against an explicit
1950
+ * archive rtId (the rollup/base chosen by {@link resolveSeriesQuery}), reducing `sourcePath`
1951
+ * with `aggregation` to at most `limit` buckets. The transient downsampling groups by bin
1952
+ * (not by source rtId), so callers that need per-series lines scope `rtIds` to one source
1953
+ * entity per call. Returns the unified rows; each row's single value cell carries the reduced
1954
+ * value under its wire column name (e.g. `amountvalue_sum`) alongside the bin `timestamp`.
1955
+ */
1956
+ downsampleByArchive(params: {
1957
+ archiveRtId: string;
1958
+ from: Date;
1959
+ to: Date;
1960
+ limit: number;
1961
+ sourcePath: string;
1962
+ aggregation: string;
1963
+ rtIds?: string[] | null;
1964
+ fieldFilter?: FieldFilterDto[] | null;
1965
+ }): Promise<QueryResultRow[]>;
1966
+ /**
1967
+ * Best-effort per-series labels for resolution-aware fan-out (AB#4290): reads each source
1968
+ * entity's attribute matching `labelField` (canonical, case/underscore-insensitive so an archive
1969
+ * column name maps to its CK attribute). Entities that fail to load or lack the attribute are
1970
+ * simply omitted; the caller falls back to the rtId. Returns a `rtId → label` map.
1971
+ */
1972
+ fetchSeriesLabels(ckTypeId: string, rtIds: string[], labelField: string): Promise<Map<string, string>>;
1973
+ /**
1974
+ * The non-secret attribute names of `ckTypeId` whose canonical form matches `wanted`
1975
+ * (SECRET-safe explicit list, AB#5542). Empty when nothing matches — the caller then falls back
1976
+ * as for a missing attribute.
1977
+ */
1978
+ private matchingAttributeNames;
1979
+ /** Cap on the source-entity population read for group-aggregation (AB#4714). A truncated read is
1980
+ * logged, never silent. */
1981
+ private static readonly ENTITY_GROUP_FETCH_CAP;
1982
+ /**
1983
+ * Group-aggregation source resolution (AB#4714): fetches the source entities of `ckTypeId` in a
1984
+ * single bulk read and buckets their rtIds by the value of `groupField` (canonical match — case
1985
+ * and non-alphanumerics are ignored, so an archive column name maps to its CK attribute). Returns
1986
+ * `groupValue → rtIds`. Optionally restricted to `restrictRtIds` (an entity-selector scope) —
1987
+ * entities outside that set are dropped. Entities whose group attribute is missing/null are
1988
+ * omitted (they cannot be attributed to a line). The population is bounded to
1989
+ * {@link ENTITY_GROUP_FETCH_CAP}; a truncated read is logged (never silently capped).
1990
+ */
1991
+ fetchEntityGroups(ckTypeId: string, groupField: string, restrictRtIds?: string[]): Promise<Map<string, string[]>>;
1992
+ private buildStreamDataArg;
1993
+ private mapColumns;
1994
+ private mapRuntimeRows;
1995
+ private mapStreamDataRows;
1996
+ private mapCells;
1997
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryExecutorService, never>;
1998
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<QueryExecutorService>;
1999
+ }
2000
+
2001
+ /**
2002
+ * Resolution state of one entity selector's stream-data scope (AB#7721). Kept
2003
+ * transiently by `MeshBoardStateService`, written by the view while a pick is
2004
+ * resolved to its source rtIds.
2005
+ *
2006
+ * - `pending`: the pick is being resolved (one-hop childScope traversal).
2007
+ * - `resolved`: the pick resolved to `rtIds` — possibly none.
2008
+ * - `failed`: the resolution threw (e.g. the association fetch failed).
2009
+ *
2010
+ * A selector without an entry has no active pick: bound widgets keep the
2011
+ * query's persisted scope.
2012
+ */
2013
+ type EntitySelectorScopeState = {
2014
+ status: 'pending';
2015
+ } | {
2016
+ status: 'resolved';
2017
+ rtIds: string[];
2018
+ } | {
2019
+ status: 'failed';
2020
+ };
2021
+ /**
2022
+ * What a widget bound to an entity selector does with its stream-data query
2023
+ * (AB#7721). Returned by `MeshBoardStateService.resolveStreamDataScope`.
2024
+ *
2025
+ * - `unscoped`: no binding, a runtime query, or no active pick — query with the
2026
+ * persisted scope (unchanged behaviour).
2027
+ * - `pending`: the scope is still resolving — show the loading state and send
2028
+ * NO query; the view triggers a refresh once the scope is known.
2029
+ * - `scoped`: query with `rtIds` as `streamDataArgs.rtIds`.
2030
+ * - `empty`: the pick has nothing in scope (`noTargets`) or the lookup failed
2031
+ * (`failed`) — show the no-data state and send NO query. Never fall back to
2032
+ * the persisted scope: that would show rows of other entities.
2033
+ */
2034
+ type StreamDataScope = {
2035
+ kind: 'unscoped';
2036
+ } | {
2037
+ kind: 'pending';
2038
+ } | {
2039
+ kind: 'scoped';
2040
+ rtIds: string[];
2041
+ } | {
2042
+ kind: 'empty';
2043
+ reason: 'noTargets' | 'failed';
2044
+ };
2045
+ /**
2046
+ * The result a widget renders instead of executing its query when its scope is
2047
+ * `empty` (AB#7721). Shape-compatible with a real empty response, so each
2048
+ * widget's existing no-data rendering applies unchanged.
2049
+ */
2050
+ declare function emptyQueryExecutionResult(family: QueryFamily | undefined): QueryExecutionResult;
2051
+
1763
2052
  type GetSystemPersistentQueriesQueryVariablesDto = Types.Exact<{
1764
2053
  after?: Types.InputMaybe<Types.Scalars['String']['input']>;
1765
2054
  first?: Types.InputMaybe<Types.Scalars['Int']['input']>;
@@ -2154,12 +2443,14 @@ declare class MeshBoardStateService {
2154
2443
  private readonly _isModelAvailable;
2155
2444
  private readonly _variableResolutionErrors;
2156
2445
  /**
2157
- * Transient cache of the source rtIds resolved from each entity selector's
2158
- * current selection (keyed by selector id). Populated by the view component
2159
- * when a selection resolves (one-hop childScope traversal, or the picked
2160
- * entity's own rtId). Not persisted — derived fresh from each selection.
2446
+ * Transient scope state of each entity selector's current selection (keyed
2447
+ * by selector id): `pending` while the view resolves the pick, `resolved`
2448
+ * with the source rtIds (one-hop childScope traversal, or the picked entity's
2449
+ * own rtId; possibly none), or `failed`. No entry = no active pick. Not
2450
+ * persisted — derived fresh from each selection, cleared on board switch
2451
+ * (AB#7721).
2161
2452
  */
2162
- private readonly _entitySelectorRtIds;
2453
+ private readonly _entitySelectorScopes;
2163
2454
  /**
2164
2455
  * Transient variables published by widgets (KPI output variables, AB#5364).
2165
2456
  * Kept apart from `_meshBoardConfig` so publishing triggers no persistence and
@@ -2441,25 +2732,66 @@ declare class MeshBoardStateService {
2441
2732
  * for (AB#5157 review). `undefined` now only means the browser named no zone at all.
2442
2733
  */
2443
2734
  resolveStreamDataTimeZone(): string | undefined;
2735
+ /**
2736
+ * Marks an entity selector's scope as being resolved (AB#7721). Bound
2737
+ * stream-data widgets show their loading state and send no query until the
2738
+ * scope is resolved, failed or cleared — so they never flash rows of the
2739
+ * query's persisted (unscoped) scope while a pick is resolving.
2740
+ */
2741
+ setEntitySelectorScopePending(selectorId: string): void;
2444
2742
  /**
2445
2743
  * Stores the source rtIds resolved from an entity selector's current
2446
2744
  * selection. Called by the view component after a selection resolves (the
2447
2745
  * one-hop childScope traversal, or the picked entity's own rtId when the
2448
- * selector has no childScope). Transient — not persisted.
2746
+ * selector has no childScope). An empty array is a resolved EMPTY scope:
2747
+ * bound widgets show no data and send no query (AB#7721). Transient — not
2748
+ * persisted.
2749
+ */
2750
+ setEntitySelectorRtIds(selectorId: string, rtIds: string[]): void;
2751
+ /**
2752
+ * Marks an entity selector's scope resolution as failed (e.g. the association
2753
+ * fetch threw). Bound widgets treat it like an empty scope — no data, no
2754
+ * query — and the view tells the user the scope could not be resolved
2755
+ * (AB#7721).
2756
+ */
2757
+ setEntitySelectorScopeFailed(selectorId: string): void;
2758
+ /**
2759
+ * Clears the scope state for an entity selector (its selection was cleared).
2760
+ * Bound widgets then query with the persisted scope again.
2761
+ */
2762
+ clearEntitySelectorRtIds(selectorId: string): void;
2763
+ /** The raw scope state of a selector, or `undefined` when it has no active pick. */
2764
+ getEntitySelectorScopeState(selectorId: string): EntitySelectorScopeState | undefined;
2765
+ /**
2766
+ * Ids of the selectors whose scope resolution failed (for the view's
2767
+ * "could not resolve the scope" notice, AB#7721).
2449
2768
  */
2450
- setEntitySelectorRtIds(selectorId: string, rtIds: string[]): void;
2769
+ readonly failedEntitySelectorScopeIds: _angular_core.Signal<string[]>;
2451
2770
  /**
2452
- * Clears the cached source rtIds for an entity selector (e.g. when its
2453
- * selection is cleared).
2771
+ * Decides how a widget bound to an entity selector runs its stream-data query
2772
+ * (AB#7721):
2773
+ *
2774
+ * - `unscoped` — no binding, a runtime query (`family === 'runtime'`, the
2775
+ * binding is ignored there), or no active pick: keep the persisted scope.
2776
+ * - `pending` — the pick is still resolving: show loading, send no query.
2777
+ * - `scoped` — query with the resolved source rtIds.
2778
+ * - `empty` — the pick has nothing in scope or the lookup failed: show the
2779
+ * no-data state and send no query. Never fall back to the persisted scope.
2780
+ *
2781
+ * A legacy config without `queryFamily` is treated as stream data.
2454
2782
  */
2455
- clearEntitySelectorRtIds(selectorId: string): void;
2783
+ resolveStreamDataScope(entitySelectorId?: string, family?: QueryFamily): StreamDataScope;
2456
2784
  /**
2457
- * Resolves the stream-data `rtIds` scope for a persistent-query widget bound
2458
- * to an entity selector. Returns the source rtIds cached from the selector's
2459
- * current selection, or `undefined` when the selector id is absent, unknown,
2460
- * or has no active selection (so the query keeps its persisted scope).
2785
+ * Resolves the stream-data `rtIds` for a persistent-query widget bound to an
2786
+ * entity selector: the resolved source rtIds when the scope is `scoped`,
2787
+ * otherwise `undefined`.
2788
+ *
2789
+ * `undefined` does NOT mean "query with the persisted scope" for a pending or
2790
+ * empty scope — callers must check {@link resolveStreamDataScope} first and
2791
+ * skip the query for `pending` / `empty` (AB#7721).
2461
2792
  */
2462
2793
  resolveStreamDataRtIds(entitySelectorId?: string): string[] | undefined;
2794
+ private setEntitySelectorScope;
2463
2795
  /**
2464
2796
  * Updates the time filter configuration.
2465
2797
  */
@@ -3069,233 +3401,6 @@ declare class MeshBoardGridService {
3069
3401
  /** @deprecated Use MeshBoardGridService instead */
3070
3402
  declare const DashboardGridService: typeof MeshBoardGridService;
3071
3403
 
3072
- /**
3073
- * Result of resolution-aware series routing (AB#4290). The caller runs the existing
3074
- * stream-data downsampling query against {@link archiveRtId} with `limit = points`
3075
- * and the column aggregation set to {@link reducingFunction}. `signal` is a truthful
3076
- * outcome the widget can surface (e.g. a "resolution-limited" hint).
3077
- *
3078
- * The coverage signal (AB#5157) rides the same fields: `signal` is `CoverageLimited` when the
3079
- * resolver's coverage filter skipped a finer rung because it holds no measured data over the
3080
- * requested window, `actualPoints` / `diagnostic` carry the deliverable count and the rung that
3081
- * was excluded, and {@link finerRungAvailableFrom} says from when that finer rung could serve.
3082
- */
3083
- interface SeriesResolutionResult {
3084
- archiveRtId: string;
3085
- effectiveBucketMs: number;
3086
- points: number;
3087
- reducingFunction: CkRollupFunctionDto;
3088
- signal: SeriesResolutionSignalDto;
3089
- actualPoints: number | null;
3090
- diagnostic: string | null;
3091
- /**
3092
- * Earliest instant from which the coverage-excluded finer rung would be usable (AB#5157).
3093
- * Set only on `CoverageLimited`, null otherwise. Passed through as the wire delivers it —
3094
- * a `DateTime` scalar arrives as an ISO string unless a scalar parser turns it into a `Date` —
3095
- * so read it through `toInstant` / `formatInstant` rather than assuming either shape.
3096
- * Optional so that code constructing a result (mocks, adapters) written before AB#5157 keeps
3097
- * compiling; a missing value means the same as `null`.
3098
- */
3099
- finerRungAvailableFrom?: Date | string | null;
3100
- }
3101
- /**
3102
- * Time-range and downsampling arguments for stream-data persistent queries.
3103
- * Mirrors the GraphQL input `StreamDataArguments` so widgets can build it
3104
- * without importing generated DTO types directly.
3105
- *
3106
- * Backend semantics (verified against StreamDataQueryDtoType.cs and
3107
- * StreamDataVariantExecutor.cs; `queryMode` override added in AB#4233):
3108
- * - `from` / `to` / `limit` override the persisted query's intrinsic values
3109
- * when set (`execOverride?.From ?? simple.From` pattern in the resolver).
3110
- * - `interval` is currently ignored by every variant; the downsampling path
3111
- * derives `(to - from) / limit` itself.
3112
- * - `queryMode: DOWNSAMPLING` on a `SimpleSdQuery` (persisted) or the transient
3113
- * `simple` sub-connection now drives the downsampling execution path: with a
3114
- * full from/to/limit contract the backend reduces to `limit` buckets per series
3115
- * (per-type reducers + group-by source rtId). Without all three it falls back
3116
- * to raw rows. For the other variants the execution shape still comes from the
3117
- * CK subtype / sub-connection; `queryMode` is a no-op there.
3118
- */
3119
- interface StreamDataExecutionArgs {
3120
- from?: Date | null;
3121
- to?: Date | null;
3122
- interval?: number | null;
3123
- limit?: number | null;
3124
- /**
3125
- * `DOWNSAMPLING` switches a SimpleSdQuery / transient `simple` query to the
3126
- * downsampling path (with from/to/limit); a no-op for the other variants.
3127
- * Defaults to `Default` (raw rows).
3128
- */
3129
- queryMode?: QueryModeDto;
3130
- /**
3131
- * Source runtime ids to scope the query to. When set, replaces the persisted
3132
- * RtIds on the query at execution time — used to scope a stream-data widget to
3133
- * the entities resolved from a selected asset (e.g. the EnergyMeasurement rtIds
3134
- * under a picked MeteringPoint). An empty array is treated as "no scope".
3135
- */
3136
- rtIds?: string[] | null;
3137
- }
3138
- interface QueryExecutionOptions {
3139
- /** Page size — passed to the GraphQL `first` variable. */
3140
- first?: number | null;
3141
- /** Cursor — passed to the GraphQL `after` variable. */
3142
- after?: string | null;
3143
- /** Optional column / row sort definitions. */
3144
- sortOrder?: SortDto[] | null;
3145
- /** Field filters applied to the query rows. */
3146
- fieldFilter?: FieldFilterDto[] | null;
3147
- /** Stream-data-only: time-range, interval, limit, queryMode. Ignored for runtime queries. */
3148
- streamDataArgs?: StreamDataExecutionArgs | null;
3149
- /** Force a network round-trip instead of using the Apollo cache. */
3150
- forceRefresh?: boolean;
3151
- }
3152
- interface QueryColumnInfo {
3153
- attributePath: string;
3154
- attributeValueType?: string | null;
3155
- aggregationType?: string | null;
3156
- }
3157
- interface QueryCell {
3158
- attributePath: string;
3159
- value: unknown;
3160
- }
3161
- /**
3162
- * Unified result-row shape across runtime and stream-data queries.
3163
- * `__typename` lets callers distinguish row kinds when needed
3164
- * (`RtSimpleQueryRow`, `RtAggregationQueryRow`, `RtGroupingAggregationQueryRow`,
3165
- * `StreamDataQueryRow`).
3166
- *
3167
- * Stream-data rows surface `timestamp`, `rtWellKnownName`,
3168
- * `rtCreationDateTime`, and `rtChangedDateTime` directly on the row — useful
3169
- * for time-series x-axes. Runtime rows leave those fields undefined.
3170
- */
3171
- interface QueryResultRow {
3172
- __typename?: string;
3173
- rtId?: string | null;
3174
- ckTypeId?: string | null;
3175
- timestamp?: Date | null;
3176
- rtWellKnownName?: string | null;
3177
- rtCreationDateTime?: Date | null;
3178
- rtChangedDateTime?: Date | null;
3179
- cells: QueryCell[];
3180
- }
3181
- interface QueryExecutionResult {
3182
- family: QueryFamily;
3183
- queryRtId?: string | null;
3184
- associatedCkTypeId?: string | null;
3185
- columns: QueryColumnInfo[];
3186
- rows: QueryResultRow[];
3187
- totalCount: number;
3188
- hasNextPage: boolean;
3189
- endCursor?: string | null;
3190
- }
3191
- /**
3192
- * Executes persistent queries by rtId and returns a unified result shape
3193
- * regardless of whether the underlying query is runtime-data or stream-data.
3194
- *
3195
- * Widgets consume `QueryExecutionResult` and stay agnostic about which family
3196
- * the saved query belongs to — switching a widget's data source between
3197
- * runtime and stream-data is purely a configuration change.
3198
- */
3199
- declare class QueryExecutorService {
3200
- private readonly runtimeGql;
3201
- private readonly streamDataGql;
3202
- private readonly persistentQueriesGql;
3203
- private readonly resolveSeriesGql;
3204
- private readonly queryArchiveGql;
3205
- private readonly downsampleGql;
3206
- private readonly entitiesGql;
3207
- private readonly secretSafeNames;
3208
- /**
3209
- * Cache of resolved query families, keyed by query rtId. Filled lazily for
3210
- * legacy widget configs that pre-date the `queryFamily` field — saves a
3211
- * round-trip on every refresh.
3212
- */
3213
- private readonly familyCache;
3214
- execute(family: QueryFamily | undefined, queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
3215
- /**
3216
- * Resolves the family of a persistent query by rtId. Falls back to
3217
- * `'runtime'` when the query type cannot be classified — this matches the
3218
- * pre-Phase-1 behavior.
3219
- */
3220
- resolveFamily(queryRtId: string): Promise<QueryFamily>;
3221
- executeRuntime(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
3222
- executeStreamData(queryRtId: string, options?: QueryExecutionOptions): Observable<QueryExecutionResult>;
3223
- /**
3224
- * Resolution-aware series routing (AB#4290): asks the backend which archive/rollup to
3225
- * query for a base archive family, time window and target point count — so a widget can
3226
- * render ~`targetPoints` points without knowing which physical archive holds the data at a
3227
- * usable grain. The caller then runs {@link executeStreamData} (downsampling) against the
3228
- * returned `archiveRtId` with `limit = points`. Returns null when StreamData is not enabled.
3229
- */
3230
- resolveSeriesQuery(input: ResolveSeriesQueryInputDto): Promise<SeriesResolutionResult | null>;
3231
- /**
3232
- * Resolution-aware routing (AB#4290): reads a persisted stream-data query's base archive rtId
3233
- * and target CK type WITHOUT executing the query (the `rows` sub-connection is not selected), so
3234
- * a widget can feed the archive to {@link resolveSeriesQuery} and use the CK type to resolve
3235
- * per-series labels. Also reads the query's persisted RtIds pin
3236
- * (`System/StreamDataQuery.RtIds`) from the runtime entity — the transient downsampling path
3237
- * bypasses the persisted query execution, so widgets must re-apply the pin themselves
3238
- * (AB#4818). `rtIds` is null when the query has no pin (or is not a SimpleSdQuery).
3239
- * Returns null when the query is missing or has no archive.
3240
- */
3241
- fetchQueryArchive(queryRtId: string): Promise<{
3242
- archiveRtId: string;
3243
- ckTypeId: string | null;
3244
- rtIds: string[] | null;
3245
- } | null>;
3246
- /**
3247
- * Resolution-aware routing (AB#4290): runs the AB#4233 downsampling query against an explicit
3248
- * archive rtId (the rollup/base chosen by {@link resolveSeriesQuery}), reducing `sourcePath`
3249
- * with `aggregation` to at most `limit` buckets. The transient downsampling groups by bin
3250
- * (not by source rtId), so callers that need per-series lines scope `rtIds` to one source
3251
- * entity per call. Returns the unified rows; each row's single value cell carries the reduced
3252
- * value under its wire column name (e.g. `amountvalue_sum`) alongside the bin `timestamp`.
3253
- */
3254
- downsampleByArchive(params: {
3255
- archiveRtId: string;
3256
- from: Date;
3257
- to: Date;
3258
- limit: number;
3259
- sourcePath: string;
3260
- aggregation: string;
3261
- rtIds?: string[] | null;
3262
- fieldFilter?: FieldFilterDto[] | null;
3263
- }): Promise<QueryResultRow[]>;
3264
- /**
3265
- * Best-effort per-series labels for resolution-aware fan-out (AB#4290): reads each source
3266
- * entity's attribute matching `labelField` (canonical, case/underscore-insensitive so an archive
3267
- * column name maps to its CK attribute). Entities that fail to load or lack the attribute are
3268
- * simply omitted; the caller falls back to the rtId. Returns a `rtId → label` map.
3269
- */
3270
- fetchSeriesLabels(ckTypeId: string, rtIds: string[], labelField: string): Promise<Map<string, string>>;
3271
- /**
3272
- * The non-secret attribute names of `ckTypeId` whose canonical form matches `wanted`
3273
- * (SECRET-safe explicit list, AB#5542). Empty when nothing matches — the caller then falls back
3274
- * as for a missing attribute.
3275
- */
3276
- private matchingAttributeNames;
3277
- /** Cap on the source-entity population read for group-aggregation (AB#4714). A truncated read is
3278
- * logged, never silent. */
3279
- private static readonly ENTITY_GROUP_FETCH_CAP;
3280
- /**
3281
- * Group-aggregation source resolution (AB#4714): fetches the source entities of `ckTypeId` in a
3282
- * single bulk read and buckets their rtIds by the value of `groupField` (canonical match — case
3283
- * and non-alphanumerics are ignored, so an archive column name maps to its CK attribute). Returns
3284
- * `groupValue → rtIds`. Optionally restricted to `restrictRtIds` (an entity-selector scope) —
3285
- * entities outside that set are dropped. Entities whose group attribute is missing/null are
3286
- * omitted (they cannot be attributed to a line). The population is bounded to
3287
- * {@link ENTITY_GROUP_FETCH_CAP}; a truncated read is logged (never silently capped).
3288
- */
3289
- fetchEntityGroups(ckTypeId: string, groupField: string, restrictRtIds?: string[]): Promise<Map<string, string[]>>;
3290
- private buildStreamDataArg;
3291
- private mapColumns;
3292
- private mapRuntimeRows;
3293
- private mapStreamDataRows;
3294
- private mapCells;
3295
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryExecutorService, never>;
3296
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<QueryExecutorService>;
3297
- }
3298
-
3299
3404
  /**
3300
3405
  * Manages a `setInterval` lifecycle for MeshBoard auto-refresh.
3301
3406
  *
@@ -5393,6 +5498,7 @@ declare class StatsGridWidgetComponent implements OnInit, OnChanges {
5393
5498
  */
5394
5499
  private resolveStatValue;
5395
5500
  private loadPersistentQueryValue;
5501
+ private scopeOf;
5396
5502
  private buildStreamDataArgs;
5397
5503
  private convertFiltersToDto;
5398
5504
  private getColorClass;
@@ -5985,6 +6091,7 @@ declare class SummaryCardWidgetComponent implements DashboardWidget<SummaryCardW
5985
6091
  private loadData;
5986
6092
  private fetchTileValue;
5987
6093
  private fetchPersistentQueryValue;
6094
+ private scopeOf;
5988
6095
  private buildStreamDataArgs;
5989
6096
  private convertFiltersToDto;
5990
6097
  private fetchEntityAttributes;
@@ -6278,6 +6385,12 @@ interface MeshBoardMessages {
6278
6385
  tableList?: Partial<ListViewMessages>;
6279
6386
  /** Placeholder of a table widget without data source / columns. Default: "Table not configured" */
6280
6387
  tableNotConfigured?: string;
6388
+ /**
6389
+ * Board notice when an entity selector's stream-data scope could not be resolved (AB#7721);
6390
+ * `{label}` is replaced by the selector label. Default:
6391
+ * 'Could not resolve the scope of "{label}" - widgets bound to it show no data.'
6392
+ */
6393
+ scopeResolutionFailed?: string;
6281
6394
  }
6282
6395
  /** Default texts of {@link MeshBoardMessages} (the list texts default inside `mm-list-view`). */
6283
6396
  declare const DEFAULT_MESHBOARD_MESSAGES: Required<Omit<MeshBoardMessages, 'tableList'>>;
@@ -6446,6 +6559,7 @@ declare class EntitySelectorEditorComponent {
6446
6559
  private readonly attributeSelectorService;
6447
6560
  private readonly variableService;
6448
6561
  private readonly getEntitiesByCkTypeGQL;
6562
+ private readonly confirmationService;
6449
6563
  entitySelectors: EntitySelectorConfig[];
6450
6564
  /** Existing variable names from other sources (static variables, other selectors) for duplicate detection */
6451
6565
  existingVariableNames: string[];
@@ -6468,6 +6582,9 @@ declare class EntitySelectorEditorComponent {
6468
6582
  protected editChildScopeTargetCkTypeItem: CkTypeSelectorItem | null;
6469
6583
  protected editChildScopeRoleId: string;
6470
6584
  protected editChildScopeDirection: 'in' | 'out';
6585
+ protected editFollowsSelectorId: string;
6586
+ /** Why choosing the leader changed the form (CK type fixed, mappings/default cleared). */
6587
+ protected followNotice: string;
6471
6588
  protected defaultEntityDataSource: RuntimeEntitySelectDataSource | null;
6472
6589
  protected defaultEntityDialogDataSource: RuntimeEntityDialogDataSource | null;
6473
6590
  /**
@@ -6481,7 +6598,29 @@ declare class EntitySelectorEditorComponent {
6481
6598
  /**
6482
6599
  * Removes an entity selector at the given index.
6483
6600
  */
6484
- removeSelector(index: number): void;
6601
+ removeSelector(index: number): Promise<void>;
6602
+ /** Selectors the edited selector may follow (non-followers, never itself). */
6603
+ get leaderOptions(): EntitySelectorConfig[];
6604
+ /** Selectors that follow the edited selector (it then cannot follow one itself). */
6605
+ get followedBy(): EntitySelectorConfig[];
6606
+ /** True when the stored leader is not among the selectable leaders (deleted or a follower). */
6607
+ get isLeaderUnavailable(): boolean;
6608
+ /** "A, B and C" of the selectors following the edited one. */
6609
+ get followedByLabels(): string;
6610
+ /** Validation message of the "Follows" choice, or '' when it is valid. */
6611
+ get followError(): string;
6612
+ /** True while the edited selector follows another one. */
6613
+ get isFollower(): boolean;
6614
+ /**
6615
+ * Handles a change of the "Follows" choice. Choosing a leader fixes the CK type
6616
+ * to the leader's (clearing default entity and mappings with a notice when the
6617
+ * type changes) and hides the toolbar option; back to none makes the CK type
6618
+ * editable again with "Show in Toolbar" unchecked.
6619
+ */
6620
+ onFollowsChanged(leaderId: string): void;
6621
+ /** True when the selector names a leader that does not exist or is itself a follower. */
6622
+ isOrphanFollower(selector: EntitySelectorConfig): boolean;
6623
+ private applyLeaderCkType;
6485
6624
  /**
6486
6625
  * Handles CK type selection in the editor form.
6487
6626
  */
@@ -6581,6 +6720,11 @@ declare class EntitySelectorToolbarComponent implements OnChanges {
6581
6720
  protected selectorDataSources: Map<string, RuntimeEntitySelectDataSource>;
6582
6721
  protected selectorDialogDataSources: Map<string, RuntimeEntityDialogDataSource>;
6583
6722
  ngOnChanges(changes: SimpleChanges): void;
6723
+ /**
6724
+ * True when the selector renders a picker. Hidden selectors and followers
6725
+ * (AB#7722) never do; a follower's pick is derived from its leader.
6726
+ */
6727
+ showsInToolbar(selector: EntitySelectorConfig): boolean;
6584
6728
  /**
6585
6729
  * Returns the data source for a selector.
6586
6730
  */
@@ -6869,8 +7013,35 @@ declare class MeshBoardViewComponent implements OnInit, OnDestroy, HasUnsavedCha
6869
7013
  * Programmatically clears an entity selector value from outside the component.
6870
7014
  */
6871
7015
  clearEntitySelector(selectorId: string): void;
7016
+ /**
7017
+ * Clears one selector's pick, variables and scope state. Without a pick bound
7018
+ * widgets fall back to the persisted scope (AB#7721).
7019
+ */
7020
+ private clearSelectorPick;
7021
+ /**
7022
+ * The leader `leaderId` has no pick any more: each of its followers resolves
7023
+ * its own `defaultRtId`, or — without one — has no pick and no scope
7024
+ * (AB#7722). Followers with a default are marked pending synchronously.
7025
+ * Returns a promise for the default resolutions, or `null` when there are none.
7026
+ */
7027
+ private resetFollowersOf;
6872
7028
  /** Resolution errors for runtime entity variables */
6873
7029
  readonly variableResolutionErrors: _angular_core.Signal<_meshmakers_octo_meshboard.VariableResolutionError[]>;
7030
+ private readonly messages;
7031
+ /**
7032
+ * One notice per entity selector whose stream-data scope could not be
7033
+ * resolved (AB#7721), so "nothing in scope" (empty widgets, no notice) and
7034
+ * "lookup failed" (empty widgets plus this notice) are distinguishable.
7035
+ */
7036
+ protected readonly scopeResolutionErrors: _angular_core.Signal<{
7037
+ selectorId: string;
7038
+ message: string;
7039
+ }[]>;
7040
+ /**
7041
+ * Per-selector sequence number of the latest scope resolution, so a slower
7042
+ * resolution of an earlier pick never overwrites the scope of a newer pick.
7043
+ */
7044
+ private readonly scopeRequestSeq;
6874
7045
  /**
6875
7046
  * Handles time range change from the time range picker.
6876
7047
  * No-op: refresh is triggered by onTimeSelectionChange to ensure variables are updated first.
@@ -6992,9 +7163,40 @@ declare class MeshBoardViewComponent implements OnInit, OnDestroy, HasUnsavedCha
6992
7163
  */
6993
7164
  private initializeEntitySelectors;
6994
7165
  /**
6995
- * Resolves variables for an entity selector by fetching entity attributes.
7166
+ * The initial pick of each entity selector. Priority: route data > URL
7167
+ * params > defaultRtId. Selectors without a pick are left out.
7168
+ *
7169
+ * Followers (AB#7722) never read route data or the URL: a follower takes its
7170
+ * leader's initial pick (`viaLeader: true`, resolved together with the
7171
+ * leader) and falls back to its own `defaultRtId` only when the leader has
7172
+ * none. An unknown or chained leader counts as "leader has no pick"; with
7173
+ * `warn` set this logs a console warning.
7174
+ */
7175
+ private initialEntitySelectorPicks;
7176
+ /**
7177
+ * Marks the scope of every selector that has an initial pick as pending
7178
+ * (AB#7721). Called synchronously right after a board is loaded, before
7179
+ * change detection renders its widgets, so a bound stream-data widget starts
7180
+ * in its loading state instead of querying the persisted (unscoped) scope.
7181
+ * Selectors without a pick stay without scope state (persisted scope).
7182
+ */
7183
+ private primeEntitySelectorScopes;
7184
+ /**
7185
+ * Resolves variables for an entity selector by fetching entity attributes,
7186
+ * then its stream-data scope.
7187
+ *
7188
+ * A leader's pick is also the pick of all its followers (AB#7722): they are
7189
+ * marked pending together with the leader, the picked entity is fetched
7190
+ * once, and each follower gets its own variables (its attribute mappings,
7191
+ * `<id>_rtId`, `<id>_rtCkTypeId`), its own scope (its `childScope`) and the
7192
+ * leader's selection. Returns the picked entity's display name.
6996
7193
  */
6997
7194
  private resolveEntitySelectorVariables;
7195
+ /**
7196
+ * The variables one selector derives from the picked entity: its attribute
7197
+ * mappings plus the auto-exposed `<id>_rtId` and `<id>_rtCkTypeId`.
7198
+ */
7199
+ private selectorVariables;
6998
7200
  /**
6999
7201
  * Resolves the set of source rtIds that a stream-data widget bound to this
7000
7202
  * selector should be scoped to, and caches them on the state service.
@@ -7005,6 +7207,13 @@ declare class MeshBoardViewComponent implements OnInit, OnDestroy, HasUnsavedCha
7005
7207
  * no childScope, the picked entity's own rtId is the scope (direct keying).
7006
7208
  */
7007
7209
  private resolveEntitySelectorScopeRtIds;
7210
+ /**
7211
+ * Starts the scope resolution of a new pick: marks the scope pending and
7212
+ * returns the sequence number that identifies this resolution (AB#7721).
7213
+ */
7214
+ private beginScopeResolution;
7215
+ /** Marks the scope failed — unless a newer pick has started resolving meanwhile. */
7216
+ private failScopeResolution;
7008
7217
  /**
7009
7218
  * Writes entity selector selections to URL query parameters.
7010
7219
  * Format: es_<selectorId>=<rtId>
@@ -8888,5 +9097,5 @@ declare function pipelineExecutionInputs(children: (unknown | null)[] | null | u
8888
9097
  */
8889
9098
  declare function countPipelineExecutions(pipelines: PipelineExecutionInput[], now?: number): PipelineExecutionCounts;
8890
9099
 
8891
- export { ADAPTER_OFFLINE_GRACE_MS, 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, EntitySelectorToolbarComponent, FALLBACK_SERIES_COLORS, FailedExecutionsAttentionProvider, FeaturesNotInstalledAttentionProvider, GaugeConfigDialogComponent, GaugeWidgetComponent, HISTOGRAM_HOURS, HOUR_MS, HeatmapConfigDialogComponent, HeatmapWidgetComponent, KPI_ERROR_TEXT, KpiConfigDialogComponent, KpiWidgetComponent, LazyMarkdownComponent, LineChartConfigDialogComponent, LineChartWidgetComponent, MAX_RECENT_ITEMS, MESHBOARD_CHROME_ROUTE_DATA, MESHBOARD_DESCRIPTION_MARKER, MESHBOARD_EDIT_QUERY_PARAM, MESHBOARD_HEADER_MODE_ROUTE_DATA, MESHBOARD_LABEL_RESOLVER, 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, enabledButNotInstalled, executionKpi, failedExecutionsSeverity, formatCockpitMessage, formatCount, humanizeCategory, isAdapterAtRest, isAdapterExpectedToRun, isAdapterOnline, isCockpitWidgetType, isMeshBoardChrome, isMeshBoardHeaderMode, isServiceConfigured, joinEncodedDescription, kpiKindOf, latestStatisticsUpdate, legacyCockpitLinkTarget, loadNgxMarkdown, nameList, newMeshBoardConfig, normalizeNavigation, observeThemeChanges, pipelineExecutionInputs, plural, provideCockpitWidgetHost, provideCockpitWidgets, provideDefaultWidgets, provideMeshBoard, 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 };
8892
- 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, EntityWidget, EntityWithAssociationsWidgetConfig, FailedExecutionsAttentionOptions, GaugeConfigResult, GaugeRange, GaugeType, GaugeWidgetConfig, GridCell, GridPosition, GroupChildWidgetType, GroupedDataItem, HeatmapAggregation, HeatmapColorMode, HeatmapColorScheme, HeatmapConfigResult, HeatmapWidgetConfig, HourlyExecutionBucket, HourlyHistogramOptions, KpiConfigResult, KpiDataSourceType, KpiQueryMode, KpiValueMode, KpiWidgetConfig, LatestExecutionInput, LineChartConfigResult, LineChartType, LineChartWidgetConfig, MarkdownConfigResult, MarkdownTextAlign, MarkdownWidgetConfig, MeshBoardChrome, MeshBoardConfig, MeshBoardHeaderMode, MeshBoardLabelKind, MeshBoardLabelRequest, MeshBoardLabelResolver, MeshBoardMessages, MeshBoardMessagesSource, MeshBoardNavigationConfig, MeshBoardOptions, MeshBoardTimeFilterConfig, 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, SummaryCardConfigResult, SummaryCardTile, SummaryCardWidgetConfig, TableColumn, TableColumnStatusIconMapping, 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 };
9100
+ export { ADAPTER_OFFLINE_GRACE_MS, 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, EntitySelectorToolbarComponent, FALLBACK_SERIES_COLORS, FailedExecutionsAttentionProvider, FeaturesNotInstalledAttentionProvider, GaugeConfigDialogComponent, GaugeWidgetComponent, HISTOGRAM_HOURS, HOUR_MS, HeatmapConfigDialogComponent, HeatmapWidgetComponent, KPI_ERROR_TEXT, KpiConfigDialogComponent, KpiWidgetComponent, LazyMarkdownComponent, LineChartConfigDialogComponent, LineChartWidgetComponent, MAX_RECENT_ITEMS, MESHBOARD_CHROME_ROUTE_DATA, MESHBOARD_DESCRIPTION_MARKER, MESHBOARD_EDIT_QUERY_PARAM, MESHBOARD_HEADER_MODE_ROUTE_DATA, MESHBOARD_LABEL_RESOLVER, 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, pipelineExecutionInputs, plural, provideCockpitWidgetHost, provideCockpitWidgets, provideDefaultWidgets, provideMeshBoard, 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 };
9101
+ 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, EntitySelectorScopeState, EntityWidget, EntityWithAssociationsWidgetConfig, FailedExecutionsAttentionOptions, GaugeConfigResult, GaugeRange, GaugeType, GaugeWidgetConfig, GridCell, GridPosition, GroupChildWidgetType, GroupedDataItem, HeatmapAggregation, HeatmapColorMode, HeatmapColorScheme, HeatmapConfigResult, HeatmapWidgetConfig, HourlyExecutionBucket, HourlyHistogramOptions, KpiConfigResult, KpiDataSourceType, KpiQueryMode, KpiValueMode, KpiWidgetConfig, LatestExecutionInput, LineChartConfigResult, LineChartType, LineChartWidgetConfig, MarkdownConfigResult, MarkdownTextAlign, MarkdownWidgetConfig, MeshBoardChrome, MeshBoardConfig, MeshBoardHeaderMode, MeshBoardLabelKind, MeshBoardLabelRequest, MeshBoardLabelResolver, MeshBoardMessages, MeshBoardMessagesSource, MeshBoardNavigationConfig, MeshBoardOptions, MeshBoardTimeFilterConfig, 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, 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 };