@devicechain/widgets 0.23.0 → 0.24.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.
Files changed (97) hide show
  1. package/README.md +8 -3
  2. package/dist/aggregate-fold.d.ts +3 -2
  3. package/dist/aggregate-strings.d.ts +1 -0
  4. package/dist/alarm-strings.d.ts +18 -0
  5. package/dist/binding-policy.d.ts +4 -0
  6. package/dist/bound-devices-notice.d.ts +30 -0
  7. package/dist/builtin-descriptors.d.ts +290 -249
  8. package/dist/builtin-option-docs.d.ts +2 -0
  9. package/dist/builtin-registry.d.ts +249 -226
  10. package/dist/category-geometry.d.ts +1 -0
  11. package/dist/chunks/{aggregate-feed-BD3CHNFU.js → aggregate-feed-4FSBQYJL.js} +39 -11
  12. package/dist/chunks/aggregate-feed-4FSBQYJL.js.map +7 -0
  13. package/dist/chunks/{aggregate-widgets-HZQI5HTX.js → aggregate-widgets-2ZQBW3YF.js} +376 -182
  14. package/dist/chunks/aggregate-widgets-2ZQBW3YF.js.map +7 -0
  15. package/dist/chunks/alarm-widgets-X4PX5MYJ.js +72 -0
  16. package/dist/chunks/alarm-widgets-X4PX5MYJ.js.map +7 -0
  17. package/dist/chunks/chunk-546TK2QG.js +722 -0
  18. package/dist/chunks/chunk-546TK2QG.js.map +7 -0
  19. package/dist/chunks/{chunk-WBKHYZU2.js → chunk-62CHYCHI.js} +6 -62
  20. package/dist/chunks/chunk-62CHYCHI.js.map +7 -0
  21. package/dist/chunks/chunk-BMFQOTYG.js +41 -0
  22. package/dist/chunks/chunk-BMFQOTYG.js.map +7 -0
  23. package/dist/chunks/{chunk-2D7JNKFE.js → chunk-JFH4QMLA.js} +28 -4
  24. package/dist/chunks/chunk-JFH4QMLA.js.map +7 -0
  25. package/dist/chunks/chunk-QMGKB6J3.js +84 -0
  26. package/dist/chunks/chunk-QMGKB6J3.js.map +7 -0
  27. package/dist/chunks/chunk-XNEBAY4J.js +19 -0
  28. package/dist/chunks/chunk-XNEBAY4J.js.map +7 -0
  29. package/dist/chunks/chunk-YYJV54BV.js +58 -0
  30. package/dist/chunks/chunk-YYJV54BV.js.map +7 -0
  31. package/dist/chunks/compare-feed-AY3CVKUZ.js +346 -0
  32. package/dist/chunks/compare-feed-AY3CVKUZ.js.map +7 -0
  33. package/dist/chunks/{control-widgets-3V2LSSRF.js → control-widgets-UCTJJJ2D.js} +267 -78
  34. package/dist/chunks/control-widgets-UCTJJJ2D.js.map +7 -0
  35. package/dist/chunks/event-markers-feed-GEGTIHXT.js +373 -0
  36. package/dist/chunks/event-markers-feed-GEGTIHXT.js.map +7 -0
  37. package/dist/chunks/{fleet-feed-5QGDLOV5.js → fleet-feed-2SKDR6ZQ.js} +47 -8
  38. package/dist/chunks/fleet-feed-2SKDR6ZQ.js.map +7 -0
  39. package/dist/chunks/presence-widgets-2LIUKN4Y.js +350 -0
  40. package/dist/chunks/presence-widgets-2LIUKN4Y.js.map +7 -0
  41. package/dist/command-control-strings.d.ts +5 -0
  42. package/dist/compare-feed.d.ts +13 -0
  43. package/dist/compare-model.d.ts +38 -0
  44. package/dist/compare-strings.d.ts +13 -0
  45. package/dist/documented-descriptors.d.ts +4826 -0
  46. package/dist/event-markers-feed.d.ts +11 -0
  47. package/dist/event-markers-model.d.ts +38 -0
  48. package/dist/event-markers-strings.d.ts +20 -0
  49. package/dist/event-markers-types.d.ts +7 -0
  50. package/dist/fleet-count-model.d.ts +13 -0
  51. package/dist/fleet-feed.d.ts +1 -0
  52. package/dist/fleet-model.d.ts +1 -0
  53. package/dist/fleet-strings.d.ts +11 -0
  54. package/dist/index.d.ts +6 -3
  55. package/dist/index.js +946 -398
  56. package/dist/index.js.map +4 -4
  57. package/dist/presence-feed.d.ts +24 -0
  58. package/dist/presence-model.d.ts +13 -0
  59. package/dist/presence-strings.d.ts +19 -0
  60. package/dist/sparkline.d.ts +23 -0
  61. package/dist/use-bound-devices.d.ts +26 -0
  62. package/dist/widgets/aggregate-lazy.d.ts +81 -46
  63. package/dist/widgets/aggregate-widgets.d.ts +1 -0
  64. package/dist/widgets/alarm-grouped.d.ts +17 -0
  65. package/dist/widgets/alarm-lazy.d.ts +63 -16
  66. package/dist/widgets/alarm-severity.d.ts +8 -0
  67. package/dist/widgets/alarm-table.d.ts +2 -0
  68. package/dist/widgets/alarm-type-tabs.d.ts +10 -0
  69. package/dist/widgets/alarm-widgets.d.ts +2 -0
  70. package/dist/widgets/command-stepper.d.ts +22 -0
  71. package/dist/widgets/control-lazy.d.ts +16 -24
  72. package/dist/widgets/device-status.d.ts +4 -0
  73. package/dist/widgets/fleet-count.d.ts +2 -0
  74. package/dist/widgets/gauge.d.ts +2 -15
  75. package/dist/widgets/image.d.ts +2 -6
  76. package/dist/widgets/label.d.ts +2 -6
  77. package/dist/widgets/latest-card.d.ts +2 -13
  78. package/dist/widgets/lazy-chunk.d.ts +7 -2
  79. package/dist/widgets/level-lazy.d.ts +14 -96
  80. package/dist/widgets/map.d.ts +8 -5
  81. package/dist/widgets/online-doughnut.d.ts +2 -0
  82. package/dist/widgets/presence-lazy.d.ts +27 -0
  83. package/dist/widgets/presence-widgets.d.ts +3 -0
  84. package/dist/widgets/selection-lazy.d.ts +2 -4
  85. package/dist/widgets/table-lazy.d.ts +2 -7
  86. package/dist/widgets/time-series-chart.d.ts +62 -12
  87. package/package.json +13 -13
  88. package/dist/chunks/aggregate-feed-BD3CHNFU.js.map +0 -7
  89. package/dist/chunks/aggregate-widgets-HZQI5HTX.js.map +0 -7
  90. package/dist/chunks/alarm-widgets-7UY6MIYZ.js +0 -9
  91. package/dist/chunks/alarm-widgets-7UY6MIYZ.js.map +0 -7
  92. package/dist/chunks/chunk-2D7JNKFE.js.map +0 -7
  93. package/dist/chunks/chunk-6OGI4UFJ.js +0 -367
  94. package/dist/chunks/chunk-6OGI4UFJ.js.map +0 -7
  95. package/dist/chunks/chunk-WBKHYZU2.js.map +0 -7
  96. package/dist/chunks/control-widgets-3V2LSSRF.js.map +0 -7
  97. package/dist/chunks/fleet-feed-5QGDLOV5.js.map +0 -7
