@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.
Files changed (70) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +5026 -4717
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +701 -107
  4. package/dist/alert-severity.d.ts +19 -1
  5. package/dist/alert-severity.d.ts.map +1 -1
  6. package/dist/alert-severity.js +48 -2
  7. package/dist/alert-severity.js.map +1 -1
  8. package/dist/components/alert-button/alert-button.css.js +7 -1513
  9. package/dist/components/alert-button/alert-button.css.js.map +1 -1
  10. package/dist/components/alert-button/alert-button.d.ts +50 -86
  11. package/dist/components/alert-button/alert-button.d.ts.map +1 -1
  12. package/dist/components/alert-button/alert-button.js +40 -107
  13. package/dist/components/alert-button/alert-button.js.map +1 -1
  14. package/dist/components/alert-button-item/alert-button-item.css.js +1570 -0
  15. package/dist/components/alert-button-item/alert-button-item.css.js.map +1 -0
  16. package/dist/components/alert-button-item/alert-button-item.d.ts +162 -0
  17. package/dist/components/alert-button-item/alert-button-item.d.ts.map +1 -0
  18. package/dist/components/alert-button-item/alert-button-item.js +210 -0
  19. package/dist/components/alert-button-item/alert-button-item.js.map +1 -0
  20. package/dist/components/alert-counter-item/alert-counter-item.css.js +25 -0
  21. package/dist/components/alert-counter-item/alert-counter-item.css.js.map +1 -0
  22. package/dist/components/alert-counter-item/alert-counter-item.d.ts +77 -0
  23. package/dist/components/alert-counter-item/alert-counter-item.d.ts.map +1 -0
  24. package/dist/components/alert-counter-item/alert-counter-item.js +87 -0
  25. package/dist/components/alert-counter-item/alert-counter-item.js.map +1 -0
  26. package/dist/components/alert-frame/alert-frame.css.js +23 -27
  27. package/dist/components/alert-frame/alert-frame.css.js.map +1 -1
  28. package/dist/components/alert-frame/alert-frame.d.ts +7 -6
  29. package/dist/components/alert-frame/alert-frame.d.ts.map +1 -1
  30. package/dist/components/alert-frame/alert-frame.js +6 -9
  31. package/dist/components/alert-frame/alert-frame.js.map +1 -1
  32. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js +3 -7
  33. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.css.js.map +1 -1
  34. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts +133 -14
  35. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts.map +1 -1
  36. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js +330 -233
  37. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js.map +1 -1
  38. package/dist/components/table/table.d.ts.map +1 -1
  39. package/dist/components/table/table.js +10 -2
  40. package/dist/components/table/table.js.map +1 -1
  41. package/dist/components/tree-navigation-item/tree-navigation-item.d.ts +7 -34
  42. package/dist/components/tree-navigation-item/tree-navigation-item.d.ts.map +1 -1
  43. package/dist/components/tree-navigation-item/tree-navigation-item.js +3 -32
  44. package/dist/components/tree-navigation-item/tree-navigation-item.js.map +1 -1
  45. package/dist/generated/locales/es-419.d.ts +11 -3
  46. package/dist/generated/locales/es-419.d.ts.map +1 -1
  47. package/dist/generated/locales/es-419.js +11 -3
  48. package/dist/generated/locales/es-419.js.map +1 -1
  49. package/dist/generated/locales/fi-FI.d.ts +8 -0
  50. package/dist/generated/locales/fi-FI.d.ts.map +1 -1
  51. package/dist/generated/locales/fi-FI.js +8 -0
  52. package/dist/generated/locales/fi-FI.js.map +1 -1
  53. package/dist/navigation-instruments/readout/readout.css.js +4 -29
  54. package/dist/navigation-instruments/readout/readout.css.js.map +1 -1
  55. package/dist/navigation-instruments/readout/readout.d.ts.map +1 -1
  56. package/dist/navigation-instruments/readout/readout.js +1 -9
  57. package/dist/navigation-instruments/readout/readout.js.map +1 -1
  58. package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js +5 -34
  59. package/dist/navigation-instruments/readout-list-item/readout-list-item.css.js.map +1 -1
  60. package/dist/navigation-instruments/readout-list-item/readout-list-item.d.ts.map +1 -1
  61. package/dist/navigation-instruments/readout-list-item/readout-list-item.js +1 -9
  62. package/dist/navigation-instruments/readout-list-item/readout-list-item.js.map +1 -1
  63. package/dist/palettes/blinking.d.ts +6 -2
  64. package/dist/palettes/blinking.d.ts.map +1 -1
  65. package/dist/palettes/blinking.js +6 -2
  66. package/dist/palettes/blinking.js.map +1 -1
  67. package/dist/types.d.ts +15 -0
  68. package/dist/types.d.ts.map +1 -1
  69. package/dist/types.js.map +1 -1
  70. 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 { AlertType, FlashingSpeed, ResolvedFlashingSpeed } from '../../types.js';
