@oicl/openbridge-webcomponents 2.0.0-next.168 → 2.0.0-next.169
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 +3352 -2948
- package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
- package/custom-elements.json +465 -3
- 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 +18 -1
- package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js.map +1 -1
- package/dist/components/alert-menu/alert-menu.css.js +21 -1
- package/dist/components/alert-menu/alert-menu.css.js.map +1 -1
- package/dist/components/alert-menu/alert-menu.d.ts +14 -0
- package/dist/components/alert-menu/alert-menu.d.ts.map +1 -1
- package/dist/components/alert-menu/alert-menu.js +10 -0
- package/dist/components/alert-menu/alert-menu.js.map +1 -1
- package/dist/components/app-menu/app-menu.css.js +23 -1
- package/dist/components/app-menu/app-menu.css.js.map +1 -1
- package/dist/components/app-menu/app-menu.d.ts +14 -0
- package/dist/components/app-menu/app-menu.d.ts.map +1 -1
- package/dist/components/app-menu/app-menu.js +17 -1
- package/dist/components/app-menu/app-menu.js.map +1 -1
- package/dist/components/brilliance-menu/brilliance-menu.css.js +21 -1
- package/dist/components/brilliance-menu/brilliance-menu.css.js.map +1 -1
- package/dist/components/brilliance-menu/brilliance-menu.d.ts +14 -0
- package/dist/components/brilliance-menu/brilliance-menu.d.ts.map +1 -1
- package/dist/components/brilliance-menu/brilliance-menu.js +10 -0
- package/dist/components/brilliance-menu/brilliance-menu.js.map +1 -1
- package/dist/components/command-menu/command-menu.css.js +21 -1
- package/dist/components/command-menu/command-menu.css.js.map +1 -1
- package/dist/components/command-menu/command-menu.d.ts +14 -0
- package/dist/components/command-menu/command-menu.d.ts.map +1 -1
- package/dist/components/command-menu/command-menu.js +10 -0
- package/dist/components/command-menu/command-menu.js.map +1 -1
- package/dist/components/context-menu-input/context-menu-input.css.js +58 -3
- package/dist/components/context-menu-input/context-menu-input.css.js.map +1 -1
- package/dist/components/context-menu-input/context-menu-input.d.ts +14 -1
- package/dist/components/context-menu-input/context-menu-input.d.ts.map +1 -1
- package/dist/components/context-menu-input/context-menu-input.js +11 -0
- package/dist/components/context-menu-input/context-menu-input.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.css.js +21 -1
- package/dist/components/navigation-menu/navigation-menu.css.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts +14 -0
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.js +10 -0
- package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
- package/dist/components/system-menu/system-menu.css.js +81 -61
- package/dist/components/system-menu/system-menu.css.js.map +1 -1
- package/dist/components/system-menu/system-menu.d.ts +14 -0
- package/dist/components/system-menu/system-menu.d.ts.map +1 -1
- package/dist/components/system-menu/system-menu.js +10 -0
- package/dist/components/system-menu/system-menu.js.map +1 -1
- package/dist/components/top-bar/top-bar.d.ts +11 -4
- package/dist/components/top-bar/top-bar.d.ts.map +1 -1
- package/dist/components/top-bar/top-bar.js +18 -10
- package/dist/components/top-bar/top-bar.js.map +1 -1
- package/dist/components/user-button/user-button.d.ts +1 -0
- package/dist/components/user-button/user-button.d.ts.map +1 -1
- package/dist/components/user-button/user-button.js +11 -1
- package/dist/components/user-button/user-button.js.map +1 -1
- package/dist/components/user-menu/user-menu.css.js +21 -1
- package/dist/components/user-menu/user-menu.css.js.map +1 -1
- package/dist/components/user-menu/user-menu.d.ts +14 -0
- package/dist/components/user-menu/user-menu.d.ts.map +1 -1
- package/dist/components/user-menu/user-menu.js +10 -0
- package/dist/components/user-menu/user-menu.js.map +1 -1
- package/dist/internal/popover-controller.d.ts +128 -0
- package/dist/internal/popover-controller.d.ts.map +1 -0
- package/dist/internal/popover-controller.js +121 -0
- package/dist/internal/popover-controller.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
import { css } from "lit";
|
|
2
2
|
const compentStyle = css`* {
|
|
3
|
-
|
|
3
|
+
-webkit-tap-highlight-color: transparent;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
+
:host([popover]) {
|
|
7
|
+
/* The browser pins a popover to all four edges and lets the automatic
|
|
8
|
+
margins centre it. Unpinning drops it back where it would normally sit,
|
|
9
|
+
for the consumer to position from. */
|
|
10
|
+
inset: auto;
|
|
11
|
+
margin: 0;
|
|
12
|
+
|
|
13
|
+
padding: 0;
|
|
14
|
+
border: none;
|
|
15
|
+
background: none;
|
|
16
|
+
color: inherit;
|
|
17
|
+
|
|
18
|
+
/* The menus scroll their own content. */
|
|
19
|
+
overflow: visible;
|
|
20
|
+
|
|
21
|
+
/* The browser shrink-wraps a popover to its contents. */
|
|
22
|
+
width: auto;
|
|
23
|
+
height: auto;
|
|
24
|
+
}
|
|
25
|
+
|
|
6
26
|
* {
|
|
7
27
|
box-sizing: border-box;
|
|
8
28
|
}
|
|
@@ -36,59 +56,59 @@ const compentStyle = css`* {
|
|
|
36
56
|
}
|
|
37
57
|
|
|
38
58
|
:is(.wrapper button.title-container) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
59
|
+
border-color: var(--flat-enabled-border-color);
|
|
60
|
+
background-color: var(--flat-enabled-background-color);
|
|
61
|
+
border-width: 1px;
|
|
62
|
+
border-style: solid;
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
--base-border-color: var(--flat-enabled-border-color);
|
|
65
|
+
--base-background-color: var(--flat-enabled-background-color);
|
|
46
66
|
}
|
|
47
67
|
|
|
48
68
|
:is(.wrapper button.title-container):focus {
|
|
49
|
-
|
|
69
|
+
outline: none;
|
|
50
70
|
}
|
|
51
71
|
|
|
52
72
|
.activated:is(.wrapper button.title-container) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
73
|
+
border-color: var(--flat-activated-border-color);
|
|
74
|
+
background-color: var(--flat-activated-background-color);
|
|
75
|
+
--base-border-color: var(--flat-activated-border-color);
|
|
76
|
+
--base-background-color: var(--flat-activated-background-color);
|
|
57
77
|
}
|
|
58
78
|
|
|
59
79
|
@media (hover:hover) {
|
|
60
80
|
|
|
61
81
|
:is(.wrapper button.title-container):hover {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
82
|
+
border-color: color-mix(in srgb, var(--flat-hover-border-color) calc(var(--obc-can-hover) * 100%), var(--base-border-color));
|
|
83
|
+
background-color: color-mix(in srgb, var(--flat-hover-background-color) calc(var(--obc-can-hover) * 100%), var(--base-background-color));
|
|
84
|
+
}
|
|
65
85
|
}
|
|
66
86
|
|
|
67
87
|
:is(.wrapper button.title-container):active {
|
|
68
|
-
|
|
69
|
-
|
|
88
|
+
border-color: var(--flat-pressed-border-color);
|
|
89
|
+
background-color: var(--flat-pressed-background-color);
|
|
70
90
|
}
|
|
71
91
|
|
|
72
92
|
:is(.wrapper button.title-container):focus-visible {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
93
|
+
outline-color: var(--border-focus-color);
|
|
94
|
+
outline-width: var(--global-size-spacing-border-weight-focusframe);
|
|
95
|
+
outline-style: solid;
|
|
96
|
+
border-color: var(--container-global-color);
|
|
97
|
+
z-index: 1;
|
|
78
98
|
}
|
|
79
99
|
|
|
80
100
|
:is(.wrapper button.title-container):disabled {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
101
|
+
border-color: var(--flat-disabled-border-color);
|
|
102
|
+
background-color: var(--flat-disabled-background-color);
|
|
103
|
+
cursor: not-allowed;
|
|
104
|
+
color: var(--on-flat-disabled-color) !important;
|
|
85
105
|
}
|
|
86
106
|
|
|
87
107
|
.disabled:is(.wrapper button.title-container) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
108
|
+
border-color: var(--flat-disabled-border-color);
|
|
109
|
+
background-color: var(--flat-disabled-background-color);
|
|
110
|
+
cursor: not-allowed;
|
|
111
|
+
color: var(--on-flat-disabled-color) !important;
|
|
92
112
|
}
|
|
93
113
|
|
|
94
114
|
.wrapper button.title-container {
|
|
@@ -456,59 +476,59 @@ const compentStyle = css`* {
|
|
|
456
476
|
}
|
|
457
477
|
|
|
458
478
|
:is(:is(.wrapper.small-screen .menu-bar) button) {
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
479
|
+
border-color: var(--flat-enabled-border-color);
|
|
480
|
+
background-color: var(--flat-enabled-background-color);
|
|
481
|
+
border-width: 1px;
|
|
482
|
+
border-style: solid;
|
|
483
|
+
cursor: pointer;
|
|
484
|
+
--base-border-color: var(--flat-enabled-border-color);
|
|
485
|
+
--base-background-color: var(--flat-enabled-background-color);
|
|
466
486
|
}
|
|
467
487
|
|
|
468
488
|
:is(:is(.wrapper.small-screen .menu-bar) button):focus {
|
|
469
|
-
|
|
489
|
+
outline: none;
|
|
470
490
|
}
|
|
471
491
|
|
|
472
492
|
.activated:is(:is(.wrapper.small-screen .menu-bar) button) {
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
493
|
+
border-color: var(--flat-activated-border-color);
|
|
494
|
+
background-color: var(--flat-activated-background-color);
|
|
495
|
+
--base-border-color: var(--flat-activated-border-color);
|
|
496
|
+
--base-background-color: var(--flat-activated-background-color);
|
|
477
497
|
}
|
|
478
498
|
|
|
479
499
|
@media (hover:hover) {
|
|
480
500
|
|
|
481
501
|
:is(:is(.wrapper.small-screen .menu-bar) button):hover {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
502
|
+
border-color: color-mix(in srgb, var(--flat-hover-border-color) calc(var(--obc-can-hover) * 100%), var(--base-border-color));
|
|
503
|
+
background-color: color-mix(in srgb, var(--flat-hover-background-color) calc(var(--obc-can-hover) * 100%), var(--base-background-color));
|
|
504
|
+
}
|
|
485
505
|
}
|
|
486
506
|
|
|
487
507
|
:is(:is(.wrapper.small-screen .menu-bar) button):active {
|
|
488
|
-
|
|
489
|
-
|
|
508
|
+
border-color: var(--flat-pressed-border-color);
|
|
509
|
+
background-color: var(--flat-pressed-background-color);
|
|
490
510
|
}
|
|
491
511
|
|
|
492
512
|
:is(:is(.wrapper.small-screen .menu-bar) button):focus-visible {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
513
|
+
outline-color: var(--border-focus-color);
|
|
514
|
+
outline-width: var(--global-size-spacing-border-weight-focusframe);
|
|
515
|
+
outline-style: solid;
|
|
516
|
+
border-color: var(--container-global-color);
|
|
517
|
+
z-index: 1;
|
|
498
518
|
}
|
|
499
519
|
|
|
500
520
|
:is(:is(.wrapper.small-screen .menu-bar) button):disabled {
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
521
|
+
border-color: var(--flat-disabled-border-color);
|
|
522
|
+
background-color: var(--flat-disabled-background-color);
|
|
523
|
+
cursor: not-allowed;
|
|
524
|
+
color: var(--on-flat-disabled-color) !important;
|
|
505
525
|
}
|
|
506
526
|
|
|
507
527
|
.disabled:is(:is(.wrapper.small-screen .menu-bar) button) {
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
528
|
+
border-color: var(--flat-disabled-border-color);
|
|
529
|
+
background-color: var(--flat-disabled-background-color);
|
|
530
|
+
cursor: not-allowed;
|
|
531
|
+
color: var(--on-flat-disabled-color) !important;
|
|
512
532
|
}
|
|
513
533
|
|
|
514
534
|
:is(.wrapper.small-screen .menu-bar) button {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-menu.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system-menu.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LitElement, TemplateResult } from 'lit';
|
|
2
|
+
import { PopoverController } from '../../internal/popover-controller.js';
|
|
2
3
|
import '../../icons/icon-chevron-right-google.js';
|
|
3
4
|
import '../../icons/icon-wifi2-google.js';
|
|
4
5
|
import '../icon-check-button/icon-check-button.js';
|
|
@@ -79,6 +80,9 @@ export declare enum SystemMenuControlMode {
|
|
|
79
80
|
}
|
|
80
81
|
export type VolumeChangeEvent = CustomEvent<number>;
|
|
81
82
|
/**
|
|
83
|
+
* @property softDismiss - Let the browser close this menu on its own: on a click outside it, on `Escape`, or when another menu opens. Leave it off to keep showing and hiding the menu yourself.
|
|
84
|
+
* @property open - Whether the menu is showing.
|
|
85
|
+
* @availableWhen open softDismiss==true
|
|
82
86
|
* @fires wifi-click - When the Wi-Fi button is clicked
|
|
83
87
|
* @fires audio-click - When the Audio button is clicked
|
|
84
88
|
* @fires {VolumeChangeEvent} audio-volume-change - When the Audio volume is changed
|
|
@@ -95,9 +99,19 @@ export type VolumeChangeEvent = CustomEvent<number>;
|
|
|
95
99
|
* @fires wifi-options-click - When the Wi-Fi options are clicked
|
|
96
100
|
* @fires wifi-disconnect-click - When the Wi-Fi disconnect is clicked
|
|
97
101
|
* @slot battery-status - Custom battery status text (falls back to the built-in charging/battery label).
|
|
102
|
+
* @fires {CustomEvent<void>} close - Fired when the menu closed on its own, from a click outside, `Escape`, or another menu opening. `open` is already `false` by the time it arrives.
|
|
98
103
|
* @stable
|
|
99
104
|
*/
|
|
100
105
|
export declare class ObcSystemMenu extends LitElement {
|
|
106
|
+
/** Let the browser close this menu on its own: on a click outside it, on `Escape`, or when another menu opens. Leave it off to keep showing and hiding the menu yourself. */
|
|
107
|
+
softDismiss: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Whether the menu is showing.
|
|
110
|
+
*
|
|
111
|
+
* Available when `softDismiss==true`.
|
|
112
|
+
*/
|
|
113
|
+
open: boolean;
|
|
114
|
+
protected readonly softDismissController: PopoverController;
|
|
101
115
|
wifiState: WifiState | undefined;
|
|
102
116
|
audioState: AudioState | undefined;
|
|
103
117
|
microphoneState: MicrophoneState | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-menu.d.ts","sourceRoot":"","sources":["../../../src/components/system-menu/system-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,cAAc,EAA2B,MAAM,KAAK,CAAC;AAKzE,OAAO,0CAA0C,CAAC;AAClD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,2CAA2C,CAAC;AACnD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,iCAAiC,CAAC;AACzC,OAAO,2BAA2B,CAAC;AACnC,OAAO,0CAA0C,CAAC;AAClD,OAAO,oCAAoC,CAAC;AAC5C,OAAO,qBAAqB,CAAC;AAE7B,OAAO,iCAAiC,CAAC;AACzC,OAAO,iCAAiC,CAAC;AACzC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,+BAA+B,CAAC;AAEvC,OAAO,yCAAyC,CAAC;AACjD,OAAO,mBAAmB,CAAC;AAC3B,OAAO,mCAAmC,CAAC;AAC3C,OAAO,uCAAuC,CAAC;AAC/C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,qBAAqB,CAAC;AAC7B,OAAO,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"system-menu.d.ts","sourceRoot":"","sources":["../../../src/components/system-menu/system-menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ import "../navigation-item/navigation-item.js";
|
|
|
23
23
|
import "../accordion-item/accordion-item.js";
|
|
24
24
|
import "../button/button.js";
|
|
25
25
|
import "../scrollbar/scrollbar.js";
|
|
26
|
+
import { PopoverController } from "../../internal/popover-controller.js";
|
|
26
27
|
var __defProp = Object.defineProperty;
|
|
27
28
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
28
29
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -50,6 +51,9 @@ var SystemMenuControlMode = /* @__PURE__ */ ((SystemMenuControlMode2) => {
|
|
|
50
51
|
let ObcSystemMenu = class extends LitElement {
|
|
51
52
|
constructor() {
|
|
52
53
|
super(...arguments);
|
|
54
|
+
this.softDismiss = false;
|
|
55
|
+
this.open = false;
|
|
56
|
+
this.softDismissController = new PopoverController(this);
|
|
53
57
|
this.condensed = false;
|
|
54
58
|
this.showSettingsButton = false;
|
|
55
59
|
this.activeSubMenu = "main";
|
|
@@ -906,6 +910,12 @@ let ObcSystemMenu = class extends LitElement {
|
|
|
906
910
|
}
|
|
907
911
|
};
|
|
908
912
|
ObcSystemMenu.styles = unsafeCSS(compentStyle);
|
|
913
|
+
__decorateClass([
|
|
914
|
+
property({ type: Boolean })
|
|
915
|
+
], ObcSystemMenu.prototype, "softDismiss", 2);
|
|
916
|
+
__decorateClass([
|
|
917
|
+
property({ type: Boolean })
|
|
918
|
+
], ObcSystemMenu.prototype, "open", 2);
|
|
909
919
|
__decorateClass([
|
|
910
920
|
property({ attribute: false })
|
|
911
921
|
], ObcSystemMenu.prototype, "wifiState", 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-menu.js","sources":["../../../src/components/system-menu/system-menu.ts"],"sourcesContent":["import {LitElement, TemplateResult, html, nothing, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './system-menu.css?inline';\nimport {property} from 'lit/decorators.js';\nimport {localized, msg} from '@lit/localize';\nimport '../../icons/icon-chevron-right-google.js';\nimport '../../icons/icon-wifi2-google.js';\nimport '../icon-check-button/icon-check-button.js';\nimport '../../icons/icon-wifi2-off-google.js';\nimport '../../icons/icon-sound-muted.js';\nimport '../../icons/icon-sound.js';\nimport '../../icons/icon-com-mic-muted-google.js';\nimport '../../icons/icon-com-microphone.js';\nimport '../slider/slider.js';\nimport {ObcSliderValueEvent} from '../slider/slider.js';\nimport '../audio-output/audio-output.js';\nimport '../battery-icon/battery-icon.js';\nimport '../../icons/icon-settings-iec.js';\nimport '../icon-button/icon-button.js';\nimport {IconButtonVariant} from '../icon-button/icon-button.js';\nimport '../../icons/icon-chevron-left-google.js';\nimport '../radio/radio.js';\nimport '../toggle-switch/toggle-switch.js';\nimport '../navigation-item/navigation-item.js';\nimport '../accordion-item/accordion-item.js';\nimport '../button/button.js';\nimport '../scrollbar/scrollbar.js';\n\nexport interface WifiState {\n enabled: boolean;\n connected: boolean;\n networkName?: string;\n strength: number; // 0-100, 0 is no signal, 100 is full signal\n status: string; // Example: \"Connected, Secure\"\n networks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n otherNetworks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n}\n\nexport interface AudioState {\n muted: boolean;\n volume: number; // 0-100, 0 is muted, 100 is full volume\n outputs?: {\n name: string;\n }[];\n selectedOutput?: string;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface MicrophoneState {\n muted: boolean;\n currentLevel: number; // 0-100, 0 is no sound, 100 is full sound\n inputs?: {\n name: string;\n }[];\n selectedInput?: string;\n pushToTalk?: boolean;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface BatteryState {\n level: number; // percent, 0 empty to 100 full\n charging: boolean;\n poweredNotCharging?: boolean;\n notification?: boolean;\n batterySavingMode?: boolean; // undefined where the platform cannot report it\n hasUsageButton: boolean;\n modes?: {\n name: string;\n }[];\n selectedMode?: string;\n}\n\nexport enum SystemSubMenu {\n main = 'main',\n wifi = 'wifi',\n audio = 'audio',\n microphone = 'microphone',\n battery = 'battery',\n}\n\nexport enum SystemMenuControlMode {\n muteButton = 'mute-button',\n iconOnly = 'icon-only',\n hidden = 'hidden',\n}\n\nexport type VolumeChangeEvent = CustomEvent<number>;\n\n/**\n * @fires wifi-click - When the Wi-Fi button is clicked\n * @fires audio-click - When the Audio button is clicked\n * @fires {VolumeChangeEvent} audio-volume-change - When the Audio volume is changed\n * @fires microphone-click - When the Microphone button is clicked\n * @fires push-to-talk-change - When the push-to-talk toggle is changed\n * @fires battery-usage-click - When the Battery usage button is clicked\n * @fires battery-saving-mode-change - When the Battery saving mode is changed\n * @fires battery-mode-change - When the Battery mode is changed\n * @fires wifi-network-change - When the Wi-Fi network is changed\n * @fires audio-output-change - When the Audio output is changed\n * @fires microphone-input-change - When the Microphone input is changed\n * @fires settings-click - When the Settings button is clicked\n * @fires to-sub-menu-click - When the sub menu is clicked\n * @fires wifi-options-click - When the Wi-Fi options are clicked\n * @fires wifi-disconnect-click - When the Wi-Fi disconnect is clicked\n * @slot battery-status - Custom battery status text (falls back to the built-in charging/battery label).\n * @stable\n */\n@customElement('obc-system-menu')\n@localized()\nexport class ObcSystemMenu extends LitElement {\n @property({attribute: false}) wifiState: WifiState | undefined;\n @property({attribute: false}) audioState: AudioState | undefined;\n @property({attribute: false}) microphoneState: MicrophoneState | undefined;\n @property({attribute: false}) batteryState: BatteryState | undefined;\n @property({type: Boolean}) condensed: boolean = false;\n @property({type: Boolean}) showSettingsButton: boolean = false;\n @property({type: String}) activeSubMenu: SystemSubMenu = SystemSubMenu.main;\n @property({type: Boolean}) externalControl: boolean = false;\n @property({type: Boolean}) smallScreen: boolean = false;\n private get audioControlMode(): SystemMenuControlMode {\n return this.audioState?.controlMode ?? SystemMenuControlMode.muteButton;\n }\n\n private get microphoneControlMode(): SystemMenuControlMode {\n return (\n this.microphoneState?.controlMode ?? SystemMenuControlMode.muteButton\n );\n }\n\n private renderAudioControl() {\n if (!this.audioState) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${this.audioState.muted ? 'is-muted' : ''}\"\n role=\"img\"\n aria-label=${\n this.audioState.muted ? msg('Audio muted') : msg('Audio on')\n }\n >\n ${\n this.audioState.muted\n ? html`<obi-sound-muted></obi-sound-muted>`\n : html`<obi-sound></obi-sound>`\n }\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.audioState.muted}\n @icon-check-button-click=${this.handleAudioClick}\n >\n ${\n this.audioState.muted\n ? html`<obi-sound-muted slot=\"icon\"></obi-sound-muted>`\n : html`<obi-sound slot=\"icon\"></obi-sound>`\n }\n </obc-icon-check-button>`;\n }\n\n private renderMicrophoneControl(options?: {externalControl?: boolean}) {\n if (!this.microphoneState) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${\n this.microphoneState.muted ? 'is-muted' : ''\n }\"\n role=\"img\"\n aria-label=${\n this.microphoneState.muted\n ? msg('Microphone muted')\n : msg('Microphone on')\n }\n >\n ${\n this.microphoneState.muted\n ? html`<obi-com-mic-muted-google></obi-com-mic-muted-google>`\n : html`<obi-com-microphone></obi-com-microphone>`\n }\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.microphoneState.muted}\n ?externalControl=${options?.externalControl ?? false}\n @icon-check-button-click=${this.handleMicrophoneClick}\n >\n ${\n this.microphoneState.muted\n ? html`<obi-com-mic-muted-google\n slot=\"icon\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone slot=\"icon\"></obi-com-microphone>`\n }\n </obc-icon-check-button>`;\n }\n\n private get effectiveSubMenu(): SystemSubMenu {\n if (this.smallScreen && this.activeSubMenu === SystemSubMenu.main) {\n return SystemSubMenu.wifi;\n }\n return this.activeSubMenu;\n }\n\n override render() {\n if (this.smallScreen) {\n return this.renderSmallScreen();\n }\n\n let content: (TemplateResult | symbol)[];\n switch (this.activeSubMenu) {\n case SystemSubMenu.main:\n content = [\n this.renderWifi(),\n this.renderAudio(),\n this.renderMicrophone(),\n this.renderBattery(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.wifi:\n content = [\n this.renderSubMenuTitle(msg('Wi-Fi')),\n this.renderWifiSubMenuHeader(),\n this.renderWifMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.audio:\n content = [\n this.renderSubMenuTitle(msg('Audio')),\n this.renderAudioSubMenuHeader(),\n this.renderAudioSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.microphone:\n content = [\n this.renderSubMenuTitle(msg('Microphone')),\n this.renderMicrophoneSubMenuHeader(),\n this.renderMicrophoneSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.battery:\n content = [\n this.renderSubMenuTitle(msg('Battery')),\n this.renderBatterySubMenuHeader(),\n this.renderBatterySubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n }\n return html`<div class=\"wrapper ${this.condensed ? 'condensed' : ''}\">\n ${content}\n </div> `;\n }\n\n private dispatchClickEvent(eventName: string) {\n this.dispatchEvent(new CustomEvent(eventName));\n }\n\n private handleWifiClick(event: CustomEvent<{checked: boolean}>) {\n event.stopPropagation();\n this.wifiState!.enabled = event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('wifi-click', {detail: {enabled: event.detail.checked}})\n );\n }\n\n private handleAudioClick(event: CustomEvent) {\n event.stopPropagation();\n this.audioState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('audio-click', {detail: {muted: !event.detail.checked}})\n );\n }\n\n private handleAudioVolumeChange(event: ObcSliderValueEvent) {\n this.dispatchEvent(\n new CustomEvent('audio-volume-change', {detail: {volume: event.detail}})\n );\n }\n\n private handleToSubMenuClick(subMenu: SystemSubMenu) {\n if (!this.externalControl) {\n this.activeSubMenu = subMenu;\n }\n this.dispatchClickEvent('to-sub-menu-click');\n }\n\n private renderWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n const showMoreButton =\n this.wifiState.networks && this.wifiState.networks.length > 0;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <div class=\"title\">${msg('Wi-Fi')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Wi-Fi')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div class=\"action-container\">\n <obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!!this.wifiState.enabled}\n @icon-check-button-click=${this.handleWifiClick}\n >\n ${\n this.wifiState?.enabled\n ? html`<obi-wifi2-google slot=\"icon\"></obi-wifi2-google>`\n : html`<obi-wifi2-off-google\n slot=\"icon\"\n ></obi-wifi2-off-google>`\n }\n </obc-icon-check-button>\n <div\n class=\"content-item-value ${\n this.wifiState.enabled ? 'enabled' : 'disabled'\n }\"\n >\n ${this.wifiState?.networkName}\n </div>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Wi-Fi settings')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderAudio() {\n if (!this.audioState) {\n return nothing;\n }\n const showMoreButton =\n this.audioState.outputs && this.audioState.outputs.length > 0;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <div class=\"title\">${msg('Audio')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Audio')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${\n this.audioControlMode === SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''\n }\"\n >\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Audio settings')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const hasInputs =\n this.microphoneState.inputs && this.microphoneState.inputs.length > 0;\n const hasPushToTalk = this.microphoneState.pushToTalk !== undefined;\n const showMoreButton = hasInputs || hasPushToTalk;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <div class=\"title\">${msg('Microphone')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Microphone')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${\n this.microphoneControlMode === SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''\n }\"\n >\n ${this.renderMicrophoneControl()}\n <div class=\"content-item-value\">\n <obc-audio-output\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Microphone settings')}\n @click=${() =>\n this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n const hasModes =\n this.batteryState.modes && this.batteryState.modes.length > 0;\n const hasUsageButton = this.batteryState.hasUsageButton;\n const hasBatterySavingMode =\n this.batteryState.batterySavingMode !== undefined;\n const showMoreButton = hasModes || hasUsageButton || hasBatterySavingMode;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <div class=\"title\">${msg('Battery')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Battery')}</div>\n </div>`;\n const batteryStatus = this.batteryState.charging\n ? msg('Charging')\n : this.batteryState.poweredNotCharging\n ? msg('Powered & not charging')\n : msg('On battery');\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container battery-container\">\n <div class=\"action-container\">\n <div class=\"battery\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${\n this.batteryState.poweredNotCharging ?? false\n }\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"percentage\">${this.batteryState.level}%</div>\n <div class=\"status\">\n <slot name=\"battery-status\">${batteryStatus}</slot>\n </div>\n </div>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Battery settings')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderSettingsButton() {\n if (!this.showSettingsButton) {\n return nothing;\n }\n return html`<div class=\"group\">\n <button\n class=\"title-container settings\"\n @click=${() => this.dispatchClickEvent('settings-click')}\n >\n <div class=\"icon-container\">\n <obi-settings-iec class=\"icon\"></obi-settings-iec>\n </div>\n <div class=\"title\">${msg('Settings')}</div>\n </button>\n </div>`;\n }\n\n private renderSubMenuTitle(title: string) {\n return html`\n <div class=\"title-container sub-menu-title\">\n <obc-icon-button\n .variant=${IconButtonVariant.normal}\n aria-label=${msg('Back')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.main)}\n >\n <obi-chevron-left-google></obi-chevron-left-google>\n </obc-icon-button>\n <div class=\"title\">${title}</div>\n </div>\n `;\n }\n\n private renderWifiSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row wifi-container\">\n <obi-wifi2-google class=\"icon large\"></obi-wifi2-google>\n <div class=\"title wifi-name\">${this.wifiState?.networkName}</div>\n <div class=\"wifi-status\">${this.wifiState?.status}</div>\n </div>\n <div class=\"row\">\n <obc-button\n @click=${() => this.dispatchClickEvent('wifi-options-click')}\n fullWidth\n >${msg('Options')}</obc-button\n >\n ${\n this.wifiState?.connected\n ? html`<obc-button\n @click=${() => this.dispatchClickEvent('wifi-disconnect-click')}\n fullWidth\n >${msg('Disconnect')}</obc-button\n >`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderAudioSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${\n this.audioState?.muted\n ? html`<obi-sound-muted class=\"icon large off\"></obi-sound-muted>`\n : html`<obi-sound class=\"icon large\"></obi-sound>`\n }\n <div class=\"title\">\n ${this.audioState?.volume}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState?.volume ?? 0}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n </div>`;\n }\n\n private handleMicrophoneClick(event: CustomEvent<{checked: boolean}>) {\n event.stopPropagation();\n this.microphoneState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('microphone-click', {\n detail: {muted: !event.detail.checked},\n })\n );\n }\n\n private handlePushToTalkClick(event: InputEvent) {\n this.dispatchEvent(\n new CustomEvent('push-to-talk-change', {\n detail: {pushToTalk: (event.target as HTMLInputElement).checked},\n })\n );\n }\n\n private handleBatterySavingModeClick(event: CustomEvent<{checked: boolean}>) {\n this.dispatchEvent(\n new CustomEvent('battery-saving-mode-change', {\n detail: {batterySavingMode: event.detail.checked},\n })\n );\n }\n\n private renderMicrophoneSubMenuHeader() {\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${\n this.microphoneState?.muted\n ? html`<obi-com-mic-muted-google\n class=\"icon large\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone class=\"icon large\"></obi-com-microphone>`\n }\n <div class=\"title\">\n ${this.microphoneState?.currentLevel}\n <div class=\"unit\">dB</div>\n </div>\n </div>\n <div class=\"row ${isNoMuteButton ? 'no-mute-button' : ''}\">\n ${this.renderMicrophoneControl({externalControl: true})}\n <obc-audio-output\n .volume=${((this.microphoneState?.currentLevel ?? 0) / 100) * 8}\n ></obc-audio-output>\n </div>\n ${\n this.microphoneState?.pushToTalk !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.microphoneState?.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>`;\n }\n\n private handleBatteryUsageClick() {\n this.dispatchEvent(\n new CustomEvent('battery-usage-click', {detail: {usage: true}})\n );\n }\n\n private renderBatterySubMenuHeader() {\n if (!this.batteryState) {\n return nothing;\n }\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n <obc-battery-icon\n class=\"icon large\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ?? false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"title\">\n ${this.batteryState.level}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>\n ${\n this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>`;\n }\n\n private handleWifiNetworkClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('wifi-network-change', {detail: {network: name}})\n );\n }\n\n private renderWifMenuOptions() {\n if (this.wifiState?.networks?.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${msg('Wi-Fi')}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row navigation-items\">\n ${this.wifiState?.networks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n <obc-accordion-item title=${msg('Other networks')}>\n <div slot=\"expanded-content\">\n ${this.wifiState?.otherNetworks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-accordion-item>\n </div>\n </div>\n `;\n }\n\n private handleAudioOutputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('audio-output-change', {detail: {output: name}})\n );\n }\n\n private handleMicrophoneInputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('microphone-input-change', {detail: {input: name}})\n );\n }\n\n private handleBatteryModeClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('battery-mode-change', {detail: {mode: name}})\n );\n }\n\n private renderAudioSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Output'),\n this.audioState?.outputs ?? [],\n this.audioState?.selectedOutput ?? '',\n (name: string) => this.handleAudioOutputClick(name)\n );\n }\n\n private renderMicrophoneSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Input'),\n this.microphoneState?.inputs ?? [],\n this.microphoneState?.selectedInput ?? '',\n (name: string) => this.handleMicrophoneInputClick(name)\n );\n }\n\n private renderBatterySubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Mode'),\n this.batteryState?.modes ?? [],\n this.batteryState?.selectedMode ?? '',\n (name: string) => this.handleBatteryModeClick(name)\n );\n }\n\n private renderSubMenuOptions(\n title: string,\n options: {name: string}[],\n selectedOption: string,\n handleOptionClick: (name: string) => void\n ) {\n if (options.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${title}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row radio\">\n ${options.map(\n (option) => html`\n <obc-radio\n .name=${title}\n .label=${option.name}\n .checked=${option.name === selectedOption}\n @change=${() => handleOptionClick(option.name)}\n ></obc-radio>\n `\n )}\n </div>\n </div>\n `;\n }\n\n // --- Small screen methods ---\n\n private renderSmallScreen() {\n const activeTab = this.effectiveSubMenu;\n let content: TemplateResult | symbol = nothing;\n switch (activeTab) {\n case SystemSubMenu.wifi:\n content = this.renderSmallScreenWifi();\n break;\n case SystemSubMenu.audio:\n content = this.renderSmallScreenAudio();\n break;\n case SystemSubMenu.microphone:\n content = this.renderSmallScreenMicrophone();\n break;\n case SystemSubMenu.battery:\n content = this.renderSmallScreenBattery();\n break;\n }\n return html`<div class=\"wrapper small-screen\">\n <div class=\"small-screen-content\">${content}</div>\n ${this.renderMenuBar(activeTab)}\n </div>`;\n }\n\n private handleSmallScreenWifiToggle(event: InputEvent) {\n const enabled = (event.target as HTMLInputElement).checked;\n this.dispatchEvent(new CustomEvent('wifi-click', {detail: {enabled}}));\n }\n\n private renderSmallScreenWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Wi-Fi')}</span>\n <obc-toggle-switch\n .checked=${this.wifiState.enabled}\n @input=${this.handleSmallScreenWifiToggle}\n ></obc-toggle-switch>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${this.wifiState.networks?.map(\n (network) => html`\n <obc-navigation-item\n .label=${network.name}\n .checked=${network.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(network.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenAudio() {\n if (!this.audioState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Audio')}</span>\n </div>\n <div class=\"small-screen-controls-row\">\n ${this.renderAudioControl()}\n <div class=\"small-screen-slider-container\">\n <obc-slider\n class=\"small-screen-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n <span class=\"small-screen-volume-label\"\n >${this.audioState.volume}%</span\n >\n </div>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.audioState.outputs ?? []).map(\n (output) => html`\n <obc-radio\n name=\"output\"\n .label=${output.name}\n .checked=${output.name === this.audioState?.selectedOutput}\n @change=${() => this.handleAudioOutputClick(output.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Microphone')}</span>\n </div>\n <div\n class=\"small-screen-controls-row ${\n isNoMuteButton ? 'no-mute-button' : ''\n }\"\n >\n ${this.renderMicrophoneControl()}\n <obc-audio-output\n class=\"small-screen-audio-output\"\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n ${\n this.microphoneState.pushToTalk !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.microphoneState.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.microphoneState.inputs ?? []).map(\n (input) => html`\n <obc-radio\n name=\"input\"\n .label=${input.name}\n .checked=${input.name === this.microphoneState?.selectedInput}\n @change=${() => this.handleMicrophoneInputClick(input.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Battery')}</span>\n <div class=\"small-screen-battery-info\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${\n this.batteryState.poweredNotCharging ?? false\n }\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <span class=\"small-screen-battery-level\"\n >${this.batteryState.level}%</span\n >\n </div>\n </div>\n ${\n this.batteryState.hasUsageButton\n ? html`<div class=\"small-screen-button-row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>`\n : nothing\n }\n ${\n this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.batteryState.modes ?? []).map(\n (mode) => html`\n <obc-radio\n name=\"mode\"\n .label=${mode.name}\n .checked=${mode.name === this.batteryState?.selectedMode}\n @change=${() => this.handleBatteryModeClick(mode.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderMenuBarButton(\n subMenu: SystemSubMenu,\n activeTab: SystemSubMenu,\n label: string,\n icon: TemplateResult\n ) {\n return html`<button\n class=${activeTab === subMenu ? 'active' : ''}\n title=${label}\n @click=${() => this.handleToSubMenuClick(subMenu)}\n >\n ${icon}\n </button>`;\n }\n\n private renderMenuBar(activeTab: SystemSubMenu) {\n return html`\n <div class=\"menu-bar\">\n ${\n this.wifiState\n ? this.renderMenuBarButton(\n SystemSubMenu.wifi,\n activeTab,\n msg('Wi-Fi'),\n html`<obi-wifi2-google class=\"tab-icon\"></obi-wifi2-google>`\n )\n : nothing\n }\n ${\n this.audioState\n ? this.renderMenuBarButton(\n SystemSubMenu.audio,\n activeTab,\n msg('Audio'),\n html`<obi-sound class=\"tab-icon\"></obi-sound>`\n )\n : nothing\n }\n ${\n this.microphoneState\n ? this.renderMenuBarButton(\n SystemSubMenu.microphone,\n activeTab,\n msg('Microphone'),\n html`<obi-com-microphone class=\"tab-icon\"></obi-com-microphone>`\n )\n : nothing\n }\n ${\n this.batteryState\n ? this.renderMenuBarButton(\n SystemSubMenu.battery,\n activeTab,\n msg('Battery'),\n html`<obc-battery-icon\n class=\"tab-icon\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${\n this.batteryState.poweredNotCharging ?? false\n }\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>`\n )\n : nothing\n }\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n"],"names":["SystemSubMenu","SystemMenuControlMode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"system-menu.js","sources":["../../../src/components/system-menu/system-menu.ts"],"sourcesContent":["import {LitElement, TemplateResult, html, nothing, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './system-menu.css?inline';\nimport {property} from 'lit/decorators.js';\nimport {localized, msg} from '@lit/localize';\nimport '../../icons/icon-chevron-right-google.js';\nimport '../../icons/icon-wifi2-google.js';\nimport '../icon-check-button/icon-check-button.js';\nimport '../../icons/icon-wifi2-off-google.js';\nimport '../../icons/icon-sound-muted.js';\nimport '../../icons/icon-sound.js';\nimport '../../icons/icon-com-mic-muted-google.js';\nimport '../../icons/icon-com-microphone.js';\nimport '../slider/slider.js';\nimport {ObcSliderValueEvent} from '../slider/slider.js';\nimport '../audio-output/audio-output.js';\nimport '../battery-icon/battery-icon.js';\nimport '../../icons/icon-settings-iec.js';\nimport '../icon-button/icon-button.js';\nimport {IconButtonVariant} from '../icon-button/icon-button.js';\nimport '../../icons/icon-chevron-left-google.js';\nimport '../radio/radio.js';\nimport '../toggle-switch/toggle-switch.js';\nimport '../navigation-item/navigation-item.js';\nimport '../accordion-item/accordion-item.js';\nimport '../button/button.js';\nimport '../scrollbar/scrollbar.js';\nimport {PopoverController} from '../../internal/popover-controller.js';\n\nexport interface WifiState {\n enabled: boolean;\n connected: boolean;\n networkName?: string;\n strength: number; // 0-100, 0 is no signal, 100 is full signal\n status: string; // Example: \"Connected, Secure\"\n networks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n otherNetworks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n}\n\nexport interface AudioState {\n muted: boolean;\n volume: number; // 0-100, 0 is muted, 100 is full volume\n outputs?: {\n name: string;\n }[];\n selectedOutput?: string;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface MicrophoneState {\n muted: boolean;\n currentLevel: number; // 0-100, 0 is no sound, 100 is full sound\n inputs?: {\n name: string;\n }[];\n selectedInput?: string;\n pushToTalk?: boolean;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface BatteryState {\n level: number; // percent, 0 empty to 100 full\n charging: boolean;\n poweredNotCharging?: boolean;\n notification?: boolean;\n batterySavingMode?: boolean; // undefined where the platform cannot report it\n hasUsageButton: boolean;\n modes?: {\n name: string;\n }[];\n selectedMode?: string;\n}\n\nexport enum SystemSubMenu {\n main = 'main',\n wifi = 'wifi',\n audio = 'audio',\n microphone = 'microphone',\n battery = 'battery',\n}\n\nexport enum SystemMenuControlMode {\n muteButton = 'mute-button',\n iconOnly = 'icon-only',\n hidden = 'hidden',\n}\n\nexport type VolumeChangeEvent = CustomEvent<number>;\n\n/**\n * @property softDismiss - Let the browser close this menu on its own: on a click outside it, on `Escape`, or when another menu opens. Leave it off to keep showing and hiding the menu yourself.\n * @property open - Whether the menu is showing.\n * @availableWhen open softDismiss==true\n * @fires wifi-click - When the Wi-Fi button is clicked\n * @fires audio-click - When the Audio button is clicked\n * @fires {VolumeChangeEvent} audio-volume-change - When the Audio volume is changed\n * @fires microphone-click - When the Microphone button is clicked\n * @fires push-to-talk-change - When the push-to-talk toggle is changed\n * @fires battery-usage-click - When the Battery usage button is clicked\n * @fires battery-saving-mode-change - When the Battery saving mode is changed\n * @fires battery-mode-change - When the Battery mode is changed\n * @fires wifi-network-change - When the Wi-Fi network is changed\n * @fires audio-output-change - When the Audio output is changed\n * @fires microphone-input-change - When the Microphone input is changed\n * @fires settings-click - When the Settings button is clicked\n * @fires to-sub-menu-click - When the sub menu is clicked\n * @fires wifi-options-click - When the Wi-Fi options are clicked\n * @fires wifi-disconnect-click - When the Wi-Fi disconnect is clicked\n * @slot battery-status - Custom battery status text (falls back to the built-in charging/battery label).\n * @fires {CustomEvent<void>} close - Fired when the menu closed on its own, from a click outside, `Escape`, or another menu opening. `open` is already `false` by the time it arrives.\n * @stable\n */\n@customElement('obc-system-menu')\n@localized()\nexport class ObcSystemMenu extends LitElement {\n @property({type: Boolean}) softDismiss = false;\n\n @property({type: Boolean}) open = false;\n\n protected readonly softDismissController = new PopoverController(this);\n\n @property({attribute: false}) wifiState: WifiState | undefined;\n @property({attribute: false}) audioState: AudioState | undefined;\n @property({attribute: false}) microphoneState: MicrophoneState | undefined;\n @property({attribute: false}) batteryState: BatteryState | undefined;\n @property({type: Boolean}) condensed: boolean = false;\n @property({type: Boolean}) showSettingsButton: boolean = false;\n @property({type: String}) activeSubMenu: SystemSubMenu = SystemSubMenu.main;\n @property({type: Boolean}) externalControl: boolean = false;\n @property({type: Boolean}) smallScreen: boolean = false;\n private get audioControlMode(): SystemMenuControlMode {\n return this.audioState?.controlMode ?? SystemMenuControlMode.muteButton;\n }\n\n private get microphoneControlMode(): SystemMenuControlMode {\n return (\n this.microphoneState?.controlMode ?? SystemMenuControlMode.muteButton\n );\n }\n\n private renderAudioControl() {\n if (!this.audioState) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${this.audioState.muted ? 'is-muted' : ''}\"\n role=\"img\"\n aria-label=${\n this.audioState.muted ? msg('Audio muted') : msg('Audio on')\n }\n >\n ${\n this.audioState.muted\n ? html`<obi-sound-muted></obi-sound-muted>`\n : html`<obi-sound></obi-sound>`\n }\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.audioState.muted}\n @icon-check-button-click=${this.handleAudioClick}\n >\n ${\n this.audioState.muted\n ? html`<obi-sound-muted slot=\"icon\"></obi-sound-muted>`\n : html`<obi-sound slot=\"icon\"></obi-sound>`\n }\n </obc-icon-check-button>`;\n }\n\n private renderMicrophoneControl(options?: {externalControl?: boolean}) {\n if (!this.microphoneState) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${\n this.microphoneState.muted ? 'is-muted' : ''\n }\"\n role=\"img\"\n aria-label=${\n this.microphoneState.muted\n ? msg('Microphone muted')\n : msg('Microphone on')\n }\n >\n ${\n this.microphoneState.muted\n ? html`<obi-com-mic-muted-google></obi-com-mic-muted-google>`\n : html`<obi-com-microphone></obi-com-microphone>`\n }\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.microphoneState.muted}\n ?externalControl=${options?.externalControl ?? false}\n @icon-check-button-click=${this.handleMicrophoneClick}\n >\n ${\n this.microphoneState.muted\n ? html`<obi-com-mic-muted-google\n slot=\"icon\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone slot=\"icon\"></obi-com-microphone>`\n }\n </obc-icon-check-button>`;\n }\n\n private get effectiveSubMenu(): SystemSubMenu {\n if (this.smallScreen && this.activeSubMenu === SystemSubMenu.main) {\n return SystemSubMenu.wifi;\n }\n return this.activeSubMenu;\n }\n\n override render() {\n if (this.smallScreen) {\n return this.renderSmallScreen();\n }\n\n let content: (TemplateResult | symbol)[];\n switch (this.activeSubMenu) {\n case SystemSubMenu.main:\n content = [\n this.renderWifi(),\n this.renderAudio(),\n this.renderMicrophone(),\n this.renderBattery(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.wifi:\n content = [\n this.renderSubMenuTitle(msg('Wi-Fi')),\n this.renderWifiSubMenuHeader(),\n this.renderWifMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.audio:\n content = [\n this.renderSubMenuTitle(msg('Audio')),\n this.renderAudioSubMenuHeader(),\n this.renderAudioSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.microphone:\n content = [\n this.renderSubMenuTitle(msg('Microphone')),\n this.renderMicrophoneSubMenuHeader(),\n this.renderMicrophoneSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.battery:\n content = [\n this.renderSubMenuTitle(msg('Battery')),\n this.renderBatterySubMenuHeader(),\n this.renderBatterySubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n }\n return html`<div class=\"wrapper ${this.condensed ? 'condensed' : ''}\">\n ${content}\n </div> `;\n }\n\n private dispatchClickEvent(eventName: string) {\n this.dispatchEvent(new CustomEvent(eventName));\n }\n\n private handleWifiClick(event: CustomEvent<{checked: boolean}>) {\n event.stopPropagation();\n this.wifiState!.enabled = event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('wifi-click', {detail: {enabled: event.detail.checked}})\n );\n }\n\n private handleAudioClick(event: CustomEvent) {\n event.stopPropagation();\n this.audioState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('audio-click', {detail: {muted: !event.detail.checked}})\n );\n }\n\n private handleAudioVolumeChange(event: ObcSliderValueEvent) {\n this.dispatchEvent(\n new CustomEvent('audio-volume-change', {detail: {volume: event.detail}})\n );\n }\n\n private handleToSubMenuClick(subMenu: SystemSubMenu) {\n if (!this.externalControl) {\n this.activeSubMenu = subMenu;\n }\n this.dispatchClickEvent('to-sub-menu-click');\n }\n\n private renderWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n const showMoreButton =\n this.wifiState.networks && this.wifiState.networks.length > 0;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <div class=\"title\">${msg('Wi-Fi')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Wi-Fi')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div class=\"action-container\">\n <obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!!this.wifiState.enabled}\n @icon-check-button-click=${this.handleWifiClick}\n >\n ${\n this.wifiState?.enabled\n ? html`<obi-wifi2-google slot=\"icon\"></obi-wifi2-google>`\n : html`<obi-wifi2-off-google\n slot=\"icon\"\n ></obi-wifi2-off-google>`\n }\n </obc-icon-check-button>\n <div\n class=\"content-item-value ${\n this.wifiState.enabled ? 'enabled' : 'disabled'\n }\"\n >\n ${this.wifiState?.networkName}\n </div>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Wi-Fi settings')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderAudio() {\n if (!this.audioState) {\n return nothing;\n }\n const showMoreButton =\n this.audioState.outputs && this.audioState.outputs.length > 0;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <div class=\"title\">${msg('Audio')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Audio')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${\n this.audioControlMode === SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''\n }\"\n >\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Audio settings')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const hasInputs =\n this.microphoneState.inputs && this.microphoneState.inputs.length > 0;\n const hasPushToTalk = this.microphoneState.pushToTalk !== undefined;\n const showMoreButton = hasInputs || hasPushToTalk;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <div class=\"title\">${msg('Microphone')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Microphone')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${\n this.microphoneControlMode === SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''\n }\"\n >\n ${this.renderMicrophoneControl()}\n <div class=\"content-item-value\">\n <obc-audio-output\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Microphone settings')}\n @click=${() =>\n this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n const hasModes =\n this.batteryState.modes && this.batteryState.modes.length > 0;\n const hasUsageButton = this.batteryState.hasUsageButton;\n const hasBatterySavingMode =\n this.batteryState.batterySavingMode !== undefined;\n const showMoreButton = hasModes || hasUsageButton || hasBatterySavingMode;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <div class=\"title\">${msg('Battery')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Battery')}</div>\n </div>`;\n const batteryStatus = this.batteryState.charging\n ? msg('Charging')\n : this.batteryState.poweredNotCharging\n ? msg('Powered & not charging')\n : msg('On battery');\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container battery-container\">\n <div class=\"action-container\">\n <div class=\"battery\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${\n this.batteryState.poweredNotCharging ?? false\n }\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"percentage\">${this.batteryState.level}%</div>\n <div class=\"status\">\n <slot name=\"battery-status\">${batteryStatus}</slot>\n </div>\n </div>\n </div>\n ${\n this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n aria-label=${msg('Battery settings')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderSettingsButton() {\n if (!this.showSettingsButton) {\n return nothing;\n }\n return html`<div class=\"group\">\n <button\n class=\"title-container settings\"\n @click=${() => this.dispatchClickEvent('settings-click')}\n >\n <div class=\"icon-container\">\n <obi-settings-iec class=\"icon\"></obi-settings-iec>\n </div>\n <div class=\"title\">${msg('Settings')}</div>\n </button>\n </div>`;\n }\n\n private renderSubMenuTitle(title: string) {\n return html`\n <div class=\"title-container sub-menu-title\">\n <obc-icon-button\n .variant=${IconButtonVariant.normal}\n aria-label=${msg('Back')}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.main)}\n >\n <obi-chevron-left-google></obi-chevron-left-google>\n </obc-icon-button>\n <div class=\"title\">${title}</div>\n </div>\n `;\n }\n\n private renderWifiSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row wifi-container\">\n <obi-wifi2-google class=\"icon large\"></obi-wifi2-google>\n <div class=\"title wifi-name\">${this.wifiState?.networkName}</div>\n <div class=\"wifi-status\">${this.wifiState?.status}</div>\n </div>\n <div class=\"row\">\n <obc-button\n @click=${() => this.dispatchClickEvent('wifi-options-click')}\n fullWidth\n >${msg('Options')}</obc-button\n >\n ${\n this.wifiState?.connected\n ? html`<obc-button\n @click=${() => this.dispatchClickEvent('wifi-disconnect-click')}\n fullWidth\n >${msg('Disconnect')}</obc-button\n >`\n : nothing\n }\n </div>\n </div>`;\n }\n\n private renderAudioSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${\n this.audioState?.muted\n ? html`<obi-sound-muted class=\"icon large off\"></obi-sound-muted>`\n : html`<obi-sound class=\"icon large\"></obi-sound>`\n }\n <div class=\"title\">\n ${this.audioState?.volume}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState?.volume ?? 0}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n </div>`;\n }\n\n private handleMicrophoneClick(event: CustomEvent<{checked: boolean}>) {\n event.stopPropagation();\n this.microphoneState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('microphone-click', {\n detail: {muted: !event.detail.checked},\n })\n );\n }\n\n private handlePushToTalkClick(event: InputEvent) {\n this.dispatchEvent(\n new CustomEvent('push-to-talk-change', {\n detail: {pushToTalk: (event.target as HTMLInputElement).checked},\n })\n );\n }\n\n private handleBatterySavingModeClick(event: CustomEvent<{checked: boolean}>) {\n this.dispatchEvent(\n new CustomEvent('battery-saving-mode-change', {\n detail: {batterySavingMode: event.detail.checked},\n })\n );\n }\n\n private renderMicrophoneSubMenuHeader() {\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${\n this.microphoneState?.muted\n ? html`<obi-com-mic-muted-google\n class=\"icon large\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone class=\"icon large\"></obi-com-microphone>`\n }\n <div class=\"title\">\n ${this.microphoneState?.currentLevel}\n <div class=\"unit\">dB</div>\n </div>\n </div>\n <div class=\"row ${isNoMuteButton ? 'no-mute-button' : ''}\">\n ${this.renderMicrophoneControl({externalControl: true})}\n <obc-audio-output\n .volume=${((this.microphoneState?.currentLevel ?? 0) / 100) * 8}\n ></obc-audio-output>\n </div>\n ${\n this.microphoneState?.pushToTalk !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.microphoneState?.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>`;\n }\n\n private handleBatteryUsageClick() {\n this.dispatchEvent(\n new CustomEvent('battery-usage-click', {detail: {usage: true}})\n );\n }\n\n private renderBatterySubMenuHeader() {\n if (!this.batteryState) {\n return nothing;\n }\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n <obc-battery-icon\n class=\"icon large\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ?? false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"title\">\n ${this.batteryState.level}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>\n ${\n this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>`;\n }\n\n private handleWifiNetworkClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('wifi-network-change', {detail: {network: name}})\n );\n }\n\n private renderWifMenuOptions() {\n if (this.wifiState?.networks?.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${msg('Wi-Fi')}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row navigation-items\">\n ${this.wifiState?.networks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n <obc-accordion-item title=${msg('Other networks')}>\n <div slot=\"expanded-content\">\n ${this.wifiState?.otherNetworks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-accordion-item>\n </div>\n </div>\n `;\n }\n\n private handleAudioOutputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('audio-output-change', {detail: {output: name}})\n );\n }\n\n private handleMicrophoneInputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('microphone-input-change', {detail: {input: name}})\n );\n }\n\n private handleBatteryModeClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('battery-mode-change', {detail: {mode: name}})\n );\n }\n\n private renderAudioSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Output'),\n this.audioState?.outputs ?? [],\n this.audioState?.selectedOutput ?? '',\n (name: string) => this.handleAudioOutputClick(name)\n );\n }\n\n private renderMicrophoneSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Input'),\n this.microphoneState?.inputs ?? [],\n this.microphoneState?.selectedInput ?? '',\n (name: string) => this.handleMicrophoneInputClick(name)\n );\n }\n\n private renderBatterySubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Mode'),\n this.batteryState?.modes ?? [],\n this.batteryState?.selectedMode ?? '',\n (name: string) => this.handleBatteryModeClick(name)\n );\n }\n\n private renderSubMenuOptions(\n title: string,\n options: {name: string}[],\n selectedOption: string,\n handleOptionClick: (name: string) => void\n ) {\n if (options.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${title}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row radio\">\n ${options.map(\n (option) => html`\n <obc-radio\n .name=${title}\n .label=${option.name}\n .checked=${option.name === selectedOption}\n @change=${() => handleOptionClick(option.name)}\n ></obc-radio>\n `\n )}\n </div>\n </div>\n `;\n }\n\n // --- Small screen methods ---\n\n private renderSmallScreen() {\n const activeTab = this.effectiveSubMenu;\n let content: TemplateResult | symbol = nothing;\n switch (activeTab) {\n case SystemSubMenu.wifi:\n content = this.renderSmallScreenWifi();\n break;\n case SystemSubMenu.audio:\n content = this.renderSmallScreenAudio();\n break;\n case SystemSubMenu.microphone:\n content = this.renderSmallScreenMicrophone();\n break;\n case SystemSubMenu.battery:\n content = this.renderSmallScreenBattery();\n break;\n }\n return html`<div class=\"wrapper small-screen\">\n <div class=\"small-screen-content\">${content}</div>\n ${this.renderMenuBar(activeTab)}\n </div>`;\n }\n\n private handleSmallScreenWifiToggle(event: InputEvent) {\n const enabled = (event.target as HTMLInputElement).checked;\n this.dispatchEvent(new CustomEvent('wifi-click', {detail: {enabled}}));\n }\n\n private renderSmallScreenWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Wi-Fi')}</span>\n <obc-toggle-switch\n .checked=${this.wifiState.enabled}\n @input=${this.handleSmallScreenWifiToggle}\n ></obc-toggle-switch>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${this.wifiState.networks?.map(\n (network) => html`\n <obc-navigation-item\n .label=${network.name}\n .checked=${network.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(network.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenAudio() {\n if (!this.audioState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Audio')}</span>\n </div>\n <div class=\"small-screen-controls-row\">\n ${this.renderAudioControl()}\n <div class=\"small-screen-slider-container\">\n <obc-slider\n class=\"small-screen-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n <span class=\"small-screen-volume-label\"\n >${this.audioState.volume}%</span\n >\n </div>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.audioState.outputs ?? []).map(\n (output) => html`\n <obc-radio\n name=\"output\"\n .label=${output.name}\n .checked=${output.name === this.audioState?.selectedOutput}\n @change=${() => this.handleAudioOutputClick(output.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Microphone')}</span>\n </div>\n <div\n class=\"small-screen-controls-row ${\n isNoMuteButton ? 'no-mute-button' : ''\n }\"\n >\n ${this.renderMicrophoneControl()}\n <obc-audio-output\n class=\"small-screen-audio-output\"\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n ${\n this.microphoneState.pushToTalk !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.microphoneState.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.microphoneState.inputs ?? []).map(\n (input) => html`\n <obc-radio\n name=\"input\"\n .label=${input.name}\n .checked=${input.name === this.microphoneState?.selectedInput}\n @change=${() => this.handleMicrophoneInputClick(input.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Battery')}</span>\n <div class=\"small-screen-battery-info\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${\n this.batteryState.poweredNotCharging ?? false\n }\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <span class=\"small-screen-battery-level\"\n >${this.batteryState.level}%</span\n >\n </div>\n </div>\n ${\n this.batteryState.hasUsageButton\n ? html`<div class=\"small-screen-button-row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>`\n : nothing\n }\n ${\n this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing\n }\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.batteryState.modes ?? []).map(\n (mode) => html`\n <obc-radio\n name=\"mode\"\n .label=${mode.name}\n .checked=${mode.name === this.batteryState?.selectedMode}\n @change=${() => this.handleBatteryModeClick(mode.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderMenuBarButton(\n subMenu: SystemSubMenu,\n activeTab: SystemSubMenu,\n label: string,\n icon: TemplateResult\n ) {\n return html`<button\n class=${activeTab === subMenu ? 'active' : ''}\n title=${label}\n @click=${() => this.handleToSubMenuClick(subMenu)}\n >\n ${icon}\n </button>`;\n }\n\n private renderMenuBar(activeTab: SystemSubMenu) {\n return html`\n <div class=\"menu-bar\">\n ${\n this.wifiState\n ? this.renderMenuBarButton(\n SystemSubMenu.wifi,\n activeTab,\n msg('Wi-Fi'),\n html`<obi-wifi2-google class=\"tab-icon\"></obi-wifi2-google>`\n )\n : nothing\n }\n ${\n this.audioState\n ? this.renderMenuBarButton(\n SystemSubMenu.audio,\n activeTab,\n msg('Audio'),\n html`<obi-sound class=\"tab-icon\"></obi-sound>`\n )\n : nothing\n }\n ${\n this.microphoneState\n ? this.renderMenuBarButton(\n SystemSubMenu.microphone,\n activeTab,\n msg('Microphone'),\n html`<obi-com-microphone class=\"tab-icon\"></obi-com-microphone>`\n )\n : nothing\n }\n ${\n this.batteryState\n ? this.renderMenuBarButton(\n SystemSubMenu.battery,\n activeTab,\n msg('Battery'),\n html`<obc-battery-icon\n class=\"tab-icon\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${\n this.batteryState.poweredNotCharging ?? false\n }\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>`\n )\n : nothing\n }\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n"],"names":["SystemSubMenu","SystemMenuControlMode"],"mappings":"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"}
|
|
@@ -258,14 +258,21 @@ export declare class ObcTopBar extends LitElement {
|
|
|
258
258
|
private isLeftButtonDown;
|
|
259
259
|
private isEmergencyBrightness;
|
|
260
260
|
private leftButtonDown;
|
|
261
|
+
/**
|
|
262
|
+
* Ends a hold. The event a short press stands for is dispatched from the
|
|
263
|
+
* `click` that follows, not here: a menu opened while the pointer is still
|
|
264
|
+
* going up gets closed again by that same click in current browsers, which
|
|
265
|
+
* see it as a click outside a popover that has just opened.
|
|
266
|
+
*/
|
|
261
267
|
private leftButtonUp;
|
|
262
268
|
/**
|
|
263
|
-
*
|
|
269
|
+
* Sends the event a press of the hold button stands for.
|
|
264
270
|
*
|
|
265
271
|
* Enter, Space and a screen reader's activate command arrive as a `click`
|
|
266
|
-
* with `detail` 0 and
|
|
267
|
-
*
|
|
268
|
-
*
|
|
272
|
+
* with `detail` 0 and no pointer press before it, so they get the event
|
|
273
|
+
* directly. A pointer click arrives with `detail` 1 after the press: the
|
|
274
|
+
* event stored on the way down is sent now, unless the press ran long
|
|
275
|
+
* enough to start emergency brightness, which used it up.
|
|
269
276
|
*/
|
|
270
277
|
private leftButtonActivate;
|
|
271
278
|
private leftButtonLeave;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"top-bar.d.ts","sourceRoot":"","sources":["../../../src/components/top-bar/top-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAKhD,OAAO,+BAA+B,CAAC;AACvC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,6BAA6B,CAAC;AACrC,OAAO,8BAA8B,CAAC;AACtC,OAAO,0BAA0B,CAAC;AAClC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,uCAAuC,CAAC;AAC/C,OAAO,wCAAwC,CAAC;AAChD,OAAO,2CAA2C,CAAC;AACnD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,0CAA0C,CAAC;AAClD,OAAO,0BAA0B,CAAC;AAClC,OAAO,EAEL,cAAc,EACf,MAAM,6BAA6B,CAAC;AAGrC,oBAAY,uBAAuB;IACjC,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgJG;AACH,qBACa,SAAU,SAAQ,UAAU;IACb,QAAQ,SAAS;IAEjB,QAAQ,SAAU;IAElB,cAAc,0BAAgC;IAGxE,mBAAmB,UAAS;IAG5B,sBAAsB,UAAS;IAG/B,mBAAmB,UAAS;IAG5B,uBAAuB,UAAS;IAGhC,mBAAmB,UAAS;IAG5B,kBAAkB,UAAS;IAEA,IAAI,UAAS;IAEb,cAAc,UAAS;IAEvB,cAAc,UAAS;IAGlD,iBAAiB,UAAS;IAEC,cAAc,UAAS;IAEvB,SAAS,UAAS;IAElB,QAAQ,UAAS;IAEjB,WAAW,UAAS;IAEpB,QAAQ,UAAS;IAG5C,qBAAqB,SAAO;IAG5B,yBAAyB,SAAO;IAGhC,oBAAoB,SAAO;IAG3B,sBAAsB,SAAO;IAG7B,mBAAmB,SAAO;IAEC,QAAQ,UAAS;IAG5C,eAAe,EAAE,cAAc,EAAE,CAAM;IAEvC,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"top-bar.d.ts","sourceRoot":"","sources":["../../../src/components/top-bar/top-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAKhD,OAAO,+BAA+B,CAAC;AACvC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,6BAA6B,CAAC;AACrC,OAAO,8BAA8B,CAAC;AACtC,OAAO,0BAA0B,CAAC;AAClC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,uCAAuC,CAAC;AAC/C,OAAO,wCAAwC,CAAC;AAChD,OAAO,2CAA2C,CAAC;AACnD,OAAO,kCAAkC,CAAC;AAC1C,OAAO,0CAA0C,CAAC;AAClD,OAAO,0BAA0B,CAAC;AAClC,OAAO,EAEL,cAAc,EACf,MAAM,6BAA6B,CAAC;AAGrC,oBAAY,uBAAuB;IACjC,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgJG;AACH,qBACa,SAAU,SAAQ,UAAU;IACb,QAAQ,SAAS;IAEjB,QAAQ,SAAU;IAElB,cAAc,0BAAgC;IAGxE,mBAAmB,UAAS;IAG5B,sBAAsB,UAAS;IAG/B,mBAAmB,UAAS;IAG5B,uBAAuB,UAAS;IAGhC,mBAAmB,UAAS;IAG5B,kBAAkB,UAAS;IAEA,IAAI,UAAS;IAEb,cAAc,UAAS;IAEvB,cAAc,UAAS;IAGlD,iBAAiB,UAAS;IAEC,cAAc,UAAS;IAEvB,SAAS,UAAS;IAElB,QAAQ,UAAS;IAEjB,WAAW,UAAS;IAEpB,QAAQ,UAAS;IAG5C,qBAAqB,SAAO;IAG5B,yBAAyB,SAAO;IAGhC,oBAAoB,SAAO;IAG3B,sBAAsB,SAAO;IAG7B,mBAAmB,SAAO;IAEC,QAAQ,UAAS;IAG5C,eAAe,EAAE,cAAc,EAAE,CAAM;IAEvC,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe,CAA4B;IACnD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,cAAc;IAUtB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAYpB;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,eAAe;IAad,MAAM;IAyMf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,SAAS,CAAC;KAC1B;CACF"}
|