@@ -0,0 +1,24 @@
1
+ import { type DevicePresence, type FleetState, type MemberRoster, type WidgetActions, type WidgetDataSource, type WidgetDescriptor, type WidgetInstance } from '@devicechain/dashboards';
2
+ import { type ComponentType } from 'react';
3
+ export interface PresenceFeedProps {
4
+ hub: WidgetDataSource;
5
+ widget: WidgetInstance;
6
+ descriptor: WidgetDescriptor;
7
+ Component: ComponentType<any>;
8
+ actions: WidgetActions | undefined;
9
+ ErrorFrame: ComponentType<{
10
+ widget: WidgetInstance;
11
+ error: unknown;
12
+ }>;
13
+ }
14
+ interface Store {
15
+ key: string | null;
16
+ roster: MemberRoster | null;
17
+ states: Map<string, DevicePresence> | null;
18
+ forbidden: boolean;
19
+ error: unknown | null;
20
+ readAt: number | null;
21
+ }
22
+ export declare function buildPresenceFleet(store: Pick<Store, 'roster' | 'states' | 'forbidden' | 'error'>): FleetState;
23
+ export default function PresenceFeed({ hub, widget, descriptor, Component, actions }: PresenceFeedProps): import("react").JSX.Element;
24
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { FleetMember, MemberPresence } from '@devicechain/dashboards';
2
+ export type PresenceKind = 'online' | 'offline' | 'unknown' | 'pending' | 'failed';
3
+ export declare function presenceKind(presence: MemberPresence | undefined): PresenceKind;
4
+ export declare function lastActivityMs(presence: MemberPresence | undefined): number | undefined;
5
+ export interface PresenceTally {
6
+ online: number;
7
+ offline: number;
8
+ unknown: number;
9
+ pending: number;
10
+ failed: number;
11
+ newest: number | undefined;
12
+ }
13
+ export declare function tallyPresence(members: readonly FleetMember[]): PresenceTally;
@@ -0,0 +1,19 @@
1
+ export interface PresenceStrings {
2
+ online: string;
3
+ offline: string;
4
+ unknown: string;
5
+ neverSeen: string;
6
+ lastSeen: (when: string) => string;
7
+ failed: string;
8
+ unsupported: string;
9
+ unbound: string;
10
+ oneDevice: string;
11
+ useDoughnut: string;
12
+ ofTotal: (total: number) => string;
13
+ onlineCaption: string;
14
+ notRead: (n: number) => string;
15
+ noStatusYet: (n: number) => string;
16
+ chartLabel: (online: number, offline: number, unknown: number) => string;
17
+ }
18
+ export declare const PRESENCE_STRINGS: Record<'en' | 'es', PresenceStrings>;
19
+ export declare function presenceStrings(locale?: string | undefined): PresenceStrings;
@@ -0,0 +1,23 @@
1
+ import type { AggregateTrendPoint } from '@devicechain/dashboards';
2
+ import type { AggregateStat } from './aggregate-strings';
3
+ export interface TrendPoint {
4
+ at: number;
5
+ value: number;
6
+ }
7
+ export declare function trendValue(point: AggregateTrendPoint, stat: AggregateStat): number;
8
+ export declare function trendPoints(series: readonly AggregateTrendPoint[] | undefined, stat: AggregateStat): TrendPoint[];
9
+ export interface SparklineGeometry {
10
+ d: string;
11
+ end: {
12
+ left: number;
13
+ top: number;
14
+ } | undefined;
15
+ points: number;
16
+ }
17
+ export declare function sparklineGeometry(points: readonly TrendPoint[], height: number, bucketSeconds: number): SparklineGeometry;
18
+ export declare function Sparkline({ points, height, bucketSeconds, label, }: {
19
+ points: readonly TrendPoint[];
20
+ height: number;
21
+ bucketSeconds: number;
22
+ label: string;
23
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,26 @@
1
+ import { type BindCheck, type BindParamIssue, type DashboardDefinition, type DeviceResolver, type SelectionTarget, type SlotBinding } from '@devicechain/dashboards';
2
+ export interface BoundDevicesAddress {
3
+ search: string;
4
+ replaceSearch: (search: string) => void;
5
+ }
6
+ export interface LinkProblems {
7
+ issues: BindParamIssue[];
8
+ missing: BindCheck['missing'];
9
+ failed: BindCheck['failed'];
10
+ }
11
+ export type BoundDevicesPhase = 'ready' | 'checking' | 'refused';
12
+ export interface BoundDevices {
13
+ selection: Record<string, SlotBinding>;
14
+ select: (target: SelectionTarget) => void;
15
+ reset: () => void;
16
+ phase: BoundDevicesPhase;
17
+ problems: LinkProblems | null;
18
+ dismiss: () => void;
19
+ retry: () => void;
20
+ }
21
+ export declare function useBoundDevices({ definition, resolver, address, enabled, }: {
22
+ definition: DashboardDefinition;
23
+ resolver: Pick<DeviceResolver, 'deviceExists'>;
24
+ address: BoundDevicesAddress;
25
+ enabled?: boolean;
26
+ }): BoundDevices;
@@ -1,15 +1,13 @@
1
1
  export declare const loadAggregateWidgets: () => Promise<typeof import("./aggregate-widgets")>;
2
- export declare const statCardWidget: import("@devicechain/widget-sdk").WidgetDefinition<"aggregate", {
2
+ export declare const statCardWidget: import("@devicechain/widget-sdk").WidgetDefinition<"aggregate", import("../builtin-descriptors").DocumentedSpecs<{
3
3
  readonly title: {
4
4
  readonly kind: 'string';
5
5
  readonly labelId: 'widgetLabelTitle';
6
- readonly doc: 'Heading shown in the widget frame. Defaults to the displayed measurement name.';
7
6
  };
8
7
  readonly measurement: {
9
8
  readonly kind: 'string';
10
9
  readonly labelId: 'widgetLabelMeasurement';
11
10
  readonly helpId: 'widgetHintMeasurement';
12
- readonly doc: 'Which measurement to display. Defaults to the first the datasource selects.';
13
11
  };
14
12
  readonly stat: {
15
13
  readonly kind: "enum";
@@ -25,12 +23,10 @@ export declare const statCardWidget: import("@devicechain/widget-sdk").WidgetDef
25
23
  readonly last: "widgetStatLast";
26
24
  };
27
25
  readonly placeholderId: "widgetPlaceholderDefault";
28
- readonly doc: "Which figure to show. Default average.";
29
26
  };
30
27
  readonly unit: {
31
28
  readonly kind: 'string';
32
29
  readonly labelId: 'widgetLabelUnit';
33
- readonly doc: 'Unit suffix shown beside the value.';
34
30
  };
35
31
  readonly precision: {
36
32
  readonly kind: 'number';
@@ -39,20 +35,17 @@ export declare const statCardWidget: import("@devicechain/widget-sdk").WidgetDef
39
35
  readonly max: 100;
40
36
  readonly labelId: 'widgetLabelPrecision';
41
37
  readonly helpId: 'widgetHintPrecision';
42
- readonly doc: 'Decimal places to round displayed values to. Unset rounds to at most 3 decimals (4 significant digits under 1).';
43
38
  };
44
39
  readonly thresholds: {
45
40
  readonly kind: 'list';
46
41
  readonly maxItems: 12;
47
42
  readonly labelId: 'widgetLabelThresholds';
48
43
  readonly helpId: 'widgetHintThresholds';
49
- readonly doc: 'Severity bands over the value. Each entry starts a band at its value that runs to the next entry; below the first, and in a normal band, the widget keeps its own colour.';
50
44
  readonly item: {
51
45
  readonly value: {
52
46
  readonly kind: 'number';
53
47
  readonly required: true;
54
48
  readonly labelId: 'widgetLabelThresholdValue';
55
- readonly doc: 'The value at which this band starts.';
56
49
  };
57
50
  readonly level: {
58
51
  readonly kind: 'enum';
@@ -67,15 +60,18 @@ export declare const statCardWidget: import("@devicechain/widget-sdk").WidgetDef
67
60
  readonly critical: 'widgetSeverityCritical';
68
61
  };
69
62
  readonly placeholderId: 'widgetPlaceholderThresholdLevel';
70
- readonly doc: 'The severity of this band. The theme decides the colour; normal has none.';
71
63
  };
72
64
  readonly label: {
73
65
  readonly kind: 'string';
74
66
  readonly labelId: 'widgetLabelThresholdLabel';
75
- readonly doc: 'Text shown on the chart line for this threshold. Defaults to its value.';
76
67
  };
77
68
  };
78
69
  };
70
+ readonly sparkline: {
71
+ readonly kind: "boolean";
72
+ readonly labelId: "widgetLabelSparkline";
73
+ readonly helpId: "widgetHintSparkline";
74
+ };
79
75
  readonly windowSeconds: {
80
76
  readonly kind: 'number';
81
77
  readonly integer: true;
@@ -83,14 +79,12 @@ export declare const statCardWidget: import("@devicechain/widget-sdk").WidgetDef
83
79
  readonly max: 604800;
84
80
  readonly labelId: 'widgetLabelWindowSeconds';
85
81
  readonly helpId: 'widgetHintWindowSeconds';
86
- readonly doc: 'Seconds of history the widget covers, back from now. Leave unset to follow the board’s time range; set it to pin this widget to a fixed span that the viewer’s range picker does not change. 60 to 604800.';
87
82
  };
88
- }>;
89
- export declare const barChartWidget: import("@devicechain/widget-sdk").WidgetDefinition<"measurement", {
83
+ }>>;
84
+ export declare const barChartWidget: import("@devicechain/widget-sdk").WidgetDefinition<"measurement", import("../builtin-descriptors").DocumentedSpecs<{
90
85
  readonly title: {
91
86
  readonly kind: 'string';
92
87
  readonly labelId: 'widgetLabelTitle';
93
- readonly doc: 'Heading shown in the widget frame. Blank hides the frame heading.';
94
88
  };
95
89
  readonly groupBy: {
96
90
  readonly kind: "enum";
@@ -102,18 +96,15 @@ export declare const barChartWidget: import("@devicechain/widget-sdk").WidgetDef
102
96
  readonly device: "widgetGroupByDevice";
103
97
  };
104
98
  readonly placeholderId: "widgetPlaceholderDefault";
105
- readonly doc: "One bar per measurement (the default), or per device of the group for the measurement set below.";
106
99
  };
107
100
  readonly measurement: {
108
101
  readonly kind: 'string';
109
102
  readonly labelId: 'widgetLabelMeasurement';
110
103
  readonly helpId: 'widgetHintMeasurement';
111
- readonly doc: 'Which measurement to display. Defaults to the first the datasource selects.';
112
104
  };
113
105
  readonly unit: {
114
106
  readonly kind: 'string';
115
107
  readonly labelId: 'widgetLabelUnit';
116
- readonly doc: 'Unit suffix shown beside the value.';
117
108
  };
118
109
  readonly precision: {
119
110
  readonly kind: 'number';
@@ -122,7 +113,6 @@ export declare const barChartWidget: import("@devicechain/widget-sdk").WidgetDef
122
113
  readonly max: 100;
123
114
  readonly labelId: 'widgetLabelPrecision';
124
115
  readonly helpId: 'widgetHintPrecision';
125
- readonly doc: 'Decimal places to round displayed values to. Unset rounds to at most 3 decimals (4 significant digits under 1).';
126
116
  };
127
117
  readonly sort: {
128
118
  readonly kind: 'enum';
@@ -134,19 +124,16 @@ export declare const barChartWidget: import("@devicechain/widget-sdk").WidgetDef
134
124
  readonly descending: 'widgetSortDescending';
135
125
  };
136
126
  readonly placeholderId: 'widgetPlaceholderDefault';
137
- readonly doc: 'Order of the categories. Default: as the data source lists them.';
138
127
  };
