@oicl/openbridge-webcomponents 2.1.0-next.1 → 2.1.0-next.3
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/README.md +1 -0
- package/bundle/openbridge-webcomponents.bundle.js +390 -301
- package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
- package/custom-elements.json +979 -94
- package/dist/automation/valve-analoge-two-way-icon/valve-analog-two-way-icon.d.ts +25 -1
- package/dist/automation/valve-analoge-two-way-icon/valve-analog-two-way-icon.d.ts.map +1 -1
- package/dist/automation/valve-analoge-two-way-icon/valve-analog-two-way-icon.js +39 -58
- package/dist/automation/valve-analoge-two-way-icon/valve-analog-two-way-icon.js.map +1 -1
- package/dist/building-blocks/alert-list/alert-list-base.d.ts +60 -0
- package/dist/building-blocks/alert-list/alert-list-base.d.ts.map +1 -0
- package/dist/building-blocks/alert-list/alert-list-base.js +191 -0
- package/dist/building-blocks/alert-list/alert-list-base.js.map +1 -0
- package/dist/building-blocks/alert-list/alert-list.css.js.map +1 -1
- package/dist/building-blocks/alert-list/alert-list.d.ts +13 -26
- package/dist/building-blocks/alert-list/alert-list.d.ts.map +1 -1
- package/dist/building-blocks/alert-list/alert-list.js +7 -142
- package/dist/building-blocks/alert-list/alert-list.js.map +1 -1
- package/dist/components/alert-icon/alert-icon.d.ts.map +1 -1
- package/dist/components/alert-icon/alert-icon.js +6 -5
- package/dist/components/alert-icon/alert-icon.js.map +1 -1
- package/dist/components/alert-list-details/alert-list-details.css.js +4 -1
- package/dist/components/alert-list-details/alert-list-details.css.js.map +1 -1
- package/dist/components/alert-menu/alert-menu.css.js +3 -42
- package/dist/components/alert-menu/alert-menu.css.js.map +1 -1
- package/dist/components/alert-menu/alert-menu.d.ts +28 -6
- package/dist/components/alert-menu/alert-menu.d.ts.map +1 -1
- package/dist/components/alert-menu/alert-menu.js +81 -60
- package/dist/components/alert-menu/alert-menu.js.map +1 -1
- package/dist/components/alert-menu-item/alert-menu-item.d.ts +16 -6
- package/dist/components/alert-menu-item/alert-menu-item.d.ts.map +1 -1
- package/dist/components/alert-menu-item/alert-menu-item.js +11 -2
- package/dist/components/alert-menu-item/alert-menu-item.js.map +1 -1
- package/dist/components/number-input-field/number-input-field.css.js +8 -2
- package/dist/components/number-input-field/number-input-field.css.js.map +1 -1
- package/dist/components/number-input-field/number-input-field.d.ts +15 -1
- package/dist/components/number-input-field/number-input-field.d.ts.map +1 -1
- package/dist/components/number-input-field/number-input-field.js +38 -44
- package/dist/components/number-input-field/number-input-field.js.map +1 -1
- package/dist/components/textbox/textbox.css.js +3 -9
- package/dist/components/textbox/textbox.css.js.map +1 -1
- package/dist/components/textbox/textbox.d.ts +3 -0
- package/dist/components/textbox/textbox.d.ts.map +1 -1
- package/dist/components/textbox/textbox.js.map +1 -1
- package/dist/generated/locales/es-419.d.ts +1 -1
- package/dist/generated/locales/es-419.js +1 -1
- package/dist/generated/locales/es-419.js.map +1 -1
- package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js +2 -1
- package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js.map +1 -1
- package/dist/pages/alert-detail-page/alert-detail-page.js +1 -1
- package/dist/pages/alert-detail-page/alert-detail-page.js.map +1 -1
- package/dist/pages/alert-list-page-small/alert-list-page-small-base.d.ts +63 -0
- package/dist/pages/alert-list-page-small/alert-list-page-small-base.d.ts.map +1 -0
- package/dist/pages/alert-list-page-small/alert-list-page-small-base.js +126 -0
- package/dist/pages/alert-list-page-small/alert-list-page-small-base.js.map +1 -0
- package/dist/pages/alert-list-page-small/alert-list-page-small.d.ts +12 -15
- package/dist/pages/alert-list-page-small/alert-list-page-small.d.ts.map +1 -1
- package/dist/pages/alert-list-page-small/alert-list-page-small.js +41 -92
- package/dist/pages/alert-list-page-small/alert-list-page-small.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,156 +1,21 @@
|
|
|
1
1
|
import { customElement } from "../../decorator.js";
|
|
2
2
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorate.js";
|
|
3
|
-
import
|
|
4
|
-
import "
|
|
5
|
-
import { LitElement, html, nothing, unsafeCSS } from "lit";
|
|
6
|
-
import { property, query, queryAssignedElements, state } from "lit/decorators.js";
|
|
3
|
+
import { ObcAlertListBase } from "./alert-list-base.js";
|
|
4
|
+
import { property } from "lit/decorators.js";
|
|
7
5
|
//#region src/building-blocks/alert-list/alert-list.ts
|
|
8
|
-
var ObcAlertList = class ObcAlertList extends
|
|
6
|
+
var ObcAlertList = class ObcAlertList extends ObcAlertListBase {
|
|
9
7
|
constructor(..._args) {
|
|
10
8
|
super(..._args);
|
|
11
9
|
this.filter = () => true;
|
|
12
|
-
this.oldElementTop = /* @__PURE__ */ new Map();
|
|
13
|
-
this.mutationObserver = null;
|
|
14
|
-
this.intersectionObserver = null;
|
|
15
|
-
this.hasRenderedPanel = false;
|
|
16
|
-
this._empty = false;
|
|
17
10
|
}
|
|
18
|
-
|
|
19
|
-
this.
|
|
20
|
-
this.setupMutationObserver();
|
|
11
|
+
matchesFilter(item) {
|
|
12
|
+
return this.filter(item);
|
|
21
13
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const intersectionObserver = new IntersectionObserver((entries) => {
|
|
25
|
-
if (entries[0].intersectionRatio === 0) this.hasRenderedPanel = false;
|
|
26
|
-
});
|
|
27
|
-
intersectionObserver.observe(this);
|
|
28
|
-
this.intersectionObserver = intersectionObserver;
|
|
29
|
-
this.setupMutationObserver();
|
|
30
|
-
}
|
|
31
|
-
disconnectedCallback() {
|
|
32
|
-
if (this.mutationObserver) {
|
|
33
|
-
this.mutationObserver.disconnect();
|
|
34
|
-
this.mutationObserver = null;
|
|
35
|
-
}
|
|
36
|
-
if (this.intersectionObserver) {
|
|
37
|
-
this.intersectionObserver.disconnect();
|
|
38
|
-
this.intersectionObserver = null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
willUpdate(_changedProperties) {
|
|
42
|
-
if (_changedProperties.has("filter")) {
|
|
43
|
-
this.updateEmpty();
|
|
44
|
-
this.updateOldElementTop();
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
updateEmpty() {
|
|
48
|
-
this._empty = this.getAlertItems().length === 0;
|
|
49
|
-
}
|
|
50
|
-
getAlertItems() {
|
|
51
|
-
return this.alertItems.filter(this.filter);
|
|
52
|
-
}
|
|
53
|
-
updateOldElementTop() {
|
|
54
|
-
const elements = this.getAlertItems();
|
|
55
|
-
if (elements.length === 0) return;
|
|
56
|
-
let top = elements[0].getBoundingClientRect().top;
|
|
57
|
-
this.oldElementTop.clear();
|
|
58
|
-
elements.forEach((element) => {
|
|
59
|
-
const elementRect = element.getBoundingClientRect();
|
|
60
|
-
if (elementRect.height === 0) return;
|
|
61
|
-
this.oldElementTop.set(element, top);
|
|
62
|
-
top += elementRect.height;
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
setupMutationObserver() {
|
|
66
|
-
if (this.mutationObserver) {
|
|
67
|
-
this.mutationObserver.disconnect();
|
|
68
|
-
this.mutationObserver = null;
|
|
69
|
-
}
|
|
70
|
-
this.mutationObserver = new MutationObserver(() => {
|
|
71
|
-
this.handleElementsChange();
|
|
72
|
-
});
|
|
73
|
-
this.alertItems.forEach((element) => {
|
|
74
|
-
this.mutationObserver?.observe(element, {
|
|
75
|
-
attributes: true,
|
|
76
|
-
attributeFilter: ["status", "shelved"]
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
handleSlotChange() {
|
|
81
|
-
this.handleElementsChange();
|
|
82
|
-
this.setupMutationObserver();
|
|
83
|
-
}
|
|
84
|
-
handleElementsChange() {
|
|
85
|
-
this.mutationObserver?.takeRecords();
|
|
86
|
-
this.updateEmpty();
|
|
87
|
-
if (!this.checkVisibility()) return;
|
|
88
|
-
const elements = this.getAlertItems();
|
|
89
|
-
const oldElementTop = new Map(this.oldElementTop);
|
|
90
|
-
requestAnimationFrame(() => {
|
|
91
|
-
this.updateOldElementTop();
|
|
92
|
-
let hasNewElements = false;
|
|
93
|
-
elements.forEach((element) => {
|
|
94
|
-
const elementRect = element.getBoundingClientRect();
|
|
95
|
-
const oldTop = oldElementTop.get(element);
|
|
96
|
-
if (oldTop === void 0) {
|
|
97
|
-
element.animateIntro = this.hasRenderedPanel;
|
|
98
|
-
hasNewElements = true;
|
|
99
|
-
setTimeout(() => {
|
|
100
|
-
element.animateIntro = false;
|
|
101
|
-
}, 101);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const diff = oldTop - elementRect.top;
|
|
105
|
-
if (diff === 0) return;
|
|
106
|
-
element.style.transform = `translateY(${diff}px)`;
|
|
107
|
-
element.style.transition = "none";
|
|
108
|
-
element.offsetHeight;
|
|
109
|
-
element.style.transition = "transform 100ms ease-in-out";
|
|
110
|
-
element.style.transform = "translateY(0px)";
|
|
111
|
-
});
|
|
112
|
-
this.hasRenderedPanel = true;
|
|
113
|
-
if (hasNewElements) setTimeout(() => {
|
|
114
|
-
this.updateOldElementTop();
|
|
115
|
-
}, 101);
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
getVisibleElements() {
|
|
119
|
-
const scrollbarRect = this.scrollbar.getBoundingClientRect();
|
|
120
|
-
return this.getAlertItems().map((element, index) => ({
|
|
121
|
-
element,
|
|
122
|
-
index
|
|
123
|
-
})).filter(({ element }) => {
|
|
124
|
-
const style = window.getComputedStyle(element);
|
|
125
|
-
if (style.display === "none" || style.visibility === "hidden") return false;
|
|
126
|
-
const elementRect = element.getBoundingClientRect();
|
|
127
|
-
return !(elementRect.top < scrollbarRect.top || elementRect.bottom > scrollbarRect.bottom);
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
render() {
|
|
131
|
-
return html` <obc-scrollbar class="alert-list" id="scrollbar">
|
|
132
|
-
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
133
|
-
${this._empty ? html` <div class="empty-list">
|
|
134
|
-
<div class="icon">
|
|
135
|
-
<slot name="empty-icon"></slot>
|
|
136
|
-
</div>
|
|
137
|
-
<div class="empty-title">
|
|
138
|
-
<slot name="empty-title"></slot>
|
|
139
|
-
</div>
|
|
140
|
-
<div class="empty-description">
|
|
141
|
-
<slot name="empty-description"></slot>
|
|
142
|
-
</div>
|
|
143
|
-
</div>` : nothing}
|
|
144
|
-
</obc-scrollbar>`;
|
|
145
|
-
}
|
|
146
|
-
static {
|
|
147
|
-
this.styles = unsafeCSS(alert_list_default);
|
|
14
|
+
filterChanged(changed) {
|
|
15
|
+
return changed.has("filter");
|
|
148
16
|
}
|
|
149
17
|
};
|
|
150
18
|
__decorate([property({ attribute: false })], ObcAlertList.prototype, "filter", void 0);
|
|
151
|
-
__decorate([state()], ObcAlertList.prototype, "_empty", void 0);
|
|
152
|
-
__decorate([queryAssignedElements({ flatten: true })], ObcAlertList.prototype, "alertItems", void 0);
|
|
153
|
-
__decorate([query("#scrollbar", true)], ObcAlertList.prototype, "scrollbar", void 0);
|
|
154
19
|
ObcAlertList = __decorate([customElement("obc-alert-list")], ObcAlertList);
|
|
155
20
|
//#endregion
|
|
156
21
|
export { ObcAlertList };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-list.js","names":[],"sources":["../../../src/building-blocks/alert-list/alert-list.ts"],"sourcesContent":["import {LitElement, PropertyValues, html, nothing, unsafeCSS} from 'lit';\nimport {queryAssignedElements, query, property, state} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './alert-list.css?inline';\nimport '../../components/scrollbar/scrollbar.js';\nimport {ObcScrollbar} from '../../components/scrollbar/scrollbar.js';\nimport {ObcAlertMenuItem} from '../../components/alert-menu-item/alert-menu-item.js';\n\n/**\n * @slot - Default slot for the alert list items.\n * @slot empty-icon - Icon shown when the list is empty.\n * @slot empty-title - Title shown when the list is empty.\n * @slot empty-description - Description shown when the list is empty.\n * @stable\n */\n@customElement('obc-alert-list')\nexport class ObcAlertList extends LitElement {\n @property({attribute: false}) filter: (item: HTMLElement) => boolean = () =>\n true;\n\n private oldElementTop: Map<HTMLElement, number> = new Map();\n private mutationObserver: MutationObserver | null = null;\n private intersectionObserver: IntersectionObserver | null = null;\n private hasRenderedPanel = false;\n @state() _empty = false;\n\n @queryAssignedElements({flatten: true})\n private alertItems!: HTMLElement[];\n\n @query('#scrollbar', true)\n private scrollbar!: ObcScrollbar;\n\n override firstUpdated() {\n this.updateEmpty();\n this.setupMutationObserver();\n }\n\n override connectedCallback() {\n super.connectedCallback();\n const intersectionObserver = new IntersectionObserver((entries) => {\n // If intersectionRatio is 0, the target is out of view\n if (entries[0].intersectionRatio === 0) {\n this.hasRenderedPanel = false;\n }\n });\n intersectionObserver.observe(this);\n this.intersectionObserver = intersectionObserver;\n\n this.setupMutationObserver();\n }\n\n override disconnectedCallback() {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n }\n\n protected override willUpdate(_changedProperties: PropertyValues): void {\n if (_changedProperties.has('filter')) {\n this.updateEmpty();\n this.updateOldElementTop();\n }\n }\n\n private updateEmpty() {\n this._empty = this.getAlertItems().length === 0;\n }\n\n private getAlertItems() {\n return this.alertItems.filter(this.filter);\n }\n\n private updateOldElementTop() {\n const elements = this.getAlertItems();\n if (elements.length === 0) {\n return;\n }\n\n // Get the top of the element,\n // the element may be in an animation\n // we therefor sum the height of each element\n const firstElement = elements[0];\n const firstElementRect = firstElement.getBoundingClientRect();\n let top = firstElementRect.top;\n this.oldElementTop.clear();\n elements.forEach((element) => {\n const elementRect = element.getBoundingClientRect();\n if (elementRect.height === 0) {\n return;\n }\n this.oldElementTop.set(element, top);\n top += elementRect.height;\n });\n }\n\n private setupMutationObserver() {\n if (this.mutationObserver) {\n // Make a new observer to avoid memory leaks\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n this.mutationObserver = new MutationObserver(() => {\n this.handleElementsChange();\n });\n\n const slotElements = this.alertItems;\n slotElements.forEach((element) => {\n // Earlier observed elements are just updated, and not registered twice.\n this.mutationObserver?.observe(element, {\n attributes: true,\n attributeFilter: ['status', 'shelved'],\n });\n });\n }\n\n private handleSlotChange() {\n this.handleElementsChange();\n this.setupMutationObserver();\n }\n\n private handleElementsChange() {\n // Take records to ensure the observer is not triggered again\n this.mutationObserver?.takeRecords();\n this.updateEmpty();\n if (!this.checkVisibility()) {\n return;\n }\n\n const elements = this.getAlertItems();\n // Animate the elements to their new positions\n const oldElementTop: Map<HTMLElement, number> = new Map(this.oldElementTop);\n\n requestAnimationFrame(() => {\n this.updateOldElementTop();\n let hasNewElements = false;\n elements.forEach((element) => {\n const elementRect = element.getBoundingClientRect();\n const oldTop = oldElementTop.get(element);\n if (oldTop === undefined) {\n // New element\n (element as ObcAlertMenuItem).animateIntro = this.hasRenderedPanel;\n hasNewElements = true;\n setTimeout(() => {\n (element as ObcAlertMenuItem).animateIntro = false;\n }, 101);\n return;\n }\n const diff = oldTop - elementRect.top;\n if (diff === 0) return;\n element.style.transform = `translateY(${diff}px)`;\n element.style.transition = 'none';\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- the read forces the reflow that restarts the transition\n element.offsetHeight;\n\n // Remove the transition after the animation is complete\n element.style.transition = 'transform 100ms ease-in-out';\n element.style.transform = 'translateY(0px)';\n });\n this.hasRenderedPanel = true;\n if (hasNewElements) {\n setTimeout(() => {\n this.updateOldElementTop();\n }, 101);\n }\n });\n }\n\n public getVisibleElements(): {element: HTMLElement; index: number}[] {\n // Get all slotted elements in the visible tab's scrollbar\n\n const scrollbarRect = this.scrollbar.getBoundingClientRect();\n const slottedElements = this.getAlertItems();\n\n // Filter for only visible elements that are within the scrollbar viewport\n return slottedElements\n .map((element, index) => ({element, index}))\n .filter(({element}) => {\n const style = window.getComputedStyle(element);\n if (style.display === 'none' || style.visibility === 'hidden') {\n return false;\n }\n\n // Check if the element is within the scrollbar's viewport\n const elementRect = element.getBoundingClientRect();\n\n // Check if element overlaps with scrollbar viewport\n const isVisible = !(\n elementRect.top < scrollbarRect.top ||\n elementRect.bottom > scrollbarRect.bottom\n );\n\n return isVisible;\n });\n }\n\n override render() {\n return html` <obc-scrollbar class=\"alert-list\" id=\"scrollbar\">\n <slot @slotchange=${this.handleSlotChange}></slot>\n ${\n this._empty\n ? html` <div class=\"empty-list\">\n <div class=\"icon\">\n <slot name=\"empty-icon\"></slot>\n </div>\n <div class=\"empty-title\">\n <slot name=\"empty-title\"></slot>\n </div>\n <div class=\"empty-description\">\n <slot name=\"empty-description\"></slot>\n </div>\n </div>`\n : nothing\n }\n </obc-scrollbar>`;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-list': ObcAlertList;\n }\n}\n"],"mappings":";;;;;;;AAgBO,IAAM,eAAN,MAAM,qBAAqB,WAAW;;;EAEzC,KAAA,eAAA;EAEgD,KAAA,gCAAA,IAAI,IAAI;EACN,KAAA,mBAAA;EACQ,KAAA,uBAAA;EACjC,KAAA,mBAAA;EACT,KAAA,SAAA;;CAQlB,eAAwB;EACtB,KAAK,YAAY;EACjB,KAAK,sBAAsB;CAC7B;CAEA,oBAA6B;EAC3B,MAAM,kBAAkB;EACxB,MAAM,uBAAuB,IAAI,sBAAsB,YAAY;GAEjE,IAAI,QAAQ,EAAE,CAAC,sBAAsB,GACnC,KAAK,mBAAmB;EAE5B,CAAC;EACD,qBAAqB,QAAQ,IAAI;EACjC,KAAK,uBAAuB;EAE5B,KAAK,sBAAsB;CAC7B;CAEA,uBAAgC;EAC9B,IAAI,KAAK,kBAAkB;GACzB,KAAK,iBAAiB,WAAW;GACjC,KAAK,mBAAmB;EAC1B;EACA,IAAI,KAAK,sBAAsB;GAC7B,KAAK,qBAAqB,WAAW;GACrC,KAAK,uBAAuB;EAC9B;CACF;CAEA,WAA8B,oBAA0C;EACtE,IAAI,mBAAmB,IAAI,QAAQ,GAAG;GACpC,KAAK,YAAY;GACjB,KAAK,oBAAoB;EAC3B;CACF;CAEA,cAAsB;EACpB,KAAK,SAAS,KAAK,cAAc,CAAC,CAAC,WAAW;CAChD;CAEA,gBAAwB;EACtB,OAAO,KAAK,WAAW,OAAO,KAAK,MAAM;CAC3C;CAEA,sBAA8B;EAC5B,MAAM,WAAW,KAAK,cAAc;EACpC,IAAI,SAAS,WAAW,GACtB;EAQF,IAAI,MAFiB,SAAS,EACL,CAAa,sBAC5B,CAAA,CAAiB;EAC3B,KAAK,cAAc,MAAM;EACzB,SAAS,SAAS,YAAY;GAC5B,MAAM,cAAc,QAAQ,sBAAsB;GAClD,IAAI,YAAY,WAAW,GACzB;GAEF,KAAK,cAAc,IAAI,SAAS,GAAG;GACnC,OAAO,YAAY;EACrB,CAAC;CACH;CAEA,wBAAgC;EAC9B,IAAI,KAAK,kBAAkB;GAEzB,KAAK,iBAAiB,WAAW;GACjC,KAAK,mBAAmB;EAC1B;EACA,KAAK,mBAAmB,IAAI,uBAAuB;GACjD,KAAK,qBAAqB;EAC5B,CAAC;EAGD,KAD0B,WACb,SAAS,YAAY;GAEhC,KAAK,kBAAkB,QAAQ,SAAS;IACtC,YAAY;IACZ,iBAAiB,CAAC,UAAU,SAAS;GACvC,CAAC;EACH,CAAC;CACH;CAEA,mBAA2B;EACzB,KAAK,qBAAqB;EAC1B,KAAK,sBAAsB;CAC7B;CAEA,uBAA+B;EAE7B,KAAK,kBAAkB,YAAY;EACnC,KAAK,YAAY;EACjB,IAAI,CAAC,KAAK,gBAAgB,GACxB;EAGF,MAAM,WAAW,KAAK,cAAc;EAEpC,MAAM,gBAA0C,IAAI,IAAI,KAAK,aAAa;EAE1E,4BAA4B;GAC1B,KAAK,oBAAoB;GACzB,IAAI,iBAAiB;GACrB,SAAS,SAAS,YAAY;IAC5B,MAAM,cAAc,QAAQ,sBAAsB;IAClD,MAAM,SAAS,cAAc,IAAI,OAAO;IACxC,IAAI,WAAW,KAAA,GAAW;KAExB,QAA8B,eAAe,KAAK;KAClD,iBAAiB;KACjB,iBAAiB;MACf,QAA8B,eAAe;KAC/C,GAAG,GAAG;KACN;IACF;IACA,MAAM,OAAO,SAAS,YAAY;IAClC,IAAI,SAAS,GAAG;IAChB,QAAQ,MAAM,YAAY,cAAc,KAAK;IAC7C,QAAQ,MAAM,aAAa;IAG3B,QAAQ;IAGR,QAAQ,MAAM,aAAa;IAC3B,QAAQ,MAAM,YAAY;GAC5B,CAAC;GACD,KAAK,mBAAmB;GACxB,IAAI,gBACF,iBAAiB;IACf,KAAK,oBAAoB;GAC3B,GAAG,GAAG;EAEV,CAAC;CACH;CAEA,qBAAqE;EAGnE,MAAM,gBAAgB,KAAK,UAAU,sBAAsB;EAI3D,OAHwB,KAAK,cAGtB,CAAA,CACJ,KAAK,SAAS,WAAW;GAAC;GAAS;EAAK,EAAE,CAAC,CAC3C,QAAQ,EAAC,cAAa;GACrB,MAAM,QAAQ,OAAO,iBAAiB,OAAO;GAC7C,IAAI,MAAM,YAAY,UAAU,MAAM,eAAe,UACnD,OAAO;GAIT,MAAM,cAAc,QAAQ,sBAAsB;GAQlD,OAAO,EAJL,YAAY,MAAM,cAAc,OAChC,YAAY,SAAS,cAAc;EAIvC,CAAC;CACL;CAEA,SAAkB;EAChB,OAAO,IAAI;0BACW,KAAK,iBAAiB;QAExC,KAAK,SACD,IAAI;;;;;;;;;;sBAWJ,QACL;;CAEL;;EAEyB,KAAA,SAAA,UAAU,kBAAY;;AACjD;AA9MG,WAAA,CAAA,SAAS,EAAC,WAAW,MAAK,CAAC,CAAA,GAAA,aAAA,WAAA,UAAA,KAAA,CAAA;AAO3B,WAAA,CAAA,MAAM,CAAA,GAAA,aAAA,WAAA,UAAA,KAAA,CAAA;AAEN,WAAA,CAAA,sBAAsB,EAAC,SAAS,KAAI,CAAC,CAAA,GAAA,aAAA,WAAA,cAAA,KAAA,CAAA;AAGrC,WAAA,CAAA,MAAM,cAAc,IAAI,CAAA,GAAA,aAAA,WAAA,aAAA,KAAA,CAAA;AAd1B,eAAA,WAAA,CAAA,cAAc,gBAAgB,CAAA,GAAA,YAAA"}
|
|
1
|
+
{"version":3,"file":"alert-list.js","names":[],"sources":["../../../src/building-blocks/alert-list/alert-list.ts"],"sourcesContent":["import {PropertyValues} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport {ObcAlertListBase} from './alert-list-base.js';\n\n/**\n * `<obc-alert-list>` – Scrolling list of alert items with an empty state.\n *\n * `filter` decides which items count: the empty state shows when none does,\n * and `getVisibleElements()` returns only those. Hiding the other items is\n * left to the consumer's CSS.\n *\n * @property filter - Predicate that picks the items the list counts as shown.\n * @slot - Default slot for the alert list items.\n * @slot empty-icon - Icon shown when the list is empty.\n * @slot empty-title - Title shown when the list is empty.\n * @slot empty-description - Description shown when the list is empty.\n * @stable\n */\n@customElement('obc-alert-list')\nexport class ObcAlertList extends ObcAlertListBase {\n @property({attribute: false}) filter: (item: HTMLElement) => boolean = () =>\n true;\n\n protected override matchesFilter(item: HTMLElement): boolean {\n return this.filter(item);\n }\n\n protected override filterChanged(changed: PropertyValues): boolean {\n return changed.has('filter');\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-list': ObcAlertList;\n }\n}\n"],"mappings":";;;;;AAoBO,IAAM,eAAN,MAAM,qBAAqB,iBAAiB;;;EAE/C,KAAA,eAAA;;CAEF,cAAiC,MAA4B;EAC3D,OAAO,KAAK,OAAO,IAAI;CACzB;CAEA,cAAiC,SAAkC;EACjE,OAAO,QAAQ,IAAI,QAAQ;CAC7B;AACF;AAVG,WAAA,CAAA,SAAS,EAAC,WAAW,MAAK,CAAC,CAAA,GAAA,aAAA,WAAA,UAAA,KAAA,CAAA;AAF7B,eAAA,WAAA,CAAA,cAAc,gBAAgB,CAAA,GAAA,YAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-icon.d.ts","sourceRoot":"","sources":["../../../src/components/alert-icon/alert-icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAa,cAAc,EAAU,MAAM,KAAK,CAAC;AAGnE,OAAO,uCAAuC,CAAC;AAE/C,OAAO,EACL,SAAS,EACT,aAAa,EACb,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAMxB,OAAO,yCAAyC,CAAC;AACjD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,4CAA4C,CAAC;AACpD,OAAO,8CAA8C,CAAC;AACtD,OAAO,yCAAyC,CAAC;AACjD,OAAO,2CAA2C,CAAC;AACnD,OAAO,8CAA8C,CAAC;AACtD,OAAO,gDAAgD,CAAC;AACxD,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,0CAA0C,CAAC;AAClD,OAAO,+CAA+C,CAAC;AACvD,OAAO,8CAA8C,CAAC;AACtD,OAAO,iDAAiD,CAAC;AACzD,OAAO,gDAAgD,CAAC;AACxD,OAAO,qDAAqD,CAAC;AAE7D,OAAO,oCAAoC,CAAC;AAC5C,OAAO,oCAAoC,CAAC;AAsB5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAiGzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBACa,YAAa,SAAQ,UAAU;IAChB,SAAS,EAAE,SAAS,CAAmB;IAEvC,IAAI,CAAC,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEpB,aAAa,EAAE,aAAa,CAC9B;IAExB,SAAS,CAAC,QAAQ,CAAC,QAAQ,qBAGzB;IAEF,IAAI,qBAAqB,IAAI,qBAAqB,CAUjD;IAED,OAAO,KAAK,cAAc,GAKzB;IAED,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,KAAK,eAAe,GAW1B;IAED,IAAI,IAAI;;;;;;
|
|
1
|
+
{"version":3,"file":"alert-icon.d.ts","sourceRoot":"","sources":["../../../src/components/alert-icon/alert-icon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAa,cAAc,EAAU,MAAM,KAAK,CAAC;AAGnE,OAAO,uCAAuC,CAAC;AAE/C,OAAO,EACL,SAAS,EACT,aAAa,EACb,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAMxB,OAAO,yCAAyC,CAAC;AACjD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,4CAA4C,CAAC;AACpD,OAAO,8CAA8C,CAAC;AACtD,OAAO,yCAAyC,CAAC;AACjD,OAAO,2CAA2C,CAAC;AACnD,OAAO,8CAA8C,CAAC;AACtD,OAAO,gDAAgD,CAAC;AACxD,OAAO,wCAAwC,CAAC;AAChD,OAAO,6CAA6C,CAAC;AACrD,OAAO,0CAA0C,CAAC;AAClD,OAAO,+CAA+C,CAAC;AACvD,OAAO,8CAA8C,CAAC;AACtD,OAAO,iDAAiD,CAAC;AACzD,OAAO,gDAAgD,CAAC;AACxD,OAAO,qDAAqD,CAAC;AAE7D,OAAO,oCAAoC,CAAC;AAC5C,OAAO,oCAAoC,CAAC;AAsB5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAiGzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBACa,YAAa,SAAQ,UAAU;IAChB,SAAS,EAAE,SAAS,CAAmB;IAEvC,IAAI,CAAC,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEpB,aAAa,EAAE,aAAa,CAC9B;IAExB,SAAS,CAAC,QAAQ,CAAC,QAAQ,qBAGzB;IAEF,IAAI,qBAAqB,IAAI,qBAAqB,CAUjD;IAED,OAAO,KAAK,cAAc,GAKzB;IAED,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,KAAK,eAAe,GAW1B;IAED,IAAI,IAAI;;;;;;aAgDP;IAED,OAAO,CAAC,gBAAgB;IAqDf,MAAM;IAiBf,OAAgB,MAAM,0BAiDpB;CACH;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
|
|
@@ -152,10 +152,11 @@ var ObcAlertIcon = class ObcAlertIcon extends LitElement {
|
|
|
152
152
|
case "unacknowledged": return mapping["alarm-unack"];
|
|
153
153
|
default: return null;
|
|
154
154
|
}
|
|
155
|
-
else if (this.bamType === AlertType.Warning) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
else if (this.bamType === AlertType.Warning) switch (this._effectiveState) {
|
|
156
|
+
case "rectified": return mapping["warning-rectified"];
|
|
157
|
+
case "silenced": return mapping["warning-silenced"];
|
|
158
|
+
case "unacknowledged": return mapping["warning-unack"];
|
|
159
|
+
default: return null;
|
|
159
160
|
}
|
|
160
161
|
return null;
|
|
161
162
|
}
|
|
@@ -189,7 +190,7 @@ var ObcAlertIcon = class ObcAlertIcon extends LitElement {
|
|
|
189
190
|
default: return nothing;
|
|
190
191
|
}
|
|
191
192
|
}
|
|
192
|
-
return nothing;
|
|
193
|
+
return this.icon ? html`${this.icon.a}` : nothing;
|
|
193
194
|
}
|
|
194
195
|
render() {
|
|
195
196
|
if (!this._effectiveType) return html`<div>No alarm</div>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-icon.js","names":[],"sources":["../../../src/components/alert-icon/alert-icon.ts"],"sourcesContent":["import {LitElement, html, css, TemplateResult, nothing} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../../icons/icon-caution-color-iec.js';\nimport {customElement} from '../../decorator.js';\nimport {\n AlertType,\n FlashingSpeed,\n type ResolvedFlashingSpeed,\n} from '../../types.js';\nimport {\n AlertFlashPhase,\n getBamAlertTypeForBlinking,\n resolveFlashingSpeed,\n} from '../../alert-severity.js';\nimport '../../icons/icon-alarm-badge-outline.js';\nimport '../../icons/icon-warning-badge-outline.js';\nimport '../../icons/icon-caution-badge-outline.js';\nimport '../../icons/icon-alarm-acknowledged-iec.js';\nimport '../../icons/icon-warning-acknowledged-iec.js';\nimport '../../icons/icon-alarm-rectified-iec.js';\nimport '../../icons/icon-warning-rectified-iec.js';\nimport '../../icons/icon-alarm-rectified-outlined.js';\nimport '../../icons/icon-warning-rectified-outlined.js';\nimport '../../icons/icon-alarm-silenced-iec.js';\nimport '../../icons/icon-alarm-silenced-outlined.js';\nimport '../../icons/icon-warning-silenced-iec.js';\nimport '../../icons/icon-warning-silenced-outlined.js';\nimport '../../icons/icon-alarm-unacknowledged-iec.js';\nimport '../../icons/icon-alarm-acknowledged-outlined.js';\nimport '../../icons/icon-warning-unacknowledged-iec.js';\nimport '../../icons/icon-warning-unacknowledged-outlined.js';\n\nimport '../../icons/icon-critical-badge.js';\nimport '../alert-frame/diagnostic-badge.js';\nimport {criticalA, criticalB} from './icons/icon-critical.js';\nimport {\n criticalUnacknowledgedA,\n criticalUnacknowledgedB,\n} from './icons/icon-critical-unacknowledged.js';\nimport {\n criticalSilencedA,\n criticalSilencedB,\n} from './icons/icon-critical-silenced.js';\nimport {\n criticalRectifiedA,\n criticalRectifiedB,\n} from './icons/icon-critical-rectified.js';\nimport {criticalAcknowledged} from './icons/icon-critical-acknowledged.js';\nimport {\n lowUnacknowledgedA,\n lowUnacknowledgedB,\n} from './icons/icon-low-unacknowledged.js';\nimport {lowSilencedA, lowSilencedB} from './icons/icon-low-silenced.js';\nimport {lowRectifiedA, lowRectifiedB} from './icons/icon-low-rectified.js';\nimport {lowAcknowledged} from './icons/icon-low-acknowledged.js';\nimport {FlashingController} from '../../palettes/flashing-controller.js';\n\nenum AlertIconState {\n Silenced = 'silenced',\n Unacknowledged = 'unacknowledged',\n Acknowledged = 'acknowledged',\n Rectified = 'rectified',\n}\n\nenum AlertIconName {\n AlarmSilenced = 'alarm-silenced',\n AlarmUnack = 'alarm-unack',\n AlarmRectified = 'alarm-rectified',\n WarningUnack = 'warning-unack',\n WarningRectified = 'warning-rectified',\n WarningSilenced = 'warning-silenced',\n Critical = 'critical',\n CriticalUnack = 'critical-unack',\n CriticalSilenced = 'critical-silenced',\n CriticalRectified = 'critical-rectified',\n LowUnack = 'low-unack',\n LowSilenced = 'low-silenced',\n LowRectified = 'low-rectified',\n}\n\nconst mapping = {\n [AlertIconName.AlarmSilenced]: {\n a: html`<obi-alarm-silenced-iec usecsscolor></obi-alarm-silenced-iec>`,\n b: html`<obi-alarm-silenced-outlined\n usecsscolor\n ></obi-alarm-silenced-outlined>`,\n },\n [AlertIconName.AlarmUnack]: {\n a: html`<obi-alarm-unacknowledged-iec\n usecsscolor\n ></obi-alarm-unacknowledged-iec>`,\n b: html`<obi-alarm-acknowledged-outlined\n usecsscolor\n ></obi-alarm-acknowledged-outlined>`,\n },\n [AlertIconName.AlarmRectified]: {\n a: html`<obi-alarm-rectified-iec usecsscolor></obi-alarm-rectified-iec>`,\n b: html`<obi-alarm-rectified-outlined\n usecsscolor\n ></obi-alarm-rectified-outlined>`,\n },\n [AlertIconName.WarningUnack]: {\n a: html`<obi-warning-unacknowledged-iec\n usecsscolor\n ></obi-warning-unacknowledged-iec>`,\n b: html`<obi-warning-unacknowledged-outlined\n usecsscolor\n ></obi-warning-unacknowledged-outlined>`,\n },\n [AlertIconName.WarningRectified]: {\n a: html`<obi-warning-rectified-iec\n usecsscolor\n ></obi-warning-rectified-iec>`,\n b: html`<obi-warning-rectified-outlined\n usecsscolor\n ></obi-warning-rectified-outlined>`,\n },\n [AlertIconName.WarningSilenced]: {\n a: html`<obi-warning-silenced-iec usecsscolor></obi-warning-silenced-iec>`,\n b: html`<obi-warning-silenced-outlined\n usecsscolor\n ></obi-warning-silenced-outlined>`,\n },\n [AlertIconName.Critical]: {\n a: criticalA,\n b: criticalB,\n },\n [AlertIconName.CriticalUnack]: {\n a: criticalUnacknowledgedA,\n b: criticalUnacknowledgedB,\n },\n [AlertIconName.CriticalSilenced]: {\n a: criticalSilencedA,\n b: criticalSilencedB,\n },\n [AlertIconName.CriticalRectified]: {\n a: criticalRectifiedA,\n b: criticalRectifiedB,\n },\n [AlertIconName.LowUnack]: {\n a: lowUnacknowledgedA,\n b: lowUnacknowledgedB,\n },\n [AlertIconName.LowSilenced]: {\n a: lowSilencedA,\n b: lowSilencedB,\n },\n [AlertIconName.LowRectified]: {\n a: lowRectifiedA,\n b: lowRectifiedB,\n },\n};\n/**\n * `obc-alert-icon` – Animated alert icon for signaling alarm and warning states.\n *\n * Displays a specialized icon with a blinking effect to visually indicate alert or warning conditions. The icon type is determined by the `name` property, supporting both alarm and warning variants in different states (such as silenced, unacknowledged, or rectified).\n *\n * Appears in notification areas, alert banners, or status panels to draw attention to active or historical alert conditions. The blinking animation helps highlight urgency or status changes without requiring user interaction.\n *\n * ## Features\n * - **Multiple Icon Types:** Supports all alarm and warning types.\n * - **Flashing:** Two SVG layers alternate at the design tempo (fast for critical/alarm/high, slow for warning/medium, very slow for low and for every rectified alert); acknowledged icons are steady.\n * - **Adaptive Styling:** Applies different CSS variables for alarm and warning types to allow for distinct visual cues (e.g., color, blink timing).\n * - **Scalable:** Designed to fit any container size; scales with its parent element.\n *\n * ## Usage Guidelines\n * Use `obc-alert-icon` to visually represent the status of alarms or warnings in notification panels, alert lists, or system status areas. The blinking effect is intended to draw user attention to active or recent alert conditions. Select the appropriate `name` value to match the alert state you wish to indicate.\n *\n * **TODO(designer):** Provide guidance on when to use each icon variant (e.g., when to use \"rectified\" vs. \"silenced\"), and any best practices for icon placement or blink timing.\n *\n * ## Properties\n * - `type` (AlertType): The type of alarm to display.\n * - `status` (AlarmStatus): The status of the alarm to display.\n *\n * ## Best Practices\n * - Only use the blinking alert icon for states that require immediate or prominent user attention.\n * - Ensure the icon is sized appropriately for its context (e.g., 32x32px or 64x64px for status panels).\n * - Avoid using multiple blinking icons in close proximity to prevent visual overload.\n *\n * ## Example\n * ```html\n * <obc-alert-icon .alarmType=${alarm.type} .alarmStatus=${alarm.status}></obc-alert-icon>\n * ```\n *\n * @property flashingSpeed - Flash tempo: `default` resolves from the alert type and state,\n * `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes. Acknowledged icons are\n * always steady.\n * @availableWhen acknowledged type in [Alarm, Warning, LevelCritical, LevelHigh, LevelMedium, LevelLow]\n * @availableWhen active type in [Alarm, Warning, LevelCritical, LevelHigh, LevelMedium, LevelLow]\n * @stable\n */\n@customElement('obc-alert-icon')\nexport class ObcAlertIcon extends LitElement {\n @property({type: String}) alertType: AlertType = AlertType.Alarm;\n /* @deprecated use `alertType` instead */\n @property({type: String}) type?: AlertType;\n @property({type: Boolean}) acknowledged?: boolean;\n @property({type: Boolean}) active?: boolean;\n @property({type: Boolean}) silenced?: boolean;\n\n @property({type: String}) flashingSpeed: FlashingSpeed =\n FlashingSpeed.Default;\n\n protected readonly flashing = new FlashingController(\n this,\n () => this.resolvedFlashingSpeed\n );\n\n get resolvedFlashingSpeed(): ResolvedFlashingSpeed {\n // Caution and diagnostic have no flashing glyph pair, whatever the speed.\n if (this.acknowledged || !this.icon) {\n return FlashingSpeed.Fixed;\n }\n return resolveFlashingSpeed(\n this.flashingSpeed,\n this._effectiveType,\n this.active === false ? AlertFlashPhase.Rectified : AlertFlashPhase.Active\n );\n }\n\n private get _effectiveType(): AlertType {\n if (this.type) {\n return this.type;\n }\n return this.alertType;\n }\n\n private get bamType(): AlertType {\n return getBamAlertTypeForBlinking(this._effectiveType);\n }\n\n private get _effectiveState(): AlertIconState {\n if (this.active === false) {\n return AlertIconState.Rectified;\n } else if (this.acknowledged) {\n return AlertIconState.Acknowledged;\n } else if (this.silenced) {\n return AlertIconState.Silenced;\n } else if (this.active === true) {\n return AlertIconState.Unacknowledged;\n }\n return AlertIconState.Unacknowledged;\n }\n\n get icon() {\n if (this._effectiveType === AlertType.LevelCritical) {\n switch (this._effectiveState) {\n case AlertIconState.Rectified:\n return mapping[AlertIconName.CriticalRectified];\n case AlertIconState.Silenced:\n return mapping[AlertIconName.CriticalSilenced];\n case AlertIconState.Unacknowledged:\n return mapping[AlertIconName.CriticalUnack];\n default:\n return mapping[AlertIconName.Critical];\n }\n } else if (this._effectiveType === AlertType.LevelLow) {\n switch (this._effectiveState) {\n case AlertIconState.Rectified:\n return mapping[AlertIconName.LowRectified];\n case AlertIconState.Silenced:\n return mapping[AlertIconName.LowSilenced];\n case AlertIconState.Unacknowledged:\n return mapping[AlertIconName.LowUnack];\n default:\n return mapping[AlertIconName.LowUnack];\n }\n } else if (this.bamType === AlertType.Alarm) {\n switch (this._effectiveState) {\n case AlertIconState.Rectified:\n return mapping[AlertIconName.AlarmRectified];\n case AlertIconState.Silenced:\n return mapping[AlertIconName.AlarmSilenced];\n case AlertIconState.Unacknowledged:\n return mapping[AlertIconName.AlarmUnack];\n default:\n return null;\n }\n } else if (this.bamType === AlertType.Warning) {\n if (this.active === false) {\n return mapping[AlertIconName.WarningRectified];\n } else if (this.acknowledged) {\n return mapping[AlertIconName.WarningSilenced];\n } else {\n return mapping[AlertIconName.WarningUnack];\n }\n }\n\n return null;\n }\n\n private renderStaticIcon(): TemplateResult | typeof nothing {\n // Caution and diagnostic always show a fixed symbol, regardless of state.\n if (this._effectiveType === AlertType.Caution) {\n return html`<obi-caution-color-iec usecsscolor></obi-caution-color-iec>`;\n }\n if (this._effectiveType === AlertType.LevelDiagnostic) {\n return html`<obi-diagnostic-badge\n style=\"color: var(--alert-diagnostic-color);\"\n ></obi-diagnostic-badge>`;\n }\n if (this._effectiveState === AlertIconState.Acknowledged) {\n if (this._effectiveType === AlertType.LevelCritical) {\n return html`${criticalAcknowledged}`;\n }\n if (this._effectiveType === AlertType.LevelLow) {\n return html`${lowAcknowledged}`;\n }\n switch (this.bamType) {\n case AlertType.Alarm:\n return html`<obi-alarm-acknowledged-iec\n usecsscolor\n ></obi-alarm-acknowledged-iec>`;\n case AlertType.Warning:\n return html`<obi-warning-acknowledged-iec\n usecsscolor\n ></obi-warning-acknowledged-iec>`;\n default:\n return nothing;\n }\n } else if (this._effectiveState === AlertIconState.Rectified) {\n if (this._effectiveType === AlertType.LevelCritical) {\n return html`${criticalRectifiedB}`;\n }\n if (this._effectiveType === AlertType.LevelLow) {\n return html`${lowRectifiedB}`;\n }\n switch (this.bamType) {\n case AlertType.Alarm:\n return html`<obi-alarm-rectified-outlined\n usecsscolor\n ></obi-alarm-rectified-outlined>`;\n case AlertType.Warning:\n return html`<obi-warning-rectified-outlined\n usecsscolor\n ></obi-warning-rectified-outlined>`;\n default:\n return nothing;\n }\n }\n return nothing;\n }\n\n override render() {\n if (!this._effectiveType) {\n return html`<div>No alarm</div>`;\n }\n const tempo = this.resolvedFlashingSpeed;\n const icons = this.icon;\n if (tempo !== FlashingSpeed.Fixed && icons) {\n return html`\n <div class=${classMap({wrapper: true, [`flash-${tempo}`]: true})}>\n <span class=\"a\">${icons.a}</span>\n <span class=\"b\">${icons.b}</span>\n </div>\n `;\n }\n return html`<div class=\"wrapper\">${this.renderStaticIcon()}</div>`;\n }\n\n static override styles = css`\n .wrapper {\n height: 100%;\n width: 100%;\n position: relative;\n\n obi-diagnostic-badge,\n obi-critical-badge {\n display: block;\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n\n svg,\n .a,\n .b {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n &.flash-fast .a {\n opacity: var(--flash-fast-on);\n }\n\n &.flash-fast .b {\n opacity: var(--flash-fast-off);\n }\n\n &.flash-slow .a {\n opacity: var(--flash-slow-on);\n }\n\n &.flash-slow .b {\n opacity: var(--flash-slow-off);\n }\n\n &.flash-very-slow .a {\n opacity: var(--flash-very-slow-on);\n }\n\n &.flash-very-slow .b {\n opacity: var(--flash-very-slow-off);\n }\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-icon': ObcAlertIcon;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alert-icon.js","names":[],"sources":["../../../src/components/alert-icon/alert-icon.ts"],"sourcesContent":["import {LitElement, html, css, TemplateResult, nothing} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../../icons/icon-caution-color-iec.js';\nimport {customElement} from '../../decorator.js';\nimport {\n AlertType,\n FlashingSpeed,\n type ResolvedFlashingSpeed,\n} from '../../types.js';\nimport {\n AlertFlashPhase,\n getBamAlertTypeForBlinking,\n resolveFlashingSpeed,\n} from '../../alert-severity.js';\nimport '../../icons/icon-alarm-badge-outline.js';\nimport '../../icons/icon-warning-badge-outline.js';\nimport '../../icons/icon-caution-badge-outline.js';\nimport '../../icons/icon-alarm-acknowledged-iec.js';\nimport '../../icons/icon-warning-acknowledged-iec.js';\nimport '../../icons/icon-alarm-rectified-iec.js';\nimport '../../icons/icon-warning-rectified-iec.js';\nimport '../../icons/icon-alarm-rectified-outlined.js';\nimport '../../icons/icon-warning-rectified-outlined.js';\nimport '../../icons/icon-alarm-silenced-iec.js';\nimport '../../icons/icon-alarm-silenced-outlined.js';\nimport '../../icons/icon-warning-silenced-iec.js';\nimport '../../icons/icon-warning-silenced-outlined.js';\nimport '../../icons/icon-alarm-unacknowledged-iec.js';\nimport '../../icons/icon-alarm-acknowledged-outlined.js';\nimport '../../icons/icon-warning-unacknowledged-iec.js';\nimport '../../icons/icon-warning-unacknowledged-outlined.js';\n\nimport '../../icons/icon-critical-badge.js';\nimport '../alert-frame/diagnostic-badge.js';\nimport {criticalA, criticalB} from './icons/icon-critical.js';\nimport {\n criticalUnacknowledgedA,\n criticalUnacknowledgedB,\n} from './icons/icon-critical-unacknowledged.js';\nimport {\n criticalSilencedA,\n criticalSilencedB,\n} from './icons/icon-critical-silenced.js';\nimport {\n criticalRectifiedA,\n criticalRectifiedB,\n} from './icons/icon-critical-rectified.js';\nimport {criticalAcknowledged} from './icons/icon-critical-acknowledged.js';\nimport {\n lowUnacknowledgedA,\n lowUnacknowledgedB,\n} from './icons/icon-low-unacknowledged.js';\nimport {lowSilencedA, lowSilencedB} from './icons/icon-low-silenced.js';\nimport {lowRectifiedA, lowRectifiedB} from './icons/icon-low-rectified.js';\nimport {lowAcknowledged} from './icons/icon-low-acknowledged.js';\nimport {FlashingController} from '../../palettes/flashing-controller.js';\n\nenum AlertIconState {\n Silenced = 'silenced',\n Unacknowledged = 'unacknowledged',\n Acknowledged = 'acknowledged',\n Rectified = 'rectified',\n}\n\nenum AlertIconName {\n AlarmSilenced = 'alarm-silenced',\n AlarmUnack = 'alarm-unack',\n AlarmRectified = 'alarm-rectified',\n WarningUnack = 'warning-unack',\n WarningRectified = 'warning-rectified',\n WarningSilenced = 'warning-silenced',\n Critical = 'critical',\n CriticalUnack = 'critical-unack',\n CriticalSilenced = 'critical-silenced',\n CriticalRectified = 'critical-rectified',\n LowUnack = 'low-unack',\n LowSilenced = 'low-silenced',\n LowRectified = 'low-rectified',\n}\n\nconst mapping = {\n [AlertIconName.AlarmSilenced]: {\n a: html`<obi-alarm-silenced-iec usecsscolor></obi-alarm-silenced-iec>`,\n b: html`<obi-alarm-silenced-outlined\n usecsscolor\n ></obi-alarm-silenced-outlined>`,\n },\n [AlertIconName.AlarmUnack]: {\n a: html`<obi-alarm-unacknowledged-iec\n usecsscolor\n ></obi-alarm-unacknowledged-iec>`,\n b: html`<obi-alarm-acknowledged-outlined\n usecsscolor\n ></obi-alarm-acknowledged-outlined>`,\n },\n [AlertIconName.AlarmRectified]: {\n a: html`<obi-alarm-rectified-iec usecsscolor></obi-alarm-rectified-iec>`,\n b: html`<obi-alarm-rectified-outlined\n usecsscolor\n ></obi-alarm-rectified-outlined>`,\n },\n [AlertIconName.WarningUnack]: {\n a: html`<obi-warning-unacknowledged-iec\n usecsscolor\n ></obi-warning-unacknowledged-iec>`,\n b: html`<obi-warning-unacknowledged-outlined\n usecsscolor\n ></obi-warning-unacknowledged-outlined>`,\n },\n [AlertIconName.WarningRectified]: {\n a: html`<obi-warning-rectified-iec\n usecsscolor\n ></obi-warning-rectified-iec>`,\n b: html`<obi-warning-rectified-outlined\n usecsscolor\n ></obi-warning-rectified-outlined>`,\n },\n [AlertIconName.WarningSilenced]: {\n a: html`<obi-warning-silenced-iec usecsscolor></obi-warning-silenced-iec>`,\n b: html`<obi-warning-silenced-outlined\n usecsscolor\n ></obi-warning-silenced-outlined>`,\n },\n [AlertIconName.Critical]: {\n a: criticalA,\n b: criticalB,\n },\n [AlertIconName.CriticalUnack]: {\n a: criticalUnacknowledgedA,\n b: criticalUnacknowledgedB,\n },\n [AlertIconName.CriticalSilenced]: {\n a: criticalSilencedA,\n b: criticalSilencedB,\n },\n [AlertIconName.CriticalRectified]: {\n a: criticalRectifiedA,\n b: criticalRectifiedB,\n },\n [AlertIconName.LowUnack]: {\n a: lowUnacknowledgedA,\n b: lowUnacknowledgedB,\n },\n [AlertIconName.LowSilenced]: {\n a: lowSilencedA,\n b: lowSilencedB,\n },\n [AlertIconName.LowRectified]: {\n a: lowRectifiedA,\n b: lowRectifiedB,\n },\n};\n/**\n * `obc-alert-icon` – Animated alert icon for signaling alarm and warning states.\n *\n * Displays a specialized icon with a blinking effect to visually indicate alert or warning conditions. The icon type is determined by the `name` property, supporting both alarm and warning variants in different states (such as silenced, unacknowledged, or rectified).\n *\n * Appears in notification areas, alert banners, or status panels to draw attention to active or historical alert conditions. The blinking animation helps highlight urgency or status changes without requiring user interaction.\n *\n * ## Features\n * - **Multiple Icon Types:** Supports all alarm and warning types.\n * - **Flashing:** Two SVG layers alternate at the design tempo (fast for critical/alarm/high, slow for warning/medium, very slow for low and for every rectified alert); acknowledged icons are steady.\n * - **Adaptive Styling:** Applies different CSS variables for alarm and warning types to allow for distinct visual cues (e.g., color, blink timing).\n * - **Scalable:** Designed to fit any container size; scales with its parent element.\n *\n * ## Usage Guidelines\n * Use `obc-alert-icon` to visually represent the status of alarms or warnings in notification panels, alert lists, or system status areas. The blinking effect is intended to draw user attention to active or recent alert conditions. Select the appropriate `name` value to match the alert state you wish to indicate.\n *\n * **TODO(designer):** Provide guidance on when to use each icon variant (e.g., when to use \"rectified\" vs. \"silenced\"), and any best practices for icon placement or blink timing.\n *\n * ## Properties\n * - `type` (AlertType): The type of alarm to display.\n * - `status` (AlarmStatus): The status of the alarm to display.\n *\n * ## Best Practices\n * - Only use the blinking alert icon for states that require immediate or prominent user attention.\n * - Ensure the icon is sized appropriately for its context (e.g., 32x32px or 64x64px for status panels).\n * - Avoid using multiple blinking icons in close proximity to prevent visual overload.\n *\n * ## Example\n * ```html\n * <obc-alert-icon .alarmType=${alarm.type} .alarmStatus=${alarm.status}></obc-alert-icon>\n * ```\n *\n * @property flashingSpeed - Flash tempo: `default` resolves from the alert type and state,\n * `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes. Acknowledged icons are\n * always steady.\n * @availableWhen acknowledged type in [Alarm, Warning, LevelCritical, LevelHigh, LevelMedium, LevelLow]\n * @availableWhen active type in [Alarm, Warning, LevelCritical, LevelHigh, LevelMedium, LevelLow]\n * @stable\n */\n@customElement('obc-alert-icon')\nexport class ObcAlertIcon extends LitElement {\n @property({type: String}) alertType: AlertType = AlertType.Alarm;\n /* @deprecated use `alertType` instead */\n @property({type: String}) type?: AlertType;\n @property({type: Boolean}) acknowledged?: boolean;\n @property({type: Boolean}) active?: boolean;\n @property({type: Boolean}) silenced?: boolean;\n\n @property({type: String}) flashingSpeed: FlashingSpeed =\n FlashingSpeed.Default;\n\n protected readonly flashing = new FlashingController(\n this,\n () => this.resolvedFlashingSpeed\n );\n\n get resolvedFlashingSpeed(): ResolvedFlashingSpeed {\n // Caution and diagnostic have no flashing glyph pair, whatever the speed.\n if (this.acknowledged || !this.icon) {\n return FlashingSpeed.Fixed;\n }\n return resolveFlashingSpeed(\n this.flashingSpeed,\n this._effectiveType,\n this.active === false ? AlertFlashPhase.Rectified : AlertFlashPhase.Active\n );\n }\n\n private get _effectiveType(): AlertType {\n if (this.type) {\n return this.type;\n }\n return this.alertType;\n }\n\n private get bamType(): AlertType {\n return getBamAlertTypeForBlinking(this._effectiveType);\n }\n\n private get _effectiveState(): AlertIconState {\n if (this.active === false) {\n return AlertIconState.Rectified;\n } else if (this.acknowledged) {\n return AlertIconState.Acknowledged;\n } else if (this.silenced) {\n return AlertIconState.Silenced;\n } else if (this.active === true) {\n return AlertIconState.Unacknowledged;\n }\n return AlertIconState.Unacknowledged;\n }\n\n get icon() {\n if (this._effectiveType === AlertType.LevelCritical) {\n switch (this._effectiveState) {\n case AlertIconState.Rectified:\n return mapping[AlertIconName.CriticalRectified];\n case AlertIconState.Silenced:\n return mapping[AlertIconName.CriticalSilenced];\n case AlertIconState.Unacknowledged:\n return mapping[AlertIconName.CriticalUnack];\n default:\n return mapping[AlertIconName.Critical];\n }\n } else if (this._effectiveType === AlertType.LevelLow) {\n switch (this._effectiveState) {\n case AlertIconState.Rectified:\n return mapping[AlertIconName.LowRectified];\n case AlertIconState.Silenced:\n return mapping[AlertIconName.LowSilenced];\n case AlertIconState.Unacknowledged:\n return mapping[AlertIconName.LowUnack];\n default:\n return mapping[AlertIconName.LowUnack];\n }\n } else if (this.bamType === AlertType.Alarm) {\n switch (this._effectiveState) {\n case AlertIconState.Rectified:\n return mapping[AlertIconName.AlarmRectified];\n case AlertIconState.Silenced:\n return mapping[AlertIconName.AlarmSilenced];\n case AlertIconState.Unacknowledged:\n return mapping[AlertIconName.AlarmUnack];\n default:\n return null;\n }\n } else if (this.bamType === AlertType.Warning) {\n switch (this._effectiveState) {\n case AlertIconState.Rectified:\n return mapping[AlertIconName.WarningRectified];\n case AlertIconState.Silenced:\n return mapping[AlertIconName.WarningSilenced];\n case AlertIconState.Unacknowledged:\n return mapping[AlertIconName.WarningUnack];\n default:\n return null;\n }\n }\n\n return null;\n }\n\n private renderStaticIcon(): TemplateResult | typeof nothing {\n // Caution and diagnostic always show a fixed symbol, regardless of state.\n if (this._effectiveType === AlertType.Caution) {\n return html`<obi-caution-color-iec usecsscolor></obi-caution-color-iec>`;\n }\n if (this._effectiveType === AlertType.LevelDiagnostic) {\n return html`<obi-diagnostic-badge\n style=\"color: var(--alert-diagnostic-color);\"\n ></obi-diagnostic-badge>`;\n }\n if (this._effectiveState === AlertIconState.Acknowledged) {\n if (this._effectiveType === AlertType.LevelCritical) {\n return html`${criticalAcknowledged}`;\n }\n if (this._effectiveType === AlertType.LevelLow) {\n return html`${lowAcknowledged}`;\n }\n switch (this.bamType) {\n case AlertType.Alarm:\n return html`<obi-alarm-acknowledged-iec\n usecsscolor\n ></obi-alarm-acknowledged-iec>`;\n case AlertType.Warning:\n return html`<obi-warning-acknowledged-iec\n usecsscolor\n ></obi-warning-acknowledged-iec>`;\n default:\n return nothing;\n }\n } else if (this._effectiveState === AlertIconState.Rectified) {\n if (this._effectiveType === AlertType.LevelCritical) {\n return html`${criticalRectifiedB}`;\n }\n if (this._effectiveType === AlertType.LevelLow) {\n return html`${lowRectifiedB}`;\n }\n switch (this.bamType) {\n case AlertType.Alarm:\n return html`<obi-alarm-rectified-outlined\n usecsscolor\n ></obi-alarm-rectified-outlined>`;\n case AlertType.Warning:\n return html`<obi-warning-rectified-outlined\n usecsscolor\n ></obi-warning-rectified-outlined>`;\n default:\n return nothing;\n }\n }\n // Steady but still owed an ACK, such as with a `fixed` flashing speed.\n return this.icon ? html`${this.icon.a}` : nothing;\n }\n\n override render() {\n if (!this._effectiveType) {\n return html`<div>No alarm</div>`;\n }\n const tempo = this.resolvedFlashingSpeed;\n const icons = this.icon;\n if (tempo !== FlashingSpeed.Fixed && icons) {\n return html`\n <div class=${classMap({wrapper: true, [`flash-${tempo}`]: true})}>\n <span class=\"a\">${icons.a}</span>\n <span class=\"b\">${icons.b}</span>\n </div>\n `;\n }\n return html`<div class=\"wrapper\">${this.renderStaticIcon()}</div>`;\n }\n\n static override styles = css`\n .wrapper {\n height: 100%;\n width: 100%;\n position: relative;\n\n obi-diagnostic-badge,\n obi-critical-badge {\n display: block;\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n\n svg,\n .a,\n .b {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n &.flash-fast .a {\n opacity: var(--flash-fast-on);\n }\n\n &.flash-fast .b {\n opacity: var(--flash-fast-off);\n }\n\n &.flash-slow .a {\n opacity: var(--flash-slow-on);\n }\n\n &.flash-slow .b {\n opacity: var(--flash-slow-off);\n }\n\n &.flash-very-slow .a {\n opacity: var(--flash-very-slow-on);\n }\n\n &.flash-very-slow .b {\n opacity: var(--flash-very-slow-off);\n }\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-icon': ObcAlertIcon;\n }\n}\n"],"mappings":"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"}
|
|
@@ -60,7 +60,6 @@ obc-table::part(grid) {
|
|
|
60
60
|
.empty-list .icon {
|
|
61
61
|
height: 96px;
|
|
62
62
|
width: 96px;
|
|
63
|
-
color: var(--on-flat-neutral-color);
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
.empty-list .empty-title {
|
|
@@ -88,6 +87,10 @@ obc-table::part(grid) {
|
|
|
88
87
|
max-width: 344px;
|
|
89
88
|
text-align: center;
|
|
90
89
|
}
|
|
90
|
+
|
|
91
|
+
.empty-list .icon {
|
|
92
|
+
color: var(--on-flat-neutral-color);
|
|
93
|
+
}
|
|
91
94
|
`;
|
|
92
95
|
//#endregion
|
|
93
96
|
export { alert_list_details_default as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-list-details.css.js","names":[],"sources":["../../../src/components/alert-list-details/alert-list-details.css?inline"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n user-select: none;\n}\n\n.alert-list {\n min-height: 0;\n flex-grow: 0;\n}\n\n.spacer {\n flex-grow: 1;\n}\n\n.action {\n display: flex;\n height: var(--app-components-tool-bar-touch-target-size);\n padding: 0px var(--app-components-alert-toolbar-margin-horizontal);\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-divider-color);\n background: var(--container-section-color);\n box-shadow: var(--shadow-flat);\n\n .btn-group {\n display: flex;\n }\n}\n\nobc-table::part(grid) {\n grid-template-columns: 1fr repeat(4, min-content);\n}\n\n.wrapper.small obc-table::part(grid) {\n grid-template-columns: 1fr min-content var(\n --app-components-alert-table-row-ack-container-width-small\n );\n}\n\n.empty-list {\n
|
|
1
|
+
{"version":3,"file":"alert-list-details.css.js","names":[],"sources":["../../../src/components/alert-list-details/alert-list-details.css?inline"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n user-select: none;\n}\n\n.alert-list {\n min-height: 0;\n flex-grow: 0;\n}\n\n.spacer {\n flex-grow: 1;\n}\n\n.action {\n display: flex;\n height: var(--app-components-tool-bar-touch-target-size);\n padding: 0px var(--app-components-alert-toolbar-margin-horizontal);\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-divider-color);\n background: var(--container-section-color);\n box-shadow: var(--shadow-flat);\n\n .btn-group {\n display: flex;\n }\n}\n\nobc-table::part(grid) {\n grid-template-columns: 1fr repeat(4, min-content);\n}\n\n.wrapper.small obc-table::part(grid) {\n grid-template-columns: 1fr min-content var(\n --app-components-alert-table-row-ack-container-width-small\n );\n}\n\n.empty-list {\n @mixin alert-list-empty;\n\n .icon {\n color: var(--on-flat-neutral-color);\n }\n}\n"],"mappings":""}
|
|
@@ -77,52 +77,13 @@ var alert_menu_default = css`* {
|
|
|
77
77
|
min-width: 120px;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
.empty-list {
|
|
81
|
-
display: flex;
|
|
82
|
-
flex-direction: column;
|
|
83
|
-
align-items: center;
|
|
84
|
-
justify-content: center;
|
|
85
|
-
height: 100%;
|
|
86
|
-
gap: var(--app-components-alert-menu-button-spacing);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.empty-list .icon {
|
|
90
|
-
height: 96px;
|
|
91
|
-
width: 96px;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.empty-list .empty-title {
|
|
95
|
-
color: var(--element-active-color);
|
|
96
|
-
font-family: var(--global-typography-font-family);
|
|
97
|
-
font-weight: var(--global-typography-ui-body-active-font-weight);
|
|
98
|
-
font-size: var(--global-typography-ui-body-active-font-size);
|
|
99
|
-
line-height: var(--global-typography-ui-body-active-line-height);
|
|
100
|
-
font-feature-settings:
|
|
101
|
-
"liga" off,
|
|
102
|
-
"clig" off,
|
|
103
|
-
"ss04" on;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.empty-list .empty-description {
|
|
107
|
-
color: var(--element-neutral-color);
|
|
108
|
-
font-family: var(--global-typography-font-family);
|
|
109
|
-
font-weight: var(--global-typography-ui-body-font-weight);
|
|
110
|
-
font-size: var(--global-typography-ui-body-font-size);
|
|
111
|
-
line-height: var(--global-typography-ui-body-line-height);
|
|
112
|
-
font-feature-settings:
|
|
113
|
-
"liga" off,
|
|
114
|
-
"clig" off,
|
|
115
|
-
"ss04" on;
|
|
116
|
-
max-width: 344px;
|
|
117
|
-
text-align: center;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
80
|
::slotted(*) {
|
|
121
81
|
display: block;
|
|
122
82
|
will-change: transform;
|
|
123
83
|
}
|
|
124
84
|
|
|
125
|
-
.alert-list.all ::slotted([shelved])
|
|
85
|
+
.alert-list.all ::slotted([shelved]),
|
|
86
|
+
.alert-list.all ::slotted([status="rectified-unacknowledged"]) {
|
|
126
87
|
display: none;
|
|
127
88
|
}
|
|
128
89
|
|
|
@@ -130,7 +91,7 @@ var alert_menu_default = css`* {
|
|
|
130
91
|
display: none;
|
|
131
92
|
}
|
|
132
93
|
|
|
133
|
-
.alert-list.unacked ::slotted(:not([status="unacknowledged"])),.alert-list.unacked ::slotted([shelved]) {
|
|
94
|
+
.alert-list.unacked ::slotted(:not([status="unacknowledged"]):not([status="rectified-unacknowledged"])),.alert-list.unacked ::slotted([shelved]) {
|
|
134
95
|
display: none;
|
|
135
96
|
}
|
|
136
97
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-menu.css.js","names":[],"sources":["../../../src/components/alert-menu/alert-menu.css?inline"],"sourcesContent":["@mixin soft-dismiss;\n\n* {\n box-sizing: border-box;\n}\n\n.wrapper {\n width: var(--app-components-alert-menu-width);\n height: 560px;\n max-width: 100vw;\n}\n\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.alert-list {\n flex-shrink: 1;\n flex-grow: 1;\n min-height: 0;\n overflow: hidden;\n position: relative;\n}\n\n.action {\n display: flex;\n min-height: var(--app-components-alert-menu-footer-container-height);\n padding: calc(\n (\n var(--app-components-alert-menu-footer-container-height) -\n var(--ui-components-button-touch-target-size) - 2px\n ) /\n 2\n )\n var(--app-components-alert-menu-footer-padding-horizontal);\n align-items: center;\n gap: var(--app-components-alert-menu-button-spacing);\n flex-shrink: 0;\n flex-wrap: wrap;\n align-self: stretch;\n border-top: 1px solid var(--border-divider-color);\n background: var(--container-global-color);\n\n obc-button::part(visible-wrapper) {\n height: 100%;\n }\n\n .btn {\n flex: 1;\n min-width: 120px;\n }\n}\n\n
|
|
1
|
+
{"version":3,"file":"alert-menu.css.js","names":[],"sources":["../../../src/components/alert-menu/alert-menu.css?inline"],"sourcesContent":["@mixin soft-dismiss;\n\n* {\n box-sizing: border-box;\n}\n\n.wrapper {\n width: var(--app-components-alert-menu-width);\n height: 560px;\n max-width: 100vw;\n}\n\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.alert-list {\n flex-shrink: 1;\n flex-grow: 1;\n min-height: 0;\n overflow: hidden;\n position: relative;\n}\n\n.action {\n display: flex;\n min-height: var(--app-components-alert-menu-footer-container-height);\n padding: calc(\n (\n var(--app-components-alert-menu-footer-container-height) -\n var(--ui-components-button-touch-target-size) - 2px\n ) /\n 2\n )\n var(--app-components-alert-menu-footer-padding-horizontal);\n align-items: center;\n gap: var(--app-components-alert-menu-button-spacing);\n flex-shrink: 0;\n flex-wrap: wrap;\n align-self: stretch;\n border-top: 1px solid var(--border-divider-color);\n background: var(--container-global-color);\n\n obc-button::part(visible-wrapper) {\n height: 100%;\n }\n\n .btn {\n flex: 1;\n min-width: 120px;\n }\n}\n\n::slotted(*) {\n display: block;\n will-change: transform;\n}\n\n.alert-list.all ::slotted([shelved]),\n.alert-list.all ::slotted([status=\"rectified-unacknowledged\"]) {\n display: none;\n}\n\n.alert-list.shelved ::slotted(:not([shelved])) {\n display: none;\n}\n\n.alert-list.unacked {\n ::slotted(\n :not([status=\"unacknowledged\"]):not([status=\"rectified-unacknowledged\"])\n ),\n ::slotted([shelved]) {\n display: none;\n }\n}\n"],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
1
|
+
import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
|
|
2
2
|
import { PopoverController } from '../../internal/popover-controller.js';
|
|
3
3
|
import '../button/button.js';
|
|
4
4
|
import '../../icons/icon-chevron-right-google.js';
|
|
@@ -16,6 +16,14 @@ export type ObcAckAllVisibleClickEvent = CustomEvent<{
|
|
|
16
16
|
}[];
|
|
17
17
|
tabName: 'shelved' | 'unacked' | 'all';
|
|
18
18
|
}>;
|
|
19
|
+
/** One tab of an alert menu: its name, its label and its empty state. */
|
|
20
|
+
export interface AlertMenuTab {
|
|
21
|
+
/** Names the tab in `ack-all-visible-click` and in the `empty-<tab>-*` slots. */
|
|
22
|
+
name: string;
|
|
23
|
+
title: string;
|
|
24
|
+
emptyTitle: string;
|
|
25
|
+
emptyIcon: TemplateResult;
|
|
26
|
+
}
|
|
19
27
|
/**
|
|
20
28
|
* `<obc-alert-menu>` – A tabbed alert summary panel for displaying, acknowledging, and managing active alerts.
|
|
21
29
|
*
|
|
@@ -23,7 +31,7 @@ export type ObcAckAllVisibleClickEvent = CustomEvent<{
|
|
|
23
31
|
*
|
|
24
32
|
* ### Features
|
|
25
33
|
* - **Tabbed organization:** Switch between "Unacked", "Active", and (optionally) "Shelved" tabs for focused alert review.
|
|
26
|
-
* - **Alert filtering:** Each tab displays only relevant alerts
|
|
34
|
+
* - **Alert filtering:** Each tab displays only relevant alerts: "Unacked" shows the non-shelved items still waiting for acknowledgment (`unacknowledged` or `rectified-unacknowledged`), "Active" every non-shelved item except the `rectified-unacknowledged` ones. A subclass changes the tabs and the list through the `tabs` and `renderList` hooks.
|
|
27
35
|
* - **Bulk actions:** "ACK visible" button allows acknowledging all currently visible (filtered) alerts at once.
|
|
28
36
|
* - **Silence and navigation:** Dedicated buttons to silence alerts or jump to the full alert list.
|
|
29
37
|
* - **Dynamic content:** Supports any number of `<obc-alert-menu-item>` children, with automatic empty-state messaging and icons per tab.
|
|
@@ -117,13 +125,27 @@ export declare class ObcAlertMenu extends LitElement {
|
|
|
117
125
|
showSilenceButton: boolean;
|
|
118
126
|
/** If true, shows the "Alerts" navigation button in the action bar. When hidden, the "ACK visible" button expands to fill the freed space. */
|
|
119
127
|
showAlertListButton: boolean;
|
|
120
|
-
|
|
128
|
+
/** The `name` of the tab the user picked; the second tab shows until then. */
|
|
129
|
+
private _selectedTabName?;
|
|
121
130
|
private alertList;
|
|
122
131
|
private handleAckAllVisibleClick;
|
|
123
132
|
private onTabChange;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
133
|
+
protected willUpdate(changedProperties: PropertyValues<this>): void;
|
|
134
|
+
/** Whether the menu offers "ACK visible" at all; `canAckAll` enables it. */
|
|
135
|
+
protected get offersAckAll(): boolean;
|
|
136
|
+
/** The tabs in display order; the menu opens on the second one. */
|
|
137
|
+
protected get tabs(): AlertMenuTab[];
|
|
138
|
+
/** Where the selected tab sits in `tabs`: the one the user picked, else the second. */
|
|
139
|
+
private selectedTabIndex;
|
|
140
|
+
private get selectedTab();
|
|
141
|
+
/**
|
|
142
|
+
* The list that shows the selected tab's items. The CSS hides the items the
|
|
143
|
+
* tab leaves out; the filter tells the list which ones those are.
|
|
144
|
+
*/
|
|
145
|
+
protected renderList(tab: AlertMenuTab, content: TemplateResult): TemplateResult;
|
|
146
|
+
private tabFilter;
|
|
147
|
+
render(): TemplateResult<1>;
|
|
148
|
+
static styles: CSSResultGroup;
|
|
127
149
|
}
|
|
128
150
|
declare global {
|
|
129
151
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-menu.d.ts","sourceRoot":"","sources":["../../../src/components/alert-menu/alert-menu.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"alert-menu.d.ts","sourceRoot":"","sources":["../../../src/components/alert-menu/alert-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EAIf,MAAM,KAAK,CAAC;AAGb,OAAO,qBAAqB,CAAC;AAC7B,OAAO,0CAA0C,CAAC;AAClD,OAAO,iCAAiC,CAAC;AACzC,OAAO,gCAAgC,CAAC;AACxC,OAAO,4BAA4B,CAAC;AACpC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,+BAA+B,CAAC;AAGvC,OAAO,gDAAgD,CAAC;AAIxD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC;IACnD,eAAe,EAAE;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACzD,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;CACxC,CAAC,CAAC;AAEH,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;CAC3B;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,qBAKa,YAAa,SAAQ,UAAU;IACf,WAAW,UAAS;IAEpB,IAAI,UAAS;IAExC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,oBAA+B;IAE5C,UAAU,EAAE,OAAO,CAAS;IAE5B,SAAS,EAAE,OAAO,CAAS;IAET,iBAAiB,EAAE,OAAO,CAChE;IAEsC,mBAAmB,EAAE,OAAO,CAClE;IAEP,8EAA8E;IACrE,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAG3C,OAAO,CAAC,SAAS,CAAoB;IAErC,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,WAAW;cAIA,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;IASrE,4EAA4E;IAC5E,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAED,mEAAmE;IACnE,SAAS,KAAK,IAAI,IAAI,YAAY,EAAE,CAwBnC;IAED,uFAAuF;IACvF,OAAO,CAAC,gBAAgB;IAKxB,OAAO,KAAK,WAAW,GAGtB;IAED;;;OAGG;IACH,SAAS,CAAC,UAAU,CAClB,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,cAAc,GACtB,cAAc;IAQjB,OAAO,CAAC,SAAS;IAcR,MAAM;IA2Ff,OAAgB,MAAM,EAAE,cAAc,CAA2B;CAClE;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
|