@oicl/openbridge-webcomponents 2.0.0-next.152 → 2.0.0-next.154
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/bundle/openbridge-webcomponents.bundle.js +5026 -4717
- package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
- package/custom-elements.json +701 -107
- package/dist/alert-severity.d.ts +19 -1
- package/dist/alert-severity.d.ts.map +1 -1
- package/dist/alert-severity.js +48 -2
- package/dist/alert-severity.js.map +1 -1
- package/dist/components/alert-button/alert-button.css.js +7 -1513
- package/dist/components/alert-button/alert-button.css.js.map +1 -1
- package/dist/components/alert-button/alert-button.d.ts +50 -86
- package/dist/components/alert-button/alert-button.d.ts.map +1 -1
- package/dist/components/alert-button/alert-button.js +40 -107
- package/dist/components/alert-button/alert-button.js.map +1 -1
- package/dist/components/alert-button-item/alert-button-item.css.js +1570 -0
- package/dist/components/alert-button-item/alert-button-item.css.js.map +1 -0
- package/dist/components/alert-button-item/alert-button-item.d.ts +162 -0
- package/dist/components/alert-button-item/alert-button-item.d.ts.map +1 -0
- package/dist/components/alert-button-item/alert-button-item.js +210 -0
- package/dist/components/alert-button-item/alert-button-item.js.map +1 -0
- package/dist/components/alert-counter-item/alert-counter-item.css.js +25 -0
- package/dist/components/alert-counter-item/alert-counter-item.css.js.map +1 -0
- package/dist/components/alert-counter-item/alert-counter-item.d.ts +77 -0
- package/dist/components/alert-counter-item/alert-counter-item.d.ts.map +1 -0
- package/dist/components/alert-counter-item/alert-counter-item.js +87 -0
- package/dist/components/alert-counter-item/alert-counter-item.js.map +1 -0
- package/dist/components/alert-frame/alert-frame.css.js +23 -27
- package/dist/components/alert-frame/alert-frame.css.js.map +1 -1
- package/dist/components/alert-frame/alert-frame.d.ts +7 -6
- package/dist/components/alert-frame/alert-frame.d.ts.map +1 -1
- package/dist/components/alert-frame/alert-frame.js +6 -9
- package/dist/components/alert-frame/alert-frame.js.map +1 -1
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js +3 -7
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js.map +1 -1
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts +133 -14
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts.map +1 -1
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js +330 -233
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js.map +1 -1
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/table/table.js +10 -2
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/tree-navigation-item/tree-navigation-item.d.ts +7 -34
- package/dist/components/tree-navigation-item/tree-navigation-item.d.ts.map +1 -1
- package/dist/components/tree-navigation-item/tree-navigation-item.js +3 -32
- package/dist/components/tree-navigation-item/tree-navigation-item.js.map +1 -1
- package/dist/generated/locales/es-419.d.ts +11 -3
- package/dist/generated/locales/es-419.d.ts.map +1 -1
- package/dist/generated/locales/es-419.js +11 -3
- package/dist/generated/locales/es-419.js.map +1 -1
- package/dist/generated/locales/fi-FI.d.ts +8 -0
- package/dist/generated/locales/fi-FI.d.ts.map +1 -1
- package/dist/generated/locales/fi-FI.js +8 -0
- package/dist/generated/locales/fi-FI.js.map +1 -1
- package/dist/navigation-instruments/readout/readout.css.js +4 -29
- package/dist/navigation-instruments/readout/readout.css.js.map +1 -1
- package/dist/navigation-instruments/readout/readout.d.ts.map +1 -1
- package/dist/navigation-instruments/readout/readout.js +1 -9
- package/dist/navigation-instruments/readout/readout.js.map +1 -1
- package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js +5 -34
- package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js.map +1 -1
- package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts.map +1 -1
- package/dist/navigation-instruments/readout-list-item/readout-list-item.js +1 -9
- package/dist/navigation-instruments/readout-list-item/readout-list-item.js.map +1 -1
- package/dist/palettes/blinking.d.ts +6 -2
- package/dist/palettes/blinking.d.ts.map +1 -1
- package/dist/palettes/blinking.js +6 -2
- package/dist/palettes/blinking.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/dist/alert-severity.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AlertType, ALERT_SEVERITY_PRIORITY, FlashingSpeed, ResolvedFlashingSpeed } from './types.js';
|
|
1
|
+
import { AlertType, ALERT_SEVERITY_PRIORITY, FlashingSpeed, AlertCounts, ResolvedFlashingSpeed } from './types.js';
|
|
2
2
|
export { ALERT_SEVERITY_PRIORITY };
|
|
3
3
|
export declare enum AlertBadgeComponent {
|
|
4
4
|
Alarm = "obi-alarm-badge",
|
|
@@ -38,4 +38,22 @@ export declare function getAlertTwotoneComponent(type: AlertType): AlertTwotoneC
|
|
|
38
38
|
export declare function getBamAlertTypeForBlinking(type: AlertType): AlertType;
|
|
39
39
|
export declare function excludedFromUnackedFilter(type: AlertType): boolean;
|
|
40
40
|
export declare function usesAlarmNoAckIcon(type: AlertType): boolean;
|
|
41
|
+
/** One severity and its alert count, as `rankAlertCounts` returns them. */
|
|
42
|
+
export interface RankedAlertCount {
|
|
43
|
+
type: AlertType;
|
|
44
|
+
count: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The positive counts, most severe first by `ALERT_SEVERITY_PRIORITY`.
|
|
48
|
+
* `combine` folds them into one entry: the total, typed as the most severe
|
|
49
|
+
* category present.
|
|
50
|
+
*/
|
|
51
|
+
export declare function rankAlertCounts(counts: AlertCounts, combine?: boolean): RankedAlertCount[];
|
|
52
|
+
/** Localized severity name, read at render time so a locale switch applies. */
|
|
53
|
+
export declare function alertTypeLabel(type: AlertType): string;
|
|
54
|
+
/**
|
|
55
|
+
* Accessible summary of the counts, e.g. "2 Alarm, 4 Warning, 9 Shelved";
|
|
56
|
+
* empty when nothing is counted.
|
|
57
|
+
*/
|
|
58
|
+
export declare function alertCountsLabel(counts: AlertCounts, shelvedCount?: number): string;
|
|
41
59
|
//# sourceMappingURL=alert-severity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-severity.d.ts","sourceRoot":"","sources":["../src/alert-severity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"alert-severity.d.ts","sourceRoot":"","sources":["../src/alert-severity.ts"],"names":[],"mappings":"AAiDA,OAAO,EACL,SAAS,EACT,uBAAuB,EACvB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAC,uBAAuB,EAAC,CAAC;AAEjC,oBAAY,mBAAmB;IAC7B,KAAK,oBAAoB;IACzB,OAAO,sBAAsB;IAC7B,OAAO,sBAAsB;IAC7B,QAAQ,uBAAuB;IAC/B,UAAU,yBAAyB;CACpC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAShE;AAED,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,SAAS,EACf,KAAK,GAAE,eAAwC,GAC9C,qBAAqB,CAuBvB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEhE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAqCrE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,CAiB3E;AAED,oBAAY,qBAAqB;IAC/B,KAAK,6BAA6B;IAClC,OAAO,+BAA+B;IACtC,OAAO,+BAA+B;IACtC,QAAQ,gCAAgC;IACxC,UAAU,kCAAkC;CAC7C;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,GACd,qBAAqB,CAiBvB;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAYrE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAElE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAM3D;AAED,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAaD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,OAAO,UAAQ,GACd,gBAAgB,EAAE,CAUpB;AAaD,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,YAAY,SAAI,GACf,MAAM,CAQR"}
|
package/dist/alert-severity.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ALERT_SEVERITY_PRIORITY } from "./types.js";
|
|
1
|
+
import { msg } from "@lit/localize";
|
|
2
|
+
import { AlertType, FlashingSpeed, ALERT_SEVERITY_PRIORITY } from "./types.js";
|
|
3
3
|
var AlertBadgeComponent = /* @__PURE__ */ ((AlertBadgeComponent2) => {
|
|
4
4
|
AlertBadgeComponent2["Alarm"] = "obi-alarm-badge";
|
|
5
5
|
AlertBadgeComponent2["Warning"] = "obi-warning-badge";
|
|
@@ -155,17 +155,63 @@ function usesAlarmNoAckIcon(type) {
|
|
|
155
155
|
AlertType.LevelHigh
|
|
156
156
|
].includes(type);
|
|
157
157
|
}
|
|
158
|
+
const ALERT_COUNT_FIELD = {
|
|
159
|
+
[AlertType.Alarm]: "countAlarm",
|
|
160
|
+
[AlertType.Warning]: "countWarning",
|
|
161
|
+
[AlertType.Caution]: "countCaution",
|
|
162
|
+
[AlertType.LevelCritical]: "countLevelCritical",
|
|
163
|
+
[AlertType.LevelHigh]: "countLevelHigh",
|
|
164
|
+
[AlertType.LevelMedium]: "countLevelMedium",
|
|
165
|
+
[AlertType.LevelLow]: "countLevelLow",
|
|
166
|
+
[AlertType.LevelDiagnostic]: "countLevelDiagnostic"
|
|
167
|
+
};
|
|
168
|
+
function rankAlertCounts(counts, combine = false) {
|
|
169
|
+
const ranked = ALERT_SEVERITY_PRIORITY.map((type) => ({
|
|
170
|
+
type,
|
|
171
|
+
count: counts[ALERT_COUNT_FIELD[type]] ?? 0
|
|
172
|
+
})).filter((entry) => entry.count > 0);
|
|
173
|
+
if (!combine || ranked.length === 0) {
|
|
174
|
+
return ranked;
|
|
175
|
+
}
|
|
176
|
+
const total = ranked.reduce((sum, entry) => sum + entry.count, 0);
|
|
177
|
+
return [{ type: ranked[0].type, count: total }];
|
|
178
|
+
}
|
|
179
|
+
const ALERT_TYPE_LABEL = {
|
|
180
|
+
[AlertType.Alarm]: () => msg("Alarm"),
|
|
181
|
+
[AlertType.Warning]: () => msg("Warning"),
|
|
182
|
+
[AlertType.Caution]: () => msg("Caution"),
|
|
183
|
+
[AlertType.LevelCritical]: () => msg("Critical"),
|
|
184
|
+
[AlertType.LevelHigh]: () => msg("High"),
|
|
185
|
+
[AlertType.LevelMedium]: () => msg("Medium"),
|
|
186
|
+
[AlertType.LevelLow]: () => msg("Low"),
|
|
187
|
+
[AlertType.LevelDiagnostic]: () => msg("Diagnostic")
|
|
188
|
+
};
|
|
189
|
+
function alertTypeLabel(type) {
|
|
190
|
+
return ALERT_TYPE_LABEL[type]();
|
|
191
|
+
}
|
|
192
|
+
function alertCountsLabel(counts, shelvedCount = 0) {
|
|
193
|
+
const parts = rankAlertCounts(counts).map(
|
|
194
|
+
({ type, count }) => `${count} ${alertTypeLabel(type)}`
|
|
195
|
+
);
|
|
196
|
+
if (shelvedCount > 0) {
|
|
197
|
+
parts.push(`${shelvedCount} ${msg("Shelved")}`);
|
|
198
|
+
}
|
|
199
|
+
return parts.join(", ");
|
|
200
|
+
}
|
|
158
201
|
export {
|
|
159
202
|
ALERT_SEVERITY_PRIORITY,
|
|
160
203
|
AlertBadgeComponent,
|
|
161
204
|
AlertFlashPhase,
|
|
162
205
|
AlertTwotoneComponent,
|
|
206
|
+
alertCountsLabel,
|
|
207
|
+
alertTypeLabel,
|
|
163
208
|
excludedFromUnackedFilter,
|
|
164
209
|
getAlertBadgeComponent,
|
|
165
210
|
getAlertColorTokens,
|
|
166
211
|
getAlertSeverityCssClass,
|
|
167
212
|
getAlertTwotoneComponent,
|
|
168
213
|
getBamAlertTypeForBlinking,
|
|
214
|
+
rankAlertCounts,
|
|
169
215
|
requiresAcknowledgement,
|
|
170
216
|
resolveFlashingSpeed,
|
|
171
217
|
usesAlarmNoAckIcon
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-severity.js","sources":["../src/alert-severity.ts"],"sourcesContent":["/**\n * `alert-severity` – Pure helper module mapping alert severities to their\n * visual, behavioral, and acknowledgement semantics.\n *\n * Centralizes the per-`AlertType` decisions shared across alert-rendering\n * components (badges, twotone icons, frames, lists) so that severity behavior\n * stays consistent everywhere. Supports both the legacy severities\n * (`alarm`, `warning`, `caution`) and the level severities\n * (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`),\n * collapsing the level set onto the legacy visual/blink treatments where they\n * share styling.\n *\n * Features:\n * - Color tokens: `getAlertColorTokens` returns background/border/on-active\n * CSS custom properties per severity.\n * - Component selectors: `getAlertBadgeComponent` and\n * `getAlertTwotoneComponent` resolve the badge/icon element tag for a\n * severity.\n * - Flashing: `resolveFlashingSpeed` maps a severity and phase onto the\n * design tempo table, and `getBamAlertTypeForBlinking` maps level\n * severities onto the legacy type that selects the icon glyphs.\n * - Acknowledgement & filtering: `requiresAcknowledgement` reports whether a\n * severity needs an ACK action, `excludedFromUnackedFilter` reports whether\n * it is hidden from the \"unacked\" view, and `usesAlarmNoAckIcon` selects the\n * alarm-style no-ack icon.\n * - Priority: re-exports `ALERT_SEVERITY_PRIORITY`, the ordered severity list\n * (most → least severe) used to sort alerts.\n *\n * Usage:\n * ```ts\n * import {\n * getAlertColorTokens,\n * requiresAcknowledgement,\n * ALERT_SEVERITY_PRIORITY,\n * } from './alert-severity.js';\n * import {AlertType} from './types.js';\n *\n * const tokens = getAlertColorTokens(AlertType.LevelHigh);\n * const needsAck = requiresAcknowledgement(AlertType.LevelLow); // true\n * alerts.sort(\n * (a, b) =>\n * ALERT_SEVERITY_PRIORITY.indexOf(a.type) -\n * ALERT_SEVERITY_PRIORITY.indexOf(b.type)\n * );\n * ```\n */\nimport {\n AlertType,\n ALERT_SEVERITY_PRIORITY,\n FlashingSpeed,\n type ResolvedFlashingSpeed,\n} from './types.js';\n\nexport {ALERT_SEVERITY_PRIORITY};\n\nexport enum AlertBadgeComponent {\n Alarm = 'obi-alarm-badge',\n Warning = 'obi-warning-badge',\n Caution = 'obi-caution-badge',\n Critical = 'obi-critical-badge',\n Diagnostic = 'obi-diagnostic-badge',\n}\n\nexport type AlertColorTokens = {\n bg: string;\n border: string;\n onActive: string;\n};\n\nexport function requiresAcknowledgement(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.Warning,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n AlertType.LevelMedium,\n AlertType.LevelLow,\n ].includes(type);\n}\n\nexport enum AlertFlashPhase {\n Active = 'active',\n Rectified = 'rectified',\n}\n\n/**\n * Resolves the `default` flashing speed from the design tempo table (#1224):\n * active critical/alarm/high flash fast, warning/medium slow, low very slow;\n * every rectified alert flashes very slow; caution and diagnostic never\n * flash. Callers map acknowledged alerts to `fixed` before asking.\n */\nexport function resolveFlashingSpeed(\n speed: FlashingSpeed,\n type: AlertType,\n phase: AlertFlashPhase = AlertFlashPhase.Active\n): ResolvedFlashingSpeed {\n if (speed !== FlashingSpeed.Default) {\n return speed;\n }\n if (type === AlertType.Caution || type === AlertType.LevelDiagnostic) {\n return FlashingSpeed.Fixed;\n }\n if (phase === AlertFlashPhase.Rectified) {\n return FlashingSpeed.VerySlow;\n }\n switch (type) {\n case AlertType.LevelCritical:\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n return FlashingSpeed.Fast;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return FlashingSpeed.Slow;\n case AlertType.LevelLow:\n return FlashingSpeed.VerySlow;\n default:\n return FlashingSpeed.Fixed;\n }\n}\n\nexport function getAlertSeverityCssClass(type: AlertType): string {\n return type;\n}\n\nexport function getAlertColorTokens(type: AlertType): AlertColorTokens {\n switch (type) {\n case AlertType.LevelCritical:\n return {\n bg: 'var(--critical-enabled-background-color)',\n border: 'var(--critical-enabled-border-color)',\n onActive: 'var(--on-critical-active-color)',\n };\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return {\n bg: 'var(--alert-warning-color)',\n border: 'var(--alert-warning-outline-color)',\n onActive: 'var(--on-warning-active-color)',\n };\n case AlertType.Caution:\n case AlertType.LevelLow:\n return {\n bg: 'var(--alert-caution-color)',\n border: 'var(--alert-caution-outline-color)',\n onActive: 'var(--on-caution-active-color)',\n };\n case AlertType.LevelDiagnostic:\n return {\n bg: 'var(--notification-enabled-background-color)',\n border: 'var(--notification-enabled-border-color)',\n onActive: 'var(--on-notification-active-color)',\n };\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return {\n bg: 'var(--alert-alarm-color)',\n border: 'var(--alert-alarm-outline-color)',\n onActive: 'var(--on-alarm-active-color)',\n };\n }\n}\n\nexport function getAlertBadgeComponent(type: AlertType): AlertBadgeComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertBadgeComponent.Critical;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertBadgeComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertBadgeComponent.Caution;\n case AlertType.LevelDiagnostic:\n return AlertBadgeComponent.Diagnostic;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertBadgeComponent.Alarm;\n }\n}\n\nexport enum AlertTwotoneComponent {\n Alarm = 'obi-alerts-alarm-twotone',\n Warning = 'obi-alerts-warning-twotone',\n Caution = 'obi-alerts-caution-twotone',\n Critical = 'obi-alerts-critical-twotone',\n Diagnostic = 'obi-alerts-diagnostic-twotone',\n}\n\nexport function getAlertTwotoneComponent(\n type: AlertType\n): AlertTwotoneComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertTwotoneComponent.Critical;\n case AlertType.LevelDiagnostic:\n return AlertTwotoneComponent.Diagnostic;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertTwotoneComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertTwotoneComponent.Caution;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertTwotoneComponent.Alarm;\n }\n}\n\nexport function getBamAlertTypeForBlinking(type: AlertType): AlertType {\n switch (type) {\n case AlertType.LevelCritical:\n case AlertType.LevelHigh:\n return AlertType.Alarm;\n case AlertType.LevelMedium:\n return AlertType.Warning;\n case AlertType.LevelLow:\n return AlertType.Caution;\n default:\n return type;\n }\n}\n\nexport function excludedFromUnackedFilter(type: AlertType): boolean {\n return [AlertType.Caution, AlertType.LevelDiagnostic].includes(type);\n}\n\nexport function usesAlarmNoAckIcon(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n ].includes(type);\n}\n"],"names":["AlertBadgeComponent","AlertFlashPhase","AlertTwotoneComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alert-severity.js","sources":["../src/alert-severity.ts"],"sourcesContent":["/**\n * `alert-severity` – Pure helper module mapping alert severities to their\n * visual, behavioral, and acknowledgement semantics.\n *\n * Centralizes the per-`AlertType` decisions shared across alert-rendering\n * components (badges, twotone icons, frames, lists) so that severity behavior\n * stays consistent everywhere. Supports both the legacy severities\n * (`alarm`, `warning`, `caution`) and the level severities\n * (`level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`),\n * collapsing the level set onto the legacy visual/blink treatments where they\n * share styling.\n *\n * Features:\n * - Color tokens: `getAlertColorTokens` returns background/border/on-active\n * CSS custom properties per severity.\n * - Component selectors: `getAlertBadgeComponent` and\n * `getAlertTwotoneComponent` resolve the badge/icon element tag for a\n * severity.\n * - Flashing: `resolveFlashingSpeed` maps a severity and phase onto the\n * design tempo table, and `getBamAlertTypeForBlinking` maps level\n * severities onto the legacy type that selects the icon glyphs.\n * - Acknowledgement & filtering: `requiresAcknowledgement` reports whether a\n * severity needs an ACK action, `excludedFromUnackedFilter` reports whether\n * it is hidden from the \"unacked\" view, and `usesAlarmNoAckIcon` selects the\n * alarm-style no-ack icon.\n * - Priority: re-exports `ALERT_SEVERITY_PRIORITY`, the ordered severity list\n * (most → least severe) used to sort alerts.\n * - Counts: `rankAlertCounts` orders per-severity counts and can combine\n * them; `alertTypeLabel` and `alertCountsLabel` build accessible names.\n *\n * Usage:\n * ```ts\n * import {\n * getAlertColorTokens,\n * requiresAcknowledgement,\n * ALERT_SEVERITY_PRIORITY,\n * } from './alert-severity.js';\n * import {AlertType} from './types.js';\n *\n * const tokens = getAlertColorTokens(AlertType.LevelHigh);\n * const needsAck = requiresAcknowledgement(AlertType.LevelLow); // true\n * alerts.sort(\n * (a, b) =>\n * ALERT_SEVERITY_PRIORITY.indexOf(a.type) -\n * ALERT_SEVERITY_PRIORITY.indexOf(b.type)\n * );\n * ```\n */\nimport {msg} from '@lit/localize';\nimport {\n AlertType,\n ALERT_SEVERITY_PRIORITY,\n FlashingSpeed,\n type AlertCounts,\n type ResolvedFlashingSpeed,\n} from './types.js';\n\nexport {ALERT_SEVERITY_PRIORITY};\n\nexport enum AlertBadgeComponent {\n Alarm = 'obi-alarm-badge',\n Warning = 'obi-warning-badge',\n Caution = 'obi-caution-badge',\n Critical = 'obi-critical-badge',\n Diagnostic = 'obi-diagnostic-badge',\n}\n\nexport type AlertColorTokens = {\n bg: string;\n border: string;\n onActive: string;\n};\n\nexport function requiresAcknowledgement(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.Warning,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n AlertType.LevelMedium,\n AlertType.LevelLow,\n ].includes(type);\n}\n\nexport enum AlertFlashPhase {\n Active = 'active',\n Rectified = 'rectified',\n}\n\n/**\n * Resolves the `default` flashing speed from the design tempo table (#1224):\n * active critical/alarm/high flash fast, warning/medium slow, low very slow;\n * every rectified alert flashes very slow; caution and diagnostic never\n * flash. Callers map acknowledged alerts to `fixed` before asking.\n */\nexport function resolveFlashingSpeed(\n speed: FlashingSpeed,\n type: AlertType,\n phase: AlertFlashPhase = AlertFlashPhase.Active\n): ResolvedFlashingSpeed {\n if (speed !== FlashingSpeed.Default) {\n return speed;\n }\n if (type === AlertType.Caution || type === AlertType.LevelDiagnostic) {\n return FlashingSpeed.Fixed;\n }\n if (phase === AlertFlashPhase.Rectified) {\n return FlashingSpeed.VerySlow;\n }\n switch (type) {\n case AlertType.LevelCritical:\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n return FlashingSpeed.Fast;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return FlashingSpeed.Slow;\n case AlertType.LevelLow:\n return FlashingSpeed.VerySlow;\n default:\n return FlashingSpeed.Fixed;\n }\n}\n\nexport function getAlertSeverityCssClass(type: AlertType): string {\n return type;\n}\n\nexport function getAlertColorTokens(type: AlertType): AlertColorTokens {\n switch (type) {\n case AlertType.LevelCritical:\n return {\n bg: 'var(--critical-enabled-background-color)',\n border: 'var(--critical-enabled-border-color)',\n onActive: 'var(--on-critical-active-color)',\n };\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return {\n bg: 'var(--alert-warning-color)',\n border: 'var(--alert-warning-outline-color)',\n onActive: 'var(--on-warning-active-color)',\n };\n case AlertType.Caution:\n case AlertType.LevelLow:\n return {\n bg: 'var(--alert-caution-color)',\n border: 'var(--alert-caution-outline-color)',\n onActive: 'var(--on-caution-active-color)',\n };\n case AlertType.LevelDiagnostic:\n return {\n bg: 'var(--notification-enabled-background-color)',\n border: 'var(--notification-enabled-border-color)',\n onActive: 'var(--on-notification-active-color)',\n };\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return {\n bg: 'var(--alert-alarm-color)',\n border: 'var(--alert-alarm-outline-color)',\n onActive: 'var(--on-alarm-active-color)',\n };\n }\n}\n\nexport function getAlertBadgeComponent(type: AlertType): AlertBadgeComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertBadgeComponent.Critical;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertBadgeComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertBadgeComponent.Caution;\n case AlertType.LevelDiagnostic:\n return AlertBadgeComponent.Diagnostic;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertBadgeComponent.Alarm;\n }\n}\n\nexport enum AlertTwotoneComponent {\n Alarm = 'obi-alerts-alarm-twotone',\n Warning = 'obi-alerts-warning-twotone',\n Caution = 'obi-alerts-caution-twotone',\n Critical = 'obi-alerts-critical-twotone',\n Diagnostic = 'obi-alerts-diagnostic-twotone',\n}\n\nexport function getAlertTwotoneComponent(\n type: AlertType\n): AlertTwotoneComponent {\n switch (type) {\n case AlertType.LevelCritical:\n return AlertTwotoneComponent.Critical;\n case AlertType.LevelDiagnostic:\n return AlertTwotoneComponent.Diagnostic;\n case AlertType.Warning:\n case AlertType.LevelMedium:\n return AlertTwotoneComponent.Warning;\n case AlertType.Caution:\n case AlertType.LevelLow:\n return AlertTwotoneComponent.Caution;\n case AlertType.Alarm:\n case AlertType.LevelHigh:\n default:\n return AlertTwotoneComponent.Alarm;\n }\n}\n\nexport function getBamAlertTypeForBlinking(type: AlertType): AlertType {\n switch (type) {\n case AlertType.LevelCritical:\n case AlertType.LevelHigh:\n return AlertType.Alarm;\n case AlertType.LevelMedium:\n return AlertType.Warning;\n case AlertType.LevelLow:\n return AlertType.Caution;\n default:\n return type;\n }\n}\n\nexport function excludedFromUnackedFilter(type: AlertType): boolean {\n return [AlertType.Caution, AlertType.LevelDiagnostic].includes(type);\n}\n\nexport function usesAlarmNoAckIcon(type: AlertType): boolean {\n return [\n AlertType.Alarm,\n AlertType.LevelCritical,\n AlertType.LevelHigh,\n ].includes(type);\n}\n\n/** One severity and its alert count, as `rankAlertCounts` returns them. */\nexport interface RankedAlertCount {\n type: AlertType;\n count: number;\n}\n\nconst ALERT_COUNT_FIELD: Record<AlertType, keyof AlertCounts> = {\n [AlertType.Alarm]: 'countAlarm',\n [AlertType.Warning]: 'countWarning',\n [AlertType.Caution]: 'countCaution',\n [AlertType.LevelCritical]: 'countLevelCritical',\n [AlertType.LevelHigh]: 'countLevelHigh',\n [AlertType.LevelMedium]: 'countLevelMedium',\n [AlertType.LevelLow]: 'countLevelLow',\n [AlertType.LevelDiagnostic]: 'countLevelDiagnostic',\n};\n\n/**\n * The positive counts, most severe first by `ALERT_SEVERITY_PRIORITY`.\n * `combine` folds them into one entry: the total, typed as the most severe\n * category present.\n */\nexport function rankAlertCounts(\n counts: AlertCounts,\n combine = false\n): RankedAlertCount[] {\n const ranked = ALERT_SEVERITY_PRIORITY.map((type) => ({\n type,\n count: counts[ALERT_COUNT_FIELD[type]] ?? 0,\n })).filter((entry) => entry.count > 0);\n if (!combine || ranked.length === 0) {\n return ranked;\n }\n const total = ranked.reduce((sum, entry) => sum + entry.count, 0);\n return [{type: ranked[0].type, count: total}];\n}\n\nconst ALERT_TYPE_LABEL: Record<AlertType, () => string> = {\n [AlertType.Alarm]: () => msg('Alarm'),\n [AlertType.Warning]: () => msg('Warning'),\n [AlertType.Caution]: () => msg('Caution'),\n [AlertType.LevelCritical]: () => msg('Critical'),\n [AlertType.LevelHigh]: () => msg('High'),\n [AlertType.LevelMedium]: () => msg('Medium'),\n [AlertType.LevelLow]: () => msg('Low'),\n [AlertType.LevelDiagnostic]: () => msg('Diagnostic'),\n};\n\n/** Localized severity name, read at render time so a locale switch applies. */\nexport function alertTypeLabel(type: AlertType): string {\n return ALERT_TYPE_LABEL[type]();\n}\n\n/**\n * Accessible summary of the counts, e.g. \"2 Alarm, 4 Warning, 9 Shelved\";\n * empty when nothing is counted.\n */\nexport function alertCountsLabel(\n counts: AlertCounts,\n shelvedCount = 0\n): string {\n const parts = rankAlertCounts(counts).map(\n ({type, count}) => `${count} ${alertTypeLabel(type)}`\n );\n if (shelvedCount > 0) {\n parts.push(`${shelvedCount} ${msg('Shelved')}`);\n }\n return parts.join(', ');\n}\n"],"names":["AlertBadgeComponent","AlertFlashPhase","AlertTwotoneComponent"],"mappings":"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"}
|