139
- }>;
140
- export declare const pieChartWidget: import("@devicechain/widget-sdk").WidgetDefinition<"measurement", {
128
+ }>>;
129
+ export declare const pieChartWidget: import("@devicechain/widget-sdk").WidgetDefinition<"measurement", import("../builtin-descriptors").DocumentedSpecs<{
141
130
  readonly title: {
142
131
  readonly kind: 'string';
143
132
  readonly labelId: 'widgetLabelTitle';
144
- readonly doc: 'Heading shown in the widget frame. Blank hides the frame heading.';
145
133
  };
146
134
  readonly unit: {
147
135
  readonly kind: 'string';
148
136
  readonly labelId: 'widgetLabelUnit';
149
- readonly doc: 'Unit suffix shown beside the value.';
150
137
  };
151
138
  readonly precision: {
152
139
  readonly kind: 'number';
@@ -155,7 +142,6 @@ export declare const pieChartWidget: import("@devicechain/widget-sdk").WidgetDef
155
142
  readonly max: 100;
156
143
  readonly labelId: 'widgetLabelPrecision';
157
144
  readonly helpId: 'widgetHintPrecision';
158
- readonly doc: 'Decimal places to round displayed values to. Unset rounds to at most 3 decimals (4 significant digits under 1).';
159
145
  };
160
146
  readonly sort: {
161
147
  readonly kind: 'enum';
@@ -167,37 +153,99 @@ export declare const pieChartWidget: import("@devicechain/widget-sdk").WidgetDef
167
153
  readonly descending: 'widgetSortDescending';
168
154
  };
169
155
  readonly placeholderId: 'widgetPlaceholderDefault';
170
- readonly doc: 'Order of the categories. Default: as the data source lists them.';
171
156
  };
