@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-button.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"alert-button.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,35 +1,18 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import '../../icons/icon-alerts.js';
|
|
5
|
-
import '../../icons/icon-alerts-active.js';
|
|
2
|
+
import { ObcAlertButtonType } from '../alert-button-item/alert-button-item.js';
|
|
3
|
+
import { AlertType, FlashingSpeed, AlertCounts } from '../../types.js';
|
|
6
4
|
import '../../icons/icon-notification.js';
|
|
7
5
|
import '../../icons/icon-notification-advice.js';
|
|
8
6
|
import '../../icons/icon-notification-advice-active.js';
|
|
9
7
|
import '../../icons/icon-silence-iec.js';
|
|
10
|
-
import '
|
|
11
|
-
|
|
12
|
-
import '../../icons/icon-alerts-caution-twotone.js';
|
|
13
|
-
import '../../manual-icon/icon-alerts-critical-twotone.js';
|
|
14
|
-
import '../../manual-icon/icon-alerts-diagnostic-twotone.js';
|
|
15
|
-
/**
|
|
16
|
-
* `ObcAlertButtonType` – Enum for alert button visual and behavioral variants.
|
|
17
|
-
*
|
|
18
|
-
* - `flat`: Minimal, icon-only button for compact spaces.
|
|
19
|
-
* - `normal`: Standard button with icon and optional counter.
|
|
20
|
-
* - `enhanced`: Emphasized button with additional styling for high-priority alerts.
|
|
21
|
-
*/
|
|
22
|
-
export declare enum ObcAlertButtonType {
|
|
23
|
-
Flat = "flat",
|
|
24
|
-
Normal = "normal",
|
|
25
|
-
Enhanced = "enhanced"
|
|
26
|
-
}
|
|
8
|
+
import '../alert-button-item/alert-button-item.js';
|
|
9
|
+
export { ObcAlertButtonType };
|
|
27
10
|
/**
|
|
28
11
|
* `<obc-alert-button>` – A compact, icon-based button for displaying alert or notification status and count.
|
|
29
12
|
*
|
|
30
13
|
* This component provides a visual indicator for active alerts or notifications, supporting different alert types (such as alarm, warning, or caution) and an optional counter badge. It can also include a secondary "silence" action button for muting alerts, adapting its layout responsively for different screen widths.
|
|
31
14
|
*
|
|
32
|
-
* Appears in toolbars or notification areas to give users a quick overview of alert status and provide direct access to alert-related actions.
|
|
15
|
+
* Appears in toolbars or notification areas to give users a quick overview of alert status and provide direct access to alert-related actions. The bell itself is an `obc-alert-button-item`; use the item directly where no silence button or breakpoints are needed, or for its global counter.
|
|
33
16
|
*
|
|
34
17
|
* ## Features
|
|
35
18
|
*
|
|
@@ -39,6 +22,7 @@ export declare enum ObcAlertButtonType {
|
|
|
39
22
|
* - **Enhanced:** Visually prominent button for high-priority alerts, with accent styling.
|
|
40
23
|
* - **Alert Types:** Supports `alarm`, `warning`, `caution`, or no alert (idle). Icon and color adapt to the alert type.
|
|
41
24
|
* - **Alert Counter:** Optional badge displays the number of active alerts (except in flat mode).
|
|
25
|
+
* - **Global Counter:** `globalCounter` shows the per-severity `counts` and an optional `shelvedCount` before the bell and the total, as `obc-alert-button-item` draws them.
|
|
42
26
|
* - **Silence Button:** Optional secondary button to mute or silence alerts, shown when enabled and at sufficient width.
|
|
43
27
|
* - **Blinking Animation:** Can animate (blink) to draw attention to active alerts (except for caution type).
|
|
44
28
|
* - **Responsive Layout:** Automatically switches to flat mode below a configurable width, and hides the silence button below another configurable width.
|
|
@@ -55,19 +39,7 @@ export declare enum ObcAlertButtonType {
|
|
|
55
39
|
*
|
|
56
40
|
* **TODO(designer):** Confirm if there are recommended default behaviors for auto-blinking, and if there are any design constraints for when to use each variant.
|
|
57
41
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* - `nAlerts` (number): Number of active alerts to display in the counter badge.
|
|
61
|
-
* - `alertType` (`AlertType`): Type of alert (`alarm`, `warning`, `caution`, or undefined for idle).
|
|
62
|
-
* - `type` (`ObcAlertButtonType`): Visual variant of the button (`flat`, `normal`, `enhanced`). Default is `normal`.
|
|
63
|
-
* - `counter` (boolean): Whether to show the alert counter badge (not available in flat mode).
|
|
64
|
-
* - `showSilenceButton` (boolean): Whether to display the silence button (hidden in flat mode or below min breakpoint).
|
|
65
|
-
* - `silenceButtonDisabled` (boolean): Disables the silence button when true.
|
|
66
|
-
* - `flatMaxBreakpointPx` (number): Maximum width (in px) for normal/enhanced mode; below this, switches to flat mode.
|
|
67
|
-
* - `silenceButtonMinBreakpointPx` (number): Minimum width (in px) to show the silence button; below this, it is hidden.
|
|
68
|
-
* - `blinking` (boolean): Enables blinking animation for active alerts (not for caution type).
|
|
69
|
-
* - `flashingSpeed`: tempo of the blink (`default` follows the alert type: critical/alarm/high fast, warning/medium slow, low very slow; `fixed` never flashes).
|
|
70
|
-
* - `large` (boolean): Increases button size for prominent or touch-friendly use.
|
|
42
|
+
* **TODO(designer):** The Figma Alert button has no flat Global counter, so below `flatMaxBreakpointPx` the button shows the flat bell without the counts.
|
|
71
43
|
*
|
|
72
44
|
* ## Events
|
|
73
45
|
*
|
|
@@ -99,47 +71,40 @@ export declare enum ObcAlertButtonType {
|
|
|
99
71
|
*
|
|
100
72
|
* In this example, the button shows an alarm icon, a counter badge with "3", is styled as enhanced, blinks to indicate urgency, and includes a silence button if the width allows.
|
|
101
73
|
*
|
|
102
|
-
* @property
|
|
103
|
-
*
|
|
74
|
+
* @property nAlerts - Number of active alerts shown in the counter; 0 shows the idle state.
|
|
75
|
+
* @property alertType - Alert type that selects the icon and colours: `alarm`, `warning`, `caution`, a `level-*` severity, or unset for the idle state.
|
|
76
|
+
* @property type - Visual variant: `flat` (icon only), `normal` (default, icon and optional counter) or `enhanced` (emphasized for high-priority alerts).
|
|
77
|
+
* @property large - Increases the button height and padding for touch-friendly or prominent use.
|
|
78
|
+
* @property showSilenceButton - Shows the silence button when the width is at least `silenceButtonMinBreakpointPx` and the button is not flat.
|
|
104
79
|
* @property silenceButtonDisabled - Disables the silence button when true.
|
|
105
80
|
* @availableWhen silenceButtonDisabled showSilenceButton==true
|
|
106
|
-
* @
|
|
81
|
+
* @property counter - Shows the alert counter when there are active alerts and the button is not flat.
|
|
82
|
+
* @property globalCounter - Shows the per-severity counts and the shelved count before the bell and the total (the item's global counter); a flat button shows the plain bell.
|
|
83
|
+
* @property counts - Alert count per severity for the global counter badges (`countAlarm`, `countWarning`, `countCaution` and the `level-*` counts).
|
|
84
|
+
* @availableWhen counts globalCounter==true
|
|
85
|
+
* @property shelvedCount - Number of shelved alerts, shown after the global counter badges; hidden at zero.
|
|
86
|
+
* @availableWhen shelvedCount globalCounter==true
|
|
87
|
+
* @property blinking - Flashes the bell for active alerts of a flashing alert type (never for caution).
|
|
88
|
+
* @property flashingSpeed - Flash tempo while `blinking` is on: `default` resolves from `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.
|
|
89
|
+
* @availableWhen flashingSpeed blinking==true
|
|
90
|
+
* @property flatMaxBreakpointPx - Window width in px below which a `normal` or `enhanced` button switches to flat mode.
|
|
91
|
+
* @availableWhen flatMaxBreakpointPx type!=flat
|
|
92
|
+
* @property silenceButtonMinBreakpointPx - Minimum window width in px for showing the silence button.
|
|
93
|
+
* @availableWhen silenceButtonMinBreakpointPx showSilenceButton==true
|
|
107
94
|
* @fires {CustomEvent<void>} click-alert - Fired when the main alert button is clicked.
|
|
108
95
|
* @fires {CustomEvent<void>} click-silence - Fired when the silence button is clicked.
|
|
109
96
|
* @stable
|
|
110
97
|
*/
|
|
111
98
|
export declare class ObcAlertButton extends LitElement {
|
|
112
|
-
/**
|
|
113
|
-
* Number of active alerts to display in the counter badge.
|
|
114
|
-
*
|
|
115
|
-
* If set to 0, the button appears in the idle state.
|
|
116
|
-
*/
|
|
99
|
+
/** Number of active alerts shown in the counter; 0 shows the idle state. */
|
|
117
100
|
nAlerts: number;
|
|
118
|
-
/**
|
|
119
|
-
* Type of alert to display.
|
|
120
|
-
*
|
|
121
|
-
* Determines the icon and color scheme. Can be `alarm`, `warning`, `caution`, or undefined for idle state.
|
|
122
|
-
*/
|
|
101
|
+
/** Alert type that selects the icon and colours: `alarm`, `warning`, `caution`, a `level-*` severity, or unset for the idle state. */
|
|
123
102
|
alertType?: AlertType;
|
|
124
|
-
/**
|
|
125
|
-
* Visual variant of the button.
|
|
126
|
-
*
|
|
127
|
-
* - `flat`: Minimal, icon-only button for compact layouts.
|
|
128
|
-
* - `normal`: Standard button with icon and optional counter (default).
|
|
129
|
-
* - `enhanced`: Emphasized button for high-priority alerts.
|
|
130
|
-
*/
|
|
103
|
+
/** Visual variant: `flat` (icon only), `normal` (default, icon and optional counter) or `enhanced` (emphasized for high-priority alerts). */
|
|
131
104
|
type: ObcAlertButtonType;
|
|
132
|
-
/**
|
|
133
|
-
* Increases button size for touch-friendly or prominent use.
|
|
134
|
-
*
|
|
135
|
-
* Adds extra height and padding.
|
|
136
|
-
*/
|
|
105
|
+
/** Increases the button height and padding for touch-friendly or prominent use. */
|
|
137
106
|
large: boolean;
|
|
138
|
-
/**
|
|
139
|
-
* Whether to display the silence button.
|
|
140
|
-
*
|
|
141
|
-
* The silence button is only shown if this is true, the width is above `silenceButtonMinBreakpointPx`, and the button is not in flat mode.
|
|
142
|
-
*/
|
|
107
|
+
/** Shows the silence button when the width is at least `silenceButtonMinBreakpointPx` and the button is not flat. */
|
|
143
108
|
showSilenceButton: boolean;
|
|
144
109
|
/**
|
|
145
110
|
* Disables the silence button when true.
|
|
@@ -147,47 +112,46 @@ export declare class ObcAlertButton extends LitElement {
|
|
|
147
112
|
* Available when `showSilenceButton==true`.
|
|
148
113
|
*/
|
|
149
114
|
silenceButtonDisabled: boolean;
|
|
115
|
+
/** Shows the alert counter when there are active alerts and the button is not flat. */
|
|
116
|
+
counter: boolean;
|
|
117
|
+
/** Shows the per-severity counts and the shelved count before the bell and the total (the item's global counter); a flat button shows the plain bell. */
|
|
118
|
+
globalCounter: boolean;
|
|
150
119
|
/**
|
|
151
|
-
*
|
|
120
|
+
* Alert count per severity for the global counter badges (`countAlarm`, `countWarning`, `countCaution` and the `level-*` counts).
|
|
152
121
|
*
|
|
153
|
-
*
|
|
122
|
+
* Available when `globalCounter==true`.
|
|
154
123
|
*/
|
|
155
|
-
|
|
124
|
+
counts: AlertCounts;
|
|
156
125
|
/**
|
|
157
|
-
*
|
|
126
|
+
* Number of shelved alerts, shown after the global counter badges; hidden at zero.
|
|
158
127
|
*
|
|
159
|
-
*
|
|
128
|
+
* Available when `globalCounter==true`.
|
|
160
129
|
*/
|
|
130
|
+
shelvedCount: number;
|
|
131
|
+
/** Flashes the bell for active alerts of a flashing alert type (never for caution). */
|
|
161
132
|
blinking: boolean;
|
|
162
|
-
/** Flash tempo while `blinking` is on: `default` resolves from `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes. */
|
|
163
|
-
flashingSpeed: FlashingSpeed;
|
|
164
|
-
protected readonly flashing: FlashingController;
|
|
165
|
-
get resolvedFlashingSpeed(): ResolvedFlashingSpeed;
|
|
166
133
|
/**
|
|
167
|
-
*
|
|
134
|
+
* Flash tempo while `blinking` is on: `default` resolves from `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.
|
|
168
135
|
*
|
|
169
|
-
*
|
|
170
|
-
|
|
136
|
+
* Available when `blinking==true`.
|
|
137
|
+
*/
|
|
138
|
+
flashingSpeed: FlashingSpeed;
|
|
139
|
+
/**
|
|
140
|
+
* Window width in px below which a `normal` or `enhanced` button switches to flat mode.
|
|
171
141
|
*
|
|
172
|
-
*
|
|
142
|
+
* Available when `type!=flat`.
|
|
173
143
|
*/
|
|
174
144
|
flatMaxBreakpointPx: number;
|
|
175
145
|
/**
|
|
176
|
-
* Minimum width
|
|
177
|
-
*
|
|
178
|
-
* If the available width is less than this value, the silence button is hidden.
|
|
179
|
-
* Only applies when `showSilenceButton` is true.
|
|
146
|
+
* Minimum window width in px for showing the silence button.
|
|
180
147
|
*
|
|
181
|
-
*
|
|
148
|
+
* Available when `showSilenceButton==true`.
|
|
182
149
|
*/
|
|
183
150
|
silenceButtonMinBreakpointPx: number;
|
|
184
151
|
private width;
|
|
185
152
|
private resizeListener;
|
|
186
153
|
connectedCallback(): void;
|
|
187
154
|
disconnectedCallback(): void;
|
|
188
|
-
private renderAlertTwotoneIcon;
|
|
189
|
-
private alertIcon;
|
|
190
|
-
private alertIconNegative;
|
|
191
155
|
private get activeType();
|
|
192
156
|
private get showSilenceButtonDynamic();
|
|
193
157
|
render(): import('lit-html').TemplateResult<1>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-button.d.ts","sourceRoot":"","sources":["../../../src/components/alert-button/alert-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"alert-button.d.ts","sourceRoot":"","sources":["../../../src/components/alert-button/alert-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAKzD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,yCAAyC,CAAC;AACjD,OAAO,gDAAgD,CAAC;AACxD,OAAO,iCAAiC,CAAC;AACzC,OAAO,2CAA2C,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAC,SAAS,EAAE,aAAa,EAAE,KAAK,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EAAC,kBAAkB,EAAC,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFG;AACH,qBAEa,cAAe,SAAQ,UAAU;IAClB,OAAO,SAAK;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,qBAA6B;IAChC,KAAK,UAAS;IACd,iBAAiB,UAAS;IAC1B,qBAAqB,UAAS;IAC9B,OAAO,UAAS;IAChB,aAAa,UAAS;IACL,MAAM,EAAE,WAAW,CAAM;IAC3C,YAAY,SAAK;IAChB,QAAQ,UAAS;IAClB,aAAa,EAAE,aAAa,CAC9B;IACE,mBAAmB,SAAK;IACxB,4BAA4B,SAAK;IAElD,OAAO,CAAC,KAAK,CAAqB;IAE3C,OAAO,CAAC,cAAc,CAEpB;IAEO,iBAAiB;IAKjB,oBAAoB;IAK7B,OAAO,KAAK,UAAU,GAQrB;IAED,OAAO,KAAK,wBAAwB,GAMnC;IAEQ,MAAM;IA4Cf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
|
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
import { unsafeCSS, LitElement,
|
|
1
|
+
import { unsafeCSS, LitElement, nothing, html } from "lit";
|
|
2
2
|
import { property, state } from "lit/decorators.js";
|
|
3
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
4
|
+
import { localized, msg } from "@lit/localize";
|
|
3
5
|
import compentStyle from "./alert-button.css.js";
|
|
4
|
-
import "../../icons/icon-alerts.js";
|
|
5
|
-
import "../../icons/icon-alerts-active.js";
|
|
6
6
|
import "../../icons/icon-notification.js";
|
|
7
7
|
import "../../icons/icon-notification-advice.js";
|
|
8
8
|
import "../../icons/icon-notification-advice-active.js";
|
|
9
9
|
import "../../icons/icon-silence-iec.js";
|
|
10
|
-
import "
|
|
11
|
-
import "../../icons/icon-alerts-warning-twotone.js";
|
|
12
|
-
import "../../icons/icon-alerts-caution-twotone.js";
|
|
13
|
-
import "../../manual-icon/icon-alerts-critical-twotone.js";
|
|
14
|
-
import "../../manual-icon/icon-alerts-diagnostic-twotone.js";
|
|
10
|
+
import { ObcAlertButtonType } from "../alert-button-item/alert-button-item.js";
|
|
15
11
|
import { FlashingSpeed } from "../../types.js";
|
|
16
|
-
import { resolveFlashingSpeed, AlertFlashPhase, getAlertTwotoneComponent, AlertTwotoneComponent } from "../../alert-severity.js";
|
|
17
|
-
import { classMap } from "lit/directives/class-map.js";
|
|
18
12
|
import { customElement } from "../../decorator.js";
|
|
19
|
-
import { FlashingController } from "../../palettes/flashing-controller.js";
|
|
20
13
|
var __defProp = Object.defineProperty;
|
|
21
14
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
22
15
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -27,27 +20,20 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
27
20
|
if (kind && result) __defProp(target, key, result);
|
|
28
21
|
return result;
|
|
29
22
|
};
|
|
30
|
-
var ObcAlertButtonType = /* @__PURE__ */ ((ObcAlertButtonType2) => {
|
|
31
|
-
ObcAlertButtonType2["Flat"] = "flat";
|
|
32
|
-
ObcAlertButtonType2["Normal"] = "normal";
|
|
33
|
-
ObcAlertButtonType2["Enhanced"] = "enhanced";
|
|
34
|
-
return ObcAlertButtonType2;
|
|
35
|
-
})(ObcAlertButtonType || {});
|
|
36
23
|
let ObcAlertButton = class extends LitElement {
|
|
37
24
|
constructor() {
|
|
38
25
|
super(...arguments);
|
|
39
26
|
this.nAlerts = 0;
|
|
40
|
-
this.type =
|
|
27
|
+
this.type = ObcAlertButtonType.Normal;
|
|
41
28
|
this.large = false;
|
|
42
29
|
this.showSilenceButton = false;
|
|
43
30
|
this.silenceButtonDisabled = false;
|
|
44
31
|
this.counter = false;
|
|
32
|
+
this.globalCounter = false;
|
|
33
|
+
this.counts = {};
|
|
34
|
+
this.shelvedCount = 0;
|
|
45
35
|
this.blinking = false;
|
|
46
36
|
this.flashingSpeed = FlashingSpeed.Default;
|
|
47
|
-
this.flashing = new FlashingController(
|
|
48
|
-
this,
|
|
49
|
-
() => this.resolvedFlashingSpeed
|
|
50
|
-
);
|
|
51
37
|
this.flatMaxBreakpointPx = 0;
|
|
52
38
|
this.silenceButtonMinBreakpointPx = 0;
|
|
53
39
|
this.width = window.innerWidth;
|
|
@@ -55,16 +41,6 @@ let ObcAlertButton = class extends LitElement {
|
|
|
55
41
|
this.width = window.innerWidth;
|
|
56
42
|
};
|
|
57
43
|
}
|
|
58
|
-
get resolvedFlashingSpeed() {
|
|
59
|
-
if (!this.blinking || this.nAlerts <= 0 || this.alertType === void 0) {
|
|
60
|
-
return FlashingSpeed.Fixed;
|
|
61
|
-
}
|
|
62
|
-
return resolveFlashingSpeed(
|
|
63
|
-
this.flashingSpeed,
|
|
64
|
-
this.alertType,
|
|
65
|
-
AlertFlashPhase.Active
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
44
|
connectedCallback() {
|
|
69
45
|
super.connectedCallback();
|
|
70
46
|
window.addEventListener("resize", this.resizeListener);
|
|
@@ -73,99 +49,46 @@ let ObcAlertButton = class extends LitElement {
|
|
|
73
49
|
window.removeEventListener("resize", this.resizeListener);
|
|
74
50
|
super.disconnectedCallback();
|
|
75
51
|
}
|
|
76
|
-
renderAlertTwotoneIcon() {
|
|
77
|
-
const twotone = this.alertType ? getAlertTwotoneComponent(this.alertType) : AlertTwotoneComponent.Caution;
|
|
78
|
-
switch (twotone) {
|
|
79
|
-
case AlertTwotoneComponent.Critical:
|
|
80
|
-
return html`<obi-alerts-critical-twotone
|
|
81
|
-
useCssColor
|
|
82
|
-
class="icon"
|
|
83
|
-
></obi-alerts-critical-twotone>`;
|
|
84
|
-
case AlertTwotoneComponent.Diagnostic:
|
|
85
|
-
return html`<obi-alerts-diagnostic-twotone
|
|
86
|
-
useCssColor
|
|
87
|
-
class="icon"
|
|
88
|
-
></obi-alerts-diagnostic-twotone>`;
|
|
89
|
-
case AlertTwotoneComponent.Warning:
|
|
90
|
-
return html`<obi-alerts-warning-twotone
|
|
91
|
-
useCssColor
|
|
92
|
-
class="icon"
|
|
93
|
-
></obi-alerts-warning-twotone>`;
|
|
94
|
-
case AlertTwotoneComponent.Caution:
|
|
95
|
-
return html`<obi-alerts-caution-twotone
|
|
96
|
-
useCssColor
|
|
97
|
-
class="icon"
|
|
98
|
-
></obi-alerts-caution-twotone>`;
|
|
99
|
-
default:
|
|
100
|
-
return html`<obi-alerts-alarm-twotone
|
|
101
|
-
useCssColor
|
|
102
|
-
class="icon"
|
|
103
|
-
></obi-alerts-alarm-twotone>`;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
alertIcon() {
|
|
107
|
-
const isIdle = this.nAlerts === 0;
|
|
108
|
-
if (isIdle) {
|
|
109
|
-
return html`<obi-alerts class="icon"></obi-alerts>`;
|
|
110
|
-
}
|
|
111
|
-
if (this.type === "enhanced") {
|
|
112
|
-
return html`<obi-alerts-active class="icon"></obi-alerts-active>`;
|
|
113
|
-
}
|
|
114
|
-
return this.renderAlertTwotoneIcon();
|
|
115
|
-
}
|
|
116
|
-
alertIconNegative() {
|
|
117
|
-
const useIdle = this.nAlerts === 0 || this.type !== "enhanced";
|
|
118
|
-
if (useIdle) {
|
|
119
|
-
return html`<obi-alerts class="icon"></obi-alerts>`;
|
|
120
|
-
}
|
|
121
|
-
return this.renderAlertTwotoneIcon();
|
|
122
|
-
}
|
|
123
52
|
get activeType() {
|
|
124
|
-
if (this.type ===
|
|
125
|
-
return
|
|
53
|
+
if (this.type === ObcAlertButtonType.Flat) {
|
|
54
|
+
return ObcAlertButtonType.Flat;
|
|
126
55
|
}
|
|
127
56
|
if (this.width < this.flatMaxBreakpointPx) {
|
|
128
|
-
return
|
|
57
|
+
return ObcAlertButtonType.Flat;
|
|
129
58
|
}
|
|
130
59
|
return this.type;
|
|
131
60
|
}
|
|
132
61
|
get showSilenceButtonDynamic() {
|
|
133
|
-
return this.showSilenceButton && this.width >= this.silenceButtonMinBreakpointPx && this.activeType !==
|
|
62
|
+
return this.showSilenceButton && this.width >= this.silenceButtonMinBreakpointPx && this.activeType !== ObcAlertButtonType.Flat;
|
|
134
63
|
}
|
|
135
64
|
render() {
|
|
136
|
-
const
|
|
137
|
-
const showCounter = this.counter && hasAlerts && this.activeType !== "flat";
|
|
138
|
-
const tempo = this.resolvedFlashingSpeed;
|
|
139
|
-
const showBlinking = tempo !== FlashingSpeed.Fixed;
|
|
65
|
+
const showSilence = this.showSilenceButtonDynamic;
|
|
140
66
|
return html`
|
|
141
67
|
<div
|
|
142
68
|
class=${classMap({
|
|
143
69
|
wrapper: true,
|
|
144
|
-
[`alert-type-${this.alertType ?? "none"}`]: true,
|
|
145
|
-
counter: showCounter,
|
|
146
|
-
"has-silence": this.showSilenceButtonDynamic,
|
|
147
70
|
[`type-${this.activeType}`]: true,
|
|
148
|
-
[`flash-${tempo}`]: true,
|
|
149
71
|
large: this.large
|
|
150
72
|
})}
|
|
151
73
|
>
|
|
152
|
-
<button
|
|
153
|
-
|
|
74
|
+
<obc-alert-button-item
|
|
75
|
+
.type=${this.activeType}
|
|
76
|
+
.alertType=${this.alertType}
|
|
77
|
+
.nAlerts=${this.nAlerts}
|
|
78
|
+
.counter=${this.counter}
|
|
79
|
+
.globalCounter=${this.globalCounter && this.activeType !== ObcAlertButtonType.Flat}
|
|
80
|
+
.counts=${this.counts}
|
|
81
|
+
.shelvedCount=${this.shelvedCount}
|
|
82
|
+
.blinking=${this.blinking}
|
|
83
|
+
.flashingSpeed=${this.flashingSpeed}
|
|
84
|
+
.fillHeight=${this.large}
|
|
85
|
+
?data-group-item-not-last=${showSilence}
|
|
154
86
|
@click=${() => this.dispatchEvent(new CustomEvent("click-alert"))}
|
|
155
|
-
>
|
|
156
|
-
|
|
157
|
-
${this.alertIconNegative()}
|
|
158
|
-
${showCounter ? html`<div class="badge">${this.nAlerts}</div>` : null}
|
|
159
|
-
</div>` : nothing}
|
|
160
|
-
<div class="visible-wrapper">
|
|
161
|
-
${this.alertIcon()}
|
|
162
|
-
${showCounter ? html`<div class="badge">${this.nAlerts}</div>` : nothing}
|
|
163
|
-
</div>
|
|
164
|
-
</button>
|
|
165
|
-
|
|
166
|
-
${this.showSilenceButtonDynamic ? html`
|
|
87
|
+
></obc-alert-button-item>
|
|
88
|
+
${showSilence ? html`
|
|
167
89
|
<button
|
|
168
90
|
class="silence-button"
|
|
91
|
+
aria-label=${msg("Silence")}
|
|
169
92
|
@click=${() => this.dispatchEvent(new CustomEvent("click-silence"))}
|
|
170
93
|
?disabled=${this.silenceButtonDisabled}
|
|
171
94
|
>
|
|
@@ -173,7 +96,7 @@ let ObcAlertButton = class extends LitElement {
|
|
|
173
96
|
<obi-silence-iec class="icon"></obi-silence-iec>
|
|
174
97
|
</div>
|
|
175
98
|
</button>
|
|
176
|
-
` :
|
|
99
|
+
` : nothing}
|
|
177
100
|
</div>
|
|
178
101
|
`;
|
|
179
102
|
}
|
|
@@ -200,6 +123,15 @@ __decorateClass([
|
|
|
200
123
|
__decorateClass([
|
|
201
124
|
property({ type: Boolean })
|
|
202
125
|
], ObcAlertButton.prototype, "counter", 2);
|
|
126
|
+
__decorateClass([
|
|
127
|
+
property({ type: Boolean })
|
|
128
|
+
], ObcAlertButton.prototype, "globalCounter", 2);
|
|
129
|
+
__decorateClass([
|
|
130
|
+
property({ type: Object, attribute: false })
|
|
131
|
+
], ObcAlertButton.prototype, "counts", 2);
|
|
132
|
+
__decorateClass([
|
|
133
|
+
property({ type: Number })
|
|
134
|
+
], ObcAlertButton.prototype, "shelvedCount", 2);
|
|
203
135
|
__decorateClass([
|
|
204
136
|
property({ type: Boolean })
|
|
205
137
|
], ObcAlertButton.prototype, "blinking", 2);
|
|
@@ -216,7 +148,8 @@ __decorateClass([
|
|
|
216
148
|
state()
|
|
217
149
|
], ObcAlertButton.prototype, "width", 2);
|
|
218
150
|
ObcAlertButton = __decorateClass([
|
|
219
|
-
customElement("obc-alert-button")
|
|
151
|
+
customElement("obc-alert-button"),
|
|
152
|
+
localized()
|
|
220
153
|
], ObcAlertButton);
|
|
221
154
|
export {
|
|
222
155
|
ObcAlertButton,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alert-button.js","sources":["../../../src/components/alert-button/alert-button.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport compentStyle from './alert-button.css?inline';\nimport '../../icons/icon-alerts.js';\nimport '../../icons/icon-alerts-active.js';\nimport '../../icons/icon-notification.js';\nimport '../../icons/icon-notification-advice.js';\nimport '../../icons/icon-notification-advice-active.js';\nimport '../../icons/icon-silence-iec.js';\nimport '../../icons/icon-alerts-alarm-twotone.js';\nimport '../../icons/icon-alerts-warning-twotone.js';\nimport '../../icons/icon-alerts-caution-twotone.js';\nimport '../../manual-icon/icon-alerts-critical-twotone.js';\nimport '../../manual-icon/icon-alerts-diagnostic-twotone.js';\nimport {\n AlertType,\n FlashingSpeed,\n type ResolvedFlashingSpeed,\n} from '../../types.js';\nimport {\n AlertFlashPhase,\n getAlertTwotoneComponent,\n AlertTwotoneComponent,\n resolveFlashingSpeed,\n} from '../../alert-severity.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\nimport {FlashingController} from '../../palettes/flashing-controller.js';\n\n/**\n * `ObcAlertButtonType` – Enum for alert button visual and behavioral variants.\n *\n * - `flat`: Minimal, icon-only button for compact spaces.\n * - `normal`: Standard button with icon and optional counter.\n * - `enhanced`: Emphasized button with additional styling for high-priority alerts.\n */\nexport enum ObcAlertButtonType {\n Flat = 'flat',\n Normal = 'normal',\n Enhanced = 'enhanced',\n}\n\n/**\n * `<obc-alert-button>` – A compact, icon-based button for displaying alert or notification status and count.\n *\n * This component provides a visual indicator for active alerts or notifications, supporting different alert types (such as alarm, warning, or caution) and an optional counter badge. It can also include a secondary \"silence\" action button for muting alerts, adapting its layout responsively for different screen widths.\n *\n * Appears in toolbars or notification areas to give users a quick overview of alert status and provide direct access to alert-related actions.\n *\n * ## Features\n *\n * - **Variants:**\n * - **Flat:** Minimal, icon-only button for space-constrained layouts.\n * - **Normal:** Standard button with icon and optional alert counter.\n * - **Enhanced:** Visually prominent button for high-priority alerts, with accent styling.\n * - **Alert Types:** Supports `alarm`, `warning`, `caution`, or no alert (idle). Icon and color adapt to the alert type.\n * - **Alert Counter:** Optional badge displays the number of active alerts (except in flat mode).\n * - **Silence Button:** Optional secondary button to mute or silence alerts, shown when enabled and at sufficient width.\n * - **Blinking Animation:** Can animate (blink) to draw attention to active alerts (except for caution type).\n * - **Responsive Layout:** Automatically switches to flat mode below a configurable width, and hides the silence button below another configurable width.\n * - **Large Size Option:** Increases button height and padding for touch-friendly or prominent use.\n *\n * ## Usage Guidelines\n *\n * Use `<obc-alert-button>` to provide a persistent, easily accessible indicator of alert or notification status. Ideal for toolbars, headers, or notification panels where users need to be aware of active alerts and may need to silence them quickly.\n *\n * - Use the counter to show the number of active alerts when relevant.\n * - Use the silence button to provide a quick mute action, but only when space allows.\n * - Choose the variant (`flat`, `normal`, `enhanced`) based on available space and the importance of the alert.\n * - The blinking feature should be reserved for urgent or high-priority alerts to avoid unnecessary distraction.\n *\n * **TODO(designer):** Confirm if there are recommended default behaviors for auto-blinking, and if there are any design constraints for when to use each variant.\n *\n * ## Properties\n *\n * - `nAlerts` (number): Number of active alerts to display in the counter badge.\n * - `alertType` (`AlertType`): Type of alert (`alarm`, `warning`, `caution`, or undefined for idle).\n * - `type` (`ObcAlertButtonType`): Visual variant of the button (`flat`, `normal`, `enhanced`). Default is `normal`.\n * - `counter` (boolean): Whether to show the alert counter badge (not available in flat mode).\n * - `showSilenceButton` (boolean): Whether to display the silence button (hidden in flat mode or below min breakpoint).\n * - `silenceButtonDisabled` (boolean): Disables the silence button when true.\n * - `flatMaxBreakpointPx` (number): Maximum width (in px) for normal/enhanced mode; below this, switches to flat mode.\n * - `silenceButtonMinBreakpointPx` (number): Minimum width (in px) to show the silence button; below this, it is hidden.\n * - `blinking` (boolean): Enables blinking animation for active alerts (not for caution type).\n * - `flashingSpeed`: tempo of the blink (`default` follows the alert type: critical/alarm/high fast, warning/medium slow, low very slow; `fixed` never flashes).\n * - `large` (boolean): Increases button size for prominent or touch-friendly use.\n *\n * ## Events\n *\n * - `click-alert` – Fired when the main alert button is clicked.\n * - `click-silence` – Fired when the silence button is clicked.\n *\n * ## Best Practices & Constraints\n *\n * - Only show the counter when there are active alerts and the button is not in flat mode.\n * - The silence button is only visible if enabled, the width is above the minimum breakpoint, and the button is not flat.\n * - Blinking should be used sparingly to avoid overwhelming the user.\n * - Use the large variant for touch interfaces or when the button needs to stand out.\n *\n * ## Example\n *\n * ```html\n * <obc-alert-button\n * nAlerts=\"3\"\n * alertType=\"alarm\"\n * type=\"enhanced\"\n * counter\n * showSilenceButton\n * blinking\n * large\n * flatMaxBreakpointPx=\"600\"\n * silenceButtonMinBreakpointPx=\"600\"\n * ></obc-alert-button>\n * ```\n *\n * In this example, the button shows an alarm icon, a counter badge with \"3\", is styled as enhanced, blinks to indicate urgency, and includes a silence button if the width allows.\n *\n * @property flashingSpeed - Flash tempo while `blinking` is on: `default` resolves from\n * `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.\n * @property silenceButtonDisabled - Disables the silence button when true.\n * @availableWhen silenceButtonDisabled showSilenceButton==true\n * @slot - No content slots. All content is provided via properties.\n * @fires {CustomEvent<void>} click-alert - Fired when the main alert button is clicked.\n * @fires {CustomEvent<void>} click-silence - Fired when the silence button is clicked.\n * @stable\n */\n@customElement('obc-alert-button')\nexport class ObcAlertButton extends LitElement {\n /**\n * Number of active alerts to display in the counter badge.\n *\n * If set to 0, the button appears in the idle state.\n */\n @property({type: Number}) nAlerts = 0;\n\n /**\n * Type of alert to display.\n *\n * Determines the icon and color scheme. Can be `alarm`, `warning`, `caution`, or undefined for idle state.\n */\n @property({type: String}) alertType?: AlertType;\n\n /**\n * Visual variant of the button.\n *\n * - `flat`: Minimal, icon-only button for compact layouts.\n * - `normal`: Standard button with icon and optional counter (default).\n * - `enhanced`: Emphasized button for high-priority alerts.\n */\n @property({type: String}) type = ObcAlertButtonType.Normal;\n\n /**\n * Increases button size for touch-friendly or prominent use.\n *\n * Adds extra height and padding.\n */\n @property({type: Boolean}) large = false;\n\n /**\n * Whether to display the silence button.\n *\n * The silence button is only shown if this is true, the width is above `silenceButtonMinBreakpointPx`, and the button is not in flat mode.\n */\n @property({type: Boolean}) showSilenceButton = false;\n\n @property({type: Boolean}) silenceButtonDisabled = false;\n\n /**\n * Whether to show the alert counter badge.\n *\n * Only shown when there are active alerts and the button is not in flat mode.\n */\n @property({type: Boolean}) counter = false;\n\n /**\n * Enables blinking animation for active alerts.\n *\n * Blinking is only shown for alarm and warning types, not for caution.\n */\n @property({type: Boolean}) blinking = false;\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 if (!this.blinking || this.nAlerts <= 0 || this.alertType === undefined) {\n return FlashingSpeed.Fixed;\n }\n return resolveFlashingSpeed(\n this.flashingSpeed,\n this.alertType,\n AlertFlashPhase.Active\n );\n }\n\n /**\n * Maximum width (in px) for normal/enhanced mode.\n *\n * If the available width is less than this value, the button switches to flat mode.\n * Only applies when `type` is set to `normal` or `enhanced`.\n *\n * @availableWhen type!=flat\n */\n @property({type: Number}) flatMaxBreakpointPx = 0;\n\n /**\n * Minimum width (in px) to show the silence button.\n *\n * If the available width is less than this value, the silence button is hidden.\n * Only applies when `showSilenceButton` is true.\n *\n * @availableWhen showSilenceButton==true\n */\n @property({type: Number}) silenceButtonMinBreakpointPx = 0;\n\n @state() private width = window.innerWidth;\n\n private resizeListener = () => {\n this.width = window.innerWidth;\n };\n\n override connectedCallback() {\n super.connectedCallback();\n window.addEventListener('resize', this.resizeListener);\n }\n\n override disconnectedCallback() {\n window.removeEventListener('resize', this.resizeListener);\n super.disconnectedCallback();\n }\n\n private renderAlertTwotoneIcon() {\n const twotone = this.alertType\n ? getAlertTwotoneComponent(this.alertType)\n : AlertTwotoneComponent.Caution;\n switch (twotone) {\n case AlertTwotoneComponent.Critical:\n return html`<obi-alerts-critical-twotone\n useCssColor\n class=\"icon\"\n ></obi-alerts-critical-twotone>`;\n case AlertTwotoneComponent.Diagnostic:\n return html`<obi-alerts-diagnostic-twotone\n useCssColor\n class=\"icon\"\n ></obi-alerts-diagnostic-twotone>`;\n case AlertTwotoneComponent.Warning:\n return html`<obi-alerts-warning-twotone\n useCssColor\n class=\"icon\"\n ></obi-alerts-warning-twotone>`;\n case AlertTwotoneComponent.Caution:\n return html`<obi-alerts-caution-twotone\n useCssColor\n class=\"icon\"\n ></obi-alerts-caution-twotone>`;\n default:\n return html`<obi-alerts-alarm-twotone\n useCssColor\n class=\"icon\"\n ></obi-alerts-alarm-twotone>`;\n }\n }\n\n private alertIcon() {\n const isIdle = this.nAlerts === 0;\n if (isIdle) {\n return html`<obi-alerts class=\"icon\"></obi-alerts>`;\n }\n if (this.type === ObcAlertButtonType.Enhanced) {\n return html`<obi-alerts-active class=\"icon\"></obi-alerts-active>`;\n }\n return this.renderAlertTwotoneIcon();\n }\n\n private alertIconNegative() {\n const useIdle =\n this.nAlerts === 0 || this.type !== ObcAlertButtonType.Enhanced;\n if (useIdle) {\n return html`<obi-alerts class=\"icon\"></obi-alerts>`;\n }\n return this.renderAlertTwotoneIcon();\n }\n\n private get activeType(): ObcAlertButtonType {\n if (this.type === ObcAlertButtonType.Flat) {\n return ObcAlertButtonType.Flat;\n }\n if (this.width < this.flatMaxBreakpointPx) {\n return ObcAlertButtonType.Flat;\n }\n return this.type;\n }\n\n private get showSilenceButtonDynamic(): boolean {\n return (\n this.showSilenceButton &&\n this.width >= this.silenceButtonMinBreakpointPx &&\n this.activeType !== ObcAlertButtonType.Flat\n );\n }\n\n override render() {\n const hasAlerts = this.nAlerts > 0;\n const showCounter =\n this.counter && hasAlerts && this.activeType !== ObcAlertButtonType.Flat;\n const tempo = this.resolvedFlashingSpeed;\n const showBlinking = tempo !== FlashingSpeed.Fixed;\n return html`\n <div\n class=${classMap({\n wrapper: true,\n [`alert-type-${this.alertType ?? 'none'}`]: true,\n counter: showCounter,\n 'has-silence': this.showSilenceButtonDynamic,\n [`type-${this.activeType}`]: true,\n [`flash-${tempo}`]: true,\n large: this.large,\n })}\n >\n <button\n class=\"alert-button\"\n @click=${() => this.dispatchEvent(new CustomEvent('click-alert'))}\n >\n ${showBlinking\n ? html` <div class=\"blink\">\n ${this.alertIconNegative()}\n ${showCounter\n ? html`<div class=\"badge\">${this.nAlerts}</div>`\n : null}\n </div>`\n : nothing}\n <div class=\"visible-wrapper\">\n ${this.alertIcon()}\n ${showCounter\n ? html`<div class=\"badge\">${this.nAlerts}</div>`\n : nothing}\n </div>\n </button>\n\n ${this.showSilenceButtonDynamic\n ? html`\n <button\n class=\"silence-button\"\n @click=${() =>\n this.dispatchEvent(new CustomEvent('click-silence'))}\n ?disabled=${this.silenceButtonDisabled}\n >\n <div class=\"visible-wrapper\">\n <obi-silence-iec class=\"icon\"></obi-silence-iec>\n </div>\n </button>\n `\n : null}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-button': ObcAlertButton;\n }\n}\n"],"names":["ObcAlertButtonType"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,IAAK,uCAAAA,wBAAL;AACLA,sBAAA,MAAA,IAAO;AACPA,sBAAA,QAAA,IAAS;AACTA,sBAAA,UAAA,IAAW;AAHD,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;AA2FL,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AAMqB,SAAA,UAAU;AAgBV,SAAA,OAAO;AAON,SAAA,QAAQ;AAOR,SAAA,oBAAoB;AAEpB,SAAA,wBAAwB;AAOxB,SAAA,UAAU;AAOV,SAAA,WAAW;AAEZ,SAAA,gBACxB,cAAc;AAEhB,SAAmB,WAAW,IAAI;AAAA,MAChC;AAAA,MACA,MAAM,KAAK;AAAA,IAAA;AAsBa,SAAA,sBAAsB;AAUtB,SAAA,+BAA+B;AAEhD,SAAQ,QAAQ,OAAO;AAEhC,SAAQ,iBAAiB,MAAM;AAC7B,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,EAAA;AAAA,EAnCA,IAAI,wBAA+C;AACjD,QAAI,CAAC,KAAK,YAAY,KAAK,WAAW,KAAK,KAAK,cAAc,QAAW;AACvE,aAAO,cAAc;AAAA,IACvB;AACA,WAAO;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,gBAAgB;AAAA,IAAA;AAAA,EAEpB;AAAA,EA4BS,oBAAoB;AAC3B,UAAM,kBAAA;AACN,WAAO,iBAAiB,UAAU,KAAK,cAAc;AAAA,EACvD;AAAA,EAES,uBAAuB;AAC9B,WAAO,oBAAoB,UAAU,KAAK,cAAc;AACxD,UAAM,qBAAA;AAAA,EACR;AAAA,EAEQ,yBAAyB;AAC/B,UAAM,UAAU,KAAK,YACjB,yBAAyB,KAAK,SAAS,IACvC,sBAAsB;AAC1B,YAAQ,SAAA;AAAA,MACN,KAAK,sBAAsB;AACzB,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT,KAAK,sBAAsB;AACzB,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT,KAAK,sBAAsB;AACzB,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT,KAAK,sBAAsB;AACzB,eAAO;AAAA;AAAA;AAAA;AAAA,MAIT;AACE,eAAO;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,EAKb;AAAA,EAEQ,YAAY;AAClB,UAAM,SAAS,KAAK,YAAY;AAChC,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AACA,QAAI,KAAK,SAAS,YAA6B;AAC7C,aAAO;AAAA,IACT;AACA,WAAO,KAAK,uBAAA;AAAA,EACd;AAAA,EAEQ,oBAAoB;AAC1B,UAAM,UACJ,KAAK,YAAY,KAAK,KAAK,SAAS;AACtC,QAAI,SAAS;AACX,aAAO;AAAA,IACT;AACA,WAAO,KAAK,uBAAA;AAAA,EACd;AAAA,EAEA,IAAY,aAAiC;AAC3C,QAAI,KAAK,SAAS,QAAyB;AACzC,aAAO;AAAA,IACT;AACA,QAAI,KAAK,QAAQ,KAAK,qBAAqB;AACzC,aAAO;AAAA,IACT;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAY,2BAAoC;AAC9C,WACE,KAAK,qBACL,KAAK,SAAS,KAAK,gCACnB,KAAK,eAAe;AAAA,EAExB;AAAA,EAES,SAAS;AAChB,UAAM,YAAY,KAAK,UAAU;AACjC,UAAM,cACJ,KAAK,WAAW,aAAa,KAAK,eAAe;AACnD,UAAM,QAAQ,KAAK;AACnB,UAAM,eAAe,UAAU,cAAc;AAC7C,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,SAAS;AAAA,MACT,CAAC,cAAc,KAAK,aAAa,MAAM,EAAE,GAAG;AAAA,MAC5C,SAAS;AAAA,MACT,eAAe,KAAK;AAAA,MACpB,CAAC,QAAQ,KAAK,UAAU,EAAE,GAAG;AAAA,MAC7B,CAAC,SAAS,KAAK,EAAE,GAAG;AAAA,MACpB,OAAO,KAAK;AAAA,IAAA,CACb,CAAC;AAAA;AAAA;AAAA;AAAA,mBAIS,MAAM,KAAK,cAAc,IAAI,YAAY,aAAa,CAAC,CAAC;AAAA;AAAA,YAE/D,eACE;AAAA,kBACI,KAAK,mBAAmB;AAAA,kBACxB,cACE,0BAA0B,KAAK,OAAO,WACtC,IAAI;AAAA,wBAEV,OAAO;AAAA;AAAA,cAEP,KAAK,WAAW;AAAA,cAChB,cACE,0BAA0B,KAAK,OAAO,WACtC,OAAO;AAAA;AAAA;AAAA;AAAA,UAIb,KAAK,2BACH;AAAA;AAAA;AAAA,yBAGa,MACP,KAAK,cAAc,IAAI,YAAY,eAAe,CAAC,CAAC;AAAA,4BAC1C,KAAK,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAO1C,IAAI;AAAA;AAAA;AAAA,EAGd;AAGF;AA7Oa,eA4OK,SAAS,UAAU,YAAY;AAtOrB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GANb,eAMe,WAAA,WAAA,CAAA;AAOA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAbb,eAae,WAAA,aAAA,CAAA;AASA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAtBb,eAsBe,WAAA,QAAA,CAAA;AAOC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GA7Bd,eA6BgB,WAAA,SAAA,CAAA;AAOA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GApCd,eAoCgB,WAAA,qBAAA,CAAA;AAEA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAtCd,eAsCgB,WAAA,yBAAA,CAAA;AAOA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GA7Cd,eA6CgB,WAAA,WAAA,CAAA;AAOA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GApDd,eAoDgB,WAAA,YAAA,CAAA;AAED,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAtDb,eAsDe,WAAA,iBAAA,CAAA;AA2BA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAjFb,eAiFe,WAAA,uBAAA,CAAA;AAUA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GA3Fb,eA2Fe,WAAA,gCAAA,CAAA;AAET,gBAAA;AAAA,EAAhB,MAAA;AAAM,GA7FI,eA6FM,WAAA,SAAA,CAAA;AA7FN,iBAAN,gBAAA;AAAA,EADN,cAAc,kBAAkB;AAAA,GACpB,cAAA;"}
|
|
1
|
+
{"version":3,"file":"alert-button.js","sources":["../../../src/components/alert-button/alert-button.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {localized, msg} from '@lit/localize';\nimport compentStyle from './alert-button.css?inline';\nimport '../../icons/icon-notification.js';\nimport '../../icons/icon-notification-advice.js';\nimport '../../icons/icon-notification-advice-active.js';\nimport '../../icons/icon-silence-iec.js';\nimport '../alert-button-item/alert-button-item.js';\nimport {ObcAlertButtonType} from '../alert-button-item/alert-button-item.js';\nimport {AlertType, FlashingSpeed, type AlertCounts} from '../../types.js';\nimport {customElement} from '../../decorator.js';\n\nexport {ObcAlertButtonType};\n\n/**\n * `<obc-alert-button>` – A compact, icon-based button for displaying alert or notification status and count.\n *\n * This component provides a visual indicator for active alerts or notifications, supporting different alert types (such as alarm, warning, or caution) and an optional counter badge. It can also include a secondary \"silence\" action button for muting alerts, adapting its layout responsively for different screen widths.\n *\n * Appears in toolbars or notification areas to give users a quick overview of alert status and provide direct access to alert-related actions. The bell itself is an `obc-alert-button-item`; use the item directly where no silence button or breakpoints are needed, or for its global counter.\n *\n * ## Features\n *\n * - **Variants:**\n * - **Flat:** Minimal, icon-only button for space-constrained layouts.\n * - **Normal:** Standard button with icon and optional alert counter.\n * - **Enhanced:** Visually prominent button for high-priority alerts, with accent styling.\n * - **Alert Types:** Supports `alarm`, `warning`, `caution`, or no alert (idle). Icon and color adapt to the alert type.\n * - **Alert Counter:** Optional badge displays the number of active alerts (except in flat mode).\n * - **Global Counter:** `globalCounter` shows the per-severity `counts` and an optional `shelvedCount` before the bell and the total, as `obc-alert-button-item` draws them.\n * - **Silence Button:** Optional secondary button to mute or silence alerts, shown when enabled and at sufficient width.\n * - **Blinking Animation:** Can animate (blink) to draw attention to active alerts (except for caution type).\n * - **Responsive Layout:** Automatically switches to flat mode below a configurable width, and hides the silence button below another configurable width.\n * - **Large Size Option:** Increases button height and padding for touch-friendly or prominent use.\n *\n * ## Usage Guidelines\n *\n * Use `<obc-alert-button>` to provide a persistent, easily accessible indicator of alert or notification status. Ideal for toolbars, headers, or notification panels where users need to be aware of active alerts and may need to silence them quickly.\n *\n * - Use the counter to show the number of active alerts when relevant.\n * - Use the silence button to provide a quick mute action, but only when space allows.\n * - Choose the variant (`flat`, `normal`, `enhanced`) based on available space and the importance of the alert.\n * - The blinking feature should be reserved for urgent or high-priority alerts to avoid unnecessary distraction.\n *\n * **TODO(designer):** Confirm if there are recommended default behaviors for auto-blinking, and if there are any design constraints for when to use each variant.\n *\n * **TODO(designer):** The Figma Alert button has no flat Global counter, so below `flatMaxBreakpointPx` the button shows the flat bell without the counts.\n *\n * ## Events\n *\n * - `click-alert` – Fired when the main alert button is clicked.\n * - `click-silence` – Fired when the silence button is clicked.\n *\n * ## Best Practices & Constraints\n *\n * - Only show the counter when there are active alerts and the button is not in flat mode.\n * - The silence button is only visible if enabled, the width is above the minimum breakpoint, and the button is not flat.\n * - Blinking should be used sparingly to avoid overwhelming the user.\n * - Use the large variant for touch interfaces or when the button needs to stand out.\n *\n * ## Example\n *\n * ```html\n * <obc-alert-button\n * nAlerts=\"3\"\n * alertType=\"alarm\"\n * type=\"enhanced\"\n * counter\n * showSilenceButton\n * blinking\n * large\n * flatMaxBreakpointPx=\"600\"\n * silenceButtonMinBreakpointPx=\"600\"\n * ></obc-alert-button>\n * ```\n *\n * In this example, the button shows an alarm icon, a counter badge with \"3\", is styled as enhanced, blinks to indicate urgency, and includes a silence button if the width allows.\n *\n * @property nAlerts - Number of active alerts shown in the counter; 0 shows the idle state.\n * @property alertType - Alert type that selects the icon and colours: `alarm`, `warning`, `caution`, a `level-*` severity, or unset for the idle state.\n * @property type - Visual variant: `flat` (icon only), `normal` (default, icon and optional counter) or `enhanced` (emphasized for high-priority alerts).\n * @property large - Increases the button height and padding for touch-friendly or prominent use.\n * @property showSilenceButton - Shows the silence button when the width is at least `silenceButtonMinBreakpointPx` and the button is not flat.\n * @property silenceButtonDisabled - Disables the silence button when true.\n * @availableWhen silenceButtonDisabled showSilenceButton==true\n * @property counter - Shows the alert counter when there are active alerts and the button is not flat.\n * @property globalCounter - Shows the per-severity counts and the shelved count before the bell and the total (the item's global counter); a flat button shows the plain bell.\n * @property counts - Alert count per severity for the global counter badges (`countAlarm`, `countWarning`, `countCaution` and the `level-*` counts).\n * @availableWhen counts globalCounter==true\n * @property shelvedCount - Number of shelved alerts, shown after the global counter badges; hidden at zero.\n * @availableWhen shelvedCount globalCounter==true\n * @property blinking - Flashes the bell for active alerts of a flashing alert type (never for caution).\n * @property flashingSpeed - Flash tempo while `blinking` is on: `default` resolves from `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.\n * @availableWhen flashingSpeed blinking==true\n * @property flatMaxBreakpointPx - Window width in px below which a `normal` or `enhanced` button switches to flat mode.\n * @availableWhen flatMaxBreakpointPx type!=flat\n * @property silenceButtonMinBreakpointPx - Minimum window width in px for showing the silence button.\n * @availableWhen silenceButtonMinBreakpointPx showSilenceButton==true\n * @fires {CustomEvent<void>} click-alert - Fired when the main alert button is clicked.\n * @fires {CustomEvent<void>} click-silence - Fired when the silence button is clicked.\n * @stable\n */\n@customElement('obc-alert-button')\n@localized()\nexport class ObcAlertButton extends LitElement {\n @property({type: Number}) nAlerts = 0;\n @property({type: String}) alertType?: AlertType;\n @property({type: String}) type = ObcAlertButtonType.Normal;\n @property({type: Boolean}) large = false;\n @property({type: Boolean}) showSilenceButton = false;\n @property({type: Boolean}) silenceButtonDisabled = false;\n @property({type: Boolean}) counter = false;\n @property({type: Boolean}) globalCounter = false;\n @property({type: Object, attribute: false}) counts: AlertCounts = {};\n @property({type: Number}) shelvedCount = 0;\n @property({type: Boolean}) blinking = false;\n @property({type: String}) flashingSpeed: FlashingSpeed =\n FlashingSpeed.Default;\n @property({type: Number}) flatMaxBreakpointPx = 0;\n @property({type: Number}) silenceButtonMinBreakpointPx = 0;\n\n @state() private width = window.innerWidth;\n\n private resizeListener = () => {\n this.width = window.innerWidth;\n };\n\n override connectedCallback() {\n super.connectedCallback();\n window.addEventListener('resize', this.resizeListener);\n }\n\n override disconnectedCallback() {\n window.removeEventListener('resize', this.resizeListener);\n super.disconnectedCallback();\n }\n\n private get activeType(): ObcAlertButtonType {\n if (this.type === ObcAlertButtonType.Flat) {\n return ObcAlertButtonType.Flat;\n }\n if (this.width < this.flatMaxBreakpointPx) {\n return ObcAlertButtonType.Flat;\n }\n return this.type;\n }\n\n private get showSilenceButtonDynamic(): boolean {\n return (\n this.showSilenceButton &&\n this.width >= this.silenceButtonMinBreakpointPx &&\n this.activeType !== ObcAlertButtonType.Flat\n );\n }\n\n override render() {\n const showSilence = this.showSilenceButtonDynamic;\n return html`\n <div\n class=${classMap({\n wrapper: true,\n [`type-${this.activeType}`]: true,\n large: this.large,\n })}\n >\n <obc-alert-button-item\n .type=${this.activeType}\n .alertType=${this.alertType}\n .nAlerts=${this.nAlerts}\n .counter=${this.counter}\n .globalCounter=${this.globalCounter &&\n this.activeType !== ObcAlertButtonType.Flat}\n .counts=${this.counts}\n .shelvedCount=${this.shelvedCount}\n .blinking=${this.blinking}\n .flashingSpeed=${this.flashingSpeed}\n .fillHeight=${this.large}\n ?data-group-item-not-last=${showSilence}\n @click=${() => this.dispatchEvent(new CustomEvent('click-alert'))}\n ></obc-alert-button-item>\n ${showSilence\n ? html`\n <button\n class=\"silence-button\"\n aria-label=${msg('Silence')}\n @click=${() =>\n this.dispatchEvent(new CustomEvent('click-silence'))}\n ?disabled=${this.silenceButtonDisabled}\n >\n <div class=\"visible-wrapper\">\n <obi-silence-iec class=\"icon\"></obi-silence-iec>\n </div>\n </button>\n `\n : nothing}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-alert-button': ObcAlertButton;\n }\n}\n"],"names":[],"mappings":"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"}
|