@texturehq/edges 5.21.0 → 5.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{RichTextEditor-B_GaE_Yf.d.cts → RichTextEditor-tUSSVqwi.d.cts} +9 -0
- package/dist/{RichTextEditor-B_GaE_Yf.d.ts → RichTextEditor-tUSSVqwi.d.ts} +9 -0
- package/dist/{TimeField-C_Fa7mqf.d.cts → TimeField-BXQYxgcr.d.cts} +1 -1
- package/dist/{TimeField-B6DyOZXU.d.ts → TimeField-CVfhh7Rc.d.ts} +1 -1
- package/dist/{colors-CcHYd0K2.d.cts → colors-C4MlTwKS.d.ts} +207 -21
- package/dist/{colors-FpM-WXGA.d.ts → colors-DiMb2qNm.d.cts} +207 -21
- package/dist/form/index.cjs +2 -2
- package/dist/form/index.cjs.map +1 -1
- package/dist/form/index.js +2 -2
- package/dist/form/index.js.map +1 -1
- package/dist/index.cjs +11 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1704 -785
- package/dist/index.d.ts +1704 -785
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/rhf/index.cjs +2 -2
- package/dist/rhf/index.cjs.map +1 -1
- package/dist/rhf/index.d.cts +2 -2
- package/dist/rhf/index.d.ts +2 -2
- package/dist/rhf/index.js +2 -2
- package/dist/rhf/index.js.map +1 -1
- package/dist/server.cjs +2 -2
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +4 -4
- package/dist/server.d.ts +4 -4
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/styles.css +50 -2
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { BreadcrumbProps, BreadcrumbsProps, DateValue, CalendarProps as CalendarProps$1, ValidationResult, DisclosureGroupProps, DisclosurePanelProps, ButtonProps, DisclosureProps, DateRangePickerProps as DateRangePickerProps$1, FormProps, TooltipTriggerComponentProps, TooltipProps as TooltipProps$1, ListBoxProps as ListBoxProps$1, ListBoxItemProps, ModalOverlayProps, Key, PopoverProps as PopoverProps$1, ProgressBarProps as ProgressBarProps$1, RangeCalendarProps as RangeCalendarProps$1, TabProps as TabProps$1, TabListProps as TabListProps$1, TabPanelProps, TabsProps as TabsProps$2 } from 'react-aria-components';
|
|
2
2
|
export { BreadcrumbProps, BreadcrumbsProps, DialogTrigger, Focusable } from 'react-aria-components';
|
|
3
|
-
import { au as LoadingState, B as BadgeProps, av as FilterState, aw as SortState, ax as SearchConfig, ay as FacetConfig, az as FacetCounts, aA as Column, aB as CellEmphasis, aC as FieldValue, aD as BooleanFormat, aE as FormattedValue, aF as FieldFormat, aG as CurrentFormat, aH as DateFormat, aI as DistanceFormat, aJ as EnergyUnit, aK as EnergyFormat, aL as CurrencyFormat, aM as NumberFormat, aN as PhoneFormat, aO as PowerFormat, aP as FormatterFunction, aQ as ResistanceFormat, aR as TemperatureFormat, aS as TemperatureUnitString, aT as TemperatureUnit, aU as TextFormat, aV as VoltageFormat, e as BaseDataPoint, $ as YFormatType, R as TooltipData, aW as CellComponentProps, aX as CellAlignment, aY as LinkBehavior, D as DeviceState, s as GridState, aZ as ComponentFormatter, a_ as DataTableProps, a$ as
|
|
4
|
-
export { A as ABSENT_GRID_FIELDS, a as ActionItem,
|
|
3
|
+
import { au as LoadingState, B as BadgeProps, av as FilterState, aw as SortState, ax as SearchConfig, ay as FacetConfig, az as FacetCounts, aA as Column, aB as CellEmphasis, aC as FieldValue, aD as BooleanFormat, aE as FormattedValue, aF as FieldFormat, aG as CurrentFormat, aH as DateFormat, aI as DistanceFormat, aJ as EnergyUnit, aK as EnergyFormat, aL as CurrencyFormat, aM as NumberFormat, aN as PhoneFormat, aO as PowerFormat, aP as FormatterFunction, aQ as ResistanceFormat, aR as TemperatureFormat, aS as TemperatureUnitString, aT as TemperatureUnit, aU as TextFormat, aV as VoltageFormat, e as BaseDataPoint, $ as YFormatType, R as TooltipData, aW as CellComponentProps, aX as CellAlignment, aY as LinkBehavior, D as DeviceState, s as GridState, aZ as ComponentFormatter, a_ as DataTableProps, a$ as TableDensity, b0 as DataTablePagination, b1 as LayerSpec, b2 as CustomPinsSpec, b3 as GeoJsonLayerSpec, b4 as RasterLayerSpec, b5 as VectorLayerSpec, b6 as ClusteredVectorLayerSpec, b7 as ColorSpec } from './colors-DiMb2qNm.cjs';
|
|
4
|
+
export { A as ABSENT_GRID_FIELDS, a as ActionItem, b8 as ActionMenu, b as ActionMenuProps, b9 as AppShell, c as AppShellProps, ba as Avatar, d as AvatarProps, bb as Badge, bc as BaseFormat, C as CATEGORY_COLOR_TOKENS, f as CATEGORY_NEUTRAL_COLOR, bd as CellComponent, be as CellContext, bf as ChartContext, g as ChartMargin, bg as CodeEditor, h as CodeEditorProps, i as CodeLanguage, j as CodeTheme, bh as ComponentFormatOptions, bi as CurrentUnit, bj as CustomFormat, bk as DEFAULT_MAP_TYPE, bl as DateFormatStyle, bm as DistanceUnit, bn as ENTITY_CATEGORY_CONFIG, E as ENTITY_CONFIG, k as EntityArchetype, bo as EntityCategory, bp as EntityCategoryConfig, l as EntityConfig, m as EntityStateRule, n as EntityType, bq as FacetType, br as FilterChip, bs as FilterCondition, bt as FilterGroup, bu as FilterOperator, G as GRID_ELEMENT_TYPE_BY_ENTITY, bv as GRID_STATE_COLORS, o as GRID_STAT_LIST, bw as GRID_STAT_LIST_CAPACITOR_PER_PHASE_KVAR, bx as GRID_STAT_LIST_CAPACITOR_TOTAL_KVAR, p as GridElementSourceType, q as GridStatField, r as GridStatFieldFormat, by as GridStateColor, H as HEADLINE_METRIC_BOUNDS, t as Heading, u as HeadlineMetric, bz as InteractiveMap, bA as InteractiveMapHandle, I as InteractiveMapProps, bB as LayerCheckState, bC as LayerFeature, bD as LayerSelection, bE as LayerStyle, bF as LayerTreeNode, bG as LayerVisibilityPatch, L as Loader, v as Logo, bH as MAP_TYPES, M as MapPoint, bI as MapType, bJ as Meter, w as MeterProps, x as MetricFormat, y as MetricSource, bK as MobileBreakpoint, bL as MobileConfig, bM as MobileRenderer, bN as PercentBarCell, bO as PercentBarCellProps, P as PercentThresholdLevel, z as PercentThresholds, bP as PercentageFormat, bQ as PowerUnit, bR as RenderType, bS as ResistanceUnit, S as SegmentOption, bT as SegmentedControl, F as SegmentedControlProps, J as SerializableFieldFormat, K as SideNav, N as SideNavItem, O as SideNavProps, bU as SortConfig, bV as SortDirection, bW as StackNav, bX as StackNavGroup, bY as StackNavItem, bZ as StackNavLinkComponentProps, b_ as StackNavProps, b$ as StackNavRenderRow, c0 as StackNavRowRenderProps, c1 as StackNavTheme, c2 as StaticMap, Q as StaticMapProps, c3 as TableLayout, c4 as TableWidth, T as TextLink, c5 as TextTransform, c6 as TextTruncatePosition, U as TooltipSeries, V as TopNav, W as TopNavProps, X as UNARY_FILTER_OPERATORS, Y as UNARY_OPERATOR_LABELS, c7 as UNVERIFIED_VOLTAGE_UNIT_ROWS, Z as UnaryFilterOperator, c8 as UseInfiniteScrollOptions, c9 as UseInfiniteScrollReturn, ca as VoltageUnit, _ as YFormatSettings, cb as ZoomStops, a0 as activeDeviceStates, cc as addFilterCondition, a1 as archetypeFor, cd as baselineFromPoint, a2 as clearColorCache, a3 as createCategoryColorMap, ce as createEmptyFilter, cf as createFilter, cg as createFilters, a4 as createXScale, a5 as createYScale, a6 as defaultMargin, a7 as deviceStateLabels, a8 as deviceStateMetricFormats, a9 as entityHasDetailPage, aa as entityHasStatList, ab as entityShowsNow, ch as filterToChips, ci as formatComponentValue, ac as getContrastingTextColor, ad as getDefaultChartColor, ae as getDefaultColors, af as getDeviceStateDisplayLabel, af as getDeviceStateLabel, cj as getEntityCategory, ag as getEntityConfig, ah as getEntityIcon, ai as getEntityLabel, aj as getEntityStatList, ck as getFilterFields, ak as getGridStateLabel, al as getResolvedColor, am as getThemeCategoricalColors, an as getYFormatSettings, ao as gridEntityTypeKeys, ap as gridStateLabels, aq as isActiveDeviceState, aq as isActiveState, cl as isFilterEmpty, ar as isGridEntityTypeKey, as as isLightColor, at as isUnaryFilterOperator, cm as mapValuesToCategoricalColors, cn as percentThresholdLevel, co as removeFilterCondition, cp as useChartContext, cq as useComponentFormatter, cr as useInfiniteScroll } from './colors-DiMb2qNm.cjs';
|
|
5
5
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
6
6
|
import * as React$1 from 'react';
|
|
7
7
|
import React__default, { ReactNode, HTMLAttributes, ComponentProps, CSSProperties, Component, ErrorInfo } from 'react';
|
|
8
|
-
import { I as Icon$1, S as Size, d as IconName$2, B as BaseInputProps } from './RichTextEditor-
|
|
9
|
-
export { e as BaseProps, C as CUSTOM_ICON_REGISTRY, f as ClearButton, g as CustomIconName, a as DateField, D as DateFieldProps, h as Description, i as DescriptionPlacement, j as DescriptionProps, k as FieldError, l as FieldErrorProps, m as FieldGroup, n as FieldGroupProps, b as FileUpload, F as FileUploadProps, o as Input, p as InputProps, q as InputStyleProps, r as InputWrapper, L as Label, s as LabelProps, P as PhosphorIconName, c as RichTextEditor, R as RichTextEditorProps, t as getFieldGroupStyles, u as getInputBackgroundStyles, v as getInputBaseStyles, w as getInputStateStyles, x as useInputFocus } from './RichTextEditor-
|
|
8
|
+
import { I as Icon$1, S as Size, d as IconName$2, B as BaseInputProps } from './RichTextEditor-tUSSVqwi.cjs';
|
|
9
|
+
export { e as BaseProps, C as CUSTOM_ICON_REGISTRY, f as ClearButton, g as CustomIconName, a as DateField, D as DateFieldProps, h as Description, i as DescriptionPlacement, j as DescriptionProps, k as FieldError, l as FieldErrorProps, m as FieldGroup, n as FieldGroupProps, b as FileUpload, F as FileUploadProps, o as Input, p as InputProps, q as InputStyleProps, r as InputWrapper, L as Label, s as LabelProps, P as PhosphorIconName, c as RichTextEditor, R as RichTextEditorProps, t as getFieldGroupStyles, u as getInputBackgroundStyles, v as getInputBaseStyles, w as getInputStateStyles, x as useInputFocus } from './RichTextEditor-tUSSVqwi.cjs';
|
|
10
10
|
import { D as DialogAction, a as DialogHeaderConfig, b as DialogFooterConfig } from './index-dofSwYId.cjs';
|
|
11
11
|
export { c as Dialog, d as DialogForm, e as DialogProps, f as Drawer, g as DrawerForm, h as DrawerProps, F as FormActions, i as FormDivider, j as FormGrid, k as FormSection, l as FormStepper, S as SaveBar, U as UnsavedChangesPrompt, u as useWizard } from './index-dofSwYId.cjs';
|
|
12
|
-
export { A as Autocomplete, B as Button, h as ButtonProps, C as Checkbox, a as CheckboxGroup, b as ColorField, i as ColorFieldProps, M as MultiSelect, j as MultiSelectMatcher, c as MultiSelectOption, k as MultiSelectProps, l as MultiSelectSelectionEntry, N as NumberField, m as Radio, n as RadioCard, R as RadioCardGroup, o as RadioCardGroupProps, p as RadioCardProps, d as RadioGroup, S as Select, q as SelectItem, e as Switch, T as TextArea, f as TextField, r as TimeField, s as defaultMultiSelectMatcher, t as filterMultiSelectOptions, u as multiSelectSearchKeys, v as multiSelectSelectionEntries, w as shouldOfferLiteralOption } from './TimeField-
|
|
12
|
+
export { A as Autocomplete, B as Button, h as ButtonProps, C as Checkbox, a as CheckboxGroup, b as ColorField, i as ColorFieldProps, M as MultiSelect, j as MultiSelectMatcher, c as MultiSelectOption, k as MultiSelectProps, l as MultiSelectSelectionEntry, N as NumberField, m as Radio, n as RadioCard, R as RadioCardGroup, o as RadioCardGroupProps, p as RadioCardProps, d as RadioGroup, S as Select, q as SelectItem, e as Switch, T as TextArea, f as TextField, r as TimeField, s as defaultMultiSelectMatcher, t as filterMultiSelectOptions, u as multiSelectSearchKeys, v as multiSelectSelectionEntries, w as shouldOfferLiteralOption } from './TimeField-BXQYxgcr.cjs';
|
|
13
13
|
import { ScaleTime, ScaleLinear, ScaleBand } from 'd3-scale';
|
|
14
14
|
import { Icon } from '@phosphor-icons/react';
|
|
15
15
|
import { Map } from 'mapbox-gl';
|
|
@@ -1275,6 +1275,8 @@ interface ContactMetaDisplayProps {
|
|
|
1275
1275
|
* When provided, adds data-pii-* attributes for the Curtain extension
|
|
1276
1276
|
*/
|
|
1277
1277
|
piiEntity?: string;
|
|
1278
|
+
/** PII type of the primary label when an email stands in for a missing name. */
|
|
1279
|
+
piiPrimaryTextType?: "full-name" | "email";
|
|
1278
1280
|
}
|
|
1279
1281
|
/**
|
|
1280
1282
|
* ContactMetaDisplay
|
|
@@ -1311,7 +1313,7 @@ interface ContactMetaDisplayProps {
|
|
|
1311
1313
|
* />
|
|
1312
1314
|
* ```
|
|
1313
1315
|
*/
|
|
1314
|
-
declare function ContactMetaDisplay({ firstName, lastName, email, avatarUrl, layout, size, href, LinkComponent, linkVariant, emphasis, showEmail, badge, avatarShape, isLoading, className, piiEntity, }: ContactMetaDisplayProps): react_jsx_runtime.JSX.Element;
|
|
1316
|
+
declare function ContactMetaDisplay({ firstName, lastName, email, avatarUrl, layout, size, href, LinkComponent, linkVariant, emphasis, showEmail, badge, avatarShape, isLoading, className, piiEntity, piiPrimaryTextType, }: ContactMetaDisplayProps): react_jsx_runtime.JSX.Element;
|
|
1315
1317
|
|
|
1316
1318
|
/**
|
|
1317
1319
|
* ContainerQueryProvider — measures its own width via ResizeObserver and
|
|
@@ -2067,9 +2069,142 @@ declare const createFormat: <T extends FieldFormat["type"]>(type: T, options?: O
|
|
|
2067
2069
|
type: T;
|
|
2068
2070
|
}>;
|
|
2069
2071
|
|
|
2072
|
+
/** The camera: the visible time window, absolute epoch ms. */
|
|
2073
|
+
type Viewport = {
|
|
2074
|
+
startMs: number;
|
|
2075
|
+
endMs: number;
|
|
2076
|
+
};
|
|
2077
|
+
/** One rung of the resolution ladder. */
|
|
2078
|
+
type Tier = {
|
|
2079
|
+
id: string;
|
|
2080
|
+
bucketMs: number;
|
|
2081
|
+
tileSpanMs: number;
|
|
2082
|
+
};
|
|
2083
|
+
type ResolutionLadder = Tier[];
|
|
2084
|
+
/** A fixed-grid data slice: tile `index` at `tierId`, covering [startMs, endMs). */
|
|
2085
|
+
type TileRef = {
|
|
2086
|
+
tierId: string;
|
|
2087
|
+
index: number;
|
|
2088
|
+
startMs: number;
|
|
2089
|
+
endMs: number;
|
|
2090
|
+
};
|
|
2091
|
+
/** Data a tile carries. `band` optional → engine is metric-agnostic.
|
|
2092
|
+
* `lines` carries additional named series (e.g. export/net flows) that
|
|
2093
|
+
* stitch with the same dedup-by-timestamp semantics as `line`. */
|
|
2094
|
+
type TileData = {
|
|
2095
|
+
line: BaseDataPoint[];
|
|
2096
|
+
band?: BaseDataPoint[];
|
|
2097
|
+
lines?: Record<string, BaseDataPoint[]>;
|
|
2098
|
+
};
|
|
2099
|
+
/** Injected loader: one tile = one bounded fetch. */
|
|
2100
|
+
type FetchTileContext = {
|
|
2101
|
+
reason: "load" | "refresh";
|
|
2102
|
+
/** Check before adapter side effects such as shared-cache writes. */
|
|
2103
|
+
isCurrent?: () => boolean;
|
|
2104
|
+
};
|
|
2105
|
+
type FetchTile = (tier: Tier, startMs: number, endMs: number, signal: AbortSignal, context?: FetchTileContext) => Promise<TileData>;
|
|
2106
|
+
declare const tileKey: (tierId: string, index: number) => string;
|
|
2107
|
+
declare const hasTileData: (data?: TileData) => boolean;
|
|
2108
|
+
|
|
2109
|
+
/**
|
|
2110
|
+
* Pick the finest tier whose bucket is coarse enough to hit ~targetPointsPerPx
|
|
2111
|
+
* across the chart and is not finer than the series' native cadence.
|
|
2112
|
+
*/
|
|
2113
|
+
declare function tierForViewport(spanMs: number, widthPx: number, ladder: ResolutionLadder, opts: {
|
|
2114
|
+
targetPointsPerPx: number;
|
|
2115
|
+
nativeMs: number;
|
|
2116
|
+
}): Tier;
|
|
2117
|
+
|
|
2118
|
+
type TileStatus = "loading" | "loaded" | "empty" | "error";
|
|
2119
|
+
type TileEntry = {
|
|
2120
|
+
status: TileStatus;
|
|
2121
|
+
data?: TileData;
|
|
2122
|
+
error?: Error;
|
|
2123
|
+
refreshing?: boolean;
|
|
2124
|
+
revision?: number;
|
|
2125
|
+
revalidated?: boolean;
|
|
2126
|
+
};
|
|
2127
|
+
type TileStore = ReadonlyMap<string, TileEntry>;
|
|
2128
|
+
type TileAction = {
|
|
2129
|
+
type: "request";
|
|
2130
|
+
ids: string[];
|
|
2131
|
+
refresh?: boolean;
|
|
2132
|
+
} | {
|
|
2133
|
+
type: "cancel";
|
|
2134
|
+
ids: string[];
|
|
2135
|
+
} | {
|
|
2136
|
+
type: "fulfilled";
|
|
2137
|
+
id: string;
|
|
2138
|
+
data: TileData;
|
|
2139
|
+
refresh?: boolean;
|
|
2140
|
+
} | {
|
|
2141
|
+
type: "failed";
|
|
2142
|
+
id: string;
|
|
2143
|
+
error: Error;
|
|
2144
|
+
} | {
|
|
2145
|
+
type: "reset";
|
|
2146
|
+
};
|
|
2147
|
+
declare const emptyStore: TileStore;
|
|
2148
|
+
declare function tileReducer(store: TileStore, action: TileAction): TileStore;
|
|
2149
|
+
|
|
2150
|
+
type Coverage = {
|
|
2151
|
+
earliestMs?: number;
|
|
2152
|
+
latestMs?: number;
|
|
2153
|
+
erroredTiles: number;
|
|
2154
|
+
};
|
|
2155
|
+
type AssembledSeries = {
|
|
2156
|
+
line: BaseDataPoint[];
|
|
2157
|
+
band: BaseDataPoint[];
|
|
2158
|
+
lines: Record<string, BaseDataPoint[]>;
|
|
2159
|
+
renderTier: Tier | null;
|
|
2160
|
+
targetTier: Tier;
|
|
2161
|
+
isFallback: boolean;
|
|
2162
|
+
isStale: boolean;
|
|
2163
|
+
coverage: Coverage;
|
|
2164
|
+
};
|
|
2165
|
+
type AssembleSeriesArgs = {
|
|
2166
|
+
viewport: Viewport;
|
|
2167
|
+
targetTier: Tier;
|
|
2168
|
+
ladder: ResolutionLadder;
|
|
2169
|
+
store: TileStore;
|
|
2170
|
+
overscanTiles: number;
|
|
2171
|
+
prev?: AssembledSeries | null;
|
|
2172
|
+
prevViewport?: Viewport | null;
|
|
2173
|
+
maxFutureMs?: number;
|
|
2174
|
+
};
|
|
2175
|
+
declare function assembleSeries({ viewport, targetTier, ladder, store, overscanTiles, prev, prevViewport, maxFutureMs, }: AssembleSeriesArgs): AssembledSeries;
|
|
2176
|
+
|
|
2177
|
+
declare function tileIndexAt(tsMs: number, tier: Tier): number;
|
|
2178
|
+
declare function tilesForViewport(viewport: Viewport, tier: Tier, overscanTiles: number): TileRef[];
|
|
2179
|
+
|
|
2070
2180
|
type AreaSeriesBaseline = number | ((point: BaseDataPoint, index: number) => number);
|
|
2071
2181
|
interface AreaSeriesProps {
|
|
2072
|
-
|
|
2182
|
+
/**
|
|
2183
|
+
* The points to draw.
|
|
2184
|
+
*
|
|
2185
|
+
* Optional ONLY inside a streaming chart, where the points do not exist until
|
|
2186
|
+
* the reader looks at a window: there the child names its stream with
|
|
2187
|
+
* `seriesKey` and the chart supplies `data` before this component renders. In
|
|
2188
|
+
* an ordinary chart it is required in practice — a series with neither is
|
|
2189
|
+
* skipped rather than drawn.
|
|
2190
|
+
*/
|
|
2191
|
+
data?: BaseDataPoint[];
|
|
2192
|
+
/**
|
|
2193
|
+
* Which stream this series draws, in a chart with a streaming `source`.
|
|
2194
|
+
*
|
|
2195
|
+
* Defaults to `"line"`, the primary stream. Ignored entirely by a chart that
|
|
2196
|
+
* holds its own data, so the same `<AreaSeries>` serves both sources.
|
|
2197
|
+
*/
|
|
2198
|
+
seriesKey?: string;
|
|
2199
|
+
/**
|
|
2200
|
+
* Relabel this series once its points arrive, in a streaming chart.
|
|
2201
|
+
*
|
|
2202
|
+
* Declared here rather than only on the chart because the element carrying it
|
|
2203
|
+
* is this one; the streaming branch reads it, resolves it against every
|
|
2204
|
+
* assembled stream, and passes the result down as `label`. This component
|
|
2205
|
+
* never calls it — by the time it renders, `label` is already the answer.
|
|
2206
|
+
*/
|
|
2207
|
+
labelFromData?: (plotted: BaseDataPoint[], series: AssembledSeries) => string;
|
|
2073
2208
|
color?: string;
|
|
2074
2209
|
label?: string;
|
|
2075
2210
|
categoryColors?: Record<string, string>;
|
|
@@ -2117,7 +2252,24 @@ interface AreaSeriesProps {
|
|
|
2117
2252
|
declare const AreaSeries: React__default.FC<AreaSeriesProps>;
|
|
2118
2253
|
|
|
2119
2254
|
interface BarSeriesProps {
|
|
2120
|
-
|
|
2255
|
+
/**
|
|
2256
|
+
* The points to draw.
|
|
2257
|
+
*
|
|
2258
|
+
* Optional ONLY inside a streaming chart, where the points do not exist until
|
|
2259
|
+
* the reader looks at a window: there the child names its stream with
|
|
2260
|
+
* `seriesKey` and the chart supplies `data` before this component renders. In
|
|
2261
|
+
* an ordinary chart it is required in practice — a series with neither
|
|
2262
|
+
* renders nothing rather than throwing.
|
|
2263
|
+
*/
|
|
2264
|
+
data?: BaseDataPoint[];
|
|
2265
|
+
/**
|
|
2266
|
+
* Which stream this series draws, in a chart with a streaming `source`.
|
|
2267
|
+
*
|
|
2268
|
+
* Defaults to `"line"`, the primary stream — the same default `AreaSeries`
|
|
2269
|
+
* and `LineSeries` use, so the same child serves both sources. Ignored
|
|
2270
|
+
* entirely by a chart that holds its own data.
|
|
2271
|
+
*/
|
|
2272
|
+
seriesKey?: string;
|
|
2121
2273
|
color?: string;
|
|
2122
2274
|
label?: string;
|
|
2123
2275
|
opacity?: number;
|
|
@@ -2147,6 +2299,8 @@ interface CategoryBarChartProps {
|
|
|
2147
2299
|
width?: number;
|
|
2148
2300
|
/** Height of the chart (auto-resizes to container if not provided) */
|
|
2149
2301
|
height?: number;
|
|
2302
|
+
/** Scale the fixed coordinate system to the container width for static displays. Requires both width and height; otherwise uses normal responsive sizing. Disables tooltips when active. */
|
|
2303
|
+
scaleToFit?: boolean;
|
|
2150
2304
|
/** Margin around the chart area */
|
|
2151
2305
|
margin?: {
|
|
2152
2306
|
top: number;
|
|
@@ -2199,16 +2353,22 @@ interface AxisBottomProps {
|
|
|
2199
2353
|
width: number;
|
|
2200
2354
|
}
|
|
2201
2355
|
interface AxisLeftProps {
|
|
2356
|
+
/** Optional start-aligned label position relative to the axis. */
|
|
2357
|
+
labelLeft?: number;
|
|
2202
2358
|
left: number;
|
|
2203
2359
|
scale: ScaleLinear<number, number>;
|
|
2204
2360
|
yFormatter: YFormatType;
|
|
2205
2361
|
height?: number;
|
|
2206
2362
|
}
|
|
2363
|
+
/** Space for the widest formatted numeric tick plus its gap to the plot. */
|
|
2364
|
+
declare function getNumericAxisGutter(scale: ScaleLinear<number, number>, yFormatter: YFormatType, height?: number): number;
|
|
2207
2365
|
interface CategoryAxisBottomProps {
|
|
2208
2366
|
top: number;
|
|
2209
2367
|
scale: ScaleBand<string>;
|
|
2210
2368
|
}
|
|
2211
2369
|
interface CategoryAxisLeftProps {
|
|
2370
|
+
/** Label start relative to the axis; omitted preserves end-aligned ticks. */
|
|
2371
|
+
labelLeft?: number;
|
|
2212
2372
|
left: number;
|
|
2213
2373
|
scale: ScaleBand<string>;
|
|
2214
2374
|
/**
|
|
@@ -2320,6 +2480,15 @@ interface ChartBottomBarProps {
|
|
|
2320
2480
|
isZoomed?: boolean;
|
|
2321
2481
|
onResetZoom?: () => void;
|
|
2322
2482
|
onLegendItemToggle?: (category: string) => void;
|
|
2483
|
+
/**
|
|
2484
|
+
* Drop the Export control, keeping the legend. Distinct from `hideBottomBar` on the engines,
|
|
2485
|
+
* which removes both — a chart can want the legend and not the export affordance.
|
|
2486
|
+
*
|
|
2487
|
+
* Scoped to Export alone: it shares a row with Reset Zoom, which is not an export affordance and
|
|
2488
|
+
* appears only while a chart IS zoomed. Hiding it alongside Export stranded the reader in a
|
|
2489
|
+
* zoomed view with no way back.
|
|
2490
|
+
*/
|
|
2491
|
+
hideExport?: boolean;
|
|
2323
2492
|
}
|
|
2324
2493
|
interface LegendItem {
|
|
2325
2494
|
category: string;
|
|
@@ -2350,947 +2519,1605 @@ declare const LegendItem: React__default.FC<{
|
|
|
2350
2519
|
*/
|
|
2351
2520
|
declare const ChartBottomBar: React__default.FC<ChartBottomBarProps>;
|
|
2352
2521
|
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2522
|
+
/**
|
|
2523
|
+
* Which plotted series the readout should inspect.
|
|
2524
|
+
*
|
|
2525
|
+
* ── Why a named kind and not a function ───────────────────────────────────────
|
|
2526
|
+
* A streaming chart can be driven from stored JSON, and a render-prop is exactly
|
|
2527
|
+
* what such a caller cannot hold. The set of things worth reading "latest data"
|
|
2528
|
+
* out of is small and closed — a single plotted series, a net band plus its
|
|
2529
|
+
* average line, or an import/export pair — so naming them costs nothing and buys
|
|
2530
|
+
* the whole affordance for a declarative caller.
|
|
2531
|
+
*
|
|
2532
|
+
* `single` is the general case and the others are named for the shape they read,
|
|
2533
|
+
* not for the domain that happens to use them: this file knows nothing about
|
|
2534
|
+
* meters.
|
|
2535
|
+
*/
|
|
2536
|
+
type LatestDataReadoutKind = "single" | "band" | "pair";
|
|
2537
|
+
|
|
2538
|
+
interface TiledTimeSeriesLiveControl {
|
|
2539
|
+
label: string;
|
|
2540
|
+
checked: boolean;
|
|
2541
|
+
onChange: (checked: boolean) => void;
|
|
2542
|
+
/** Healthy requires a delivered signal and current measurement evidence where available. */
|
|
2543
|
+
status: "live" | "connecting" | "reconnecting" | "stale" | "delayed" | "refresh-failed";
|
|
2544
|
+
disabledReason?: string | undefined;
|
|
2545
|
+
/** Optional cadence context owned by the consumer, shown while waiting for an update. */
|
|
2546
|
+
waitingDescription?: string | undefined;
|
|
2547
|
+
}
|
|
2548
|
+
|
|
2549
|
+
/**
|
|
2550
|
+
* Window size for data aggregation
|
|
2551
|
+
* Matches GraphQL WindowSize enum, plus the telemetry-only rungs below it:
|
|
2552
|
+
* FIVE_MINUTES and ONE_MINUTE are `TelemetryBucketSize` capabilities that no
|
|
2553
|
+
* metrics query offers. ONE_MINUTE is served only by a power-quality sensor —
|
|
2554
|
+
* meters report at 5m or coarser — so a chart offering it must say so with its
|
|
2555
|
+
* own `windowSizeOptions` rather than relying on the defaults below.
|
|
2556
|
+
*/
|
|
2557
|
+
type WindowSize = "ONE_MINUTE" | "FIVE_MINUTES" | "FIFTEEN_MINUTES" | "HOUR" | "DAY" | "WEEK" | "MONTH" | "YEAR";
|
|
2558
|
+
/**
|
|
2559
|
+
* Date range with native Date objects
|
|
2560
|
+
*/
|
|
2561
|
+
interface TimeRange {
|
|
2562
|
+
after: Date;
|
|
2563
|
+
before: Date;
|
|
2564
|
+
}
|
|
2565
|
+
/**
|
|
2566
|
+
* Preset range option
|
|
2567
|
+
*/
|
|
2568
|
+
interface PresetRange {
|
|
2569
|
+
id: string;
|
|
2570
|
+
label: string;
|
|
2571
|
+
getRange: () => TimeRange;
|
|
2572
|
+
}
|
|
2573
|
+
/**
|
|
2574
|
+
* Window size option
|
|
2575
|
+
*/
|
|
2576
|
+
interface WindowSizeOption {
|
|
2577
|
+
id: WindowSize;
|
|
2578
|
+
label: string;
|
|
2579
|
+
}
|
|
2580
|
+
/**
|
|
2581
|
+
* Props for TimeControls component
|
|
2582
|
+
*/
|
|
2583
|
+
interface TimeControlsProps {
|
|
2357
2584
|
/**
|
|
2358
|
-
*
|
|
2359
|
-
* that screen readers announce what each chart shows; every chart needs its
|
|
2360
|
-
* own, and there is deliberately no default to fall back to.
|
|
2585
|
+
* Current date range
|
|
2361
2586
|
*/
|
|
2362
|
-
|
|
2587
|
+
dateRange: TimeRange;
|
|
2363
2588
|
/**
|
|
2364
|
-
*
|
|
2365
|
-
*
|
|
2366
|
-
* @example "energy", "currency", { type: "temperature", unit: "F" }
|
|
2589
|
+
* Callback when date range changes. `meta.presetId` is set when the change
|
|
2590
|
+
* came from choosing a preset (vs. the calendar picker).
|
|
2367
2591
|
*/
|
|
2368
|
-
|
|
2592
|
+
onDateRangeChange: (range: TimeRange, meta?: {
|
|
2593
|
+
presetId?: string;
|
|
2594
|
+
}) => void;
|
|
2369
2595
|
/**
|
|
2370
|
-
*
|
|
2371
|
-
* anchoring the axis at zero for all-positive data. Use for deviation-style
|
|
2372
|
-
* metrics (voltage ~240V, frequency ~60Hz, power factor ~1.0) where the
|
|
2373
|
-
* signal is variation around a nominal value, not magnitude from zero.
|
|
2596
|
+
* Current window size (optional)
|
|
2374
2597
|
*/
|
|
2375
|
-
|
|
2598
|
+
windowSize?: WindowSize;
|
|
2376
2599
|
/**
|
|
2377
|
-
*
|
|
2378
|
-
* regulatory limits (ANSI voltage bounds), targets, or thresholds. Rendered
|
|
2379
|
-
* as dashed lines with an optional right-aligned label.
|
|
2600
|
+
* Callback when window size changes (optional)
|
|
2380
2601
|
*/
|
|
2381
|
-
|
|
2382
|
-
value: number;
|
|
2383
|
-
label?: string;
|
|
2384
|
-
color?: string;
|
|
2385
|
-
}[];
|
|
2386
|
-
isLoading?: boolean;
|
|
2387
|
-
/** Enable scroll-to-zoom and pan on main chart */
|
|
2388
|
-
enableZoom?: boolean;
|
|
2389
|
-
/** Show brush overview chart below */
|
|
2390
|
-
enableBrush?: boolean;
|
|
2391
|
-
/** Height of brush chart (default: 60px) */
|
|
2392
|
-
brushHeight?: number;
|
|
2602
|
+
onWindowSizeChange?: (size: WindowSize) => void;
|
|
2393
2603
|
/**
|
|
2394
|
-
*
|
|
2395
|
-
*
|
|
2396
|
-
* Fires on every transition, including the initial `null` render. Use this
|
|
2397
|
-
* for one-way "observe the zoom" plumbing (e.g. driving an external panel
|
|
2398
|
-
* showing the current window).
|
|
2399
|
-
*
|
|
2400
|
-
* In controlled-zoom mode (when the `zoomDomain` prop is provided), this is
|
|
2401
|
-
* ALSO the change callback the parent uses to update its own state —
|
|
2402
|
-
* mirroring the `onHiddenSeriesChange` pattern. The parent should treat the
|
|
2403
|
-
* incoming `domain` argument as the next value to commit to its state.
|
|
2604
|
+
* Whether to show window size selector
|
|
2605
|
+
* @default true
|
|
2404
2606
|
*/
|
|
2405
|
-
|
|
2607
|
+
showWindowSize?: boolean;
|
|
2406
2608
|
/**
|
|
2407
|
-
*
|
|
2408
|
-
*
|
|
2409
|
-
* `hiddenSeriesLabels` pattern — useful when an inline + dialog instance
|
|
2410
|
-
* pair need to share zoom state (see BOLT-1160 Phase 3 / SiteEnergyCharts).
|
|
2411
|
-
*
|
|
2412
|
-
* Pass `null` for "full domain, no zoom". Omit entirely to use the default
|
|
2413
|
-
* uncontrolled behaviour (ChartContainer manages its own zoom state).
|
|
2414
|
-
*
|
|
2415
|
-
* When controlled, the visx Zoom transform is kept in sync with the
|
|
2416
|
-
* incoming prop via an internal effect, so brush + scroll-zoom + reset
|
|
2417
|
-
* all continue to work — they just route the new domain through
|
|
2418
|
-
* `onZoomChange` to the parent, which echoes it back via the prop.
|
|
2609
|
+
* Auto-adjust window size based on date range
|
|
2610
|
+
* @default false
|
|
2419
2611
|
*/
|
|
2420
|
-
|
|
2612
|
+
autoAdjustWindowSize?: boolean;
|
|
2421
2613
|
/**
|
|
2422
|
-
*
|
|
2423
|
-
*
|
|
2424
|
-
* Omit to use the default uncontrolled behaviour.
|
|
2614
|
+
* Whether to show range selector presets
|
|
2615
|
+
* @default true
|
|
2425
2616
|
*/
|
|
2426
|
-
|
|
2617
|
+
showRangeSelector?: boolean;
|
|
2427
2618
|
/**
|
|
2428
|
-
*
|
|
2429
|
-
*
|
|
2430
|
-
* `(prev: Set<string>) => Set<string>` — the latter lets parents compose
|
|
2431
|
-
* rapid sequential toggles correctly (each sees the latest prev rather than
|
|
2432
|
-
* the stale render-closure value). Only called when `hiddenSeriesLabels`
|
|
2433
|
-
* prop is provided.
|
|
2434
|
-
*/
|
|
2435
|
-
onHiddenSeriesChange?: (updater: Set<string> | ((prev: Set<string>) => Set<string>)) => void;
|
|
2436
|
-
/**
|
|
2437
|
-
* Hide the bottom bar (legend + export button). Useful for small/embedded
|
|
2438
|
-
* charts — e.g. inline sparklines — where the legend and export affordance
|
|
2439
|
-
* add unwanted chrome. Defaults to false (bottom bar shown) to preserve
|
|
2440
|
-
* existing behavior for all current consumers.
|
|
2441
|
-
*/
|
|
2442
|
-
hideBottomBar?: boolean;
|
|
2443
|
-
/** Trailing actions rendered in the `ChartHeader`, opposite the title. */
|
|
2444
|
-
headerActions?: React__default.ReactNode;
|
|
2445
|
-
/** Control cluster rendered in the `ChartHeader` — `TimeControls` today. */
|
|
2446
|
-
headerControls?: React__default.ReactNode;
|
|
2447
|
-
}
|
|
2448
|
-
/**
|
|
2449
|
-
* Default plot-body height for a chart block, in px. Pairs with `CHART_HEADER_HEIGHT`.
|
|
2450
|
-
*
|
|
2451
|
-
* It lives here rather than in each block because four blocks had four private copies of `280`
|
|
2452
|
-
* that happened to agree, with nothing enforcing the agreement — a design change to chart height
|
|
2453
|
-
* was a four-file diff where three files could be forgotten and nothing failed. This is `P10 R-23`.
|
|
2454
|
-
*
|
|
2455
|
-
* A block that needs a different body height passes its own; this is the value it starts from.
|
|
2456
|
-
*/
|
|
2457
|
-
declare const DEFAULT_CHART_HEIGHT = 280;
|
|
2458
|
-
/**
|
|
2459
|
-
* ChartContainer
|
|
2460
|
-
*
|
|
2461
|
-
* Main chart wrapper component that provides context and layout for chart visualizations.
|
|
2462
|
-
* Handles scaling, tooltips, axes, and data management for area, line, and bar charts.
|
|
2463
|
-
*/
|
|
2464
|
-
declare const ChartContainer: React__default.FC<Omit<ChartContainerProps, "parentWidth" | "parentHeight"> & {
|
|
2465
|
-
parentWidth?: number;
|
|
2466
|
-
parentHeight?: number;
|
|
2467
|
-
}>;
|
|
2468
|
-
|
|
2469
|
-
/**
|
|
2470
|
-
* Event marker type — shared by ChartEventMarkers and ChartEventSpans.
|
|
2471
|
-
*/
|
|
2472
|
-
type EventMarkerType = "command" | "alert" | "info" | "success" | "warning" | "error";
|
|
2473
|
-
/**
|
|
2474
|
-
* Get the resolved color for a given event marker type.
|
|
2475
|
-
* Uses getResolvedColor to ensure CSS variables work in SVG context.
|
|
2476
|
-
*/
|
|
2477
|
-
declare function getEventColor(type: EventMarkerType | undefined): string;
|
|
2478
|
-
|
|
2479
|
-
/**
|
|
2480
|
-
* Event marker data point
|
|
2481
|
-
*/
|
|
2482
|
-
interface EventMarker {
|
|
2483
|
-
/**
|
|
2484
|
-
* Event timestamp
|
|
2619
|
+
* Whether to show calendar date picker button
|
|
2620
|
+
* @default false
|
|
2485
2621
|
*/
|
|
2486
|
-
|
|
2622
|
+
allowDatePicker?: boolean;
|
|
2487
2623
|
/**
|
|
2488
|
-
*
|
|
2624
|
+
* Whether window size is locked (read-only)
|
|
2625
|
+
* @default false
|
|
2489
2626
|
*/
|
|
2490
|
-
|
|
2627
|
+
lockWindowSize?: boolean;
|
|
2491
2628
|
/**
|
|
2492
|
-
*
|
|
2629
|
+
* Whether to show the built-in Reset button beside the calendar picker. It
|
|
2630
|
+
* returns to the first preset. Turn off in views that own their own reset
|
|
2631
|
+
* with different semantics (e.g. pan/zoom explorers returning to the last
|
|
2632
|
+
* explicit selection).
|
|
2633
|
+
* @default true
|
|
2493
2634
|
*/
|
|
2494
|
-
|
|
2635
|
+
showReset?: boolean;
|
|
2495
2636
|
/**
|
|
2496
|
-
*
|
|
2637
|
+
* Restrict to single day selection (uses Calendar instead of RangeCalendar)
|
|
2638
|
+
* @default false
|
|
2497
2639
|
*/
|
|
2498
|
-
|
|
2640
|
+
restrictToSingleDay?: boolean;
|
|
2499
2641
|
/**
|
|
2500
|
-
*
|
|
2642
|
+
* Available preset range options
|
|
2501
2643
|
*/
|
|
2502
|
-
|
|
2503
|
-
}
|
|
2504
|
-
interface ChartEventMarkersProps {
|
|
2644
|
+
presetRanges?: PresetRange[];
|
|
2505
2645
|
/**
|
|
2506
|
-
*
|
|
2646
|
+
* Available window size options
|
|
2507
2647
|
*/
|
|
2508
|
-
|
|
2648
|
+
windowSizeOptions?: WindowSizeOption[];
|
|
2509
2649
|
/**
|
|
2510
|
-
*
|
|
2511
|
-
*
|
|
2650
|
+
* Control size, matching the shared `Button` / `Select` scale.
|
|
2651
|
+
*
|
|
2652
|
+
* Defaults to `md`, which is what this component always rendered. `sm` exists
|
|
2653
|
+
* for a caller placing these beside smaller controls — a chart header, where
|
|
2654
|
+
* `md` here stood 39px next to 33px selects and read as a mismatch rather
|
|
2655
|
+
* than a hierarchy.
|
|
2512
2656
|
*/
|
|
2513
|
-
|
|
2657
|
+
size?: "sm" | "md";
|
|
2514
2658
|
/**
|
|
2515
|
-
*
|
|
2516
|
-
* @default false
|
|
2659
|
+
* Additional CSS classes
|
|
2517
2660
|
*/
|
|
2518
|
-
|
|
2661
|
+
className?: string;
|
|
2519
2662
|
}
|
|
2520
2663
|
/**
|
|
2521
|
-
*
|
|
2664
|
+
* TimeControls
|
|
2522
2665
|
*
|
|
2523
|
-
*
|
|
2524
|
-
*
|
|
2666
|
+
* Sophisticated time control component with responsive behavior and calendar integration.
|
|
2667
|
+
* Features preset ranges, custom date picker, and window size selection.
|
|
2668
|
+
*
|
|
2669
|
+
* **Responsive Behavior:**
|
|
2670
|
+
* - < 600px: Compact mode with Select dropdowns
|
|
2671
|
+
* - ≥ 600px: Expanded mode with ToggleButton group for presets
|
|
2525
2672
|
*
|
|
2526
2673
|
* @example
|
|
2527
2674
|
* ```tsx
|
|
2528
|
-
*
|
|
2529
|
-
*
|
|
2530
|
-
*
|
|
2531
|
-
*
|
|
2532
|
-
*
|
|
2533
|
-
*
|
|
2534
|
-
*
|
|
2535
|
-
*
|
|
2536
|
-
*
|
|
2675
|
+
* const [dateRange, setDateRange] = useState({
|
|
2676
|
+
* after: subDays(new Date(), 7),
|
|
2677
|
+
* before: new Date()
|
|
2678
|
+
* });
|
|
2679
|
+
* const [windowSize, setWindowSize] = useState<WindowSize>("HOUR");
|
|
2680
|
+
*
|
|
2681
|
+
* <TimeControls
|
|
2682
|
+
* dateRange={dateRange}
|
|
2683
|
+
* onDateRangeChange={setDateRange}
|
|
2684
|
+
* windowSize={windowSize}
|
|
2685
|
+
* onWindowSizeChange={setWindowSize}
|
|
2686
|
+
* presetRanges={presetRanges}
|
|
2687
|
+
* allowDatePicker
|
|
2688
|
+
* />
|
|
2537
2689
|
* ```
|
|
2538
2690
|
*/
|
|
2539
|
-
declare function
|
|
2691
|
+
declare function TimeControls({ dateRange, onDateRangeChange, windowSize, onWindowSizeChange, showWindowSize, showRangeSelector, allowDatePicker, lockWindowSize, showReset, restrictToSingleDay, presetRanges, windowSizeOptions, autoAdjustWindowSize, size, className, }: TimeControlsProps): react_jsx_runtime.JSX.Element;
|
|
2540
2692
|
|
|
2693
|
+
type ClassicPresetId = "day" | "week" | "month";
|
|
2541
2694
|
/**
|
|
2542
|
-
*
|
|
2695
|
+
* The standard ladder for classic (non-tiled) charts. Labels are supplied by the
|
|
2696
|
+
* caller rather than baked in, because consumers localize them — edges owns the
|
|
2697
|
+
* ids and ranges, which is the part that was duplicated per chart and drifted.
|
|
2543
2698
|
*/
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
metadata?: Record<string, string | number>;
|
|
2699
|
+
declare function classicPresetRanges(labels: Record<ClassicPresetId, string>, getAnchorEndMs?: () => number): PresetRange[];
|
|
2700
|
+
/**
|
|
2701
|
+
* The standard telemetry time-range ladder. `getAnchorEndMs` is called at press
|
|
2702
|
+
* time, not build time, so a long-lived view jumps to a fresh "now" (or stays
|
|
2703
|
+
* pinned to a scrubbed instant under time travel).
|
|
2704
|
+
*/
|
|
2705
|
+
declare function telemetryPresetRanges(getAnchorEndMs?: () => number): PresetRange[];
|
|
2706
|
+
|
|
2707
|
+
type TiledCameraPreviewDomain = [number, number] | null;
|
|
2708
|
+
interface TiledCameraSyncGroup {
|
|
2709
|
+
publish(source: object, preview: TiledCameraPreviewDomain): void;
|
|
2710
|
+
subscribe(source: object, onPreview: (preview: TiledCameraPreviewDomain) => void): () => void;
|
|
2557
2711
|
}
|
|
2558
|
-
|
|
2712
|
+
/**
|
|
2713
|
+
* Shared camera for a set of TiledTimeSeriesCharts: pass one group to each
|
|
2714
|
+
* chart's `cameraSync` prop and an in-progress pan/zoom on any chart previews
|
|
2715
|
+
* live on the others, frame-by-frame. Purely imperative — sibling charts apply
|
|
2716
|
+
* the previewed domain as a plot-group transform and axis re-tick, so nothing
|
|
2717
|
+
* re-renders through React until the gesture settles.
|
|
2718
|
+
*/
|
|
2719
|
+
declare function createTiledCameraSyncGroup(): TiledCameraSyncGroup;
|
|
2720
|
+
|
|
2721
|
+
interface TiledTimeSeriesChartViewport {
|
|
2722
|
+
startMs: number;
|
|
2723
|
+
endMs: number;
|
|
2724
|
+
}
|
|
2725
|
+
interface TiledTimeSeriesChartProps {
|
|
2726
|
+
/** Drop the Export control while keeping the legend. See `ChartBottomBarProps.hideExport`. */
|
|
2727
|
+
hideExport?: boolean;
|
|
2559
2728
|
/**
|
|
2560
|
-
*
|
|
2729
|
+
* Series labels the legend shows struck through and the plot omits. Controlled only — the
|
|
2730
|
+
* caller owns the set, because the thing a reader toggles is usually a group of series (every
|
|
2731
|
+
* signal on one phase) rather than the one label they clicked.
|
|
2561
2732
|
*/
|
|
2562
|
-
|
|
2733
|
+
hiddenSeriesLabels?: ReadonlySet<string>;
|
|
2734
|
+
/** Makes the legend clickable. Receives the label of the item pressed. */
|
|
2735
|
+
onLegendItemToggle?: (label: string) => void;
|
|
2563
2736
|
/**
|
|
2564
|
-
*
|
|
2737
|
+
* Legend entries to show INSTEAD of one per series.
|
|
2738
|
+
*
|
|
2739
|
+
* For a chart whose series are a cross-product the reader does not think in: three phases × three
|
|
2740
|
+
* signals is nine lines, but the questions are "which phases?" and "which signals?" — six
|
|
2741
|
+
* entries, not nine. The caller maps an entry back to the series it governs and answers with
|
|
2742
|
+
* `hiddenSeriesLabels`, so this prop is presentation only; it never decides what is drawn.
|
|
2743
|
+
*/
|
|
2744
|
+
legend?: {
|
|
2745
|
+
category: string;
|
|
2746
|
+
fill: string;
|
|
2747
|
+
isHidden?: boolean;
|
|
2748
|
+
}[];
|
|
2749
|
+
/**
|
|
2750
|
+
* Moments worth flagging on the time axis.
|
|
2751
|
+
*
|
|
2752
|
+
* `point` is the reading that caused the mark. Hovering shows that one value, not the series the
|
|
2753
|
+
* plot happens to be drawing — the mark exists because of a single sample, and answering with
|
|
2754
|
+
* five other numbers makes the reader hunt for the one that crossed. It is shown even when that
|
|
2755
|
+
* series is hidden, since the mark is the only trace of it left on screen.
|
|
2565
2756
|
*/
|
|
2566
|
-
|
|
2757
|
+
xMarkers?: {
|
|
2758
|
+
timeMs: number;
|
|
2759
|
+
label: string;
|
|
2760
|
+
color?: string;
|
|
2761
|
+
point?: {
|
|
2762
|
+
label: string;
|
|
2763
|
+
value: number;
|
|
2764
|
+
};
|
|
2765
|
+
}[];
|
|
2766
|
+
/** AreaSeries / LineSeries children. */
|
|
2767
|
+
children: React__default.ReactNode;
|
|
2567
2768
|
/**
|
|
2568
|
-
*
|
|
2769
|
+
* Accessible name for the chart, rendered as the SVG `<title>`. Required so
|
|
2770
|
+
* that screen readers announce what each chart shows; every chart needs its
|
|
2771
|
+
* own, and there is deliberately no default to fall back to.
|
|
2569
2772
|
*/
|
|
2570
|
-
|
|
2773
|
+
title: string;
|
|
2774
|
+
/** Trailing actions rendered in the `ChartHeader`, opposite the title. */
|
|
2775
|
+
headerActions?: React__default.ReactNode;
|
|
2776
|
+
/** Control cluster rendered in the `ChartHeader` — `TimeControls` today. */
|
|
2777
|
+
headerControls?: React__default.ReactNode;
|
|
2778
|
+
/** The camera. Drives the x-scale directly, decoupled from the data extent. */
|
|
2779
|
+
viewport: TiledTimeSeriesChartViewport;
|
|
2780
|
+
/** Optional clamp for pan gestures. New viewports stay within these bounds. */
|
|
2781
|
+
panBounds?: TiledTimeSeriesChartViewport;
|
|
2782
|
+
/** Resolve current pan bounds at gesture commit without updating the plotted viewport. */
|
|
2783
|
+
getPanBounds?: (() => TiledTimeSeriesChartViewport) | undefined;
|
|
2784
|
+
/** Committed once per settled gesture (drag/wheel), with the new ms viewport. */
|
|
2785
|
+
onViewportChange: (viewport: TiledTimeSeriesChartViewport) => void;
|
|
2786
|
+
/** Measured PLOT width (after margins), for level-of-detail / tile resolution. */
|
|
2787
|
+
onPlotWidthChange?: (widthPx: number) => void;
|
|
2788
|
+
yFormatter?: YFormatType;
|
|
2789
|
+
/** Explicit bounds or a domain derived from visible geometry, including connected bracketing samples. */
|
|
2790
|
+
yDomain?: [number, number] | ((data: BaseDataPoint[]) => [number, number]);
|
|
2791
|
+
/** Horizontal reference lines (regulatory limits, thresholds). */
|
|
2792
|
+
referenceLines?: {
|
|
2793
|
+
value: number;
|
|
2794
|
+
label?: string;
|
|
2795
|
+
color?: string;
|
|
2796
|
+
}[];
|
|
2797
|
+
/**
|
|
2798
|
+
* Shared camera group (see `createTiledCameraSyncGroup`). While a gesture is
|
|
2799
|
+
* in progress on any chart in the group, the others mirror its live camera
|
|
2800
|
+
* frame-by-frame; the settled commit still arrives via `onViewportChange`.
|
|
2801
|
+
*/
|
|
2802
|
+
cameraSync?: TiledCameraSyncGroup;
|
|
2803
|
+
parentWidth?: number;
|
|
2804
|
+
parentHeight?: number;
|
|
2571
2805
|
}
|
|
2572
2806
|
/**
|
|
2573
|
-
*
|
|
2574
|
-
*
|
|
2575
|
-
* Renders translucent rectangular bands representing time spans (e.g., scheduled command windows)
|
|
2576
|
-
* on a chart. Must be used as a child of ChartContainer to access chart context.
|
|
2577
|
-
*
|
|
2578
|
-
* Renders BEFORE ChartEventMarkers so the vertical marker lines appear on top of the span bands.
|
|
2807
|
+
* TiledTimeSeriesChart
|
|
2579
2808
|
*
|
|
2580
|
-
*
|
|
2581
|
-
*
|
|
2582
|
-
*
|
|
2583
|
-
*
|
|
2584
|
-
*
|
|
2585
|
-
* spans={[
|
|
2586
|
-
* { start: new Date('2024-01-01T12:00:00Z'), end: new Date('2024-01-01T14:00:00Z'), label: 'Scheduled window', type: 'command' }
|
|
2587
|
-
* ]}
|
|
2588
|
-
* />
|
|
2589
|
-
* <ChartEventMarkers events={markers} />
|
|
2590
|
-
* </ChartContainer>
|
|
2591
|
-
* ```
|
|
2809
|
+
* Camera-mode time-series chart for the meter telemetry explorer. A parent-owned
|
|
2810
|
+
* `viewport` (ms) drives the x-scale directly — decoupled from the loaded data
|
|
2811
|
+
* extent — and pan/zoom gestures commit a new viewport once per settled gesture.
|
|
2812
|
+
* The data is assumed pre-bounded to the viewport (± overscan) upstream, so the
|
|
2813
|
+
* series group is wrapped in a plot-area clip and series animation is disabled.
|
|
2592
2814
|
*/
|
|
2593
|
-
declare
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2815
|
+
declare const TiledTimeSeriesChart: React__default.FC<Omit<TiledTimeSeriesChartProps, "parentWidth" | "parentHeight"> & {
|
|
2816
|
+
parentWidth?: number;
|
|
2817
|
+
parentHeight?: number;
|
|
2818
|
+
}>;
|
|
2819
|
+
|
|
2820
|
+
interface TiledTimeSeriesSource {
|
|
2821
|
+
fetchTile: FetchTile;
|
|
2822
|
+
ladder: ResolutionLadder;
|
|
2823
|
+
nativeMs: number;
|
|
2824
|
+
resetKey: string;
|
|
2825
|
+
/** Revalidate visible tiles without discarding the plot. */
|
|
2826
|
+
refreshKey?: string | undefined;
|
|
2827
|
+
/** Cancel automatic refreshes while preserving manual navigation. */
|
|
2828
|
+
refreshEnabled?: boolean | undefined;
|
|
2829
|
+
tileCostSeriesCount: number;
|
|
2830
|
+
}
|
|
2831
|
+
interface TiledTimeSeriesView {
|
|
2832
|
+
targetTierId: string;
|
|
2833
|
+
renderedTierId: string | null;
|
|
2834
|
+
viewport: {
|
|
2835
|
+
startMs: number;
|
|
2836
|
+
endMs: number;
|
|
2837
|
+
};
|
|
2838
|
+
followingLatest: boolean;
|
|
2839
|
+
/** Relative Now navigation intent, independent of whether live updates are enabled. */
|
|
2840
|
+
atLiveEdge?: boolean | undefined;
|
|
2841
|
+
}
|
|
2842
|
+
/**
|
|
2843
|
+
* One additional plot drawn on this explorer's camera.
|
|
2597
2844
|
*
|
|
2598
|
-
*
|
|
2599
|
-
*
|
|
2600
|
-
*
|
|
2601
|
-
*
|
|
2602
|
-
*
|
|
2845
|
+
* ── 🔴 Why panels rather than N explorers ────────────────────────────────────
|
|
2846
|
+
* A stack of telemetry panels is ONE view of one node: the reader picks a
|
|
2847
|
+
* window once and every metric answers for that window. N explorers would mean
|
|
2848
|
+
* N control bars stacked down the page, each able to disagree with the others —
|
|
2849
|
+
* a reader could put Voltage on last week and Current on today and have no
|
|
2850
|
+
* indication the two plots no longer describe the same moment.
|
|
2603
2851
|
*
|
|
2604
|
-
*
|
|
2605
|
-
*
|
|
2852
|
+
* So the camera, the controls, the resolution ladder and the reset button stay
|
|
2853
|
+
* singular, and a panel contributes only its own stream and its own plot. This
|
|
2854
|
+
* is the shape `TiledGridTelemetryView` already ships by hand in the Explore
|
|
2855
|
+
* drawer; `panels` is that arrangement made reachable from a declaration.
|
|
2856
|
+
*
|
|
2857
|
+
* Each panel owns a separate `useTileWindow`, exactly as the drawer does — the
|
|
2858
|
+
* streams have different cadences and different tile costs, and merging them
|
|
2859
|
+
* into one window would make the coarsest metric dictate the resolution of the
|
|
2860
|
+
* finest.
|
|
2606
2861
|
*/
|
|
2607
|
-
|
|
2862
|
+
interface TiledTimeSeriesPanel {
|
|
2863
|
+
/** Stable identity. Also the React key, so it must not be positional. */
|
|
2864
|
+
key: string;
|
|
2865
|
+
/** Accessible name for this plot's SVG `<title>`, and its heading. */
|
|
2866
|
+
title: string;
|
|
2867
|
+
/** Where this panel's points come from. Its own ladder and cost. */
|
|
2868
|
+
source: TiledTimeSeriesSource;
|
|
2869
|
+
yFormatter?: YFormatType | undefined;
|
|
2870
|
+
yDomain?: TiledTimeSeriesChartProps["yDomain"] | undefined;
|
|
2871
|
+
referenceLines?: {
|
|
2872
|
+
value: number;
|
|
2873
|
+
label?: string;
|
|
2874
|
+
color?: string;
|
|
2875
|
+
}[] | undefined;
|
|
2876
|
+
/** Plot height in px. Panels are shorter than a lone chart by default. */
|
|
2877
|
+
height?: number | undefined;
|
|
2878
|
+
/** See `ChartBottomBarProps.hideExport`. Defaults to the explorer's own setting. */
|
|
2879
|
+
hideExport?: boolean | undefined;
|
|
2880
|
+
/** See `TiledTimeSeriesChartProps.legend`. A panel's legend is its own — it draws its own series. */
|
|
2881
|
+
legend?: TiledTimeSeriesChartProps["legend"] | undefined;
|
|
2882
|
+
/** See `TiledTimeSeriesChartProps.hiddenSeriesLabels`. */
|
|
2883
|
+
hiddenSeriesLabels?: ReadonlySet<string> | undefined;
|
|
2884
|
+
/** See `TiledTimeSeriesChartProps.onLegendItemToggle`. */
|
|
2885
|
+
onLegendItemToggle?: ((label: string) => void) | undefined;
|
|
2886
|
+
/** This panel's series children, given its own assembled streams. */
|
|
2887
|
+
children: (args: {
|
|
2888
|
+
series: AssembledSeries;
|
|
2889
|
+
gapMs: number;
|
|
2890
|
+
}) => ReactNode;
|
|
2891
|
+
}
|
|
2892
|
+
interface TiledTimeSeriesExplorerProps {
|
|
2893
|
+
source: TiledTimeSeriesSource;
|
|
2894
|
+
/** Accessible name for the chart. Forwarded to the underlying tiled chart's SVG `<title>`. */
|
|
2895
|
+
title: string;
|
|
2896
|
+
liveControl?: TiledTimeSeriesLiveControl | undefined;
|
|
2897
|
+
initialRange?: {
|
|
2898
|
+
days: number;
|
|
2899
|
+
} | undefined;
|
|
2900
|
+
viewportEnd?: Date | undefined;
|
|
2901
|
+
yFormatter?: YFormatType | undefined;
|
|
2902
|
+
yDomain?: TiledTimeSeriesChartProps["yDomain"] | undefined;
|
|
2903
|
+
referenceLines?: {
|
|
2904
|
+
value: number;
|
|
2905
|
+
label?: string;
|
|
2906
|
+
color?: string;
|
|
2907
|
+
}[] | undefined;
|
|
2908
|
+
emptyState: {
|
|
2909
|
+
title: string;
|
|
2910
|
+
description: string;
|
|
2911
|
+
};
|
|
2912
|
+
presetRanges?: PresetRange[] | undefined;
|
|
2913
|
+
tierToWindow: Record<string, WindowSize>;
|
|
2914
|
+
windowSizeOptions: WindowSizeOption[];
|
|
2915
|
+
height?: number | undefined;
|
|
2916
|
+
/**
|
|
2917
|
+
* Fill the parent's height instead of the fixed `height`.
|
|
2918
|
+
*
|
|
2919
|
+
* For a caller that has already reserved a box — a block inside a card, a
|
|
2920
|
+
* dashboard tile — where the fixed 360px plot PLUS this component's controls
|
|
2921
|
+
* would overflow whatever was reserved. Uses the same `min-h-0 flex-1` the
|
|
2922
|
+
* expanded view uses, so the plot takes what is left after the controls
|
|
2923
|
+
* rather than adding to them.
|
|
2924
|
+
*/
|
|
2925
|
+
fitParent?: boolean | undefined;
|
|
2926
|
+
/** ReactNode, not just a string, so a caller can emphasise the gesture names inside it. */
|
|
2927
|
+
hint?: ReactNode | undefined;
|
|
2928
|
+
dataBounds?: {
|
|
2929
|
+
startMs?: number;
|
|
2930
|
+
endMs?: number;
|
|
2931
|
+
} | undefined;
|
|
2932
|
+
/** Reports committed camera/tier state, including while rendered tiles fall back. */
|
|
2933
|
+
onViewChange?: ((view: TiledTimeSeriesView) => void) | undefined;
|
|
2934
|
+
/** Advance unanchored views at Now. Historical navigation pauses following. */
|
|
2935
|
+
followLatest?: boolean | undefined;
|
|
2936
|
+
/** Change to explicitly resume a navigation-paused view at Now, preserving its span. */
|
|
2937
|
+
followLatestKey?: string | number | undefined;
|
|
2938
|
+
/** Metadata for the accepted plotted data and visible window, shared with expanded view.
|
|
2939
|
+
* Render only; publish state through onViewChange instead. Series may include overscan.
|
|
2940
|
+
* maxDataTimeMs is the inclusive fetch cutoff; viewport.endMs is exclusive. */
|
|
2941
|
+
/**
|
|
2942
|
+
* A built-in "latest data in view" readout, for callers that cannot pass a
|
|
2943
|
+
* function.
|
|
2944
|
+
*
|
|
2945
|
+
* The declarative counterpart of `renderMetadata`: same slot, same rule,
|
|
2946
|
+
* selected by name. A caller that can hold a function may keep using
|
|
2947
|
+
* `renderMetadata`; one driven from stored JSON gets the affordance too.
|
|
2948
|
+
* Passing both renders both, which is a caller error rather than something to
|
|
2949
|
+
* silently resolve here.
|
|
2950
|
+
*/
|
|
2951
|
+
latestDataReadout?: LatestDataReadoutKind | undefined;
|
|
2952
|
+
/** Which streams `latestDataReadout` inspects, when its defaults do not fit. */
|
|
2953
|
+
latestDataSeriesKeys?: string[] | undefined;
|
|
2954
|
+
renderMetadata?: ((args: {
|
|
2955
|
+
series: AssembledSeries;
|
|
2956
|
+
viewport: {
|
|
2957
|
+
startMs: number;
|
|
2958
|
+
endMs: number;
|
|
2959
|
+
};
|
|
2960
|
+
maxDataTimeMs: number;
|
|
2961
|
+
}) => ReactNode) | undefined;
|
|
2962
|
+
children: (args: {
|
|
2963
|
+
series: AssembledSeries;
|
|
2964
|
+
gapMs: number;
|
|
2965
|
+
}) => ReactNode;
|
|
2966
|
+
/**
|
|
2967
|
+
* Extra plots stacked below the primary one, on this same camera.
|
|
2968
|
+
*
|
|
2969
|
+
* Omit it and this is exactly the single-plot explorer it has always been —
|
|
2970
|
+
* no sync group is created and nothing about the existing path changes. See
|
|
2971
|
+
* {@link TiledTimeSeriesPanel}.
|
|
2972
|
+
*/
|
|
2973
|
+
/** Drop the Export control while keeping the legend. See `ChartBottomBarProps.hideExport`. */
|
|
2974
|
+
hideExport?: boolean | undefined;
|
|
2975
|
+
/**
|
|
2976
|
+
* Caller controls over what the plot draws, on their own row above the time controls.
|
|
2977
|
+
*
|
|
2978
|
+
* 🔴 Inside the explorer, not above it in the caller's own markup: the expanded view re-renders
|
|
2979
|
+
* THIS component inside a dialog, so anything the caller renders as a sibling is left behind on
|
|
2980
|
+
* the page and the control disappears exactly when the chart gets big enough to need it.
|
|
2981
|
+
*/
|
|
2982
|
+
leadingControls?: ReactNode | undefined;
|
|
2983
|
+
/**
|
|
2984
|
+
* Caller controls that belong under the plot, right-aligned on the hint's row.
|
|
2985
|
+
*
|
|
2986
|
+
* Right rather than leading: the hint is prose and reads from the plot's left edge, and the
|
|
2987
|
+
* control set varies per view — leading it, the sentence started at a different x every time
|
|
2988
|
+
* the view changed.
|
|
2989
|
+
*/
|
|
2990
|
+
trailingControls?: ReactNode | undefined;
|
|
2991
|
+
/**
|
|
2992
|
+
* Drop the "Window … · Resolution …" readout and the "no earlier data loaded" note, keeping the
|
|
2993
|
+
* rest of that row — partial-coverage and refresh errors, which report something a reader cannot
|
|
2994
|
+
* see for themselves. For a caller whose controls already state the window and the resolution.
|
|
2995
|
+
*/
|
|
2996
|
+
hideWindowSummary?: boolean | undefined;
|
|
2997
|
+
/**
|
|
2998
|
+
* See `TiledTimeSeriesChartProps.xMarkers`. The function form is resolved against the assembled
|
|
2999
|
+
* series, for markers that are a property of the data rather than of the caller's config.
|
|
3000
|
+
*/
|
|
3001
|
+
xMarkers?: TiledTimeSeriesChartProps["xMarkers"] | ((series: AssembledSeries) => TiledTimeSeriesChartProps["xMarkers"]) | undefined;
|
|
3002
|
+
/** See `TiledTimeSeriesChartProps.legend`. */
|
|
3003
|
+
legend?: TiledTimeSeriesChartProps["legend"] | undefined;
|
|
3004
|
+
/** See `TiledTimeSeriesChartProps.hiddenSeriesLabels`. */
|
|
3005
|
+
hiddenSeriesLabels?: ReadonlySet<string> | undefined;
|
|
3006
|
+
/** See `TiledTimeSeriesChartProps.onLegendItemToggle`. */
|
|
3007
|
+
onLegendItemToggle?: ((label: string) => void) | undefined;
|
|
3008
|
+
panels?: TiledTimeSeriesPanel[] | undefined;
|
|
3009
|
+
}
|
|
3010
|
+
declare function TiledTimeSeriesExplorer({ source, hideExport, hideWindowSummary, leadingControls, trailingControls, xMarkers, legend, hiddenSeriesLabels, onLegendItemToggle, title, liveControl, initialRange, viewportEnd, yFormatter, yDomain, referenceLines, emptyState, presetRanges, tierToWindow, windowSizeOptions, height, fitParent, hint, dataBounds, onViewChange, followLatest, followLatestKey, children, latestDataReadout, latestDataSeriesKeys, renderMetadata, panels, }: TiledTimeSeriesExplorerProps): react_jsx_runtime.JSX.Element;
|
|
3011
|
+
|
|
2608
3012
|
/**
|
|
2609
|
-
*
|
|
2610
|
-
*
|
|
3013
|
+
* JSON-safe recursive types.
|
|
3014
|
+
*
|
|
3015
|
+
* `source.ref` is serialized to storage — a BigInt, function, or cyclic
|
|
3016
|
+
* reference there would throw at persist time, far from the block that caused
|
|
3017
|
+
* it. These types enforce JSON-safety at the type level.
|
|
2611
3018
|
*/
|
|
2612
|
-
|
|
3019
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
3020
|
+
[key: string]: JsonValue;
|
|
3021
|
+
};
|
|
3022
|
+
type JsonObject = {
|
|
3023
|
+
[key: string]: JsonValue;
|
|
3024
|
+
};
|
|
2613
3025
|
/**
|
|
2614
|
-
*
|
|
2615
|
-
*
|
|
3026
|
+
* WHERE a chart's data comes from.
|
|
3027
|
+
*
|
|
3028
|
+
* ── Why this union exists ─────────────────────────────────────────────────────
|
|
3029
|
+
* A chart either holds its data or streams it. Until now those were two
|
|
3030
|
+
* different COMPONENTS — `ChartContainer` for the first, `TiledTimeSeriesChart`
|
|
3031
|
+
* for the second — which meant the choice was made when you picked an import,
|
|
3032
|
+
* and a block (whose props must be JSON) could only ever reach the first.
|
|
3033
|
+
*
|
|
3034
|
+
* Loading strategy is not a kind of chart. It is a property OF one. So it moves
|
|
3035
|
+
* into a prop, and the two cases become one component with two sources.
|
|
3036
|
+
*
|
|
3037
|
+
* Modelled on `MapDataSource` in `@texturehq/edges-blocks-maps`, which made the
|
|
3038
|
+
* same call for geometry: `{ kind: "inline" } | { kind: "tileset" }`, with the
|
|
3039
|
+
* fetching itself left to the runtime. One idea, two media.
|
|
3040
|
+
*
|
|
3041
|
+
* ── The serialization rule ────────────────────────────────────────────────────
|
|
3042
|
+
* Everything here is JSON-safe on purpose, because that is what lets a BLOCK
|
|
3043
|
+
* declare it: block props are stringified into `data-composition-schema`, and a
|
|
3044
|
+
* function there blanks the page. So this union says WHICH series to draw and at
|
|
3045
|
+
* what resolutions — never HOW to fetch them. The fetcher is supplied separately
|
|
3046
|
+
* at the render site (see `ChartSourceResolver`), exactly as the maps blocks
|
|
3047
|
+
* declare a tileset and let the host attach `createAuthenticatedTileTransform`.
|
|
2616
3048
|
*/
|
|
2617
|
-
|
|
2618
|
-
children: ReactNode;
|
|
2619
|
-
}): react_jsx_runtime.JSX.Element;
|
|
3049
|
+
type ChartSource = InlineChartSource | StreamingChartSource;
|
|
2620
3050
|
/**
|
|
2621
|
-
*
|
|
2622
|
-
*
|
|
3051
|
+
* Data the caller already has. The default, and what every chart does today —
|
|
3052
|
+
* series children carry their own `data` arrays.
|
|
3053
|
+
*
|
|
3054
|
+
* Declared explicitly (rather than inferred from the absence of a source) so a
|
|
3055
|
+
* composition can say "inline" out loud, and so a schema can reject a block that
|
|
3056
|
+
* sets both `series` and a streaming source.
|
|
2623
3057
|
*/
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
}
|
|
3058
|
+
interface InlineChartSource {
|
|
3059
|
+
kind: "inline";
|
|
3060
|
+
}
|
|
2627
3061
|
/**
|
|
2628
|
-
*
|
|
3062
|
+
* Data fetched as the reader moves through it.
|
|
2629
3063
|
*
|
|
2630
|
-
*
|
|
2631
|
-
*
|
|
2632
|
-
*
|
|
2633
|
-
*
|
|
3064
|
+
* The chart requests slices as the camera pans and re-requests at a coarser or
|
|
3065
|
+
* finer resolution as it zooms. Which slices, and how they are cached, is the
|
|
3066
|
+
* renderer's business — a caller describes the SHAPE of the history and nothing
|
|
3067
|
+
* else.
|
|
2634
3068
|
*
|
|
2635
|
-
*
|
|
2636
|
-
*
|
|
3069
|
+
* `ref` is the part a host resolves. It is deliberately opaque here: edges
|
|
3070
|
+
* cannot know what a "meter demand series" is, and should not learn. The app
|
|
3071
|
+
* maps it to a real fetcher (see `ChartSourceResolver`), which is what keeps
|
|
3072
|
+
* this package free of GraphQL and any app dependency.
|
|
2637
3073
|
*/
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
headerHeight: number;
|
|
2641
|
-
};
|
|
2642
|
-
/** Returns `true` when the chart should render its own visible title. */
|
|
2643
|
-
declare function useChartOwnsItsTitle(): boolean;
|
|
2644
|
-
interface ChartHeaderProps {
|
|
3074
|
+
interface StreamingChartSource {
|
|
3075
|
+
kind: "streaming";
|
|
2645
3076
|
/**
|
|
2646
|
-
*
|
|
2647
|
-
*
|
|
2648
|
-
* apart (ALL-2539). Shown only when nothing above already labels the chart.
|
|
3077
|
+
* Opaque, serializable descriptor of WHICH series to stream — resolved by the
|
|
3078
|
+
* host. In the dashboard this is a `Binding`; edges never inspects it.
|
|
2649
3079
|
*/
|
|
2650
|
-
|
|
3080
|
+
ref: JsonObject;
|
|
2651
3081
|
/**
|
|
2652
|
-
*
|
|
2653
|
-
*
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
3082
|
+
* Resolutions this history can be drawn at, coarsest to finest, with the span
|
|
3083
|
+
* of one fetched slice at each. Plain data — `[{ id: "1h", bucketMs, tileSpanMs }]`.
|
|
3084
|
+
*/
|
|
3085
|
+
ladder: ResolutionLadder;
|
|
3086
|
+
/**
|
|
3087
|
+
* The finest spacing the underlying data actually has, in ms.
|
|
2657
3088
|
*
|
|
2658
|
-
*
|
|
2659
|
-
*
|
|
2660
|
-
*
|
|
2661
|
-
*
|
|
2662
|
-
* swaps its chart for an `EmptyState` — moving those controls inside the chart
|
|
2663
|
-
* would reorder them, or make them vanish exactly when the window needs
|
|
2664
|
-
* changing.
|
|
3089
|
+
* Optional because it is frequently NOT known up front: a source that probes
|
|
3090
|
+
* its own cadence discovers this after its first response, and the renderer
|
|
3091
|
+
* already handles it arriving late. Pass it when the value is known
|
|
3092
|
+
* statically; otherwise let the resolver report it.
|
|
2665
3093
|
*/
|
|
2666
|
-
|
|
2667
|
-
/**
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
3094
|
+
nativeMs?: number;
|
|
3095
|
+
/** The window to open on. Defaults to the last 30 days. */
|
|
3096
|
+
initialRange?: {
|
|
3097
|
+
days: number;
|
|
3098
|
+
};
|
|
2671
3099
|
/**
|
|
2672
|
-
*
|
|
3100
|
+
* The instant this chart is pinned to, as an ISO-8601 string.
|
|
2673
3101
|
*
|
|
2674
|
-
*
|
|
2675
|
-
*
|
|
2676
|
-
*
|
|
2677
|
-
*
|
|
2678
|
-
*
|
|
2679
|
-
*
|
|
2680
|
-
*
|
|
3102
|
+
* ── What it is ────────────────────────────────────────────────────────────
|
|
3103
|
+
* Time travel. A surface showing a historical moment — Explore's scrubber,
|
|
3104
|
+
* a match event under DER detection — pins every panel to the same instant,
|
|
3105
|
+
* and this is how a streaming chart joins that. `initialRange` says how WIDE
|
|
3106
|
+
* the opening window is; this says where its right edge sits. Panning and
|
|
3107
|
+
* zooming stay unrestricted from there.
|
|
3108
|
+
*
|
|
3109
|
+
* ── 🔴 An anchored chart must not go live ─────────────────────────────────
|
|
3110
|
+
* The two are mutually exclusive, and the failure is the quiet kind: a chart
|
|
3111
|
+
* that kept refreshing while pinned would advance to now while the rest of
|
|
3112
|
+
* the panel stayed in the past, so the page would show two different
|
|
3113
|
+
* instants and look entirely normal doing it. The renderer already declines
|
|
3114
|
+
* to follow when this is set (`canFollow`, `atLiveEdge`), and a host that
|
|
3115
|
+
* offers a live control is expected to withhold it for the same reason.
|
|
3116
|
+
*
|
|
3117
|
+
* A STRING rather than a `Date`, because this declaration is stored: a board
|
|
3118
|
+
* tile or a composition carries it as JSON, and `Date` does not survive that
|
|
3119
|
+
* round trip. The renderer parses it once.
|
|
2681
3120
|
*/
|
|
2682
|
-
|
|
2683
|
-
marginRight?: number;
|
|
2684
|
-
}
|
|
2685
|
-
declare function ChartHeader({ title, controls, actions, containerRef, marginLeft, marginRight, }: ChartHeaderProps): react_jsx_runtime.JSX.Element | null;
|
|
2686
|
-
|
|
2687
|
-
interface ExpandedSize {
|
|
2688
|
-
width: number;
|
|
2689
|
-
height: number;
|
|
2690
|
-
}
|
|
2691
|
-
interface ChartExpand {
|
|
2692
|
-
isExpanded: boolean;
|
|
2693
|
-
/** The expand control, for `ChartHeader`'s action slot. */
|
|
2694
|
-
action: ReactNode;
|
|
3121
|
+
viewportEnd?: string;
|
|
2695
3122
|
/**
|
|
2696
|
-
*
|
|
2697
|
-
*
|
|
3123
|
+
* Changing this discards fetched data and starts over — use it when the
|
|
3124
|
+
* IDENTITY of what is plotted changes (a different device, a different
|
|
3125
|
+
* workspace). Panning and zooming do not need it.
|
|
2698
3126
|
*/
|
|
2699
|
-
|
|
2700
|
-
/**
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
children: ReactNode;
|
|
2706
|
-
}): react_jsx_runtime.JSX.Element;
|
|
2707
|
-
declare function useChartExpand(title: string): ChartExpand;
|
|
2708
|
-
|
|
2709
|
-
interface ChartTooltipProps {
|
|
2710
|
-
data: TooltipData | null;
|
|
2711
|
-
formatter: YFormatType;
|
|
2712
|
-
/** Optional label to display instead of formatting xValue (for categorical charts) */
|
|
2713
|
-
label?: string;
|
|
2714
|
-
/** Optional category labels override (for standalone usage without ChartContext) */
|
|
2715
|
-
categoryLabels?: Record<string, string>;
|
|
3127
|
+
resetKey?: string;
|
|
3128
|
+
/**
|
|
3129
|
+
* Changing this re-validates what is on screen WITHOUT clearing the plot, so
|
|
3130
|
+
* a refresh does not blank the chart. Use it for live updates.
|
|
3131
|
+
*/
|
|
3132
|
+
refreshKey?: string;
|
|
2716
3133
|
}
|
|
2717
3134
|
/**
|
|
2718
|
-
*
|
|
3135
|
+
* The runtime half of a streaming source: turns the serializable `ref` into
|
|
3136
|
+
* something that can actually fetch.
|
|
2719
3137
|
*
|
|
2720
|
-
*
|
|
2721
|
-
*
|
|
2722
|
-
*
|
|
3138
|
+
* This is a FUNCTION and therefore never a block prop. It is supplied once at
|
|
3139
|
+
* the render site — a provider near the top of the app — so that every chart
|
|
3140
|
+
* below it can stream without any of them importing a data client. Mirrors how
|
|
3141
|
+
* the maps blocks declare a tileset in props while the host attaches tile
|
|
3142
|
+
* authentication at the `<Map>` itself.
|
|
2723
3143
|
*
|
|
2724
|
-
*
|
|
3144
|
+
* Returning `null` means "I do not know this ref" — the chart then renders its
|
|
3145
|
+
* empty state rather than throwing, which is the right behaviour for a board
|
|
3146
|
+
* tile whose source is no longer registered.
|
|
2725
3147
|
*/
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
interface FunnelStage {
|
|
2729
|
-
id: string;
|
|
2730
|
-
/** Label for the stage (e.g., "Product Viewed") */
|
|
2731
|
-
label: string;
|
|
2732
|
-
/** Numeric value for this stage */
|
|
2733
|
-
value: number;
|
|
2734
|
-
/** Optional secondary value (e.g., "+12% MoM") */
|
|
2735
|
-
secondaryValue?: string;
|
|
2736
|
-
/** Optional annotation badge */
|
|
2737
|
-
annotation?: string;
|
|
2738
|
-
/** Override color for this stage */
|
|
2739
|
-
color?: string;
|
|
2740
|
-
}
|
|
2741
|
-
interface FunnelSeriesProps {
|
|
2742
|
-
/** Array of funnel stages ordered from top to bottom */
|
|
2743
|
-
data: FunnelStage[];
|
|
2744
|
-
/** Width of the chart */
|
|
2745
|
-
width?: number;
|
|
2746
|
-
/** Height of the chart */
|
|
2747
|
-
height?: number;
|
|
2748
|
-
/** Padding around the chart area */
|
|
2749
|
-
padding?: number;
|
|
2750
|
-
/** Gap between bars */
|
|
2751
|
-
barGap?: number;
|
|
2752
|
-
/** Format function for values */
|
|
2753
|
-
formatValue?: (value: number) => string;
|
|
2754
|
-
/** Format function for percentages */
|
|
2755
|
-
formatPercentage?: (value: number) => string;
|
|
2756
|
-
/** Single color to use for all bars (uses theme color if not provided) */
|
|
2757
|
-
color?: string;
|
|
2758
|
-
/** Show percentage scale on left */
|
|
2759
|
-
showScale?: boolean;
|
|
2760
|
-
/** Show overall conversion rate at top */
|
|
2761
|
-
showOverallConversion?: boolean;
|
|
2762
|
-
/** Label text for overall conversion (for internationalization) */
|
|
2763
|
-
overallConversionLabel?: string;
|
|
2764
|
-
/** Optional external active stage identifier */
|
|
2765
|
-
activeStageId?: string | null;
|
|
2766
|
-
/** Callback when a stage is clicked */
|
|
2767
|
-
onStageClick?: (stage: FunnelStage) => void;
|
|
2768
|
-
/** Callback when a stage is hovered */
|
|
2769
|
-
onStageHover?: (stage: FunnelStage | null) => void;
|
|
2770
|
-
/** Additional className */
|
|
2771
|
-
className?: string;
|
|
2772
|
-
/** Inline styles */
|
|
2773
|
-
style?: React__default.CSSProperties;
|
|
2774
|
-
/** Accessible label */
|
|
2775
|
-
"aria-label"?: string;
|
|
2776
|
-
}
|
|
2777
|
-
declare const FunnelSeries: React__default.FC<FunnelSeriesProps>;
|
|
2778
|
-
|
|
2779
|
-
interface LineSeriesProps {
|
|
2780
|
-
data: BaseDataPoint[];
|
|
2781
|
-
color?: string;
|
|
2782
|
-
label?: string;
|
|
2783
|
-
strokeWidth?: number;
|
|
2784
|
-
/** CSS stroke-dasharray value (e.g. "4 2" for dotted, "8 4" for dashed) */
|
|
2785
|
-
strokeDasharray?: string;
|
|
2786
|
-
categoryColors?: Record<string, string>;
|
|
2787
|
-
categoryLabels?: Record<string, string>;
|
|
2788
|
-
/**
|
|
2789
|
-
* When set, break the line wherever consecutive points are spaced more than
|
|
2790
|
-
* this many ms apart (missing buckets / outages). Omit to connect across gaps.
|
|
2791
|
-
*/
|
|
2792
|
-
maxGapMs?: number;
|
|
2793
|
-
animate?: boolean;
|
|
2794
|
-
}
|
|
3148
|
+
type ChartSourceResolver = (source: StreamingChartSource) => ResolvedChartSource | null;
|
|
2795
3149
|
/**
|
|
2796
|
-
*
|
|
2797
|
-
*
|
|
2798
|
-
* Chart component for rendering line charts.
|
|
2799
|
-
* Displays data as a continuous line with customizable stroke width, color, and dash patterns.
|
|
2800
|
-
* When categoryColors are provided, contiguous line segments are colored by each segment
|
|
2801
|
-
* start point category while preserving tooltip and legend metadata from ChartContainer.
|
|
3150
|
+
* What a resolver hands back: the fetcher, plus anything it learned about the
|
|
3151
|
+
* data that the declaration could not state up front.
|
|
2802
3152
|
*/
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
interface PieDataPoint {
|
|
2806
|
-
/** Category label */
|
|
2807
|
-
label: string;
|
|
2808
|
-
/** Numeric value. Non-positive values take no arc — see `shareOf`. */
|
|
2809
|
-
value: number;
|
|
2810
|
-
/** Optional color override for this slice */
|
|
2811
|
-
color?: string;
|
|
2812
|
-
}
|
|
2813
|
-
interface PieChartProps {
|
|
2814
|
-
/** Array of data points with labels and values */
|
|
2815
|
-
data: PieDataPoint[];
|
|
2816
|
-
/** Width of the chart (auto-resizes to container if not provided) */
|
|
2817
|
-
width?: number;
|
|
2818
|
-
/** Height of the chart (auto-resizes to container if not provided) */
|
|
2819
|
-
height?: number;
|
|
3153
|
+
interface ResolvedChartSource {
|
|
2820
3154
|
/**
|
|
2821
|
-
*
|
|
2822
|
-
*
|
|
3155
|
+
* Fetches one slice. The renderer owns when and how often this is called.
|
|
3156
|
+
*
|
|
3157
|
+
* Typed structurally rather than as `FetchTile` so this file stays free of
|
|
3158
|
+
* the tile vocabulary in its public surface; it is the same function.
|
|
2823
3159
|
*/
|
|
2824
|
-
|
|
2825
|
-
/** Formatter for slice values (uses the standard chart formatting system) */
|
|
2826
|
-
yFormatter?: YFormatType;
|
|
2827
|
-
/** Show the label/value/share legend beside the pie (default true) */
|
|
2828
|
-
showLegend?: boolean;
|
|
2829
|
-
/** Show tooltip on hover (default true) */
|
|
2830
|
-
showTooltip?: boolean;
|
|
3160
|
+
fetchSlice: FetchTile;
|
|
2831
3161
|
/**
|
|
2832
|
-
*
|
|
2833
|
-
*
|
|
2834
|
-
*
|
|
3162
|
+
* The finest real spacing of the data, if the resolver discovered it.
|
|
3163
|
+
*
|
|
3164
|
+
* 🔴 This is an OUTPUT, not an input, and that is load-bearing. A source that
|
|
3165
|
+
* probes its own cadence only learns it after a response, and the renderer
|
|
3166
|
+
* deliberately re-picks its resolution when this arrives late — without that,
|
|
3167
|
+
* a chart stays pinned to the resolution its fallback guessed. Overrides
|
|
3168
|
+
* `StreamingChartSource.nativeMs` when both are present.
|
|
2835
3169
|
*/
|
|
2836
|
-
|
|
2837
|
-
/** Callback when a slice is hovered */
|
|
2838
|
-
onSliceHover?: (dataPoint: PieDataPoint | null, index: number | null) => void;
|
|
2839
|
-
/** Additional className */
|
|
2840
|
-
className?: string;
|
|
2841
|
-
/** Inline styles */
|
|
2842
|
-
style?: React__default.CSSProperties;
|
|
3170
|
+
nativeMs?: number;
|
|
2843
3171
|
/**
|
|
2844
|
-
*
|
|
2845
|
-
*
|
|
2846
|
-
* announces identically to a screen reader (ALL-2539, ALL-2715).
|
|
3172
|
+
* How many backend series one slice costs, for the renderer's fetch budget.
|
|
3173
|
+
* Defaults to the renderer's own default when omitted.
|
|
2847
3174
|
*/
|
|
2848
|
-
|
|
3175
|
+
costSeriesCount?: number;
|
|
3176
|
+
/**
|
|
3177
|
+
* How many underlying REQUESTS one `fetchSlice` call issues. Defaults to 1.
|
|
3178
|
+
*
|
|
3179
|
+
* 🔴 Distinct from `costSeriesCount`, and the two answer different questions.
|
|
3180
|
+
* That one is about volume — how much data a tier costs — and feeds the
|
|
3181
|
+
* overscan guard inside a single chart's ladder. This one is about
|
|
3182
|
+
* CONCURRENCY: how many requests hit the wire at once, which is what the
|
|
3183
|
+
* page-wide ceiling counts.
|
|
3184
|
+
*
|
|
3185
|
+
* They come apart wherever a resolver merges several loaders into one slice.
|
|
3186
|
+
* The grid cohort's role-split slice fetches net, consumption and generation
|
|
3187
|
+
* — three requests, charged one permit unless it says so, and twelve such
|
|
3188
|
+
* slices would then run 36 requests under a ceiling reporting 12.
|
|
3189
|
+
*
|
|
3190
|
+
* Only a resolver that fans out needs to set it; a slice that makes one
|
|
3191
|
+
* request should leave it alone.
|
|
3192
|
+
*/
|
|
3193
|
+
fetchesPerSlice?: number;
|
|
3194
|
+
/**
|
|
3195
|
+
* The Live/Static affordance, when this source can serve live updates.
|
|
3196
|
+
*
|
|
3197
|
+
* Omit it and no control renders at all — which is the correct reading of a
|
|
3198
|
+
* meter that is not in the live pilot, rather than a disabled button whose
|
|
3199
|
+
* reason nobody can act on.
|
|
3200
|
+
*/
|
|
3201
|
+
liveControl?: TiledTimeSeriesLiveControl;
|
|
3202
|
+
/**
|
|
3203
|
+
* The reader's committed camera position, reported as it changes.
|
|
3204
|
+
*
|
|
3205
|
+
* This is the upward half of the loop: a host discovering the meter's real
|
|
3206
|
+
* cadence needs to know which window is on screen and whether it is pinned to
|
|
3207
|
+
* the live edge, because the answer decides what it may probe for and whether
|
|
3208
|
+
* a refresh is even meaningful.
|
|
3209
|
+
*/
|
|
3210
|
+
onViewChange?: (view: TiledTimeSeriesView) => void;
|
|
3211
|
+
/** Keep an unanchored view advancing at Now. */
|
|
3212
|
+
followLatest?: boolean;
|
|
3213
|
+
/** Change to resume a navigation-paused view at Now, preserving its span. */
|
|
3214
|
+
followLatestKey?: string | number;
|
|
3215
|
+
/**
|
|
3216
|
+
* Whether automatic refreshes may run at all.
|
|
3217
|
+
*
|
|
3218
|
+
* 🔴 Defaults to TRUE when omitted, which is why a host that offers a
|
|
3219
|
+
* Live/Static control MUST set it. "Static" that still refreshes in the
|
|
3220
|
+
* background is the quiet kind of wrong: the button reads paused, the data
|
|
3221
|
+
* keeps moving, and nothing errors.
|
|
3222
|
+
*/
|
|
3223
|
+
refreshEnabled?: boolean;
|
|
3224
|
+
/**
|
|
3225
|
+
* Re-validate what is on screen without clearing the plot.
|
|
3226
|
+
*
|
|
3227
|
+
* Overrides `StreamingChartSource.refreshKey` when present, because a live
|
|
3228
|
+
* host derives this from a delivered signal rather than from the declaration.
|
|
3229
|
+
*/
|
|
3230
|
+
refreshKey?: string;
|
|
2849
3231
|
}
|
|
2850
3232
|
/**
|
|
2851
|
-
*
|
|
2852
|
-
*
|
|
2853
|
-
*
|
|
2854
|
-
*
|
|
2855
|
-
*
|
|
3233
|
+
* The same job as `ChartSourceResolver`, for sources that cannot be a function.
|
|
3234
|
+
*
|
|
3235
|
+
* ── Why this exists alongside the resolver ────────────────────────────────────
|
|
3236
|
+
* A resolver is called from inside a `useMemo`, which means it may not call
|
|
3237
|
+
* hooks. Most sources do not care. But a source that PROBES ITS OWN CADENCE
|
|
3238
|
+
* does: discovering the finest real spacing of a meter's data takes a query,
|
|
3239
|
+
* that query's result arrives after the first render, and `nativeMs` therefore
|
|
3240
|
+
* has to be able to change over the life of the chart. In the dashboard that
|
|
3241
|
+
* logic is already a hook (`useMeterUsageTileSource`) and is several hundred
|
|
3242
|
+
* lines of Apollo queries, abort handling and settle-state — none of which can
|
|
3243
|
+
* be flattened into a synchronous call, and none of which should be rewritten
|
|
3244
|
+
* to satisfy a type.
|
|
3245
|
+
*
|
|
3246
|
+
* So a host is a COMPONENT rather than a function. It renders, which is exactly
|
|
3247
|
+
* what buys it the right to hold hooks, and it hands back what it resolved
|
|
3248
|
+
* through a child function. The chart does not care which half of the contract
|
|
3249
|
+
* answered it.
|
|
3250
|
+
*
|
|
3251
|
+
* 🔴 This is a COMPONENT TYPE. `StreamingChart` renders it as `<Host …>`, and
|
|
3252
|
+
* that is load-bearing rather than stylistic: a host invoked as a plain function
|
|
3253
|
+
* would have its hooks counted against the CALLER's hook list, and since a host
|
|
3254
|
+
* is optional that list would change length whenever one is installed or
|
|
3255
|
+
* removed. Holding hooks is the whole job here, so the host must own a fiber.
|
|
3256
|
+
* Do not "simplify" the render back into a call.
|
|
3257
|
+
*
|
|
3258
|
+
* 🔴 The two "no answer yet" cases are signalled DIFFERENTLY, and conflating
|
|
3259
|
+
* them is a real bug:
|
|
3260
|
+
* - **still resolving** → render nothing (return `null`) WITHOUT calling
|
|
3261
|
+
* `children`. The chart keeps its own loading state.
|
|
3262
|
+
* - **not my ref** → call `children(null)`. The chart falls through to any
|
|
3263
|
+
* plain resolver installed alongside, then to its empty state.
|
|
3264
|
+
*
|
|
3265
|
+
* A probing source that used `children(null)` for "still resolving" would flash
|
|
3266
|
+
* "No data source" for the length of its first query before drawing.
|
|
3267
|
+
*/
|
|
3268
|
+
type ChartSourceHost = (props: {
|
|
3269
|
+
source: StreamingChartSource;
|
|
3270
|
+
children: (resolved: ResolvedChartSource | null) => React$1.ReactNode;
|
|
3271
|
+
}) => React$1.ReactNode;
|
|
3272
|
+
/** Narrowing helper — a source that streams rather than carrying its data. */
|
|
3273
|
+
declare function isStreamingSource(source: ChartSource | undefined): source is StreamingChartSource;
|
|
3274
|
+
/**
|
|
3275
|
+
* One ISO-8601 instant, or `null`.
|
|
3276
|
+
*
|
|
3277
|
+
* ── 🔴 Why `Date.parse` alone is not enough ───────────────────────────────────
|
|
3278
|
+
* Three of its behaviours are wrong for a STORED anchor, and all three fail
|
|
3279
|
+
* quietly:
|
|
3280
|
+
*
|
|
3281
|
+
* - **A missing timezone is read as the VIEWER's.** `"2026-09-01T12:00:00"`
|
|
3282
|
+
* parses to a different real instant in every timezone, so one saved
|
|
3283
|
+
* composition anchors two readers to two different moments — and each sees
|
|
3284
|
+
* a chart that looks entirely correct.
|
|
3285
|
+
* - **Impossible dates are normalised.** `"2026-02-30"` silently becomes
|
|
3286
|
+
* March 2 rather than failing.
|
|
3287
|
+
* - **Non-ISO strings are accepted.** `"March 1 2026"` parses fine, so a
|
|
3288
|
+
* declaration can drift from the format the contract promises.
|
|
3289
|
+
*
|
|
3290
|
+
* An absolute instant has to be unambiguous, so this requires an explicit `Z`
|
|
3291
|
+
* or numeric offset and rejects anything the calendar does not contain. Shared
|
|
3292
|
+
* by the renderer, the block schema and the host so all three agree on what
|
|
3293
|
+
* counts as an anchor — a value one accepted and another rejected would pin the
|
|
3294
|
+
* chart while leaving live mode on, which is the worst of both.
|
|
3295
|
+
*/
|
|
3296
|
+
declare function parseInstant(value: unknown): Date | null;
|
|
3297
|
+
|
|
3298
|
+
interface StreamingChartProps {
|
|
3299
|
+
source: StreamingChartSource;
|
|
3300
|
+
title: string;
|
|
3301
|
+
children: ReactNode;
|
|
3302
|
+
yFormatter?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["yFormatter"];
|
|
3303
|
+
yDomain?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["yDomain"];
|
|
3304
|
+
referenceLines?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["referenceLines"];
|
|
3305
|
+
headerActions?: ReactNode;
|
|
3306
|
+
height?: number;
|
|
3307
|
+
hint?: string;
|
|
3308
|
+
emptyState?: {
|
|
3309
|
+
title: string;
|
|
3310
|
+
description: string;
|
|
3311
|
+
};
|
|
3312
|
+
tierToWindow?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["tierToWindow"];
|
|
3313
|
+
windowSizeOptions?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["windowSizeOptions"];
|
|
3314
|
+
presetRanges?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["presetRanges"];
|
|
3315
|
+
/** Built-in "latest data in view" readout, selected by name. */
|
|
3316
|
+
latestDataReadout?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["latestDataReadout"];
|
|
3317
|
+
/** Which streams that readout inspects, when the defaults do not fit. */
|
|
3318
|
+
latestDataSeriesKeys?: string[];
|
|
3319
|
+
/**
|
|
3320
|
+
* Extra plots stacked below this one, sharing its camera and its controls.
|
|
3321
|
+
*
|
|
3322
|
+
* Each declares its OWN streaming source — a different ref, a different
|
|
3323
|
+
* ladder, its own cost — and each resolves through the same host, because a
|
|
3324
|
+
* stack of telemetry panels is several streams of one node rather than
|
|
3325
|
+
* several series of one stream.
|
|
3326
|
+
*
|
|
3327
|
+
* Omit it and this is the single-plot chart it has always been.
|
|
3328
|
+
*/
|
|
3329
|
+
panels?: StreamingChartPanel[];
|
|
3330
|
+
}
|
|
3331
|
+
/**
|
|
3332
|
+
* One extra plot in a streaming stack, declared the same way the primary is.
|
|
2856
3333
|
*
|
|
2857
|
-
*
|
|
2858
|
-
*
|
|
2859
|
-
*
|
|
3334
|
+
* `children` is the same `seriesKey`-naming form the primary takes, for the
|
|
3335
|
+
* same reason: a block carries JSON, so a panel names its streams rather than
|
|
3336
|
+
* holding a render-prop.
|
|
2860
3337
|
*
|
|
2861
|
-
*
|
|
2862
|
-
*
|
|
2863
|
-
* <
|
|
2864
|
-
*
|
|
2865
|
-
* { label: "Online", value: 127 },
|
|
2866
|
-
* { label: "Offline", value: 23 },
|
|
2867
|
-
* ]}
|
|
2868
|
-
* aria-label="Devices by status"
|
|
2869
|
-
* />
|
|
2870
|
-
* ```
|
|
3338
|
+
* Module-private: callers reach this shape through
|
|
3339
|
+
* `ChartContainer`'s `streaming.panels`, which derives it from
|
|
3340
|
+
* `ComponentProps<typeof StreamingChart>`. An exported name nothing imports is
|
|
3341
|
+
* what knip fails CI on, and the derivation means there is nothing to import.
|
|
2871
3342
|
*/
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
3343
|
+
interface StreamingChartPanel {
|
|
3344
|
+
key: string;
|
|
3345
|
+
title: string;
|
|
3346
|
+
source: StreamingChartSource;
|
|
3347
|
+
children: ReactNode;
|
|
3348
|
+
yFormatter?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["yFormatter"];
|
|
3349
|
+
yDomain?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["yDomain"];
|
|
3350
|
+
referenceLines?: React.ComponentProps<typeof TiledTimeSeriesExplorer>["referenceLines"];
|
|
3351
|
+
height?: number;
|
|
2878
3352
|
}
|
|
2879
3353
|
/**
|
|
2880
|
-
*
|
|
2881
|
-
*
|
|
2882
|
-
*
|
|
2883
|
-
*
|
|
2884
|
-
*
|
|
3354
|
+
* Draws a chart whose data streams in as the reader moves through it.
|
|
3355
|
+
*
|
|
3356
|
+
* ── What this is, and what it is not ──────────────────────────────────────────
|
|
3357
|
+
* This is the streaming BRANCH of `ChartContainer`, not a component callers
|
|
3358
|
+
* reach for directly. `ChartContainer` picks it when handed a streaming source,
|
|
3359
|
+
* which is the whole point: the choice of loading strategy stops being a choice
|
|
3360
|
+
* of import.
|
|
3361
|
+
*
|
|
3362
|
+
* It delegates to `TiledTimeSeriesExplorer` rather than reimplementing it. That
|
|
3363
|
+
* engine already owns the camera, the resolution ladder, the fetch budget and
|
|
3364
|
+
* the slice cache, and all of that is correct — the problem was never its
|
|
3365
|
+
* behaviour, only that it was reachable by one import and not by a prop. So this
|
|
3366
|
+
* file is an adapter, deliberately thin, and the convergence of the two render
|
|
3367
|
+
* engines is a later step that this one does not prejudge.
|
|
3368
|
+
*
|
|
3369
|
+
* ── The one translation it performs ───────────────────────────────────────────
|
|
3370
|
+
* The explorer takes a render-prop (`{series} => ReactNode`) — a function, which
|
|
3371
|
+
* is exactly what a block cannot express. So series children name their stream
|
|
3372
|
+
* with `seriesKey` and this clones them with the resolved points. Declarative in,
|
|
3373
|
+
* render-prop out, with the function living here instead of at every call site.
|
|
2885
3374
|
*/
|
|
2886
|
-
declare function
|
|
3375
|
+
declare function StreamingChart(props: StreamingChartProps): react_jsx_runtime.JSX.Element;
|
|
2887
3376
|
|
|
2888
|
-
interface
|
|
2889
|
-
startMs: number;
|
|
2890
|
-
endMs: number;
|
|
2891
|
-
}
|
|
2892
|
-
interface TiledTimeSeriesChartProps {
|
|
2893
|
-
/** AreaSeries / LineSeries children. */
|
|
3377
|
+
interface ChartContainerProps {
|
|
2894
3378
|
children: React__default.ReactNode;
|
|
3379
|
+
parentWidth: number;
|
|
3380
|
+
parentHeight: number;
|
|
2895
3381
|
/**
|
|
2896
3382
|
* Accessible name for the chart, rendered as the SVG `<title>`. Required so
|
|
2897
3383
|
* that screen readers announce what each chart shows; every chart needs its
|
|
2898
3384
|
* own, and there is deliberately no default to fall back to.
|
|
2899
3385
|
*/
|
|
2900
3386
|
title: string;
|
|
2901
|
-
/**
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
viewport: TiledTimeSeriesChartViewport;
|
|
2907
|
-
/** Optional clamp for pan gestures. New viewports stay within these bounds. */
|
|
2908
|
-
panBounds?: TiledTimeSeriesChartViewport;
|
|
2909
|
-
/** Resolve current pan bounds at gesture commit without updating the plotted viewport. */
|
|
2910
|
-
getPanBounds?: (() => TiledTimeSeriesChartViewport) | undefined;
|
|
2911
|
-
/** Committed once per settled gesture (drag/wheel), with the new ms viewport. */
|
|
2912
|
-
onViewportChange: (viewport: TiledTimeSeriesChartViewport) => void;
|
|
2913
|
-
/** Measured PLOT width (after margins), for level-of-detail / tile resolution. */
|
|
2914
|
-
onPlotWidthChange?: (widthPx: number) => void;
|
|
3387
|
+
/**
|
|
3388
|
+
* Y-axis formatter using the main formatting system
|
|
3389
|
+
* Accepts ComponentFormatter types (string shorthand or full options)
|
|
3390
|
+
* @example "energy", "currency", { type: "temperature", unit: "F" }
|
|
3391
|
+
*/
|
|
2915
3392
|
yFormatter?: YFormatType;
|
|
2916
|
-
/**
|
|
2917
|
-
|
|
2918
|
-
|
|
3393
|
+
/**
|
|
3394
|
+
* Explicit y-axis domain `[min, max]`. Overrides the default behavior of
|
|
3395
|
+
* anchoring the axis at zero for all-positive data. Use for deviation-style
|
|
3396
|
+
* metrics (voltage ~240V, frequency ~60Hz, power factor ~1.0) where the
|
|
3397
|
+
* signal is variation around a nominal value, not magnitude from zero.
|
|
3398
|
+
*/
|
|
3399
|
+
yDomain?: [number, number];
|
|
3400
|
+
/**
|
|
3401
|
+
* Horizontal reference lines drawn across the plot at fixed y-values — e.g.
|
|
3402
|
+
* regulatory limits (ANSI voltage bounds), targets, or thresholds. Rendered
|
|
3403
|
+
* as dashed lines with an optional right-aligned label.
|
|
3404
|
+
*/
|
|
2919
3405
|
referenceLines?: {
|
|
2920
3406
|
value: number;
|
|
2921
3407
|
label?: string;
|
|
2922
3408
|
color?: string;
|
|
2923
3409
|
}[];
|
|
3410
|
+
isLoading?: boolean;
|
|
3411
|
+
/** Enable scroll-to-zoom and pan on main chart */
|
|
3412
|
+
enableZoom?: boolean;
|
|
3413
|
+
/** Show brush overview chart below */
|
|
3414
|
+
enableBrush?: boolean;
|
|
3415
|
+
/** Height of brush chart (default: 60px) */
|
|
3416
|
+
brushHeight?: number;
|
|
2924
3417
|
/**
|
|
2925
|
-
*
|
|
2926
|
-
*
|
|
2927
|
-
*
|
|
3418
|
+
* Notification callback when the zoom range changes.
|
|
3419
|
+
*
|
|
3420
|
+
* Fires on every transition, including the initial `null` render. Use this
|
|
3421
|
+
* for one-way "observe the zoom" plumbing (e.g. driving an external panel
|
|
3422
|
+
* showing the current window).
|
|
3423
|
+
*
|
|
3424
|
+
* In controlled-zoom mode (when the `zoomDomain` prop is provided), this is
|
|
3425
|
+
* ALSO the change callback the parent uses to update its own state —
|
|
3426
|
+
* mirroring the `onHiddenSeriesChange` pattern. The parent should treat the
|
|
3427
|
+
* incoming `domain` argument as the next value to commit to its state.
|
|
2928
3428
|
*/
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
/**
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
tierId: string;
|
|
2973
|
-
index: number;
|
|
2974
|
-
startMs: number;
|
|
2975
|
-
endMs: number;
|
|
2976
|
-
};
|
|
2977
|
-
/** Data a tile carries. `band` optional → engine is metric-agnostic.
|
|
2978
|
-
* `lines` carries additional named series (e.g. export/net flows) that
|
|
2979
|
-
* stitch with the same dedup-by-timestamp semantics as `line`. */
|
|
2980
|
-
type TileData = {
|
|
2981
|
-
line: BaseDataPoint[];
|
|
2982
|
-
band?: BaseDataPoint[];
|
|
2983
|
-
lines?: Record<string, BaseDataPoint[]>;
|
|
2984
|
-
};
|
|
2985
|
-
/** Injected loader: one tile = one bounded fetch. */
|
|
2986
|
-
type FetchTileContext = {
|
|
2987
|
-
reason: "load" | "refresh";
|
|
2988
|
-
/** Check before adapter side effects such as shared-cache writes. */
|
|
2989
|
-
isCurrent?: () => boolean;
|
|
2990
|
-
};
|
|
2991
|
-
type FetchTile = (tier: Tier, startMs: number, endMs: number, signal: AbortSignal, context?: FetchTileContext) => Promise<TileData>;
|
|
2992
|
-
declare const tileKey: (tierId: string, index: number) => string;
|
|
2993
|
-
declare const hasTileData: (data?: TileData) => boolean;
|
|
2994
|
-
|
|
3429
|
+
onZoomChange?: (domain: [Date, Date] | null) => void;
|
|
3430
|
+
/**
|
|
3431
|
+
* Controlled zoom domain. When provided, ChartContainer uses this value
|
|
3432
|
+
* instead of its internal useState (controlled mode). Mirrors the
|
|
3433
|
+
* `hiddenSeriesLabels` pattern — useful when an inline + dialog instance
|
|
3434
|
+
* pair need to share zoom state (see BOLT-1160 Phase 3 / SiteEnergyCharts).
|
|
3435
|
+
*
|
|
3436
|
+
* Pass `null` for "full domain, no zoom". Omit entirely to use the default
|
|
3437
|
+
* uncontrolled behaviour (ChartContainer manages its own zoom state).
|
|
3438
|
+
*
|
|
3439
|
+
* When controlled, the visx Zoom transform is kept in sync with the
|
|
3440
|
+
* incoming prop via an internal effect, so brush + scroll-zoom + reset
|
|
3441
|
+
* all continue to work — they just route the new domain through
|
|
3442
|
+
* `onZoomChange` to the parent, which echoes it back via the prop.
|
|
3443
|
+
*/
|
|
3444
|
+
zoomDomain?: [Date, Date] | null;
|
|
3445
|
+
/**
|
|
3446
|
+
* Controlled set of hidden series labels. When provided, ChartContainer
|
|
3447
|
+
* uses this value instead of its internal useState (controlled mode).
|
|
3448
|
+
* Omit to use the default uncontrolled behaviour.
|
|
3449
|
+
*/
|
|
3450
|
+
hiddenSeriesLabels?: Set<string>;
|
|
3451
|
+
/**
|
|
3452
|
+
* Called when the user toggles a legend item in controlled mode.
|
|
3453
|
+
* Accepts either the next Set directly or a functional updater
|
|
3454
|
+
* `(prev: Set<string>) => Set<string>` — the latter lets parents compose
|
|
3455
|
+
* rapid sequential toggles correctly (each sees the latest prev rather than
|
|
3456
|
+
* the stale render-closure value). Only called when `hiddenSeriesLabels`
|
|
3457
|
+
* prop is provided.
|
|
3458
|
+
*/
|
|
3459
|
+
onHiddenSeriesChange?: (updater: Set<string> | ((prev: Set<string>) => Set<string>)) => void;
|
|
3460
|
+
/**
|
|
3461
|
+
* Hide the bottom bar (legend + export button). Useful for small/embedded
|
|
3462
|
+
* charts — e.g. inline sparklines — where the legend and export affordance
|
|
3463
|
+
* add unwanted chrome. Defaults to false (bottom bar shown) to preserve
|
|
3464
|
+
* existing behavior for all current consumers.
|
|
3465
|
+
*/
|
|
3466
|
+
hideBottomBar?: boolean;
|
|
3467
|
+
/** Trailing actions rendered in the `ChartHeader`, opposite the title. */
|
|
3468
|
+
headerActions?: React__default.ReactNode;
|
|
3469
|
+
/** Control cluster rendered in the `ChartHeader` — `TimeControls` today. */
|
|
3470
|
+
headerControls?: React__default.ReactNode;
|
|
3471
|
+
}
|
|
2995
3472
|
/**
|
|
2996
|
-
*
|
|
2997
|
-
*
|
|
3473
|
+
* Default plot-body height for a chart block, in px. Pairs with `CHART_HEADER_HEIGHT`.
|
|
3474
|
+
*
|
|
3475
|
+
* It lives here rather than in each block because four blocks had four private copies of `280`
|
|
3476
|
+
* that happened to agree, with nothing enforcing the agreement — a design change to chart height
|
|
3477
|
+
* was a four-file diff where three files could be forgotten and nothing failed. This is `P10 R-23`.
|
|
3478
|
+
*
|
|
3479
|
+
* A block that needs a different body height passes its own; this is the value it starts from.
|
|
2998
3480
|
*/
|
|
2999
|
-
declare
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3481
|
+
declare const DEFAULT_CHART_HEIGHT = 280;
|
|
3482
|
+
type ChartContainerWithSourceProps = Omit<ChartContainerProps, "parentWidth" | "parentHeight" | "yDomain"> & {
|
|
3483
|
+
parentWidth?: number;
|
|
3484
|
+
parentHeight?: number;
|
|
3485
|
+
/**
|
|
3486
|
+
* Explicit y-axis domain — a fixed `[min, max]`, or, while STREAMING, a
|
|
3487
|
+
* function of the points currently loaded.
|
|
3488
|
+
*
|
|
3489
|
+
* ── 🔴 Why streaming needs the callback form ──────────────────────────────
|
|
3490
|
+
* A fed chart's caller knows every value it is about to draw, so a tuple is
|
|
3491
|
+
* a complete answer. A streaming chart's caller knows NONE of them: its
|
|
3492
|
+
* points do not exist until the reader looks at a window. A tuple computed
|
|
3493
|
+
* from what the declaration could see — thresholds and bounds, since
|
|
3494
|
+
* `series` is empty by construction — is then treated as authoritative by
|
|
3495
|
+
* `TiledTimeSeriesChart`, and every fetched value outside it is clipped to
|
|
3496
|
+
* the plot edge rather than widening the axis.
|
|
3497
|
+
*
|
|
3498
|
+
* That failure is the quiet kind: the chart draws, the threshold line sits
|
|
3499
|
+
* where it should, and an overload above it is simply not visible. Which is
|
|
3500
|
+
* the exact reading a threshold exists to prevent.
|
|
3501
|
+
*
|
|
3502
|
+
* `TiledTimeSeriesChart` has always accepted the callback; only this type
|
|
3503
|
+
* kept it out of reach. The fed engine below still takes the tuple alone —
|
|
3504
|
+
* see the guard in `ChartContainer` — because its own scaling already sees
|
|
3505
|
+
* all of the data.
|
|
3506
|
+
*/
|
|
3507
|
+
yDomain?: [number, number] | ((data: BaseDataPoint[]) => [number, number]);
|
|
3508
|
+
/**
|
|
3509
|
+
* Where the data comes from. Omit it — or pass `{ kind: "inline" }` — and this
|
|
3510
|
+
* is the chart it has always been, drawing the `data` its series children
|
|
3511
|
+
* carry. Pass a streaming source and the same children instead name which
|
|
3512
|
+
* stream each draws, and the chart fetches history as the reader moves.
|
|
3513
|
+
*
|
|
3514
|
+
* See `ChartSource`. The declaration is JSON, so a BLOCK can carry it; the
|
|
3515
|
+
* fetcher comes from `ChartSourceProvider` at the render site.
|
|
3516
|
+
*/
|
|
3517
|
+
source?: ChartSource;
|
|
3518
|
+
/**
|
|
3519
|
+
* Chart configuration that only means anything while streaming.
|
|
3520
|
+
*
|
|
3521
|
+
* ── 🔴 Why these are grouped rather than flattened ────────────────────────────
|
|
3522
|
+
* A resolution ladder, a window-size picker and a preset list describe a chart
|
|
3523
|
+
* that GOES AND GETS more data as you move. A fed chart has one window — the
|
|
3524
|
+
* one its caller handed it — so on the inline path these props have no
|
|
3525
|
+
* meaning at all, not merely no effect. Hoisting them onto
|
|
3526
|
+
* `ChartContainerProps` would put six inert options on every chart in the
|
|
3527
|
+
* platform and invite exactly the bug this grouping prevents: setting
|
|
3528
|
+
* `windowSizeOptions` on a fed chart and wondering why the picker never
|
|
3529
|
+
* appears.
|
|
3530
|
+
*
|
|
3531
|
+
* Grouping also keeps the split honest in the other direction. `hint` and
|
|
3532
|
+
* `height` DO have inline meanings elsewhere in the codebase (a block's
|
|
3533
|
+
* caption, a reserved box), and flattening them here would silently overload
|
|
3534
|
+
* one name with two behaviours depending on a sibling prop. Under `streaming`
|
|
3535
|
+
* they are unambiguous: `streaming.hint` is the explorer's how-to-drive line,
|
|
3536
|
+
* `streaming.height` is the explorer's plot height.
|
|
3537
|
+
*
|
|
3538
|
+
* Everything here is JSON-safe, so a block can declare it — which is the
|
|
3539
|
+
* point. Without it a streaming block draws with a generic window ladder and
|
|
3540
|
+
* no meaningful presets: a chart that renders, looks plausible, and is wrong
|
|
3541
|
+
* at exactly the zoom levels people use.
|
|
3542
|
+
*/
|
|
3543
|
+
streaming?: StreamingChartConfig;
|
|
3050
3544
|
};
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3545
|
+
/**
|
|
3546
|
+
* The streaming-only half of a chart's configuration.
|
|
3547
|
+
*
|
|
3548
|
+
* Every field is optional and JSON-safe. `StreamingChart` already accepts all
|
|
3549
|
+
* of them; this type is what lets a caller — and therefore a block — express
|
|
3550
|
+
* them through `ChartContainer` rather than by importing the tiled engine
|
|
3551
|
+
* directly.
|
|
3552
|
+
*/
|
|
3553
|
+
type StreamingChartConfig = {
|
|
3554
|
+
/** Which window size each resolution tier maps to, e.g. `{ "5m": "FIVE_MINUTES" }`. */
|
|
3555
|
+
tierToWindow?: React__default.ComponentProps<typeof StreamingChart>["tierToWindow"];
|
|
3556
|
+
/** The window sizes offered in the picker, in ladder order. */
|
|
3557
|
+
windowSizeOptions?: React__default.ComponentProps<typeof StreamingChart>["windowSizeOptions"];
|
|
3558
|
+
/** Jump-to-window presets, e.g. Last 24 hours / Last 7 days. */
|
|
3559
|
+
presetRanges?: React__default.ComponentProps<typeof StreamingChart>["presetRanges"];
|
|
3560
|
+
/**
|
|
3561
|
+
* How to DRIVE the chart, shown under the plot — panning, zooming, presets.
|
|
3562
|
+
* Distinct from a block's `description`, which says what is plotted.
|
|
3563
|
+
*/
|
|
3564
|
+
hint?: string;
|
|
3565
|
+
/** Shown when the source returns no readings for the visible window. */
|
|
3566
|
+
emptyState?: {
|
|
3567
|
+
title: string;
|
|
3568
|
+
description: string;
|
|
3569
|
+
};
|
|
3570
|
+
/**
|
|
3571
|
+
* Plot height in px. Omit to fill the box the caller reserved, which is what
|
|
3572
|
+
* a block inside a card wants; see the `fitParent` note in `StreamingChart`.
|
|
3573
|
+
*/
|
|
3574
|
+
height?: number;
|
|
3575
|
+
/**
|
|
3576
|
+
* Show a built-in "latest data in view" readout beside the resolution line.
|
|
3577
|
+
*
|
|
3578
|
+
* Named rather than rendered, so a chart driven from stored JSON can have it:
|
|
3579
|
+
* `single` reads the primary stream, `band` a net band plus its average line,
|
|
3580
|
+
* `pair` an import/export pair.
|
|
3581
|
+
*/
|
|
3582
|
+
latestDataReadout?: React__default.ComponentProps<typeof StreamingChart>["latestDataReadout"];
|
|
3583
|
+
/** Which streams that readout inspects, when the per-kind defaults do not fit. */
|
|
3584
|
+
latestDataSeriesKeys?: string[];
|
|
3585
|
+
/**
|
|
3586
|
+
* Extra plots stacked below this chart, on its camera and its controls.
|
|
3587
|
+
*
|
|
3588
|
+
* For a view that is several streams of ONE thing — a node's SCADA metric
|
|
3589
|
+
* groups, say — where the reader picks a window once and every metric answers
|
|
3590
|
+
* for that window. Each panel names its own source and its own series; the
|
|
3591
|
+
* window, presets, resolution and reset stay singular above them.
|
|
3592
|
+
*
|
|
3593
|
+
* Streaming only, like everything else in this group: a fed chart has one
|
|
3594
|
+
* window handed to it, so there is no shared camera for panels to share.
|
|
3595
|
+
*/
|
|
3596
|
+
panels?: React__default.ComponentProps<typeof StreamingChart>["panels"];
|
|
3060
3597
|
};
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3598
|
+
/**
|
|
3599
|
+
* Main chart wrapper. Provides context and layout for chart visualizations, and
|
|
3600
|
+
* — since the `source` prop — owns the choice between holding data and
|
|
3601
|
+
* streaming it.
|
|
3602
|
+
*
|
|
3603
|
+
* ── 🔴 Why the streaming branch is a sibling, not a mode ──────────────────────
|
|
3604
|
+
* `VisXChartContainer` below reads `child.props.data` synchronously while it
|
|
3605
|
+
* renders, and its whole 1,300 lines are built on the data already being there.
|
|
3606
|
+
* Threading async loading THROUGH that would put every chart in the platform on
|
|
3607
|
+
* a changed code path to serve the few that stream — and the failure that
|
|
3608
|
+
* invites is the quiet kind: charts still render, just subtly wrong.
|
|
3609
|
+
*
|
|
3610
|
+
* So the branch is here, ABOVE the measured component, and it is exhaustive: a
|
|
3611
|
+
* chart with no streaming source never reaches a line of new code. That is a
|
|
3612
|
+
* property a reviewer can check by reading this function rather than trusting a
|
|
3613
|
+
* test, and it is deliberately structural rather than conventional.
|
|
3614
|
+
*
|
|
3615
|
+
* Folding the two engines together is worth doing, but it is a separate change
|
|
3616
|
+
* with its own risk; this one only makes both reachable through one prop.
|
|
3617
|
+
*/
|
|
3618
|
+
declare const ChartContainer: React__default.FC<ChartContainerWithSourceProps>;
|
|
3065
3619
|
|
|
3066
3620
|
/**
|
|
3067
|
-
*
|
|
3068
|
-
* Matches GraphQL WindowSize enum
|
|
3621
|
+
* Event marker type — shared by ChartEventMarkers and ChartEventSpans.
|
|
3069
3622
|
*/
|
|
3070
|
-
type
|
|
3623
|
+
type EventMarkerType = "command" | "alert" | "info" | "success" | "warning" | "error";
|
|
3071
3624
|
/**
|
|
3072
|
-
*
|
|
3625
|
+
* Get the resolved color for a given event marker type.
|
|
3626
|
+
* Uses getResolvedColor to ensure CSS variables work in SVG context.
|
|
3073
3627
|
*/
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
before: Date;
|
|
3077
|
-
}
|
|
3628
|
+
declare function getEventColor(type: EventMarkerType | undefined): string;
|
|
3629
|
+
|
|
3078
3630
|
/**
|
|
3079
|
-
*
|
|
3631
|
+
* Event marker data point
|
|
3080
3632
|
*/
|
|
3081
|
-
interface
|
|
3082
|
-
|
|
3633
|
+
interface EventMarker {
|
|
3634
|
+
/**
|
|
3635
|
+
* Event timestamp
|
|
3636
|
+
*/
|
|
3637
|
+
timestamp: Date;
|
|
3638
|
+
/**
|
|
3639
|
+
* Event label/name
|
|
3640
|
+
*/
|
|
3083
3641
|
label: string;
|
|
3084
|
-
|
|
3642
|
+
/**
|
|
3643
|
+
* Optional event type for styling
|
|
3644
|
+
*/
|
|
3645
|
+
type?: EventMarkerType;
|
|
3646
|
+
/**
|
|
3647
|
+
* Optional per-marker color override; takes precedence over the component-level color prop
|
|
3648
|
+
*/
|
|
3649
|
+
color?: string;
|
|
3650
|
+
/**
|
|
3651
|
+
* Optional metadata to display in tooltip
|
|
3652
|
+
*/
|
|
3653
|
+
metadata?: Record<string, string | number>;
|
|
3654
|
+
}
|
|
3655
|
+
interface ChartEventMarkersProps {
|
|
3656
|
+
/**
|
|
3657
|
+
* Array of event markers to display
|
|
3658
|
+
*/
|
|
3659
|
+
events: EventMarker[];
|
|
3660
|
+
/**
|
|
3661
|
+
* Marker color for every event that does not carry its own `color`
|
|
3662
|
+
* (defaults to a theme-aware color per event `type`)
|
|
3663
|
+
*/
|
|
3664
|
+
color?: string;
|
|
3665
|
+
/**
|
|
3666
|
+
* Whether to show labels above markers
|
|
3667
|
+
* @default false
|
|
3668
|
+
*/
|
|
3669
|
+
showLabels?: boolean;
|
|
3085
3670
|
}
|
|
3086
3671
|
/**
|
|
3087
|
-
*
|
|
3672
|
+
* ChartEventMarkers
|
|
3673
|
+
*
|
|
3674
|
+
* Renders vertical lines with markers for events (e.g., commands) on a chart.
|
|
3675
|
+
* Must be used as a child of ChartContainer to access chart context.
|
|
3676
|
+
*
|
|
3677
|
+
* @example
|
|
3678
|
+
* ```tsx
|
|
3679
|
+
* <ChartContainer title="Device power">
|
|
3680
|
+
* <AreaSeries data={data} label="Power" />
|
|
3681
|
+
* <ChartEventMarkers
|
|
3682
|
+
* events={[
|
|
3683
|
+
* { timestamp: new Date('2024-01-01T10:00:00Z'), label: 'Command sent', type: 'command' },
|
|
3684
|
+
* { timestamp: new Date('2024-01-01T12:00:00Z'), label: 'Alert triggered', type: 'alert' }
|
|
3685
|
+
* ]}
|
|
3686
|
+
* />
|
|
3687
|
+
* </ChartContainer>
|
|
3688
|
+
* ```
|
|
3088
3689
|
*/
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
label: string;
|
|
3092
|
-
}
|
|
3690
|
+
declare function ChartEventMarkers({ events, color, showLabels }: ChartEventMarkersProps): react_jsx_runtime.JSX.Element | null;
|
|
3691
|
+
|
|
3093
3692
|
/**
|
|
3094
|
-
*
|
|
3693
|
+
* A time span to render as a translucent highlight band on a chart.
|
|
3095
3694
|
*/
|
|
3096
|
-
interface
|
|
3695
|
+
interface EventSpan {
|
|
3696
|
+
/** Start of the span */
|
|
3697
|
+
start: Date;
|
|
3698
|
+
/** End of the span */
|
|
3699
|
+
end: Date;
|
|
3700
|
+
/** Human-readable label shown in tooltip */
|
|
3701
|
+
label: string;
|
|
3702
|
+
/** Optional type for color coding */
|
|
3703
|
+
type?: EventMarkerType;
|
|
3704
|
+
/** Optional per-span color override; takes precedence over the component-level color prop */
|
|
3705
|
+
color?: string;
|
|
3706
|
+
/** Optional metadata to display in tooltip */
|
|
3707
|
+
metadata?: Record<string, string | number>;
|
|
3708
|
+
}
|
|
3709
|
+
interface ChartEventSpansProps {
|
|
3097
3710
|
/**
|
|
3098
|
-
*
|
|
3711
|
+
* Array of event spans to render as translucent bands.
|
|
3099
3712
|
*/
|
|
3100
|
-
|
|
3713
|
+
spans: EventSpan[];
|
|
3101
3714
|
/**
|
|
3102
|
-
*
|
|
3103
|
-
* came from choosing a preset (vs. the calendar picker).
|
|
3715
|
+
* Override fill opacity (default 0.25). Hover state doubles this up to a cap.
|
|
3104
3716
|
*/
|
|
3105
|
-
|
|
3106
|
-
presetId?: string;
|
|
3107
|
-
}) => void;
|
|
3717
|
+
opacity?: number;
|
|
3108
3718
|
/**
|
|
3109
|
-
*
|
|
3719
|
+
* Override fill color for all spans (defaults to getEventColor(span.type)).
|
|
3110
3720
|
*/
|
|
3111
|
-
|
|
3721
|
+
color?: string;
|
|
3722
|
+
}
|
|
3723
|
+
/**
|
|
3724
|
+
* ChartEventSpans
|
|
3725
|
+
*
|
|
3726
|
+
* Renders translucent rectangular bands representing time spans (e.g., scheduled command windows)
|
|
3727
|
+
* on a chart. Must be used as a child of ChartContainer to access chart context.
|
|
3728
|
+
*
|
|
3729
|
+
* Renders BEFORE ChartEventMarkers so the vertical marker lines appear on top of the span bands.
|
|
3730
|
+
*
|
|
3731
|
+
* @example
|
|
3732
|
+
* ```tsx
|
|
3733
|
+
* <ChartContainer title="Device power">
|
|
3734
|
+
* <LineSeries data={data} label="Power" />
|
|
3735
|
+
* <ChartEventSpans
|
|
3736
|
+
* spans={[
|
|
3737
|
+
* { start: new Date('2024-01-01T12:00:00Z'), end: new Date('2024-01-01T14:00:00Z'), label: 'Scheduled window', type: 'command' }
|
|
3738
|
+
* ]}
|
|
3739
|
+
* />
|
|
3740
|
+
* <ChartEventMarkers events={markers} />
|
|
3741
|
+
* </ChartContainer>
|
|
3742
|
+
* ```
|
|
3743
|
+
*/
|
|
3744
|
+
declare function ChartEventSpans({ spans, opacity, color }: ChartEventSpansProps): react_jsx_runtime.JSX.Element | null;
|
|
3745
|
+
|
|
3746
|
+
/**
|
|
3747
|
+
* The height the header is assumed to claim before it has been measured, in px.
|
|
3748
|
+
*
|
|
3749
|
+
* This was once the whole story — a constant both engines subtracted from the
|
|
3750
|
+
* measured parent height. `TimeControls` ended that: it is `w-full flex-wrap`,
|
|
3751
|
+
* so a header hosting it is two rows at narrow widths and one row at wide ones.
|
|
3752
|
+
* No constant describes that, and a constant that disagrees with the render is
|
|
3753
|
+
* exactly the drift this component exists to remove.
|
|
3754
|
+
*
|
|
3755
|
+
* It survives as the first-paint estimate. Without it the header reserves zero
|
|
3756
|
+
* until the observer fires and every chart on the page visibly reflows.
|
|
3757
|
+
*/
|
|
3758
|
+
declare const CHART_HEADER_HEIGHT = 48;
|
|
3759
|
+
/**
|
|
3760
|
+
* Width of the enclosing `ChartHeader`, or `null` outside one / before it is
|
|
3761
|
+
* measured. See {@link ChartHeaderWidthContext}.
|
|
3762
|
+
*/
|
|
3763
|
+
declare function useChartHeaderWidth(): number | null;
|
|
3764
|
+
/**
|
|
3765
|
+
* Marks a subtree as already carrying a visible label, so charts inside it do
|
|
3766
|
+
* not render their own title. Wrap the body of a titled section or card.
|
|
3767
|
+
*/
|
|
3768
|
+
declare function ChartLabelledBy({ children }: {
|
|
3769
|
+
children: ReactNode;
|
|
3770
|
+
}): react_jsx_runtime.JSX.Element;
|
|
3771
|
+
/**
|
|
3772
|
+
* Marks a subtree as unlabelled, so charts inside it own their title. Use where
|
|
3773
|
+
* a chart stands on its own with no section or card heading above it.
|
|
3774
|
+
*/
|
|
3775
|
+
declare function ChartOwnsItsTitle({ children }: {
|
|
3776
|
+
children: ReactNode;
|
|
3777
|
+
}): react_jsx_runtime.JSX.Element;
|
|
3778
|
+
/**
|
|
3779
|
+
* The height the header claims here, and the ref that establishes it.
|
|
3780
|
+
*
|
|
3781
|
+
* Both engines subtract `headerHeight` from the measured parent height before
|
|
3782
|
+
* sizing the plot, and pass `headerRef` to the `ChartHeader` they render. The
|
|
3783
|
+
* reserve is therefore the render, measured — not a second statement of it that
|
|
3784
|
+
* someone has to keep in agreement.
|
|
3785
|
+
*
|
|
3786
|
+
* Returns 0 when the header will render nothing, so a chart that is already
|
|
3787
|
+
* labelled and has no slots filled loses no plot height to empty chrome.
|
|
3788
|
+
*/
|
|
3789
|
+
declare function useChartHeaderMetrics(hasActions: boolean, hasControls: boolean): {
|
|
3790
|
+
headerRef: (node: HTMLDivElement | null) => void;
|
|
3791
|
+
headerHeight: number;
|
|
3792
|
+
};
|
|
3793
|
+
/** Returns `true` when the chart should render its own visible title. */
|
|
3794
|
+
declare function useChartOwnsItsTitle(): boolean;
|
|
3795
|
+
interface ChartHeaderProps {
|
|
3112
3796
|
/**
|
|
3113
|
-
*
|
|
3797
|
+
* The chart's title. Both engines pass the same string they render as the SVG
|
|
3798
|
+
* `<title>`, so the accessible name and the visible heading cannot drift
|
|
3799
|
+
* apart (ALL-2539). Shown only when nothing above already labels the chart.
|
|
3114
3800
|
*/
|
|
3115
|
-
|
|
3801
|
+
title: string;
|
|
3116
3802
|
/**
|
|
3117
|
-
*
|
|
3118
|
-
*
|
|
3803
|
+
* Control cluster — `TimeControls` today.
|
|
3804
|
+
*
|
|
3805
|
+
* Separate from `actions` because it is not a trailing icon: it is full-width
|
|
3806
|
+
* and it wraps, which is the whole reason this header measures itself rather
|
|
3807
|
+
* than reserving a constant.
|
|
3808
|
+
*
|
|
3809
|
+
* Belongs here when it governs exactly this chart. Controls that govern a
|
|
3810
|
+
* composed panel stay at panel level: `SiteEnergyCharts` pairs them with a KPI
|
|
3811
|
+
* strip and expands the whole body as one unit, `Dnp3TelemetryChartsSection`
|
|
3812
|
+
* drives a grid of charts from one cluster, and `TiledTimeSeriesExplorer`
|
|
3813
|
+
* swaps its chart for an `EmptyState` — moving those controls inside the chart
|
|
3814
|
+
* would reorder them, or make them vanish exactly when the window needs
|
|
3815
|
+
* changing.
|
|
3119
3816
|
*/
|
|
3120
|
-
|
|
3817
|
+
controls?: ReactNode;
|
|
3818
|
+
/** Trailing action slot — expand first, more later. */
|
|
3819
|
+
actions?: ReactNode;
|
|
3820
|
+
/** Measurement ref from `useChartHeaderMetrics`. */
|
|
3821
|
+
containerRef?: (node: HTMLDivElement | null) => void;
|
|
3121
3822
|
/**
|
|
3122
|
-
*
|
|
3123
|
-
*
|
|
3823
|
+
* Horizontal insets, in px. Both default to 0 and no engine passes them.
|
|
3824
|
+
*
|
|
3825
|
+
* They exist for a caller that genuinely needs the header indented, NOT for
|
|
3826
|
+
* aligning with the plot. Both engines used to pass the plot's own
|
|
3827
|
+
* `dynamicMargin.right` here, which put the expand action 8px in from the card
|
|
3828
|
+
* edge while the title stayed flush left — a lopsided header, visible on every
|
|
3829
|
+
* chart in the app. That margin is axis padding, so a point at the domain max
|
|
3830
|
+
* does not sit on the plot border; it describes the PLOT, and the header is
|
|
3831
|
+
* chrome that shares the card's edges with everything else in it.
|
|
3124
3832
|
*/
|
|
3125
|
-
|
|
3833
|
+
marginLeft?: number;
|
|
3834
|
+
marginRight?: number;
|
|
3835
|
+
}
|
|
3836
|
+
declare function ChartHeader({ title, controls, actions, containerRef, marginLeft, marginRight, }: ChartHeaderProps): react_jsx_runtime.JSX.Element | null;
|
|
3837
|
+
|
|
3838
|
+
interface ExpandedSize {
|
|
3839
|
+
width: number;
|
|
3840
|
+
height: number;
|
|
3841
|
+
}
|
|
3842
|
+
interface ChartExpand {
|
|
3843
|
+
isExpanded: boolean;
|
|
3844
|
+
/** The expand control, for `ChartHeader`'s action slot. */
|
|
3845
|
+
action: ReactNode;
|
|
3126
3846
|
/**
|
|
3127
|
-
*
|
|
3128
|
-
*
|
|
3847
|
+
* Dimensions to render at. `null` inline, where the `withParentSize` HOC's
|
|
3848
|
+
* own measurements apply.
|
|
3129
3849
|
*/
|
|
3130
|
-
|
|
3850
|
+
expandedSize: ExpandedSize | null;
|
|
3851
|
+
/** Wraps the chart body: inline it passes through, expanded it opens a Dialog. */
|
|
3852
|
+
present: (body: ReactNode) => ReactNode;
|
|
3853
|
+
}
|
|
3854
|
+
/** Marks a subtree whose expand is owned by an ancestor. */
|
|
3855
|
+
declare function ChartExpandOwnedByAncestor({ children }: {
|
|
3856
|
+
children: ReactNode;
|
|
3857
|
+
}): react_jsx_runtime.JSX.Element;
|
|
3858
|
+
declare function useChartExpand(title: string): ChartExpand;
|
|
3859
|
+
|
|
3860
|
+
interface ChartSourceProviderProps {
|
|
3131
3861
|
/**
|
|
3132
|
-
*
|
|
3133
|
-
*
|
|
3862
|
+
* Turns a serializable source descriptor into a fetcher. Keep it stable
|
|
3863
|
+
* (`useCallback`) — a new identity on every render re-resolves every chart
|
|
3864
|
+
* beneath it.
|
|
3134
3865
|
*/
|
|
3135
|
-
|
|
3866
|
+
resolve?: ChartSourceResolver;
|
|
3867
|
+
/**
|
|
3868
|
+
* The component form of `resolve`, for sources whose resolution needs hooks
|
|
3869
|
+
* (see `ChartSourceHost`). Consulted FIRST when both are installed, because a
|
|
3870
|
+
* host is the more capable half — an app registering both means the host
|
|
3871
|
+
* knows refs the plain resolver cannot answer, and a host that does not
|
|
3872
|
+
* recognise a ref falls through to `resolve` below.
|
|
3873
|
+
*/
|
|
3874
|
+
host?: ChartSourceHost;
|
|
3875
|
+
/**
|
|
3876
|
+
* Ceiling on tile fetches in flight across every chart below this provider.
|
|
3877
|
+
*
|
|
3878
|
+
* Omit it for the default. It exists as an override mainly so a test can set
|
|
3879
|
+
* a ceiling small enough to observe — the product has no reason to vary it.
|
|
3880
|
+
*/
|
|
3881
|
+
maxConcurrentFetches?: number;
|
|
3882
|
+
children: ReactNode;
|
|
3883
|
+
}
|
|
3884
|
+
/**
|
|
3885
|
+
* Supplies the runtime half of streaming chart sources.
|
|
3886
|
+
*
|
|
3887
|
+
* ── Why a provider and not a prop ─────────────────────────────────────────────
|
|
3888
|
+
* The fetcher is a function, so it cannot ride in a block's props — those are
|
|
3889
|
+
* serialized into `data-composition-schema`, and a function there blanks the
|
|
3890
|
+
* page. But the chart still needs one. A provider resolves that: the block
|
|
3891
|
+
* declares WHICH data it wants in JSON, and the app answers HOW to get it once,
|
|
3892
|
+
* above the whole tree, instead of at every call site.
|
|
3893
|
+
*
|
|
3894
|
+
* This is the same division the maps blocks already use, where a block declares
|
|
3895
|
+
* a tileset in props and the host attaches tile authentication at the map
|
|
3896
|
+
* itself — *"render-time concerns owned by the runtime, not props on this union."*
|
|
3897
|
+
*
|
|
3898
|
+
* ── Why it lives in `edges` ───────────────────────────────────────────────────
|
|
3899
|
+
* So the charts can stay ignorant of where data comes from. `edges` has no
|
|
3900
|
+
* GraphQL client and must not grow one; the app installs a resolver that closes
|
|
3901
|
+
* over its own. That keeps the dependency pointing one way — the app knows
|
|
3902
|
+
* about charts, charts never know about the app.
|
|
3903
|
+
*
|
|
3904
|
+
* Mount it once, near the top:
|
|
3905
|
+
*
|
|
3906
|
+
* ```tsx
|
|
3907
|
+
* <ChartSourceProvider resolve={dashboardChartSources}>
|
|
3908
|
+
* <App />
|
|
3909
|
+
* </ChartSourceProvider>
|
|
3910
|
+
* ```
|
|
3911
|
+
*/
|
|
3912
|
+
declare function ChartSourceProvider({ resolve, host, maxConcurrentFetches, children }: ChartSourceProviderProps): react_jsx_runtime.JSX.Element;
|
|
3913
|
+
/**
|
|
3914
|
+
* The installed resolver, or `null` when no provider is mounted.
|
|
3915
|
+
*
|
|
3916
|
+
* `null` is a legitimate state, not an error: a chart with a streaming source
|
|
3917
|
+
* rendered outside a provider shows its empty state. That is what makes a
|
|
3918
|
+
* component library safe to render in a test, a docs page, or a screenshot
|
|
3919
|
+
* harness with no data layer attached — and it is why this returns rather than
|
|
3920
|
+
* throws.
|
|
3921
|
+
*/
|
|
3922
|
+
declare function useChartSourceResolver(): ChartSourceResolver | null;
|
|
3923
|
+
/**
|
|
3924
|
+
* The installed host, or `null` when none is mounted.
|
|
3925
|
+
*
|
|
3926
|
+
* Separate hook rather than a merged return so a chart can tell the two apart:
|
|
3927
|
+
* a host has to be RENDERED to answer, and picking that path is a decision about
|
|
3928
|
+
* component structure, not a value to read.
|
|
3929
|
+
*/
|
|
3930
|
+
declare function useChartSourceHost(): ChartSourceHost | null;
|
|
3931
|
+
|
|
3932
|
+
interface ChartTooltipProps {
|
|
3933
|
+
data: TooltipData | null;
|
|
3934
|
+
formatter: YFormatType;
|
|
3935
|
+
/** Optional label to display instead of formatting xValue (for categorical charts) */
|
|
3936
|
+
label?: string;
|
|
3937
|
+
/** Optional category labels override (for standalone usage without ChartContext) */
|
|
3938
|
+
categoryLabels?: Record<string, string>;
|
|
3939
|
+
}
|
|
3940
|
+
/**
|
|
3941
|
+
* ChartTooltip
|
|
3942
|
+
*
|
|
3943
|
+
* Interactive tooltip component for charts.
|
|
3944
|
+
* Displays formatted data values at hover position with automatic positioning and animations.
|
|
3945
|
+
* Uses the main formatting system for consistency with Kpi, StatList, and DataTable.
|
|
3946
|
+
*
|
|
3947
|
+
* Can be used standalone (with label prop) or within ChartContext (for time-series charts).
|
|
3948
|
+
*/
|
|
3949
|
+
declare const ChartTooltip: React__default.FC<ChartTooltipProps>;
|
|
3950
|
+
|
|
3951
|
+
interface FunnelStage {
|
|
3952
|
+
id: string;
|
|
3953
|
+
/** Label for the stage (e.g., "Product Viewed") */
|
|
3954
|
+
label: string;
|
|
3955
|
+
/** Numeric value for this stage */
|
|
3956
|
+
value: number;
|
|
3957
|
+
/** Optional secondary value (e.g., "+12% MoM") */
|
|
3958
|
+
secondaryValue?: string;
|
|
3959
|
+
/** Optional annotation badge */
|
|
3960
|
+
annotation?: string;
|
|
3961
|
+
/** Override color for this stage */
|
|
3962
|
+
color?: string;
|
|
3963
|
+
}
|
|
3964
|
+
interface FunnelSeriesProps {
|
|
3965
|
+
/** Array of funnel stages ordered from top to bottom */
|
|
3966
|
+
data: FunnelStage[];
|
|
3967
|
+
/** Width of the chart */
|
|
3968
|
+
width?: number;
|
|
3969
|
+
/** Height of the chart */
|
|
3970
|
+
height?: number;
|
|
3971
|
+
/** Padding around the chart area */
|
|
3972
|
+
padding?: number;
|
|
3973
|
+
/** Gap between bars */
|
|
3974
|
+
barGap?: number;
|
|
3975
|
+
/** Format function for values */
|
|
3976
|
+
formatValue?: (value: number) => string;
|
|
3977
|
+
/** Format function for percentages */
|
|
3978
|
+
formatPercentage?: (value: number) => string;
|
|
3979
|
+
/** Single color to use for all bars (uses theme color if not provided) */
|
|
3980
|
+
color?: string;
|
|
3981
|
+
/** Show percentage scale on left */
|
|
3982
|
+
showScale?: boolean;
|
|
3983
|
+
/** Show overall conversion rate at top */
|
|
3984
|
+
showOverallConversion?: boolean;
|
|
3985
|
+
/** Label text for overall conversion (for internationalization) */
|
|
3986
|
+
overallConversionLabel?: string;
|
|
3987
|
+
/** Optional external active stage identifier */
|
|
3988
|
+
activeStageId?: string | null;
|
|
3989
|
+
/** Callback when a stage is clicked */
|
|
3990
|
+
onStageClick?: (stage: FunnelStage) => void;
|
|
3991
|
+
/** Callback when a stage is hovered */
|
|
3992
|
+
onStageHover?: (stage: FunnelStage | null) => void;
|
|
3993
|
+
/** Additional className */
|
|
3994
|
+
className?: string;
|
|
3995
|
+
/** Inline styles */
|
|
3996
|
+
style?: React__default.CSSProperties;
|
|
3997
|
+
/** Accessible label */
|
|
3998
|
+
"aria-label"?: string;
|
|
3999
|
+
}
|
|
4000
|
+
declare const FunnelSeries: React__default.FC<FunnelSeriesProps>;
|
|
4001
|
+
|
|
4002
|
+
interface LineSeriesProps {
|
|
3136
4003
|
/**
|
|
3137
|
-
*
|
|
3138
|
-
*
|
|
4004
|
+
* The points to draw.
|
|
4005
|
+
*
|
|
4006
|
+
* Optional ONLY inside a streaming chart, where the points do not exist until
|
|
4007
|
+
* the reader looks at a window: there the child names its stream with
|
|
4008
|
+
* `seriesKey` and the chart supplies `data` before this component renders. In
|
|
4009
|
+
* an ordinary chart it is required in practice — a series with neither is
|
|
4010
|
+
* skipped rather than drawn.
|
|
3139
4011
|
*/
|
|
3140
|
-
|
|
4012
|
+
data?: BaseDataPoint[];
|
|
3141
4013
|
/**
|
|
3142
|
-
*
|
|
3143
|
-
*
|
|
3144
|
-
*
|
|
3145
|
-
*
|
|
3146
|
-
* @default true
|
|
4014
|
+
* Which stream this series draws, in a chart with a streaming `source`.
|
|
4015
|
+
*
|
|
4016
|
+
* Defaults to `"line"`, the primary stream. Ignored entirely by a chart that
|
|
4017
|
+
* holds its own data, so the same `<AreaSeries>` serves both sources.
|
|
3147
4018
|
*/
|
|
3148
|
-
|
|
4019
|
+
seriesKey?: string;
|
|
3149
4020
|
/**
|
|
3150
|
-
*
|
|
3151
|
-
*
|
|
4021
|
+
* Relabel this series once its points arrive, in a streaming chart.
|
|
4022
|
+
*
|
|
4023
|
+
* Declared here rather than only on the chart because the element carrying it
|
|
4024
|
+
* is this one; the streaming branch reads it, resolves it against every
|
|
4025
|
+
* assembled stream, and passes the result down as `label`. This component
|
|
4026
|
+
* never calls it — by the time it renders, `label` is already the answer.
|
|
3152
4027
|
*/
|
|
3153
|
-
|
|
4028
|
+
labelFromData?: (plotted: BaseDataPoint[], series: AssembledSeries) => string;
|
|
4029
|
+
color?: string;
|
|
4030
|
+
label?: string;
|
|
4031
|
+
strokeWidth?: number;
|
|
4032
|
+
/** CSS stroke-dasharray value (e.g. "4 2" for dotted, "8 4" for dashed) */
|
|
4033
|
+
strokeDasharray?: string;
|
|
4034
|
+
categoryColors?: Record<string, string>;
|
|
4035
|
+
categoryLabels?: Record<string, string>;
|
|
3154
4036
|
/**
|
|
3155
|
-
*
|
|
4037
|
+
* When set, break the line wherever consecutive points are spaced more than
|
|
4038
|
+
* this many ms apart (missing buckets / outages). Omit to connect across gaps.
|
|
3156
4039
|
*/
|
|
3157
|
-
|
|
4040
|
+
maxGapMs?: number;
|
|
4041
|
+
animate?: boolean;
|
|
4042
|
+
}
|
|
4043
|
+
/**
|
|
4044
|
+
* LineSeries
|
|
4045
|
+
*
|
|
4046
|
+
* Chart component for rendering line charts.
|
|
4047
|
+
* Displays data as a continuous line with customizable stroke width, color, and dash patterns.
|
|
4048
|
+
* When categoryColors are provided, contiguous line segments are colored by each segment
|
|
4049
|
+
* start point category while preserving tooltip and legend metadata from ChartContainer.
|
|
4050
|
+
*/
|
|
4051
|
+
declare const LineSeries: React__default.FC<LineSeriesProps>;
|
|
4052
|
+
|
|
4053
|
+
interface PieDataPoint {
|
|
4054
|
+
/** Category label */
|
|
4055
|
+
label: string;
|
|
4056
|
+
/** Numeric value. Non-positive values take no arc — see `shareOf`. */
|
|
4057
|
+
value: number;
|
|
4058
|
+
/** Optional color override for this slice */
|
|
4059
|
+
color?: string;
|
|
4060
|
+
}
|
|
4061
|
+
interface PieChartProps {
|
|
4062
|
+
/** Array of data points with labels and values */
|
|
4063
|
+
data: PieDataPoint[];
|
|
4064
|
+
/** Width of the chart (auto-resizes to container if not provided) */
|
|
4065
|
+
width?: number;
|
|
4066
|
+
/** Height of the chart (auto-resizes to container if not provided) */
|
|
4067
|
+
height?: number;
|
|
3158
4068
|
/**
|
|
3159
|
-
*
|
|
4069
|
+
* Hole radius as a fraction of the outer radius. `0` (the default) is a pie;
|
|
4070
|
+
* `0.6` is a donut. Values outside 0–0.95 are clamped.
|
|
3160
4071
|
*/
|
|
3161
|
-
|
|
4072
|
+
innerRadiusRatio?: number;
|
|
4073
|
+
/** Formatter for slice values (uses the standard chart formatting system) */
|
|
4074
|
+
yFormatter?: YFormatType;
|
|
4075
|
+
/** Show the label/value/share legend beside the pie (default true) */
|
|
4076
|
+
showLegend?: boolean;
|
|
4077
|
+
/** Show tooltip on hover (default true) */
|
|
4078
|
+
showTooltip?: boolean;
|
|
3162
4079
|
/**
|
|
3163
|
-
*
|
|
3164
|
-
*
|
|
3165
|
-
*
|
|
3166
|
-
* for a caller placing these beside smaller controls — a chart header, where
|
|
3167
|
-
* `md` here stood 39px next to 33px selects and read as a mismatch rather
|
|
3168
|
-
* than a hierarchy.
|
|
4080
|
+
* Callback when a slice is clicked. Supplying it turns every slice into a
|
|
4081
|
+
* focusable, named control that answers Enter and Space, and the drawing's
|
|
4082
|
+
* role from `img` to `group` — an `img` hides the controls inside it.
|
|
3169
4083
|
*/
|
|
3170
|
-
|
|
4084
|
+
onSliceClick?: (dataPoint: PieDataPoint, index: number) => void;
|
|
4085
|
+
/** Callback when a slice is hovered */
|
|
4086
|
+
onSliceHover?: (dataPoint: PieDataPoint | null, index: number | null) => void;
|
|
4087
|
+
/** Additional className */
|
|
4088
|
+
className?: string;
|
|
4089
|
+
/** Inline styles */
|
|
4090
|
+
style?: React__default.CSSProperties;
|
|
3171
4091
|
/**
|
|
3172
|
-
*
|
|
4092
|
+
* The chart's accessible name. Required, not optional-with-a-default, for the
|
|
4093
|
+
* reason `CategoryBarChart` states: a default means every chart of this kind
|
|
4094
|
+
* announces identically to a screen reader (ALL-2539, ALL-2715).
|
|
3173
4095
|
*/
|
|
3174
|
-
|
|
4096
|
+
"aria-label": string;
|
|
3175
4097
|
}
|
|
3176
4098
|
/**
|
|
3177
|
-
*
|
|
4099
|
+
* PieChart
|
|
3178
4100
|
*
|
|
3179
|
-
*
|
|
3180
|
-
*
|
|
4101
|
+
* Part-of-whole mark for categorical data: one slice per category, sized by its
|
|
4102
|
+
* share of the total, with a legend carrying the value and the percentage. Pass
|
|
4103
|
+
* `innerRadiusRatio` for a donut.
|
|
3181
4104
|
*
|
|
3182
|
-
*
|
|
3183
|
-
*
|
|
3184
|
-
*
|
|
4105
|
+
* Input order is preserved — slices are not re-sorted by value, so a producer
|
|
4106
|
+
* that ordered its categories deliberately (severity, lifecycle stage) keeps
|
|
4107
|
+
* that order.
|
|
3185
4108
|
*
|
|
3186
4109
|
* @example
|
|
3187
4110
|
* ```tsx
|
|
3188
|
-
*
|
|
3189
|
-
*
|
|
3190
|
-
*
|
|
3191
|
-
* }
|
|
3192
|
-
*
|
|
3193
|
-
*
|
|
3194
|
-
* <TimeControls
|
|
3195
|
-
* dateRange={dateRange}
|
|
3196
|
-
* onDateRangeChange={setDateRange}
|
|
3197
|
-
* windowSize={windowSize}
|
|
3198
|
-
* onWindowSizeChange={setWindowSize}
|
|
3199
|
-
* presetRanges={presetRanges}
|
|
3200
|
-
* allowDatePicker
|
|
4111
|
+
* <PieChart
|
|
4112
|
+
* data={[
|
|
4113
|
+
* { label: "Online", value: 127 },
|
|
4114
|
+
* { label: "Offline", value: 23 },
|
|
4115
|
+
* ]}
|
|
4116
|
+
* aria-label="Devices by status"
|
|
3201
4117
|
* />
|
|
3202
4118
|
* ```
|
|
3203
4119
|
*/
|
|
3204
|
-
declare
|
|
3205
|
-
|
|
3206
|
-
type ClassicPresetId = "day" | "week" | "month";
|
|
3207
|
-
/**
|
|
3208
|
-
* The standard ladder for classic (non-tiled) charts. Labels are supplied by the
|
|
3209
|
-
* caller rather than baked in, because consumers localize them — edges owns the
|
|
3210
|
-
* ids and ranges, which is the part that was duplicated per chart and drifted.
|
|
3211
|
-
*/
|
|
3212
|
-
declare function classicPresetRanges(labels: Record<ClassicPresetId, string>, getAnchorEndMs?: () => number): PresetRange[];
|
|
3213
|
-
/**
|
|
3214
|
-
* The standard telemetry time-range ladder. `getAnchorEndMs` is called at press
|
|
3215
|
-
* time, not build time, so a long-lived view jumps to a fresh "now" (or stays
|
|
3216
|
-
* pinned to a scrubbed instant under time travel).
|
|
3217
|
-
*/
|
|
3218
|
-
declare function telemetryPresetRanges(getAnchorEndMs?: () => number): PresetRange[];
|
|
3219
|
-
|
|
3220
|
-
interface TiledTimeSeriesSource {
|
|
3221
|
-
fetchTile: FetchTile;
|
|
3222
|
-
ladder: ResolutionLadder;
|
|
3223
|
-
nativeMs: number;
|
|
3224
|
-
resetKey: string;
|
|
3225
|
-
/** Revalidate visible tiles without discarding the plot. */
|
|
3226
|
-
refreshKey?: string | undefined;
|
|
3227
|
-
/** Cancel automatic refreshes while preserving manual navigation. */
|
|
3228
|
-
refreshEnabled?: boolean | undefined;
|
|
3229
|
-
tileCostSeriesCount: number;
|
|
3230
|
-
}
|
|
3231
|
-
interface TiledTimeSeriesView {
|
|
3232
|
-
targetTierId: string;
|
|
3233
|
-
renderedTierId: string | null;
|
|
3234
|
-
viewport: {
|
|
3235
|
-
startMs: number;
|
|
3236
|
-
endMs: number;
|
|
3237
|
-
};
|
|
3238
|
-
followingLatest: boolean;
|
|
3239
|
-
/** Relative Now navigation intent, independent of whether live updates are enabled. */
|
|
3240
|
-
atLiveEdge?: boolean | undefined;
|
|
3241
|
-
}
|
|
3242
|
-
interface TiledTimeSeriesExplorerProps {
|
|
3243
|
-
source: TiledTimeSeriesSource;
|
|
3244
|
-
/** Accessible name for the chart. Forwarded to the underlying tiled chart's SVG `<title>`. */
|
|
3245
|
-
title: string;
|
|
3246
|
-
liveControl?: TiledTimeSeriesLiveControl | undefined;
|
|
3247
|
-
initialRange?: {
|
|
3248
|
-
days: number;
|
|
3249
|
-
} | undefined;
|
|
3250
|
-
viewportEnd?: Date | undefined;
|
|
3251
|
-
yFormatter?: YFormatType | undefined;
|
|
3252
|
-
yDomain?: TiledTimeSeriesChartProps["yDomain"] | undefined;
|
|
3253
|
-
referenceLines?: {
|
|
3254
|
-
value: number;
|
|
3255
|
-
label?: string;
|
|
3256
|
-
color?: string;
|
|
3257
|
-
}[] | undefined;
|
|
3258
|
-
emptyState: {
|
|
3259
|
-
title: string;
|
|
3260
|
-
description: string;
|
|
3261
|
-
};
|
|
3262
|
-
presetRanges?: PresetRange[] | undefined;
|
|
3263
|
-
tierToWindow: Record<string, WindowSize>;
|
|
3264
|
-
windowSizeOptions: WindowSizeOption[];
|
|
3265
|
-
height?: number | undefined;
|
|
3266
|
-
hint?: string | undefined;
|
|
3267
|
-
dataBounds?: {
|
|
3268
|
-
startMs?: number;
|
|
3269
|
-
endMs?: number;
|
|
3270
|
-
} | undefined;
|
|
3271
|
-
/** Reports committed camera/tier state, including while rendered tiles fall back. */
|
|
3272
|
-
onViewChange?: ((view: TiledTimeSeriesView) => void) | undefined;
|
|
3273
|
-
/** Advance unanchored views at Now. Historical navigation pauses following. */
|
|
3274
|
-
followLatest?: boolean | undefined;
|
|
3275
|
-
/** Change to explicitly resume a navigation-paused view at Now, preserving its span. */
|
|
3276
|
-
followLatestKey?: string | number | undefined;
|
|
3277
|
-
/** Metadata for the accepted plotted data and visible window, shared with expanded view.
|
|
3278
|
-
* Render only; publish state through onViewChange instead. Series may include overscan.
|
|
3279
|
-
* maxDataTimeMs is the inclusive fetch cutoff; viewport.endMs is exclusive. */
|
|
3280
|
-
renderMetadata?: ((args: {
|
|
3281
|
-
series: AssembledSeries;
|
|
3282
|
-
viewport: {
|
|
3283
|
-
startMs: number;
|
|
3284
|
-
endMs: number;
|
|
3285
|
-
};
|
|
3286
|
-
maxDataTimeMs: number;
|
|
3287
|
-
}) => ReactNode) | undefined;
|
|
3288
|
-
children: (args: {
|
|
3289
|
-
series: AssembledSeries;
|
|
3290
|
-
gapMs: number;
|
|
3291
|
-
}) => ReactNode;
|
|
3292
|
-
}
|
|
3293
|
-
declare function TiledTimeSeriesExplorer({ source, title, liveControl, initialRange, viewportEnd, yFormatter, yDomain, referenceLines, emptyState, presetRanges, tierToWindow, windowSizeOptions, height, hint, dataBounds, onViewChange, followLatest, followLatestKey, children, renderMetadata, }: TiledTimeSeriesExplorerProps): react_jsx_runtime.JSX.Element;
|
|
4120
|
+
declare const PieChart: React__default.FC<PieChartProps>;
|
|
3294
4121
|
|
|
3295
4122
|
interface Filter {
|
|
3296
4123
|
id: string;
|
|
@@ -4162,7 +4989,7 @@ declare function DeltaCell<T = any>({ value, row, context, direction, tone, form
|
|
|
4162
4989
|
/**
|
|
4163
4990
|
* Device type classification
|
|
4164
4991
|
*/
|
|
4165
|
-
type DeviceType = "battery" | "charger" | "thermostat" | "inverter" | "vehicle" | "water_heater" | "meter" | "gateway" | "other" | "unknown";
|
|
4992
|
+
type DeviceType = "battery" | "charger" | "thermostat" | "inverter" | "vehicle" | "water_heater" | "meter" | "sensor" | "gateway" | "other" | "unknown";
|
|
4166
4993
|
|
|
4167
4994
|
interface DeviceMetaCellProps<T = unknown> extends CellComponentProps<T> {
|
|
4168
4995
|
/** Device manufacturer name (can be a function to extract from row) */
|
|
@@ -4844,7 +5671,7 @@ declare function TextCell<T = any>({ value, row, context, prefix, suffix, emptyT
|
|
|
4844
5671
|
* Supports custom cell renderers, column configurations, multiple display densities,
|
|
4845
5672
|
* and virtualization for large datasets.
|
|
4846
5673
|
*/
|
|
4847
|
-
declare function DataTable<T extends Record<string, unknown>>({ columns, data, className, density, width, height, maxHeight, layout, mobileRenderer, customMobileRowRender, mobileBreakpoint, isLoading, loadingState, loadingRowCount, onLoadMore, hasMore, enableVirtualization, estimatedRowHeight, loadingIndicator, stickyHeader, stickyFirstColumn, onRowClick, getRowId, selectedRowIds, onSelectionChange, selectionMode, hideHeader, sortConfig: controlledSortConfig, onSort, sortNote, "aria-label": ariaLabel, enableColumnReorder, columnOrder: controlledColumnOrder, onColumnOrderChange, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
5674
|
+
declare function DataTable<T extends Record<string, unknown>>({ columns, data: allData, className, density, width, height, maxHeight, layout, mobileRenderer, customMobileRowRender, mobileBreakpoint, isLoading, loadingState, loadingRowCount, onLoadMore, hasMore, enableVirtualization, estimatedRowHeight, loadingIndicator, stickyHeader, stickyFirstColumn, onRowClick, getRowId, selectedRowIds, onSelectionChange, selectionMode, hideHeader, sortConfig: controlledSortConfig, onSort, sortNote, "aria-label": ariaLabel, enableColumnReorder, columnOrder: controlledColumnOrder, onColumnOrderChange, pagination, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
4848
5675
|
|
|
4849
5676
|
interface MobileRowProps<T> {
|
|
4850
5677
|
row: T;
|
|
@@ -4863,6 +5690,87 @@ declare function AutoMobileRenderer<T>({ row, columns, density, isLoading, onCli
|
|
|
4863
5690
|
*/
|
|
4864
5691
|
declare function CardMobileRenderer<T>({ row, columns, density, isLoading, onClick }: MobileRowProps<T>): react_jsx_runtime.JSX.Element;
|
|
4865
5692
|
|
|
5693
|
+
/**
|
|
5694
|
+
* Rows per page when `pagination` is `true` or omits `pageSize`.
|
|
5695
|
+
*
|
|
5696
|
+
* 10 rather than 25: the default exists for tables embedded in a page, and a page
|
|
5697
|
+
* of 10 is about a screen of rows on a laptop without pushing the footer — and the
|
|
5698
|
+
* control that follows it — below the fold. A caller showing a denser table says so.
|
|
5699
|
+
*/
|
|
5700
|
+
declare const DEFAULT_PAGE_SIZE = 10;
|
|
5701
|
+
/**
|
|
5702
|
+
* Upper bound on a page, mirroring the row budget a bounded table already honours.
|
|
5703
|
+
*
|
|
5704
|
+
* A page is a viewport's worth of rows, and it renders unvirtualized — so an
|
|
5705
|
+
* unbounded `pageSize` reintroduces exactly the mount cost paging is meant to
|
|
5706
|
+
* avoid. Clamped rather than defaulted, because "show 2,000" is a legible intent
|
|
5707
|
+
* expressed in a field that cannot carry it; the nearest honest answer is the
|
|
5708
|
+
* largest page there is.
|
|
5709
|
+
*/
|
|
5710
|
+
declare const MAX_PAGE_SIZE = 200;
|
|
5711
|
+
/** What a render needs once the paging policy has been resolved against the data. */
|
|
5712
|
+
interface ResolvedPagination {
|
|
5713
|
+
/** 0-based page being shown, clamped into range. */
|
|
5714
|
+
page: number;
|
|
5715
|
+
/** Total pages, always at least 1 so an empty table still reads "1 / 1". */
|
|
5716
|
+
pageCount: number;
|
|
5717
|
+
/** Index of the first row on this page, for slicing. */
|
|
5718
|
+
start: number;
|
|
5719
|
+
/** Index past the last row on this page, for slicing. */
|
|
5720
|
+
end: number;
|
|
5721
|
+
/** 1-based inclusive ordinal of the first row shown, or 0 when there are none. */
|
|
5722
|
+
from: number;
|
|
5723
|
+
/** 1-based inclusive ordinal of the last row shown. */
|
|
5724
|
+
to: number;
|
|
5725
|
+
/** Rows across every page. */
|
|
5726
|
+
total: number;
|
|
5727
|
+
}
|
|
5728
|
+
/**
|
|
5729
|
+
* Resolve a paging policy against the row count actually in play.
|
|
5730
|
+
*
|
|
5731
|
+
* `page` is the value to clamp — whichever of the controlled prop or the table's
|
|
5732
|
+
* own state is in force. Clamping here rather than at the call site is what keeps
|
|
5733
|
+
* a shrinking dataset from stranding a live page: a refetch returning fewer rows
|
|
5734
|
+
* under page 4 of 2 renders page 2, not an empty table under a lying footer.
|
|
5735
|
+
*/
|
|
5736
|
+
declare function resolvePagination(pagination: DataTablePagination | boolean | undefined, rowCount: number, page: number): ResolvedPagination;
|
|
5737
|
+
interface PaginationFooterProps extends ResolvedPagination {
|
|
5738
|
+
density: TableDensity;
|
|
5739
|
+
onPageChange: (next: number) => void;
|
|
5740
|
+
/** Labels the control for assistive tech, e.g. "Commands pagination". */
|
|
5741
|
+
label?: string;
|
|
5742
|
+
}
|
|
5743
|
+
/**
|
|
5744
|
+
* Page controls, and the range they are moving through.
|
|
5745
|
+
*
|
|
5746
|
+
* ── What the layout is doing ─────────────────────────────────────────────────
|
|
5747
|
+
*
|
|
5748
|
+
* The range ("9–16 of 312") is the load-bearing half and the arrows are the cheap
|
|
5749
|
+
* half: a paged table's real job is telling you how much there IS, which is the
|
|
5750
|
+
* one thing a scrollbar communicates badly.
|
|
5751
|
+
*
|
|
5752
|
+
* ── Mobile ───────────────────────────────────────────────────────────────────
|
|
5753
|
+
*
|
|
5754
|
+
* Three things change below `sm`, and each is a thumb problem rather than a width
|
|
5755
|
+
* problem:
|
|
5756
|
+
*
|
|
5757
|
+
* - The buttons carry their labels ("Previous" / "Next") instead of bare carets.
|
|
5758
|
+
* A 32px caret is under the 44px touch target every mobile guideline asks for,
|
|
5759
|
+
* and it is the only control on the row — there is room to say what it does.
|
|
5760
|
+
* - They sit at the EDGES of the row, thumb-reachable, with the range centred
|
|
5761
|
+
* between them. On desktop the pair stays grouped at the right, where a mouse
|
|
5762
|
+
* is already heading after a sort or a row click.
|
|
5763
|
+
* - The range says "9–16 of 312" on both, but the page counter ("2 / 32") is
|
|
5764
|
+
* desktop-only: on a phone it is a third number competing with the two that
|
|
5765
|
+
* matter, and the arrows already say where you can go.
|
|
5766
|
+
*
|
|
5767
|
+
* Container queries rather than viewport breakpoints (`@sm:` off the table's own
|
|
5768
|
+
* wrapper), because the table is a block that gets placed in panes narrower than
|
|
5769
|
+
* the window — a 380px side panel on a 1440px monitor is mobile for this control
|
|
5770
|
+
* even though the viewport says otherwise.
|
|
5771
|
+
*/
|
|
5772
|
+
declare function PaginationFooter({ page, pageCount, from, to, total, density, onPageChange, label, }: PaginationFooterProps): react_jsx_runtime.JSX.Element;
|
|
5773
|
+
|
|
4866
5774
|
/**
|
|
4867
5775
|
* DateRangePicker
|
|
4868
5776
|
*
|
|
@@ -7036,6 +7944,11 @@ declare function RangeCalendar<T extends DateValue>({ errorMessage, ...props }:
|
|
|
7036
7944
|
* </Section>
|
|
7037
7945
|
* ```
|
|
7038
7946
|
*/
|
|
7947
|
+
/**
|
|
7948
|
+
* Dispatched on `window` by `SectionNav` before it scrolls to a section, with the target element's DOM id as
|
|
7949
|
+
* `detail.id`. A collapsed `Section` with that id opens itself, so the rail never scrolls to a closed body.
|
|
7950
|
+
*/
|
|
7951
|
+
declare const SECTION_NAVIGATE_EVENT = "edges:section-navigate";
|
|
7039
7952
|
type SectionVariant = "plain" | "contained" | "bordered";
|
|
7040
7953
|
type SectionSpacing = "none" | "sm" | "md" | "lg";
|
|
7041
7954
|
interface SectionProps {
|
|
@@ -7061,8 +7974,14 @@ interface SectionProps {
|
|
|
7061
7974
|
children?: React__default.ReactNode;
|
|
7062
7975
|
/** Label used by in-page navigation (PageLayout.Content with withSectionNav). Falls back to title when omitted */
|
|
7063
7976
|
navLabel?: string;
|
|
7064
|
-
|
|
7065
|
-
|
|
7977
|
+
/** Lets the reader fold the body away; the title becomes the toggle */
|
|
7978
|
+
collapsible?: boolean;
|
|
7979
|
+
/** Initial state of a collapsible section. A collapsed body is not mounted */
|
|
7980
|
+
defaultCollapsed?: boolean;
|
|
7981
|
+
/** Short trailing marker beside a collapsible title, e.g. a count */
|
|
7982
|
+
badge?: React__default.ReactNode;
|
|
7983
|
+
}
|
|
7984
|
+
declare function Section({ id, title, description, actions, variant, spacing, withDivider, headingAs, className, children, collapsible, defaultCollapsed, badge, }: SectionProps): react_jsx_runtime.JSX.Element;
|
|
7066
7985
|
declare namespace Section {
|
|
7067
7986
|
var displayName: string;
|
|
7068
7987
|
}
|
|
@@ -8084,4 +9003,4 @@ declare function voltageYDomain(data: readonly VoltageValues[], nominalVoltage:
|
|
|
8084
9003
|
*/
|
|
8085
9004
|
type LinkComponentType = React.ComponentType<any>;
|
|
8086
9005
|
|
|
8087
|
-
export { type Action, ActionCell, type ActionCellProps, ActivityFeed, ActivityFeedGroup, type ActivityFeedGroupProps, type ActivityFeedProps, type ActivityFeedSize, type ActivityFeedVariant, ActivityItem, type ActivityItemProps, type ActivityItemSurface, type ActivityItemTone, type AgentCellConfigOf, type AgentCellValueOf, type AgentSerializable, Alert, type AlertProps, type ApplyDataOperationsOptions, type ApplyDataOperationsResult, AreaSeries, type AssembleSeriesArgs, type AssembledSeries, AutoMobileRenderer, BREAKPOINTS, BadgeCell, type BadgeCellProps, BadgeProps, Banner, type BannerAction, type BannerAppearance, type BannerProps, type BannerVariant, BarSeries, BaseDataPoint, BaseInputProps, BooleanCell, type BooleanCellProps, BooleanFormat, BrandProvider, type BrandProviderProps, type BrandVariables, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type Breakpoint, type BreakpointState, CATEGORICAL_RAMP, CHART_HEADER_HEIGHT, COLOR_RAMPS, Calendar, Card, CardContent, type CardContentProps, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, CardMedia, type CardMediaProps, CardMobileRenderer, type CardProps, type CardVariant, CarouselAutoplayTrigger, CarouselControl, type CarouselControlProps, CarouselIndicator, CarouselIndicatorGroup, type CarouselIndicatorProps, CarouselItem, CarouselItemGroup, type CarouselItemGroupProps, type CarouselItemProps, CarouselNextTrigger, CarouselPrevTrigger, CarouselProgressText, CarouselRoot, type CarouselRootProps, type CarouselTriggerProps, CategoryBarChart, type CategoryDataPoint as CategoryBarChartDataPoint, type CategoryBarChartProps, CategoryCell, type CategoryCellProps, type CategoryDataPoint, CellAlignment, CellComponentProps, type CellConfigOf, CellEmphasis, type CellValueOf, ChartAxis, ChartBottomBar, ChartContainer, ChartEventMarkers, type ChartEventMarkersProps, ChartEventSpans, type ChartEventSpansProps, type ChartExpand, ChartExpandOwnedByAncestor, type ChartExportMetadata, ChartHeader, type ChartHeaderProps, ChartLabelledBy, ChartOwnsItsTitle, ChartTooltip, Chip, ChipInputField, type ChipInputFieldProps, type ClassicPresetId, Collapse, CollapseContent, type CollapseContentProps, type CollapseDensity, CollapseHeader, type CollapseHeaderProps, CollapseItem, type CollapseItemProps, type CollapseProps, type CollapseVariant, ColorModeProvider, type ColorRampInput, type ColorRampKind, type ColorRampOption, ColorSpec, Column, CommandPalette, type CommandPaletteProps, ComponentFormatter, Confirm, type ConfirmProps, ConnectionStatusBadge, type ConnectionStatusBadgeProps, ContactCard, type ContactCardProps, ContactMetaCell, type ContactMetaCellProps, ContactMetaDisplay, type ContactMetaDisplayProps, ContainerQueryProvider, CopyToClipboard, type Coverage, CurrencyFormat, CurrentFormat, CustomCell, type CustomCellProps, CustomPinsSpec, DEFAULT_CHART_HEIGHT, DIVERGING_RAMPS, DataControls, type Filter as DataControlsFilter, type DataControlsProps, type SortOption as DataControlsSortOption, DataTable, DataTableProps, DateCell, type DateCellProps, DateFormat, DateRangePicker, DeltaCell, type DeltaCellProps, type DeltaDirection, type DeltaFormat, type DeltaTone, DeviceHealthBadge, type DeviceHealthBadgeProps, DeviceMetaCell, type DeviceMetaCellProps, DeviceMetaDisplay, type DeviceMetaDisplayProps, DeviceState, DeviceStateBadge, type DeviceStateBadgeProps, DeviceStateCell, type DeviceStateCellProps, DeviceStateWithMetric, type DeviceStateWithMetricProps, type DeviceType, DeviceTypeIcon, type DeviceTypeIconProps, DialogAction, DialogFooterConfig, DialogHeader, DialogHeaderConfig, type DialogHeaderProps, DistanceFormat, type ElementSize, EmptyState, type EmptyStateAction, type EmptyStateAlignment, type EmptyStateProps, type EmptyStateSize, EnergyFormat, EnergyUnit, type EnrollmentStatus, EnrollmentStatusBadge, type EnrollmentStatusBadgeProps, ErrorBoundary, type EventMarker, type EventMarkerType, type EventSpan, type ExportType, FacetConfig, FacetCounts, type FetchTile, type FetchTileContext, FieldFormat, FieldValue, FilterChips, type FilterChipsProps, FilterDialog, type FilterDialogProps, FilterState, FirmwareVersionBadge, type FirmwareVersionBadgeProps, Form, FormatRegistry, FormattedCell, type FormattedCellProps, FormattedValue, FormatterFunction, FunnelSeries, type FunnelSeriesProps, type FunnelStage as FunnelSeriesStage, GeoJsonLayerSpec, GlobalSearch, type GlobalSearchProps, Grid, type GridAlign, type GridCols, type GridFlow, type GridGap, type GridItemProps, type GridJustify, type GridProps, type GridSpan, GridState, GridStateBadge, type GridStateBadgeProps, type HealthStatus, HierarchyExplorer, type HierarchyExplorerProps, type HierarchyNode, HorizontalBarCell, type HorizontalBarCellProps, HoverCard, type HoverCardContentProps, type HoverCardRootProps, Icon$1 as Icon, IconName$2 as IconName, IndexCell, type IndexCellProps, InfiniteScrollIndicator, type InfiniteScrollIndicatorProps, Kpi, KpiGroup, type KpiGroupAlign, type KpiGroupCols, type KpiGroupGap, type KpiGroupProps, type KpiOrientation, type KpiProps, type KpiSize, type KpiStatus, LayerSpec, LineSeries, LinkBehavior, type LinkComponentType, List, ListBox, ListBoxItem, ListItem, type ListItemProps, ListPane, type ListPaneProps, type ListProps, LoadingState, MapStyleProvider, MiniBarCell, type MiniBarCellProps, ModalBackdrop, type ModalBackdropProps, type NodeState, type NonSerializableCellProp, Notice, NoticeContainer, type NoticeContainerProps, type NoticeOptions, type NoticeProps, NoticeProvider, type NoticeProviderProps, type NoticeVariant, NumberCell, type NumberCellProps, NumberFormat, type PageAsideProps, PageBanner, type PageBannerProps, type PageBreadcrumbItem, type PageContentProps, type PageHeaderProps, PageLayout, type PageLayoutProps, type PageScrollableContentProps, PhoneFormat, PieChart, type PieChartProps, type PieDataPoint, type Place, PlaceSearch, type PlaceSearchProps, Popover, PowerFormat, type PresetRange, ProgressBar, Prose, type ProseProps, type ProseSize, type ProseTone, RangeCalendar, RangeCell, type RangeCellProps, RasterLayerSpec, type RegisterPhosphorIconOptions, ResistanceFormat, type ResolutionLadder, type ResponsiveValue, ResultsCount, type ResultsCountProps, SEQUENTIAL_RAMPS, SKELETON_SIZES, SOURCE_UNIT_TO_WH, SearchConfig, SearchControl, type SearchControlProps, SearchEmptyState, type SearchEmptyStateProps, SearchLoadingState, type SearchLoadingStateProps, SearchResultGroup, type SearchResultGroupProps, SearchResultItem, type SearchResultItemProps, SearchResultsList, type SearchResultsListProps, SearchTrigger, type SearchTriggerProps, Section, SectionNav, type SectionNavItem, type SectionNavOrientation, type SectionNavProps, type SectionProps, type SectionSpacing, type SectionVariant, SelectCell, type SelectCellProps, type Serializable, SiteCard, type SiteCardProps, SiteContactCard, type SiteContactCardProps, SiteMetaCell, type SiteMetaCellProps, SiteMetaDisplay, type SiteMetaDisplayProps, Skeleton, Slider, SortControl, type SortControlProps, SortState, SparklineCell, type SparklineCellProps, SplitPane, type SplitPaneOrientation, type SplitPanePanelProps, type SplitPaneProps, type StatAlign, type StatFormatter, type StatItem, type StatLayout, StatList, type StatListProps, type StatThreshold, type StatTone$1 as StatTone, type StatValue, Tab, TabList, TabPanel, type TableExportMetadata, type TableExportOptions, Tabs, type TabsProps$1 as TabsProps, TemperatureFormat, TemperatureUnit, TemperatureUnitString, TextAreaWithChips, TextCell, type TextCellProps, TextFormat, type Tier, type TileAction, type TileData, type TileEntry, type TileRef, type TileStatus, type TileStore, type TiledCameraPreviewDomain, type TiledCameraSyncGroup, TiledTimeSeriesChart, type TiledTimeSeriesChartProps, type TiledTimeSeriesChartViewport, TiledTimeSeriesExplorer, type TiledTimeSeriesExplorerProps, type TiledTimeSeriesLiveControl, type TiledTimeSeriesSource, type TiledTimeSeriesView, TimeControls, type TimeControlsProps, type TimeRange, Timeline, TimelineItem, type TimelineItemProps, type TimelineItemVariant, ToggleButton, Tooltip, TooltipData, Tray, type TrayProps, type TrendPoint, type TypographyRole, type UseBreakpointReturn, type UseClientDataControlsOptions, type UseClientDataControlsResult, type UseDataControlsClientOptions, type UseDataControlsOptions, type UseDataControlsResult, type UseDataControlsServerOptions, type UseElementSizeResult, type UseServerDataControlsOptions, type UseTableExportOptions, type UseTableExportReturn, type UseTileWindowArgs, type UseTileWindowResult, type UseTiledTimeSeriesArgs, type UseTiledTimeSeriesResult, VectorLayerSpec, type Viewport, VoltageFormat, type WindowSize, type WindowSizeOption, YFormatType, applyDataOperations, assembleSeries, autoScaleCurrent, autoScaleDistance, autoScaleEnergy, autoScalePower, autoScaleResistance, autoScaleVoltage, camelCaseToWords, capitalize, celsiusToFahrenheit, celsiusToKelvin, centimetersToInches, classicPresetRanges, createFormat, createTextureIcon, createTiledCameraSyncGroup, csvUnitFor, csvValueFor, deltaDirectionFromValue, emptyStore, enumToSentenceCase, exportChart, exportTableAsCSV, fahrenheitToCelsius, fahrenheitToKelvin, feetToMeters, feetToMiles, formatBoolean, formatCapacity, formatCurrency, formatCurrent, formatDate, formatDistance, formatEmptyValue, formatEnergy, formatFieldValue, formatInternationalPhone, formatNumber, formatPercent, formatPhone, formatPhoneNumber, formatPower, formatPowerRating, formatResistance, formatTemperature, formatText, formatUSPhone, formatVoltage, getBadgeClasses, getBooleanBadgeVariant, getCellAlignmentClasses, getCellContainerClasses, getCellTextClasses, getColorRamp, getColorRampsByKind, getDateParts, getEventColor, getExportFormatName, getExportHeaders, getLinkClasses, getNumericColorClasses, getSkeletonSize, getStateTone, hasTileData, inchesToCentimeters, isCustomPinsLayer, isExportSupported, isGeoJsonLayer, isNil, isRasterLayer, isVectorLayer, kelvinToCelsius, kelvinToFahrenheit, kilometersToMiles, layer, metersToFeet, metersToMiles, metersToYards, milesToFeet, milesToKilometers, milesToMeters, parseBoolean, pickEnergyUnit, prepareTableDataForExport, registerPhosphorIcon, resolveValue, snakeCaseToWords, telemetryPresetRanges, temperatureStringToSymbol, tierForViewport, tileIndexAt, tileKey, tileReducer, tilesForViewport, toA, toActiveInactive, toAmps, toBoolean, toCelsius, toCentimeters, toCheckmark, toCompactNumber, toCurrency, toCustomDateFormat, toDateString, toEnabledDisabled, toFahrenheit, toFeet, toFloat, toFormattedNumber, toFullDateTime, toGW, toGWh, toGigawatts, toISOString, toInches, toInteger, toKA, toKV, toKW, toKelvin, toKiloamps, toKilohms, toKilometers, toKilovolts, toKilowatts, toLowerCase, toMA, toMV, toMW, toMWh, toMegawatts, toMegohms, toMeters, toMiles, toMilliamps, toMillimeters, toMilliohms, toMillivolts, toNauticalMiles, toOhms, toOnOff, toPercentage, toRelativeTime, toScientificNotation, toSecret, toSentenceCase, toTemperature, toTitleCase, toTrueFalse, toUpperCase, toV, toVolts, toW, toWatts, toWh, toYards, tokWh, truncateEnd, truncateMiddle, truncateStart, typeRole, typographyRole, ucFirst, useBreakpoint, useChartExpand, useChartHeaderMetrics, useChartHeaderWidth, useChartOwnsItsTitle, useClientDataControls, useColorMode, useContainerBreakpoint, useDataControls, useDebounce, useElementSize, useLocalStorage, useMapStyleOverride, useMediaQuery, useNotice, useServerDataControls, useTableExport, useTileWindow, useTiledTimeSeries, voltageReferenceLines, voltageYDomain, wrapWithLink, yardsToMeters };
|
|
9006
|
+
export { type Action, ActionCell, type ActionCellProps, ActivityFeed, ActivityFeedGroup, type ActivityFeedGroupProps, type ActivityFeedProps, type ActivityFeedSize, type ActivityFeedVariant, ActivityItem, type ActivityItemProps, type ActivityItemSurface, type ActivityItemTone, type AgentCellConfigOf, type AgentCellValueOf, type AgentSerializable, Alert, type AlertProps, type ApplyDataOperationsOptions, type ApplyDataOperationsResult, AreaSeries, type AssembleSeriesArgs, type AssembledSeries, AutoMobileRenderer, BREAKPOINTS, BadgeCell, type BadgeCellProps, BadgeProps, Banner, type BannerAction, type BannerAppearance, type BannerProps, type BannerVariant, BarSeries, BaseDataPoint, BaseInputProps, BooleanCell, type BooleanCellProps, BooleanFormat, BrandProvider, type BrandProviderProps, type BrandVariables, BreadcrumbItem, type BreadcrumbItemProps, Breadcrumbs, type Breakpoint, type BreakpointState, CATEGORICAL_RAMP, CHART_HEADER_HEIGHT, COLOR_RAMPS, Calendar, Card, CardContent, type CardContentProps, CardFooter, type CardFooterProps, CardHeader, type CardHeaderProps, CardMedia, type CardMediaProps, CardMobileRenderer, type CardProps, type CardVariant, CarouselAutoplayTrigger, CarouselControl, type CarouselControlProps, CarouselIndicator, CarouselIndicatorGroup, type CarouselIndicatorProps, CarouselItem, CarouselItemGroup, type CarouselItemGroupProps, type CarouselItemProps, CarouselNextTrigger, CarouselPrevTrigger, CarouselProgressText, CarouselRoot, type CarouselRootProps, type CarouselTriggerProps, CategoryBarChart, type CategoryDataPoint as CategoryBarChartDataPoint, type CategoryBarChartProps, CategoryCell, type CategoryCellProps, type CategoryDataPoint, CellAlignment, CellComponentProps, type CellConfigOf, CellEmphasis, type CellValueOf, ChartAxis, ChartBottomBar, ChartContainer, type ChartContainerWithSourceProps, ChartEventMarkers, type ChartEventMarkersProps, ChartEventSpans, type ChartEventSpansProps, type ChartExpand, ChartExpandOwnedByAncestor, type ChartExportMetadata, ChartHeader, type ChartHeaderProps, ChartLabelledBy, ChartOwnsItsTitle, type ChartSource, type ChartSourceHost, ChartSourceProvider, type ChartSourceProviderProps, type ChartSourceResolver, ChartTooltip, Chip, ChipInputField, type ChipInputFieldProps, type ClassicPresetId, Collapse, CollapseContent, type CollapseContentProps, type CollapseDensity, CollapseHeader, type CollapseHeaderProps, CollapseItem, type CollapseItemProps, type CollapseProps, type CollapseVariant, ColorModeProvider, type ColorRampInput, type ColorRampKind, type ColorRampOption, ColorSpec, Column, CommandPalette, type CommandPaletteProps, ComponentFormatter, Confirm, type ConfirmProps, ConnectionStatusBadge, type ConnectionStatusBadgeProps, ContactCard, type ContactCardProps, ContactMetaCell, type ContactMetaCellProps, ContactMetaDisplay, type ContactMetaDisplayProps, ContainerQueryProvider, CopyToClipboard, type Coverage, CurrencyFormat, CurrentFormat, CustomCell, type CustomCellProps, CustomPinsSpec, DEFAULT_CHART_HEIGHT, DEFAULT_PAGE_SIZE, DIVERGING_RAMPS, DataControls, type Filter as DataControlsFilter, type DataControlsProps, type SortOption as DataControlsSortOption, DataTable, DataTablePagination, DataTableProps, DateCell, type DateCellProps, DateFormat, DateRangePicker, DeltaCell, type DeltaCellProps, type DeltaDirection, type DeltaFormat, type DeltaTone, DeviceHealthBadge, type DeviceHealthBadgeProps, DeviceMetaCell, type DeviceMetaCellProps, DeviceMetaDisplay, type DeviceMetaDisplayProps, DeviceState, DeviceStateBadge, type DeviceStateBadgeProps, DeviceStateCell, type DeviceStateCellProps, DeviceStateWithMetric, type DeviceStateWithMetricProps, type DeviceType, DeviceTypeIcon, type DeviceTypeIconProps, DialogAction, DialogFooterConfig, DialogHeader, DialogHeaderConfig, type DialogHeaderProps, DistanceFormat, type ElementSize, EmptyState, type EmptyStateAction, type EmptyStateAlignment, type EmptyStateProps, type EmptyStateSize, EnergyFormat, EnergyUnit, type EnrollmentStatus, EnrollmentStatusBadge, type EnrollmentStatusBadgeProps, ErrorBoundary, type EventMarker, type EventMarkerType, type EventSpan, type ExportType, FacetConfig, FacetCounts, type FetchTile, type FetchTileContext, FieldFormat, FieldValue, FilterChips, type FilterChipsProps, FilterDialog, type FilterDialogProps, FilterState, FirmwareVersionBadge, type FirmwareVersionBadgeProps, Form, FormatRegistry, FormattedCell, type FormattedCellProps, FormattedValue, FormatterFunction, FunnelSeries, type FunnelSeriesProps, type FunnelStage as FunnelSeriesStage, GeoJsonLayerSpec, GlobalSearch, type GlobalSearchProps, Grid, type GridAlign, type GridCols, type GridFlow, type GridGap, type GridItemProps, type GridJustify, type GridProps, type GridSpan, GridState, GridStateBadge, type GridStateBadgeProps, type HealthStatus, HierarchyExplorer, type HierarchyExplorerProps, type HierarchyNode, HorizontalBarCell, type HorizontalBarCellProps, HoverCard, type HoverCardContentProps, type HoverCardRootProps, Icon$1 as Icon, IconName$2 as IconName, IndexCell, type IndexCellProps, InfiniteScrollIndicator, type InfiniteScrollIndicatorProps, type InlineChartSource, Kpi, KpiGroup, type KpiGroupAlign, type KpiGroupCols, type KpiGroupGap, type KpiGroupProps, type KpiOrientation, type KpiProps, type KpiSize, type KpiStatus, type LatestDataReadoutKind, LayerSpec, LineSeries, LinkBehavior, type LinkComponentType, List, ListBox, ListBoxItem, ListItem, type ListItemProps, ListPane, type ListPaneProps, type ListProps, LoadingState, MAX_PAGE_SIZE, MapStyleProvider, MiniBarCell, type MiniBarCellProps, ModalBackdrop, type ModalBackdropProps, type NodeState, type NonSerializableCellProp, Notice, NoticeContainer, type NoticeContainerProps, type NoticeOptions, type NoticeProps, NoticeProvider, type NoticeProviderProps, type NoticeVariant, NumberCell, type NumberCellProps, NumberFormat, type PageAsideProps, PageBanner, type PageBannerProps, type PageBreadcrumbItem, type PageContentProps, type PageHeaderProps, PageLayout, type PageLayoutProps, type PageScrollableContentProps, PaginationFooter, PhoneFormat, PieChart, type PieChartProps, type PieDataPoint, type Place, PlaceSearch, type PlaceSearchProps, Popover, PowerFormat, type PresetRange, ProgressBar, Prose, type ProseProps, type ProseSize, type ProseTone, RangeCalendar, RangeCell, type RangeCellProps, RasterLayerSpec, type RegisterPhosphorIconOptions, ResistanceFormat, type ResolutionLadder, type ResolvedChartSource, type ResponsiveValue, ResultsCount, type ResultsCountProps, SECTION_NAVIGATE_EVENT, SEQUENTIAL_RAMPS, SKELETON_SIZES, SOURCE_UNIT_TO_WH, SearchConfig, SearchControl, type SearchControlProps, SearchEmptyState, type SearchEmptyStateProps, SearchLoadingState, type SearchLoadingStateProps, SearchResultGroup, type SearchResultGroupProps, SearchResultItem, type SearchResultItemProps, SearchResultsList, type SearchResultsListProps, SearchTrigger, type SearchTriggerProps, Section, SectionNav, type SectionNavItem, type SectionNavOrientation, type SectionNavProps, type SectionProps, type SectionSpacing, type SectionVariant, SelectCell, type SelectCellProps, type Serializable, SiteCard, type SiteCardProps, SiteContactCard, type SiteContactCardProps, SiteMetaCell, type SiteMetaCellProps, SiteMetaDisplay, type SiteMetaDisplayProps, Skeleton, Slider, SortControl, type SortControlProps, SortState, SparklineCell, type SparklineCellProps, SplitPane, type SplitPaneOrientation, type SplitPanePanelProps, type SplitPaneProps, type StatAlign, type StatFormatter, type StatItem, type StatLayout, StatList, type StatListProps, type StatThreshold, type StatTone$1 as StatTone, type StatValue, StreamingChart, type StreamingChartConfig, type StreamingChartProps, type StreamingChartSource, Tab, TabList, TabPanel, TableDensity, type TableExportMetadata, type TableExportOptions, Tabs, type TabsProps$1 as TabsProps, TemperatureFormat, TemperatureUnit, TemperatureUnitString, TextAreaWithChips, TextCell, type TextCellProps, TextFormat, type Tier, type TileAction, type TileData, type TileEntry, type TileRef, type TileStatus, type TileStore, type TiledCameraPreviewDomain, type TiledCameraSyncGroup, TiledTimeSeriesChart, type TiledTimeSeriesChartProps, type TiledTimeSeriesChartViewport, TiledTimeSeriesExplorer, type TiledTimeSeriesExplorerProps, type TiledTimeSeriesLiveControl, type TiledTimeSeriesPanel, type TiledTimeSeriesSource, type TiledTimeSeriesView, TimeControls, type TimeControlsProps, type TimeRange, Timeline, TimelineItem, type TimelineItemProps, type TimelineItemVariant, ToggleButton, Tooltip, TooltipData, Tray, type TrayProps, type TrendPoint, type TypographyRole, type UseBreakpointReturn, type UseClientDataControlsOptions, type UseClientDataControlsResult, type UseDataControlsClientOptions, type UseDataControlsOptions, type UseDataControlsResult, type UseDataControlsServerOptions, type UseElementSizeResult, type UseServerDataControlsOptions, type UseTableExportOptions, type UseTableExportReturn, type UseTileWindowArgs, type UseTileWindowResult, type UseTiledTimeSeriesArgs, type UseTiledTimeSeriesResult, VectorLayerSpec, type Viewport, VoltageFormat, type WindowSize, type WindowSizeOption, YFormatType, applyDataOperations, assembleSeries, autoScaleCurrent, autoScaleDistance, autoScaleEnergy, autoScalePower, autoScaleResistance, autoScaleVoltage, camelCaseToWords, capitalize, celsiusToFahrenheit, celsiusToKelvin, centimetersToInches, classicPresetRanges, createFormat, createTextureIcon, createTiledCameraSyncGroup, csvUnitFor, csvValueFor, deltaDirectionFromValue, emptyStore, enumToSentenceCase, exportChart, exportTableAsCSV, fahrenheitToCelsius, fahrenheitToKelvin, feetToMeters, feetToMiles, formatBoolean, formatCapacity, formatCurrency, formatCurrent, formatDate, formatDistance, formatEmptyValue, formatEnergy, formatFieldValue, formatInternationalPhone, formatNumber, formatPercent, formatPhone, formatPhoneNumber, formatPower, formatPowerRating, formatResistance, formatTemperature, formatText, formatUSPhone, formatVoltage, getBadgeClasses, getBooleanBadgeVariant, getCellAlignmentClasses, getCellContainerClasses, getCellTextClasses, getColorRamp, getColorRampsByKind, getDateParts, getEventColor, getExportFormatName, getExportHeaders, getLinkClasses, getNumericAxisGutter, getNumericColorClasses, getSkeletonSize, getStateTone, hasTileData, inchesToCentimeters, isCustomPinsLayer, isExportSupported, isGeoJsonLayer, isNil, isRasterLayer, isStreamingSource, isVectorLayer, kelvinToCelsius, kelvinToFahrenheit, kilometersToMiles, layer, metersToFeet, metersToMiles, metersToYards, milesToFeet, milesToKilometers, milesToMeters, parseBoolean, parseInstant, pickEnergyUnit, prepareTableDataForExport, registerPhosphorIcon, resolvePagination, resolveValue, snakeCaseToWords, telemetryPresetRanges, temperatureStringToSymbol, tierForViewport, tileIndexAt, tileKey, tileReducer, tilesForViewport, toA, toActiveInactive, toAmps, toBoolean, toCelsius, toCentimeters, toCheckmark, toCompactNumber, toCurrency, toCustomDateFormat, toDateString, toEnabledDisabled, toFahrenheit, toFeet, toFloat, toFormattedNumber, toFullDateTime, toGW, toGWh, toGigawatts, toISOString, toInches, toInteger, toKA, toKV, toKW, toKelvin, toKiloamps, toKilohms, toKilometers, toKilovolts, toKilowatts, toLowerCase, toMA, toMV, toMW, toMWh, toMegawatts, toMegohms, toMeters, toMiles, toMilliamps, toMillimeters, toMilliohms, toMillivolts, toNauticalMiles, toOhms, toOnOff, toPercentage, toRelativeTime, toScientificNotation, toSecret, toSentenceCase, toTemperature, toTitleCase, toTrueFalse, toUpperCase, toV, toVolts, toW, toWatts, toWh, toYards, tokWh, truncateEnd, truncateMiddle, truncateStart, typeRole, typographyRole, ucFirst, useBreakpoint, useChartExpand, useChartHeaderMetrics, useChartHeaderWidth, useChartOwnsItsTitle, useChartSourceHost, useChartSourceResolver, useClientDataControls, useColorMode, useContainerBreakpoint, useDataControls, useDebounce, useElementSize, useLocalStorage, useMapStyleOverride, useMediaQuery, useNotice, useServerDataControls, useTableExport, useTileWindow, useTiledTimeSeries, voltageReferenceLines, voltageYDomain, wrapWithLink, yardsToMeters };
|