172
- }>;
173
- export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetDefinition<"measurement", {
157
+ }>>;
158
+ export declare const fleetCountWidget: import("@devicechain/widget-sdk").WidgetDefinition<"measurement", import("../builtin-descriptors").DocumentedSpecs<{
159
+ readonly title: {
160
+ readonly kind: 'string';
161
+ readonly labelId: 'widgetLabelTitle';
162
+ };
163
+ readonly show: {
164
+ readonly kind: "enum";
165
+ readonly values: readonly ["attention", "devices"];
166
+ readonly labelId: "widgetLabelFleetShow";
167
+ readonly helpId: "widgetHintFleetShow";
168
+ readonly valueLabelIds: {
169
+ readonly attention: "widgetFleetShowAttention";
170
+ readonly devices: "widgetFleetShowDevices";
171
+ };
172
+ readonly placeholderId: "widgetPlaceholderDefault";
173
+ };
174
+ readonly measurement: {
175
+ readonly kind: 'string';
176
+ readonly labelId: 'widgetLabelMeasurement';
177
+ readonly helpId: 'widgetHintMeasurement';
178
+ };
179
+ readonly thresholds: {
180
+ readonly kind: 'list';
181
+ readonly maxItems: 12;
182
+ readonly labelId: 'widgetLabelThresholds';
183
+ readonly helpId: 'widgetHintThresholds';
184
+ readonly item: {
185
+ readonly value: {
186
+ readonly kind: 'number';
187
+ readonly required: true;
188
+ readonly labelId: 'widgetLabelThresholdValue';
189
+ };
190
+ readonly level: {
191
+ readonly kind: 'enum';
192
+ readonly required: true;
193
+ readonly values: readonly ["normal", "warning", "minor", "major", "critical"];
194
+ readonly labelId: 'widgetLabelThresholdLevel';
195
+ readonly valueLabelIds: {
196
+ readonly normal: 'widgetSeverityNormal';
197
+ readonly warning: 'widgetSeverityWarning';
198
+ readonly minor: 'widgetSeverityMinor';
199
+ readonly major: 'widgetSeverityMajor';
200
+ readonly critical: 'widgetSeverityCritical';
201
+ };
202
+ readonly placeholderId: 'widgetPlaceholderThresholdLevel';
203
+ };
204
+ readonly label: {
205
+ readonly kind: 'string';
206
+ readonly labelId: 'widgetLabelThresholdLabel';
207
+ };
208
+ };
209
+ };
210
+ readonly staleAfterSeconds: {
211
+ readonly kind: 'number';
212
+ readonly integer: true;
213
+ readonly min: 1;
214
+ readonly labelId: 'widgetLabelStaleAfter';
215
+ readonly helpId: 'widgetHintStaleAfter';
216
+ };
217
+ readonly windowSeconds: {
218
+ readonly kind: 'number';
219
+ readonly integer: true;
220
+ readonly min: 60;
221
+ readonly max: 604800;
222
+ readonly labelId: 'widgetLabelWindowSeconds';
223
+ readonly helpId: 'widgetHintWindowSeconds';
224
+ };
225
+ }>>;
226
+ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetDefinition<"measurement", import("../builtin-descriptors").DocumentedSpecs<{
174
227
  readonly title: {
175
228
  readonly kind: 'string';
176
229
  readonly labelId: 'widgetLabelTitle';
177
- readonly doc: 'Heading shown in the widget frame. Blank hides the frame heading.';
178
230
  };
179
231
  readonly columns: {
180
232
  readonly kind: 'list';
181
233
  readonly maxItems: 24;
182
234
  readonly labelId: 'widgetLabelColumns';
183
235
  readonly helpId: 'widgetHintColumns';
184
- readonly doc: 'Heading, unit and precision per measurement column; a column with none shows its name.';
185
236
  readonly item: {
186
237
  readonly measurement: {
187
238
  readonly kind: 'string';
188
239
  readonly required: true;
189
240
  readonly labelId: 'widgetLabelMeasurement';
190
- readonly doc: 'The measurement column this entry applies to.';
191
241
  };
192
242
  readonly label: {
193
243
  readonly kind: 'string';
194
244
  readonly labelId: 'widgetLabelColumnHeading';
195
- readonly doc: 'Column heading. Defaults to the measurement name.';
196
245
  };
197
246
  readonly unit: {
198
247
  readonly kind: 'string';
199
248
  readonly labelId: 'widgetLabelUnit';
200
- readonly doc: 'Unit suffix shown beside the value.';
201
249
  };
202
250
  readonly precision: {
203
251
  readonly kind: 'number';
@@ -206,7 +254,6 @@ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetD
206
254
  readonly max: 100;
207
255
  readonly labelId: 'widgetLabelPrecision';
208
256
  readonly helpId: 'widgetHintPrecision';
209
- readonly doc: 'Decimal places to round displayed values to. Unset rounds to at most 3 decimals (4 significant digits under 1).';
210
257
  };
211
258
  };
212
259
  };
@@ -215,13 +262,11 @@ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetD
215
262
  readonly maxItems: 12;
216
263
  readonly labelId: 'widgetLabelThresholds';
217
264
  readonly helpId: 'widgetHintThresholds';
218
- readonly doc: 'Severity bands over the value. Each entry starts a band at its value that runs to the next entry; below the first, and in a normal band, the widget keeps its own colour.';
219
265
  readonly item: {
220
266
  readonly value: {
221
267
  readonly kind: 'number';
222
268
  readonly required: true;
223
269
  readonly labelId: 'widgetLabelThresholdValue';
224
- readonly doc: 'The value at which this band starts.';
225
270
  };
226
271
  readonly level: {
227
272
  readonly kind: 'enum';
@@ -236,18 +281,15 @@ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetD
236
281
  readonly critical: 'widgetSeverityCritical';
237
282
  };
238
283
  readonly placeholderId: 'widgetPlaceholderThresholdLevel';
239
- readonly doc: 'The severity of this band. The theme decides the colour; normal has none.';
240
284
  };
241
285
  readonly label: {
242
286
  readonly kind: 'string';
243
287
  readonly labelId: 'widgetLabelThresholdLabel';
244
- readonly doc: 'Text shown on the chart line for this threshold. Defaults to its value.';
245
288
  };
246
289
  readonly measurement: {
247
290
  readonly kind: 'string';
248
291
  readonly required: true;
249
292
  readonly labelId: 'widgetLabelMeasurement';
250
- readonly doc: 'The measurement column this entry applies to.';
251
293
  };
252
294
  };
