@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.72 → 2.0.0-next.74
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 +89 -22
- package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
- package/custom-elements.json +311 -13
- package/dist/automation/automation-button/abstract-automation-button-motorized.d.ts +7 -0
- package/dist/automation/automation-button/abstract-automation-button-motorized.d.ts.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-motorized.js +16 -4
- package/dist/automation/automation-button/abstract-automation-button-motorized.js.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.d.ts +16 -0
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.d.ts.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.js +11 -1
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.js.map +1 -1
- package/dist/components/toggle-button-vertical-group/toggle-button-vertical-group.d.ts +14 -0
- package/dist/components/toggle-button-vertical-group/toggle-button-vertical-group.d.ts.map +1 -1
- package/dist/components/toggle-button-vertical-group/toggle-button-vertical-group.js +25 -5
- package/dist/components/toggle-button-vertical-group/toggle-button-vertical-group.js.map +1 -1
- package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.css.js +17 -2
- package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.css.js.map +1 -1
- package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.d.ts +24 -2
- package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.d.ts.map +1 -1
- package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.js +32 -11
- package/dist/integration-systems/integration-vessel-menu/integration-vessel-menu.js.map +1 -1
- package/package.json +1 -1
- package/src/automation/automation-button/abstract-automation-button-motorized.ts +12 -8
- package/src/automation/automation-button/abstract-automation-button-storybook-helpers.ts +10 -0
- package/src/automation/motor/motor.stories.ts +12 -0
- package/src/components/toggle-button-vertical-group/toggle-button-vertical-group.stories.ts +56 -0
- package/src/components/toggle-button-vertical-group/toggle-button-vertical-group.ts +36 -5
- package/src/integration-systems/integration-vessel-menu/integration-vessel-menu.css +15 -2
- package/src/integration-systems/integration-vessel-menu/integration-vessel-menu.stories.ts +102 -72
- package/src/integration-systems/integration-vessel-menu/integration-vessel-menu.ts +45 -11
|
@@ -37,6 +37,10 @@ export type ObcToggleButtonVerticalGroupValueChangeEvent = CustomEvent<{
|
|
|
37
37
|
* - **Layout behavior:**
|
|
38
38
|
* - By default, the group stretches to fill available container width, with options stacked vertically.
|
|
39
39
|
* - When `hugWidth` is true, the group shrinks to fit its content width instead of expanding.
|
|
40
|
+
* - **Empty selection mode:** When `allowEmptySelection` is true, a `value` that does not match any enabled
|
|
41
|
+
* option leaves the group with no option selected, instead of defaulting to the first enabled option. Use
|
|
42
|
+
* this when a selection may legitimately be absent (e.g. unset, loading, or error states) so the UI does not
|
|
43
|
+
* imply a choice the user has not made.
|
|
40
44
|
* - **Disabled state:** Setting `disabled` on the group disables all contained options at once. Individual
|
|
41
45
|
* options can also be disabled independently while the group remains enabled.
|
|
42
46
|
* - **Divider management:** Automatically shows visual dividers between options and hides the divider after
|
|
@@ -128,6 +132,17 @@ export class ObcToggleButtonVerticalGroup extends LitElement {
|
|
|
128
132
|
*/
|
|
129
133
|
@property({type: Boolean}) hugWidth = false;
|
|
130
134
|
|
|
135
|
+
/**
|
|
136
|
+
* If true, a `value` that does not match any enabled option leaves the group with no option selected
|
|
137
|
+
* instead of defaulting to the first enabled option.
|
|
138
|
+
*
|
|
139
|
+
* This also applies when the currently selected option becomes disabled: the group clears its selection
|
|
140
|
+
* rather than falling back to another option.
|
|
141
|
+
*
|
|
142
|
+
* Defaults to false (the first enabled option is selected when the value does not match).
|
|
143
|
+
*/
|
|
144
|
+
@property({type: Boolean}) allowEmptySelection = false;
|
|
145
|
+
|
|
131
146
|
/**
|
|
132
147
|
* Disables the entire group and all contained options.
|
|
133
148
|
*
|
|
@@ -186,8 +201,12 @@ export class ObcToggleButtonVerticalGroup extends LitElement {
|
|
|
186
201
|
this.updateDividers();
|
|
187
202
|
return;
|
|
188
203
|
}
|
|
189
|
-
|
|
190
|
-
|
|
204
|
+
if (this.allowEmptySelection) {
|
|
205
|
+
newValue = '';
|
|
206
|
+
} else {
|
|
207
|
+
const fallback = this.getFirstSelectableOption();
|
|
208
|
+
newValue = fallback?.value || '';
|
|
209
|
+
}
|
|
191
210
|
}
|
|
192
211
|
|
|
193
212
|
this.value = newValue;
|
|
@@ -253,9 +272,13 @@ export class ObcToggleButtonVerticalGroup extends LitElement {
|
|
|
253
272
|
});
|
|
254
273
|
|
|
255
274
|
if (!this.value || !this.getOptionByValue(this.value)) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
275
|
+
if (this.allowEmptySelection) {
|
|
276
|
+
this.updateSelection('', false);
|
|
277
|
+
} else {
|
|
278
|
+
const firstSelectable = this.getFirstSelectableOption();
|
|
279
|
+
if (firstSelectable) {
|
|
280
|
+
this.updateSelection(firstSelectable.value, false);
|
|
281
|
+
}
|
|
259
282
|
}
|
|
260
283
|
} else {
|
|
261
284
|
this.updateSelection(this.value, false);
|
|
@@ -265,6 +288,10 @@ export class ObcToggleButtonVerticalGroup extends LitElement {
|
|
|
265
288
|
private handleOptionDisabledChange() {
|
|
266
289
|
const currentOption = this.getOptionByValue(this.value);
|
|
267
290
|
if (currentOption?.disabled && this.hasAnyEnabledOption()) {
|
|
291
|
+
if (this.allowEmptySelection) {
|
|
292
|
+
this.updateSelection('');
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
268
295
|
const firstSelectable = this.getFirstSelectableOption();
|
|
269
296
|
if (firstSelectable) {
|
|
270
297
|
this.updateSelection(firstSelectable.value);
|
|
@@ -303,6 +330,10 @@ export class ObcToggleButtonVerticalGroup extends LitElement {
|
|
|
303
330
|
|
|
304
331
|
const currentOption = this.getOptionByValue(this.value);
|
|
305
332
|
if (currentOption?.disabled && this.hasAnyEnabledOption()) {
|
|
333
|
+
if (this.allowEmptySelection) {
|
|
334
|
+
this.updateSelection('');
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
306
337
|
const firstSelectable = this.getFirstSelectableOption();
|
|
307
338
|
if (firstSelectable) {
|
|
308
339
|
this.updateSelection(firstSelectable.value);
|
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
box-sizing: border-box;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
+
:host {
|
|
6
|
+
display: block;
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
.wrapper {
|
|
6
10
|
@mixin style style=integration-normal noClick=true;
|
|
7
11
|
display: flex;
|
|
8
12
|
flex-direction: column;
|
|
9
13
|
align-items: center;
|
|
14
|
+
height: 100%;
|
|
10
15
|
background: var(--container-global-color);
|
|
11
16
|
border-radius: var(
|
|
12
17
|
--app-components-integration-system-dropdown-menu-border-radius
|
|
@@ -31,6 +36,9 @@
|
|
|
31
36
|
border-top: 1px solid var(--border-divider-color);
|
|
32
37
|
background: var(--container-global-color);
|
|
33
38
|
border-radius: 12px;
|
|
39
|
+
&.hidden {
|
|
40
|
+
display: none;
|
|
41
|
+
}
|
|
34
42
|
}
|
|
35
43
|
|
|
36
44
|
.content-area {
|
|
@@ -40,6 +48,9 @@
|
|
|
40
48
|
gap: 8px;
|
|
41
49
|
align-self: stretch;
|
|
42
50
|
border-radius: 8px;
|
|
51
|
+
&.hidden {
|
|
52
|
+
display: none;
|
|
53
|
+
}
|
|
43
54
|
}
|
|
44
55
|
|
|
45
56
|
.footer-container slot[name="buttons"]::slotted(*) {
|
|
@@ -56,7 +67,8 @@
|
|
|
56
67
|
gap: var(--app-components-integration-system-menu-action-spacing);
|
|
57
68
|
}
|
|
58
69
|
|
|
59
|
-
.buttons-slot
|
|
70
|
+
.buttons-slot,
|
|
71
|
+
.content-slot {
|
|
60
72
|
display: contents;
|
|
61
73
|
}
|
|
62
74
|
|
|
@@ -68,13 +80,14 @@
|
|
|
68
80
|
min-height: 0;
|
|
69
81
|
flex: 1;
|
|
70
82
|
border-radius: 8px;
|
|
71
|
-
&.
|
|
83
|
+
&.hidden {
|
|
72
84
|
display: none;
|
|
73
85
|
}
|
|
74
86
|
}
|
|
75
87
|
|
|
76
88
|
.alertlist {
|
|
77
89
|
width: 100%;
|
|
90
|
+
height: 100%;
|
|
78
91
|
}
|
|
79
92
|
|
|
80
93
|
.leading-icon {
|
|
@@ -102,31 +102,46 @@ const renderAlarms = () => html`
|
|
|
102
102
|
</obc-alert-menu-item>
|
|
103
103
|
`;
|
|
104
104
|
|
|
105
|
+
const renderButtons = () => html`
|
|
106
|
+
<obc-button slot="buttons" ?fullWidth=${true}>Action 1</obc-button>
|
|
107
|
+
<obc-button slot="buttons" ?fullWidth=${true}>Ac. 2</obc-button>
|
|
108
|
+
<obc-button slot="buttons" ?fullWidth=${true}>Action number 3</obc-button>
|
|
109
|
+
`;
|
|
110
|
+
|
|
111
|
+
const renderContent = () => html`
|
|
112
|
+
<div slot="content" style="padding: 16px;">
|
|
113
|
+
<p style="margin: 0;">Content area</p>
|
|
114
|
+
</div>
|
|
115
|
+
`;
|
|
116
|
+
|
|
105
117
|
const meta: Meta<ObcIntegrationVesselMenu> = {
|
|
106
118
|
title: 'Integration Systems/Integration Vessel Menu',
|
|
107
119
|
component: 'obc-integration-vessel-menu',
|
|
108
120
|
tags: ['alpha'],
|
|
109
|
-
args: {
|
|
121
|
+
args: {hasActions: true, hasAlertList: true, hasContent: true},
|
|
110
122
|
argTypes: {
|
|
111
|
-
|
|
123
|
+
hasActions: {
|
|
124
|
+
control: 'boolean',
|
|
125
|
+
},
|
|
126
|
+
hasAlertList: {
|
|
127
|
+
control: 'boolean',
|
|
128
|
+
},
|
|
129
|
+
hasContent: {
|
|
112
130
|
control: 'boolean',
|
|
113
131
|
},
|
|
114
132
|
},
|
|
115
133
|
parameters: {
|
|
116
134
|
layout: 'centered',
|
|
117
135
|
},
|
|
118
|
-
decorators: [
|
|
119
|
-
(story) => html`
|
|
120
|
-
<div style="height: 400px; display: flex;">${story()}</div>
|
|
121
|
-
`,
|
|
122
|
-
],
|
|
123
136
|
};
|
|
124
137
|
|
|
125
138
|
export default meta;
|
|
126
139
|
type Story = StoryObj<ObcIntegrationVesselMenu>;
|
|
127
140
|
|
|
128
141
|
interface IntegrationVesselMenuArgs {
|
|
129
|
-
|
|
142
|
+
hasActions: boolean;
|
|
143
|
+
hasAlertList: boolean;
|
|
144
|
+
hasContent: boolean;
|
|
130
145
|
}
|
|
131
146
|
|
|
132
147
|
type IntegrationVesselMenuTemplate = (
|
|
@@ -134,69 +149,23 @@ type IntegrationVesselMenuTemplate = (
|
|
|
134
149
|
) => ReturnType<typeof html>;
|
|
135
150
|
|
|
136
151
|
const template: IntegrationVesselMenuTemplate = (args) => html`
|
|
137
|
-
<obc-integration-vessel-menu
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
slot="buttons"
|
|
145
|
-
@click=${() => console.log('Button 1 clicked')}
|
|
146
|
-
?fullWidth=${true}
|
|
147
|
-
>
|
|
148
|
-
<div>Action 1</div>
|
|
149
|
-
</obc-button>
|
|
150
|
-
<obc-button
|
|
151
|
-
slot="buttons"
|
|
152
|
-
@click=${() => console.log('Button 2 clicked')}
|
|
153
|
-
?fullWidth=${true}
|
|
154
|
-
>
|
|
155
|
-
Ac. 2
|
|
156
|
-
</obc-button>
|
|
157
|
-
<obc-button
|
|
158
|
-
slot="buttons"
|
|
159
|
-
@click=${() => console.log('Button 3 clicked')}
|
|
160
|
-
?fullWidth=${true}
|
|
161
|
-
>
|
|
162
|
-
Action number 3
|
|
163
|
-
</obc-button>
|
|
164
|
-
|
|
165
|
-
${renderAlarms()}
|
|
166
|
-
</obc-integration-vessel-menu>
|
|
167
|
-
`;
|
|
168
|
-
|
|
169
|
-
const templateWithoutAlarms: IntegrationVesselMenuTemplate = (args) => html`
|
|
170
|
-
<obc-integration-vessel-menu .hideAlarmList=${args.hideAlarmList}>
|
|
171
|
-
<obc-button
|
|
172
|
-
slot="buttons"
|
|
173
|
-
@click=${() => console.log('Button 1 clicked')}
|
|
174
|
-
?fullWidth=${true}
|
|
175
|
-
>
|
|
176
|
-
Action 1
|
|
177
|
-
</obc-button>
|
|
178
|
-
<obc-button
|
|
179
|
-
slot="buttons"
|
|
180
|
-
@click=${() => console.log('Button 2 clicked')}
|
|
181
|
-
?fullWidth=${true}
|
|
182
|
-
>
|
|
183
|
-
Ac. 2
|
|
184
|
-
</obc-button>
|
|
185
|
-
<obc-button
|
|
186
|
-
slot="buttons"
|
|
187
|
-
@click=${() => console.log('Button 3 clicked')}
|
|
188
|
-
?fullWidth=${true}
|
|
189
|
-
>
|
|
190
|
-
Action number 3
|
|
191
|
-
</obc-button>
|
|
192
|
-
<div slot="content" style="padding: 24px;">
|
|
193
|
-
<p>Add content here</p>
|
|
194
|
-
</div>
|
|
152
|
+
<obc-integration-vessel-menu
|
|
153
|
+
style="width: 400px;"
|
|
154
|
+
.hasActions=${args.hasActions}
|
|
155
|
+
.hasAlertList=${args.hasAlertList}
|
|
156
|
+
.hasContent=${args.hasContent}
|
|
157
|
+
>
|
|
158
|
+
${renderButtons()} ${renderContent()} ${renderAlarms()}
|
|
195
159
|
</obc-integration-vessel-menu>
|
|
196
160
|
`;
|
|
197
161
|
|
|
198
162
|
const templateWrappedButtons: IntegrationVesselMenuTemplate = (args) => html`
|
|
199
|
-
<obc-integration-vessel-menu
|
|
163
|
+
<obc-integration-vessel-menu
|
|
164
|
+
style="width: 600px; height: 400px;"
|
|
165
|
+
.hasActions=${args.hasActions}
|
|
166
|
+
.hasAlertList=${args.hasAlertList}
|
|
167
|
+
.hasContent=${args.hasContent}
|
|
168
|
+
>
|
|
200
169
|
<div slot="buttons">
|
|
201
170
|
<div style="display: contents;">
|
|
202
171
|
<obc-button ?fullWidth=${true}>Open</obc-button>
|
|
@@ -218,15 +187,76 @@ export const Default: Story = {
|
|
|
218
187
|
render: template,
|
|
219
188
|
};
|
|
220
189
|
|
|
221
|
-
export const
|
|
222
|
-
render:
|
|
190
|
+
export const NoActions: Story = {
|
|
191
|
+
render: template,
|
|
192
|
+
args: {hasActions: false},
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
export const NoContent: Story = {
|
|
196
|
+
render: template,
|
|
197
|
+
args: {hasContent: false},
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
export const NoAlertList: Story = {
|
|
201
|
+
render: template,
|
|
202
|
+
args: {hasAlertList: false},
|
|
223
203
|
};
|
|
224
204
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
205
|
+
// Recommended bounded usage: the consumer caps the menu by setting a height on
|
|
206
|
+
// the host element. The menu fills that height and the alert list scrolls within
|
|
207
|
+
// the remaining space automatically — no per-slot sizing required.
|
|
208
|
+
const templateConstrained: IntegrationVesselMenuTemplate = (args) => html`
|
|
209
|
+
<obc-integration-vessel-menu
|
|
210
|
+
style="width: 400px; height: 500px;"
|
|
211
|
+
.hasActions=${args.hasActions}
|
|
212
|
+
.hasAlertList=${args.hasAlertList}
|
|
213
|
+
.hasContent=${args.hasContent}
|
|
214
|
+
>
|
|
215
|
+
${renderButtons()} ${renderContent()} ${renderAlarms()}
|
|
216
|
+
</obc-integration-vessel-menu>
|
|
217
|
+
`;
|
|
218
|
+
|
|
219
|
+
export const Constrained: Story = {
|
|
220
|
+
render: templateConstrained,
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
// Without consumer bounding, tall content grows the whole menu unbounded.
|
|
224
|
+
const templateLongContent: IntegrationVesselMenuTemplate = (args) => html`
|
|
225
|
+
<obc-integration-vessel-menu
|
|
226
|
+
style="width: 400px;"
|
|
227
|
+
.hasActions=${args.hasActions}
|
|
228
|
+
.hasAlertList=${args.hasAlertList}
|
|
229
|
+
.hasContent=${args.hasContent}
|
|
230
|
+
>
|
|
231
|
+
${renderButtons()}
|
|
232
|
+
<div slot="content" style="padding: 16px;">
|
|
233
|
+
<div style="height: 600px;">
|
|
234
|
+
<p style="margin: 0;">Tall content with no height cap</p>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
</obc-integration-vessel-menu>
|
|
238
|
+
`;
|
|
239
|
+
|
|
240
|
+
export const LongContentOverflow: Story = {
|
|
241
|
+
render: templateLongContent,
|
|
242
|
+
args: {hasAlertList: false},
|
|
228
243
|
};
|
|
229
244
|
|
|
230
245
|
export const WithButtonsWrappedInDivWithoutStyling: Story = {
|
|
231
246
|
render: templateWrappedButtons,
|
|
232
247
|
};
|
|
248
|
+
|
|
249
|
+
const templateNoAlerts: IntegrationVesselMenuTemplate = (args) => html`
|
|
250
|
+
<obc-integration-vessel-menu
|
|
251
|
+
style="width: 400px;"
|
|
252
|
+
.hasActions=${args.hasActions}
|
|
253
|
+
.hasAlertList=${args.hasAlertList}
|
|
254
|
+
.hasContent=${args.hasContent}
|
|
255
|
+
>
|
|
256
|
+
${renderButtons()} ${renderContent()}
|
|
257
|
+
</obc-integration-vessel-menu>
|
|
258
|
+
`;
|
|
259
|
+
|
|
260
|
+
export const NoAlerts: Story = {
|
|
261
|
+
render: templateNoAlerts,
|
|
262
|
+
};
|
|
@@ -7,11 +7,32 @@ import componentStyle from './integration-vessel-menu.css?inline';
|
|
|
7
7
|
import '../../components/button/button.js';
|
|
8
8
|
import '../../components/icon-button/icon-button.js';
|
|
9
9
|
import '../../icons/icon-placeholder.js';
|
|
10
|
+
import '../../icons/icon-unacknowledged.js';
|
|
10
11
|
import '../../building-blocks/alert-list/alert-list.js';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* `<obc-integration-vessel-menu>` – A menu to be shown when selecting a obc-integration-button from a obc-integration-bar.
|
|
14
15
|
*
|
|
16
|
+
* ## Sizing
|
|
17
|
+
*
|
|
18
|
+
* The menu hugs its content and never reserves more space than its slotted
|
|
19
|
+
* sections need; it deliberately does not impose a height of its own. Sizing is
|
|
20
|
+
* owned by the consumer, since only the consumer knows how large the menu may
|
|
21
|
+
* grow in a given layout.
|
|
22
|
+
*
|
|
23
|
+
* From a web components perspective, drive the size from the host element and
|
|
24
|
+
* the slotted light-DOM nodes — not from component properties:
|
|
25
|
+
*
|
|
26
|
+
* - **Bound the whole menu** by giving the host element a definite `height`. The
|
|
27
|
+
* menu fills that height and the alert list scrolls within the remaining space
|
|
28
|
+
* while the footer and content keep their size. This is the recommended
|
|
29
|
+
* approach. (A `max-height` alone will not bound the list — the internal
|
|
30
|
+
* scroll needs a definite height to resolve against.)
|
|
31
|
+
* - **Size sections independently** (advanced) by sizing the slotted nodes
|
|
32
|
+
* directly — e.g. a fixed-height `content` element, or a capped, scrollable
|
|
33
|
+
* wrapper around the `alarms` items.
|
|
34
|
+
* - **Leave it unbounded** to let the menu grow with its content.
|
|
35
|
+
*
|
|
15
36
|
* @slot buttons - Buttons shown in the footer.
|
|
16
37
|
* @slot content - Main content shown in the content area.
|
|
17
38
|
* @slot alarms - Alarm items rendered inside the alert list.
|
|
@@ -19,30 +40,43 @@ import '../../building-blocks/alert-list/alert-list.js';
|
|
|
19
40
|
|
|
20
41
|
@customElement('obc-integration-vessel-menu')
|
|
21
42
|
export class ObcIntegrationVesselMenu extends LitElement {
|
|
22
|
-
|
|
23
|
-
@property({type: Boolean})
|
|
43
|
+
@property({type: Boolean, attribute: false}) hasActions = true;
|
|
44
|
+
@property({type: Boolean, attribute: false}) hasAlertList = true;
|
|
45
|
+
@property({type: Boolean, attribute: false}) hasContent = true;
|
|
24
46
|
|
|
25
47
|
protected override render() {
|
|
26
48
|
return html`
|
|
27
|
-
<div
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
49
|
+
<div class="wrapper">
|
|
50
|
+
<div
|
|
51
|
+
class=${classMap({
|
|
52
|
+
'footer-container': true,
|
|
53
|
+
hidden: !this.hasActions,
|
|
54
|
+
})}
|
|
55
|
+
>
|
|
33
56
|
<slot name="buttons" class="buttons-slot"></slot>
|
|
34
57
|
</div>
|
|
35
|
-
<div
|
|
36
|
-
|
|
58
|
+
<div
|
|
59
|
+
class=${classMap({
|
|
60
|
+
'content-area': true,
|
|
61
|
+
hidden: !this.hasContent,
|
|
62
|
+
})}
|
|
63
|
+
>
|
|
64
|
+
<slot name="content" class="content-slot"></slot>
|
|
37
65
|
</div>
|
|
38
66
|
<div
|
|
39
67
|
class=${classMap({
|
|
40
68
|
'content-container': true,
|
|
41
|
-
|
|
69
|
+
hidden: !this.hasAlertList,
|
|
42
70
|
})}
|
|
43
71
|
>
|
|
44
72
|
<obc-alert-list class="alertlist"
|
|
45
73
|
><slot name="alarms"></slot>
|
|
74
|
+
<div slot="empty-icon">
|
|
75
|
+
<obi-unacknowledged></obi-unacknowledged>
|
|
76
|
+
</div>
|
|
77
|
+
<div slot="empty-title">
|
|
78
|
+
<span>No alerts</span>
|
|
79
|
+
</div>
|
|
46
80
|
</obc-alert-list>
|
|
47
81
|
</div>
|
|
48
82
|
</div>
|