3
- import { FlashingController } from '../../palettes/flashing-controller.js';
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 '../../icons/icon-alerts-alarm-twotone.js';
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';
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
- * ## Properties
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 flashingSpeed - Flash tempo while `blinking` is on: `default` resolves from
103
- * `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.
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
- * @slot - No content slots. All content is provided via properties.
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
- * Whether to show the alert counter badge.
120
+ * Alert count per severity for the global counter badges (`countAlarm`, `countWarning`, `countCaution` and the `level-*` counts).
152
121
  *
153
- * Only shown when there are active alerts and the button is not in flat mode.
122
+ * Available when `globalCounter==true`.
154
123
  */
155
- counter: boolean;
124
+ counts: AlertCounts;
156
125
  /**
157
- * Enables blinking animation for active alerts.
126
+ * Number of shelved alerts, shown after the global counter badges; hidden at zero.
158
127
  *
159
- * Blinking is only shown for alarm and warning types, not for caution.
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
- * Maximum width (in px) for normal/enhanced mode.
134
+ * Flash tempo while `blinking` is on: `default` resolves from `alertType`, `fast`, `slow`, `very-slow` force a tempo, `fixed` never flashes.
168
135
  *
169
- * If the available width is less than this value, the button switches to flat mode.
170
- * Only applies when `type` is set to `normal` or `enhanced`.
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
- * @availableWhen type!=flat
142
+ * Available when `type!=flat`.
173
143
  */
174
144
  flatMaxBreakpointPx: number;
175
145
  /**
176
- * Minimum width (in px) to show the silence button.
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
- * @availableWhen showSilenceButton==true
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;AAGzD,OAAO,4BAA4B,CAAC;AACpC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,yCAAyC,CAAC;AACjD,OAAO,gDAAgD,CAAC;AACxD,OAAO,iCAAiC,CAAC;AACzC,OAAO,0CAA0C,CAAC;AAClD,OAAO,4CAA4C,CAAC;AACpD,OAAO,4CAA4C,CAAC;AACpD,OAAO,mDAAmD,CAAC;AAC3D,OAAO,qDAAqD,CAAC;AAC7D,OAAO,EACL,SAAS,EACT,aAAa,EACb,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AASxB,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE;;;;;;GAMG;AACH,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC5C;;;;OAIG;IACuB,OAAO,SAAK;IAEtC;;;;OAIG;IACuB,SAAS,CAAC,EAAE,SAAS,CAAC;IAEhD;;;;;;OAMG;IACuB,IAAI,qBAA6B;IAE3D;;;;OAIG;IACwB,KAAK,UAAS;IAEzC;;;;OAIG;IACwB,iBAAiB,UAAS;IAE1B,qBAAqB,UAAS;IAEzD;;;;OAIG;IACwB,OAAO,UAAS;IAE3C;;;;OAIG;IACwB,QAAQ,UAAS;IAElB,aAAa,EAAE,aAAa,CAC9B;IAExB,SAAS,CAAC,QAAQ,CAAC,QAAQ,qBAGzB;IAEF,IAAI,qBAAqB,IAAI,qBAAqB,CASjD;IAED;;;;;;;OAOG;IACuB,mBAAmB,SAAK;IAElD;;;;;;;OAOG;IACuB,4BAA4B,SAAK;IAElD,OAAO,CAAC,KAAK,CAAqB;IAE3C,OAAO,CAAC,cAAc,CAEpB;IAEO,iBAAiB;IAKjB,oBAAoB;IAK7B,OAAO,CAAC,sBAAsB;IAiC9B,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,iBAAiB;IASzB,OAAO,KAAK,UAAU,GAQrB;IAED,OAAO,KAAK,wBAAwB,GAMnC;IAEQ,MAAM;IAwDf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
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, html, nothing } from "lit";
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 "../../icons/icon-alerts-alarm-twotone.js";
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 = "normal";
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 === "flat") {
125
- return "flat";
53
+ if (this.type === ObcAlertButtonType.Flat) {
54
+ return ObcAlertButtonType.Flat;
126
55
  }
127
56
  if (this.width < this.flatMaxBreakpointPx) {
128
- return "flat";
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 !== "flat";
62
+ return this.showSilenceButton && this.width >= this.silenceButtonMinBreakpointPx && this.activeType !== ObcAlertButtonType.Flat;
134
63
  }
135
64
  render() {
136
- const hasAlerts = this.nAlerts > 0;
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
- class="alert-button"
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
- ${showBlinking ? html` <div class="blink">
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
- ` : null}
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":"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"}
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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"}