253
295
  };
@@ -257,7 +299,6 @@ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetD
257
299
  readonly min: 1;
258
300
  readonly labelId: 'widgetLabelStaleAfter';
259
301
  readonly helpId: 'widgetHintStaleAfter';
260
- readonly doc: 'Seconds after which the newest sample is called stale: the value is greyed out and badged. Unset shows the sample age only and never marks the widget stale.';
261
302
  };
262
303
  readonly ageLagSeconds: {
263
304
  readonly kind: "number";
@@ -265,18 +306,15 @@ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetD
265
306
  readonly min: 1;
266
307
  readonly labelId: "widgetLabelAgeLag";
267
308
  readonly helpId: "widgetHintAgeLag";
268
- readonly doc: "Show a reading's age under it only when the reading is at least this many seconds older than the newest reading in the table (or stale). Unset shows every reading's age.";
269
309
  };
270
310
  readonly sortBy: {
271
311
  readonly kind: "string";
272
312
  readonly labelId: "widgetLabelSortBy";
273
313
  readonly helpId: "widgetHintSortBy";
274
- readonly doc: "The measurement the table is ordered by. Blank orders by device name.";
275
314
  };
276
315
  readonly sortDescending: {
277
316
  readonly kind: "boolean";
278
317
  readonly labelId: "widgetLabelSortDescending";
279
- readonly doc: "Largest first.";
280
318
  };
281
319
  readonly pageSize: {
282
320
  readonly kind: "number";
@@ -284,14 +322,12 @@ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetD
284
322
  readonly min: 5;
285
323
  readonly max: 100;
286
324
  readonly labelId: "widgetLabelPageSize";
287
- readonly doc: "Devices per page. Default 20.";
288
325
  };
289
326
  readonly selectionTarget: {
290
327
  readonly kind: 'string';
291
328
  readonly labelId: 'widgetLabelTargetSlot';
292
329
  readonly helpId: 'widgetTargetSlotHint';
293
330
  readonly control: 'slot-target';
294
- readonly doc: 'Name of the slot this widget re-points when the viewer picks an entity.';
295
331
  };
296
332
  readonly windowSeconds: {
297
333
  readonly kind: 'number';
@@ -300,6 +336,5 @@ export declare const fleetTableWidget: import("@devicechain/widget-sdk").WidgetD
300
336
  readonly max: 604800;
301
337
  readonly labelId: 'widgetLabelWindowSeconds';
302
338
  readonly helpId: 'widgetHintWindowSeconds';
303
- readonly doc: 'Seconds of history the widget covers, back from now. Leave unset to follow the board’s time range; set it to pin this widget to a fixed span that the viewer’s range picker does not change. 60 to 604800.';
304
339
  };
305
- }>;
340
+ }>>;
@@ -1,4 +1,5 @@
1
1
  export { BarChart } from './bar-chart';
2
+ export { FleetCount } from './fleet-count';
2
3
  export { FleetTable } from './fleet-table';
3
4
  export { PieChart } from './pie-chart';
4
5
  export { StatCard } from './stat-card';
@@ -0,0 +1,17 @@
1
+ import type { AlarmSubscription, AlarmTypeCount, AlarmTypeTab, WidgetActions, WidgetDataSource, WidgetInstance } from '@devicechain/dashboards';
2
+ import { type ComponentType } from 'react';
3
+ import type { useHeld as UseHeld } from '../use-held';
4
+ export interface GroupedAlarmProps {
5
+ hub: WidgetDataSource;
6
+ widget: WidgetInstance;
7
+ base: AlarmSubscription;
8
+ useHeld: typeof UseHeld;
9
+ Component: ComponentType<any>;
10
+ actions: WidgetActions | undefined;
11
+ ErrorFrame: ComponentType<{
12
+ widget: WidgetInstance;
13
+ error: unknown;
14
+ }>;
15
+ }
16
+ export declare function foldTypeTabs(counts: readonly AlarmTypeCount[], selected: string | null, names: Map<string, string | null>): AlarmTypeTab[];
17
+ export declare function GroupedAlarm({ widget, hub, base, useHeld, Component, actions, ErrorFrame }: GroupedAlarmProps): import("react").JSX.Element;
@@ -1,9 +1,8 @@
1
1
  export declare const loadAlarmWidgets: () => Promise<typeof import("./alarm-widgets")>;
2
- export declare const alarmTableWidget: import("@devicechain/widget-sdk").WidgetDefinition<"alarm", {
2
+ export declare const alarmTableWidget: import("@devicechain/widget-sdk").WidgetDefinition<"alarm", import("../builtin-descriptors").DocumentedSpecs<{
3
3
  readonly title: {
4
4
  readonly kind: 'string';
5
5
  readonly labelId: 'widgetLabelTitle';
6
- readonly doc: 'Heading shown in the widget frame. Blank hides the frame heading.';
7
6
  };
8
7
  readonly state: {
9
8
  readonly kind: 'enum';
@@ -15,7 +14,6 @@ export declare const alarmTableWidget: import("@devicechain/widget-sdk").WidgetD
15
14
  readonly CLEARED: 'widgetAlarmStateCleared';
16
15
  };
17
16
  readonly placeholderId: 'widgetPlaceholderAny';
18
- readonly doc: 'Show only alarms in this state. Unset shows every state.';
19
17
  };
20
18
  readonly severity: {
21
19
  readonly kind: 'enum';
@@ -30,7 +28,6 @@ export declare const alarmTableWidget: import("@devicechain/widget-sdk").WidgetD
30
28
  readonly INDETERMINATE: 'widgetAlarmSeverityIndeterminate';
31
29
  };
32
30
  readonly placeholderId: 'widgetPlaceholderAny';
33
- readonly doc: 'Show only alarms at this severity. Unset shows every severity.';
34
31
  };
35
32
  readonly acknowledged: {
36
33
  readonly kind: 'enum';
@@ -42,7 +39,31 @@ export declare const alarmTableWidget: import("@devicechain/widget-sdk").WidgetD
42
39
  readonly false: 'widgetAlarmAckUnacknowledged';
43
40
  };
44
41
  readonly placeholderId: 'widgetPlaceholderAny';
45
- readonly doc: "Show only acknowledged ('true') or unacknowledged ('false') alarms. Unset shows both.";
42
+ };
43
+ readonly groupBy: {
44
+ readonly kind: "enum";
45
+ readonly values: readonly ["none", "deviceType"];
46
+ readonly labelId: "widgetLabelAlarmGroupBy";
47
+ readonly helpId: "widgetHintAlarmGroupBy";
48
+ readonly valueLabelIds: {
49
+ readonly none: "widgetAlarmGroupByNone";
50
+ readonly deviceType: "widgetAlarmGroupByDeviceType";
51
+ };
52
+ readonly placeholderId: "widgetPlaceholderDefault";
53
+ };
54
+ readonly deviceTypes: {
55
+ readonly kind: "list";
56
+ readonly maxItems: 24;
57
+ readonly ordered: true;
58
+ readonly labelId: "widgetLabelAlarmDeviceTypes";
59
+ readonly helpId: "widgetHintAlarmDeviceTypes";
60
+ readonly item: {
61
+ readonly token: {
62
+ readonly kind: "string";
63
+ readonly control: "device-type";
64
+ readonly labelId: "widgetLabelAlarmDeviceTypeToken";
65
+ };
66
+ };
46
67
  };
47
68
  readonly maxRows: {
48
69
  readonly kind: "number";
@@ -50,7 +71,6 @@ export declare const alarmTableWidget: import("@devicechain/widget-sdk").WidgetD
50
71
  readonly min: 1;
51
72
  readonly labelId: "widgetLabelMaxRows";
52
73
  readonly helpId: "widgetMaxRowsAlarmHint";
53
- readonly doc: "Alarms loaded into the table. Default 50.";
54
74
  };
55
75
  readonly precision: {
56
76
  readonly kind: 'number';
@@ -59,27 +79,57 @@ export declare const alarmTableWidget: import("@devicechain/widget-sdk").WidgetD
59
79
  readonly max: 100;
60
80
  readonly labelId: 'widgetLabelPrecision';
61
81
  readonly helpId: 'widgetHintPrecision';
62
- readonly doc: 'Decimal places to round displayed values to. Unset rounds to at most 3 decimals (4 significant digits under 1).';
63
82
  };
64
83
  readonly flashOnChange: {
65
84
  readonly kind: 'boolean';
66
85
  readonly labelId: 'widgetFlashOnChange';
67
86
  readonly helpId: 'widgetFlashOnChangeHint';
68
- readonly doc: 'Briefly tint a value green on a rise and red on a fall when it changes.';
69
87
  };
70
88
  readonly selectionTarget: {
71
89
  readonly kind: 'string';
72
90
  readonly labelId: 'widgetLabelTargetSlot';
73
91
  readonly helpId: 'widgetTargetSlotHint';
74
92
  readonly control: 'slot-target';
75
- readonly doc: 'Name of the slot this widget re-points when the viewer picks an entity.';
76
93
  };
77
- }>;
78
- export declare const alarmCountWidget: import("@devicechain/widget-sdk").WidgetDefinition<"alarm", {
94
+ }>>;
95
+ export declare const alarmSeverityWidget: import("@devicechain/widget-sdk").WidgetDefinition<"alarm", import("../builtin-descriptors").DocumentedSpecs<{
96
+ readonly title: {
97
+ readonly kind: 'string';
98
+ readonly labelId: 'widgetLabelTitle';
99
+ };
100
+ readonly state: {
101
+ readonly kind: 'enum';
102
+ readonly values: readonly ["ACTIVE", "CLEARED"];
103
+ readonly labelId: 'widgetLabelState';
104
+ readonly helpId: 'widgetStateHint';
105
+ readonly valueLabelIds: {
106
+ readonly ACTIVE: 'widgetAlarmStateActive';
107
+ readonly CLEARED: 'widgetAlarmStateCleared';
108
+ };
109
+ readonly placeholderId: 'widgetPlaceholderAny';
110
+ };
111
+ readonly acknowledged: {
112
+ readonly kind: 'enum';
113
+ readonly values: readonly ["true", "false"];
114
+ readonly labelId: 'widgetLabelAcknowledged';
115
+ readonly helpId: 'widgetAcknowledgedHint';
116
+ readonly valueLabelIds: {
117
+ readonly true: 'widgetAlarmAckAcknowledged';
118
+ readonly false: 'widgetAlarmAckUnacknowledged';
119
+ };
120
+ readonly placeholderId: 'widgetPlaceholderAny';
121
+ };
122
+ readonly deviceType: {
123
+ readonly kind: "string";
124
+ readonly control: "device-type";
125
+ readonly labelId: "widgetLabelAlarmSeverityType";
126
+ readonly helpId: "widgetHintAlarmSeverityType";
127
+ };
128
+ }>>;
129
+ export declare const alarmCountWidget: import("@devicechain/widget-sdk").WidgetDefinition<"alarm", import("../builtin-descriptors").DocumentedSpecs<{
79
130
  readonly title: {
80
131
  readonly kind: 'string';
81
132
  readonly labelId: 'widgetLabelTitle';
82
- readonly doc: 'Heading shown in the widget frame. Blank hides the frame heading.';
83
133
  };
84
134
  readonly state: {
85
135
  readonly kind: 'enum';
@@ -91,7 +141,6 @@ export declare const alarmCountWidget: import("@devicechain/widget-sdk").WidgetD
91
141
  readonly CLEARED: 'widgetAlarmStateCleared';
92
142
  };
93
143
  readonly placeholderId: 'widgetPlaceholderAny';
94
- readonly doc: 'Show only alarms in this state. Unset shows every state.';
95
144
  };
96
145
  readonly severity: {
97
146
  readonly kind: 'enum';
@@ -106,7 +155,6 @@ export declare const alarmCountWidget: import("@devicechain/widget-sdk").WidgetD
106
155
  readonly INDETERMINATE: 'widgetAlarmSeverityIndeterminate';
107
156
  };
108
157
  readonly placeholderId: 'widgetPlaceholderAny';
109
- readonly doc: 'Show only alarms at this severity. Unset shows every severity.';
110
158
  };
111
159
  readonly acknowledged: {
112
160
  readonly kind: 'enum';
@@ -118,6 +166,5 @@ export declare const alarmCountWidget: import("@devicechain/widget-sdk").WidgetD
118
166
  readonly false: 'widgetAlarmAckUnacknowledged';
119
167
  };
120
168
  readonly placeholderId: 'widgetPlaceholderAny';
121
- readonly doc: "Show only acknowledged ('true') or unacknowledged ('false') alarms. Unset shows both.";
122
169
  };
123
- }>;
170
+ }>>;
@@ -0,0 +1,8 @@
1
+ import { type AlarmStreamState, type WidgetProps } from '@devicechain/widget-sdk';
2
+ export declare const SEVERITY_SCALE: readonly ['CRITICAL', 'MAJOR', 'MINOR', 'WARNING', 'INDETERMINATE'];
3
+ export type ScaleSeverity = (typeof SEVERITY_SCALE)[number];
4
+ export declare function severityCounts(source: readonly {
5
+ severity: string;
6
+ count: number;
7
+ }[]): Record<ScaleSeverity, number>;
8
+ export declare function AlarmSeverity({ widget, data }: WidgetProps<AlarmStreamState>): import("react").JSX.Element;
@@ -1,5 +1,7 @@
1
+ import type { AlarmTypeTab } from '@devicechain/dashboards';
1
2
  import { type ReactNode } from 'react';
2
3
  import { type AlarmStreamState, type WidgetProps } from '@devicechain/widget-sdk';
3
4
  export declare const ALARM_TABLE_NARROW_PX = 480;
4
5
  export declare function hyphenBreaks(text: string): ReactNode;
6
+ export declare function shownTabs(discovered: readonly AlarmTypeTab[], pinned: readonly string[]): AlarmTypeTab[];
5
7
  export declare function AlarmTable({ widget, data, actions }: WidgetProps<AlarmStreamState>): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import type { AlarmTypeTab } from '@devicechain/dashboards';
2
+ export interface AlarmTypeTabsProps {
3
+ tabs: readonly AlarmTypeTab[];
4
+ selected: string | null;
5
+ onSelect: (token: string | null) => void;
6
+ idBase: string;
7
+ }
8
+ export declare const tabDomId: (idBase: string, token: string | null) => string;
9
+ export declare const panelDomId: (idBase: string) => string;
10
+ export declare function AlarmTypeTabsStrip({ tabs, selected, onSelect, idBase }: AlarmTypeTabsProps): import("react").JSX.Element;