@matter-server/dashboard 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/esm/components/dialog-box/dialog-box.d.ts.map +1 -1
  2. package/dist/esm/components/dialog-box/dialog-box.js.map +1 -1
  3. package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -1
  4. package/dist/esm/components/dialogs/binding/node-binding-dialog.js +4 -4
  5. package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
  6. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts.map +1 -1
  7. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js +7 -1
  8. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js.map +1 -1
  9. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts.map +1 -1
  10. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js +3 -1
  11. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js.map +1 -1
  12. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts.map +1 -1
  13. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js +6 -2
  14. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js.map +1 -1
  15. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts.map +1 -1
  16. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +3 -1
  17. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +1 -1
  18. package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts.map +1 -1
  19. package/dist/esm/components/dialogs/settings/log-level-dialog.js +3 -1
  20. package/dist/esm/components/dialogs/settings/log-level-dialog.js.map +1 -1
  21. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.d.ts.map +1 -1
  22. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js +3 -1
  23. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js.map +1 -1
  24. package/dist/esm/pages/components/footer.d.ts.map +1 -1
  25. package/dist/esm/pages/components/footer.js +1 -3
  26. package/dist/esm/pages/components/footer.js.map +1 -1
  27. package/dist/esm/pages/components/header.d.ts.map +1 -1
  28. package/dist/esm/pages/components/header.js.map +1 -1
  29. package/dist/esm/pages/components/node-details.d.ts.map +1 -1
  30. package/dist/esm/pages/components/node-details.js +6 -4
  31. package/dist/esm/pages/components/node-details.js.map +1 -1
  32. package/dist/esm/pages/components/server-details.d.ts.map +1 -1
  33. package/dist/esm/pages/components/server-details.js +3 -1
  34. package/dist/esm/pages/components/server-details.js.map +1 -1
  35. package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
  36. package/dist/esm/pages/matter-cluster-view.js +1 -1
  37. package/dist/esm/pages/matter-cluster-view.js.map +1 -1
  38. package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
  39. package/dist/esm/pages/matter-node-view.js.map +1 -1
  40. package/dist/esm/pages/matter-server-view.d.ts.map +1 -1
  41. package/dist/esm/pages/matter-server-view.js +3 -1
  42. package/dist/esm/pages/matter-server-view.js.map +1 -1
  43. package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
  44. package/dist/esm/pages/network/device-panel.js.map +1 -1
  45. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  46. package/dist/esm/pages/network/network-details.js +9 -3
  47. package/dist/esm/pages/network/network-details.js.map +1 -1
  48. package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
  49. package/dist/esm/pages/network/thread-graph.js +3 -1
  50. package/dist/esm/pages/network/thread-graph.js.map +1 -1
  51. package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -1
  52. package/dist/esm/pages/network/update-connections-dialog.js +6 -2
  53. package/dist/esm/pages/network/update-connections-dialog.js.map +1 -1
  54. package/dist/esm/pages/network/wifi-graph.d.ts.map +1 -1
  55. package/dist/esm/pages/network/wifi-graph.js +3 -1
  56. package/dist/esm/pages/network/wifi-graph.js.map +1 -1
  57. package/dist/web/js/{commission-node-dialog-DOtOjWT7.js → commission-node-dialog-h9QTg0uL.js} +11 -5
  58. package/dist/web/js/{commission-node-existing-B0e6xZeB.js → commission-node-existing-TnFjP70Q.js} +5 -3
  59. package/dist/web/js/{commission-node-thread-CetoXqfb.js → commission-node-thread-DumLBlyw.js} +8 -4
  60. package/dist/web/js/{commission-node-wifi-B69SoNfD.js → commission-node-wifi-CbT2wQDc.js} +5 -3
  61. package/dist/web/js/{dialog-box-RdFIn1hd.js → dialog-box-DVtkVga3.js} +1 -1
  62. package/dist/web/js/{fire_event-DTKKR48v.js → fire_event-D_gZK7cY.js} +1 -1
  63. package/dist/web/js/{log-level-dialog-BheZgiD2.js → log-level-dialog-ChcYXgfz.js} +4 -2
  64. package/dist/web/js/main.js +1 -1
  65. package/dist/web/js/{matter-dashboard-app-Dq3JvQBw.js → matter-dashboard-app-Dpr9EPlS.js} +70 -50
  66. package/dist/web/js/{node-binding-dialog-CtmtVf1D.js → node-binding-dialog-BI9spkUK.js} +115 -115
  67. package/package.json +3 -3
  68. package/src/components/dialog-box/dialog-box.ts +15 -9
  69. package/src/components/dialogs/binding/node-binding-dialog.ts +6 -9
  70. package/src/components/dialogs/commission-node-dialog/commission-node-dialog.ts +15 -7
  71. package/src/components/dialogs/commission-node-dialog/commission-node-existing.ts +7 -1
  72. package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +14 -2
  73. package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +12 -4
  74. package/src/components/dialogs/settings/log-level-dialog.ts +13 -7
  75. package/src/pages/cluster-commands/clusters/basic-information-commands.ts +7 -3
  76. package/src/pages/components/footer.ts +1 -3
  77. package/src/pages/components/header.ts +25 -15
  78. package/src/pages/components/node-details.ts +34 -21
  79. package/src/pages/components/server-details.ts +7 -1
  80. package/src/pages/matter-cluster-view.ts +10 -6
  81. package/src/pages/matter-node-view.ts +5 -3
  82. package/src/pages/matter-server-view.ts +7 -1
  83. package/src/pages/network/device-panel.ts +5 -3
  84. package/src/pages/network/network-details.ts +134 -82
  85. package/src/pages/network/thread-graph.ts +3 -1
  86. package/src/pages/network/update-connections-dialog.ts +31 -17
  87. package/src/pages/network/wifi-graph.ts +3 -1
@@ -40,16 +40,24 @@ export class CommissionNodeWifi extends LitElement {
40
40
  <br />
41
41
  <md-outlined-button @click=${handleAsync(() => this._setWifiCredentials())} .disabled="${this._loading}"
42
42
  >Set WiFi Credentials</md-outlined-button
43
- >${this._loading
44
- ? html`<md-circular-progress indeterminate .visible="${this._loading}"></md-circular-progress>`
45
- : nothing}`;
43
+ >${
44
+ this._loading
45
+ ? html`<md-circular-progress indeterminate .visible="${this._loading}"></md-circular-progress>`
46
+ : nothing
47
+ }`;
46
48
  }
47
49
  return html`<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
48
50
  <br />
49
51
  <br />
50
52
  <md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
51
53
  >Commission</md-outlined-button
52
- >${this._loading ? html`<md-circular-progress indeterminate></md-circular-progress>` : nothing}`;
54
+ >${
55
+ this._loading
56
+ ? html`
57
+ <md-circular-progress indeterminate></md-circular-progress>
58
+ `
59
+ : nothing
60
+ }`;
53
61
  }
54
62
 
55
63
  private async _setWifiCredentials() {
@@ -92,9 +92,12 @@ export class LogLevelDialog extends LitElement {
92
92
  <md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
93
93
  <div slot="headline">Server Log Settings</div>
94
94
  <div slot="content">
95
- ${this._loading
96
- ? html`<p class="loading">Loading...</p>`
97
- : html`
95
+ ${
96
+ this._loading
97
+ ? html`
98
+ <p class="loading">Loading...</p>
99
+ `
100
+ : html`
98
101
  <p class="hint">Changes are temporary and will be reset on the next server restart.</p>
99
102
  <div class="form-field">
100
103
  <label>Console Log Level</label>
@@ -111,8 +114,9 @@ export class LogLevelDialog extends LitElement {
111
114
  )}
112
115
  </md-outlined-select>
113
116
  </div>
114
- ${this._fileLevel !== null
115
- ? html`
117
+ ${
118
+ this._fileLevel !== null
119
+ ? html`
116
120
  <div class="form-field">
117
121
  <label>File Log Level</label>
118
122
  <md-outlined-select name="file" .value=${this._fileLevel}>
@@ -129,8 +133,10 @@ export class LogLevelDialog extends LitElement {
129
133
  </md-outlined-select>
130
134
  </div>
131
135
  `
132
- : nothing}
133
- `}
136
+ : nothing
137
+ }
138
+ `
139
+ }
134
140
  </div>
135
141
  <div slot="actions">
136
142
  <md-text-button @click=${this._close}>Cancel</md-text-button>
@@ -74,9 +74,13 @@ export class BasicInformationClusterCommands extends BaseClusterCommands {
74
74
  <details class="command-panel">
75
75
  <summary>Node Label</summary>
76
76
  <div class="command-content">
77
- ${!this._isNodeAvailable
78
- ? html`<div class="offline-warning">Node is offline - cannot edit label</div>`
79
- : nothing}
77
+ ${
78
+ !this._isNodeAvailable
79
+ ? html`
80
+ <div class="offline-warning">Node is offline - cannot edit label</div>
81
+ `
82
+ : nothing
83
+ }
80
84
  <div class="command-row">
81
85
  <md-outlined-text-field
82
86
  label="Node Label"
@@ -13,9 +13,7 @@ export class DashboardFooter extends LitElement {
13
13
  return html`
14
14
  <div class="footer">
15
15
  The OHF Matter Server is a project by the Open Home Foundation.
16
- <a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank"
17
- >Support development</a
18
- >
16
+ <a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank">Support development</a>
19
17
  </div>
20
18
  `;
21
19
  }
@@ -107,22 +107,26 @@ export class DashboardHeader extends LitElement {
107
107
  aria-current=${this.activeView === "nodes" ? "page" : nothing}
108
108
  >Nodes</a
109
109
  >
110
- ${showThreadTab
111
- ? html`<a
110
+ ${
111
+ showThreadTab
112
+ ? html`<a
112
113
  href="#thread"
113
114
  class="nav-tab ${this.activeView === "thread" ? "active" : ""}"
114
115
  aria-current=${this.activeView === "thread" ? "page" : nothing}
115
116
  >Thread</a
116
117
  >`
117
- : nothing}
118
- ${showWifiTab
119
- ? html`<a
118
+ : nothing
119
+ }
120
+ ${
121
+ showWifiTab
122
+ ? html`<a
120
123
  href="#wifi"
121
124
  class="nav-tab ${this.activeView === "wifi" ? "active" : ""}"
122
125
  aria-current=${this.activeView === "wifi" ? "page" : nothing}
123
126
  >WiFi</a
124
127
  >`
125
- : nothing}
128
+ : nothing
129
+ }
126
130
  </nav>
127
131
  `;
128
132
  }
@@ -131,13 +135,15 @@ export class DashboardHeader extends LitElement {
131
135
  return html`
132
136
  <div class="header">
133
137
  <!-- optional back button -->
134
- ${this.backButton
135
- ? html` <a .href=${this.backButton}>
138
+ ${
139
+ this.backButton
140
+ ? html` <a .href=${this.backButton}>
136
141
  <md-icon-button>
137
142
  <ha-svg-icon .path=${mdiArrowLeft}></ha-svg-icon>
138
143
  </md-icon-button>
139
144
  </a>`
140
- : ""}
145
+ : ""
146
+ }
141
147
 
142
148
  <div class="title">${this.title ?? ""}</div>
143
149
  ${this._renderNavTabs()}
@@ -150,25 +156,29 @@ export class DashboardHeader extends LitElement {
150
156
  `;
151
157
  })}
152
158
  <!-- settings button (only when connected) -->
153
- ${this.client
154
- ? html`
159
+ ${
160
+ this.client
161
+ ? html`
155
162
  <md-icon-button @click=${this._openSettings} title="Server Settings">
156
163
  <ha-svg-icon .path=${mdiCog}></ha-svg-icon>
157
164
  </md-icon-button>
158
165
  `
159
- : nothing}
166
+ : nothing
167
+ }
160
168
  <!-- theme toggle button -->
161
169
  <md-icon-button @click=${this._cycleTheme} .title=${this._getThemeTooltip()}>
162
170
  <ha-svg-icon .path=${this._getThemeIcon()}></ha-svg-icon>
163
171
  </md-icon-button>
164
172
  <!-- optional logout button (only when client exists and not in production) -->
165
- ${this.client && !this.client.isProduction
166
- ? html`
173
+ ${
174
+ this.client && !this.client.isProduction
175
+ ? html`
167
176
  <md-icon-button @click=${this.client.disconnect}>
168
177
  <ha-svg-icon .path=${mdiLogout}></ha-svg-icon>
169
178
  </md-icon-button>
170
179
  `
171
- : nothing}
180
+ : nothing
181
+ }
172
182
  </div>
173
183
  </div>
174
184
  `;
@@ -11,18 +11,17 @@ import "@material/web/divider/divider";
11
11
  import "@material/web/iconbutton/icon-button";
12
12
  import "@material/web/list/list";
13
13
  import "@material/web/list/list-item";
14
- import { mdiChatProcessing, mdiLink, mdiShareVariant, mdiTrashCan, mdiUpdate } from "@mdi/js";
15
- import { getDeviceIcon } from "../../util/device-icons.js";
16
-
17
14
  import { consume } from "@lit/context";
18
15
  import { MatterClient, MatterNode } from "@matter-server/ws-client";
16
+ import { mdiChatProcessing, mdiLink, mdiShareVariant, mdiTrashCan, mdiUpdate } from "@mdi/js";
19
17
  import { LitElement, css, html, nothing } from "lit";
20
18
  import { customElement, property, state } from "lit/decorators.js";
21
19
  import { DeviceType } from "../../client/models/descriptions.js";
22
20
  import { showAlertDialog, showPromptDialog } from "../../components/dialog-box/show-dialog-box.js";
23
21
  import { showNodeBindingDialog } from "../../components/dialogs/binding/show-node-binding-dialog.js";
24
- import "../../components/ha-svg-icon";
25
22
  import { handleAsync } from "../../util/async-handler.js";
23
+ import "../../components/ha-svg-icon";
24
+ import { getDeviceIcon } from "../../util/device-icons.js";
26
25
  import { getEndpointDeviceTypes } from "../matter-endpoint-view.js";
27
26
  import { bindingContext } from "./context.js";
28
27
 
@@ -82,7 +81,13 @@ export class NodeDetails extends LitElement {
82
81
  <ha-svg-icon slot="start" class="device-icon" .path=${getDeviceIcon(this.node)}></ha-svg-icon>
83
82
  <div slot="headline">
84
83
  <b>${this.node.nodeLabel || "Node Info"}</b>
85
- ${this.node.available ? nothing : html`<span class="status">OFFLINE</span>`}
84
+ ${
85
+ this.node.available
86
+ ? nothing
87
+ : html`
88
+ <span class="status">OFFLINE</span>
89
+ `
90
+ }
86
91
  </div>
87
92
  </md-list-item>
88
93
  <md-list-item>
@@ -96,48 +101,56 @@ export class NodeDetails extends LitElement {
96
101
  </div>
97
102
  <div slot="supporting-text"><span class="left">Is bridge: </span>${this.node.is_bridge}</div>
98
103
  <div slot="supporting-text"><span class="left">Serialnumber: </span>${this.node.serialNumber}</div>
99
- ${this.node.matter_version
100
- ? html`<div slot="supporting-text">
104
+ ${
105
+ this.node.matter_version
106
+ ? html`<div slot="supporting-text">
101
107
  <span class="left">Matter version: </span>${this.node.matter_version}
102
108
  </div>`
103
- : nothing}
104
- ${this.node.is_bridge
105
- ? ""
106
- : html` <div slot="supporting-text">
109
+ : nothing
110
+ }
111
+ ${
112
+ this.node.is_bridge
113
+ ? ""
114
+ : html` <div slot="supporting-text">
107
115
  <span class="left">All device types: </span>${getNodeDeviceTypes(this.node)
108
116
  .map(deviceType => {
109
117
  return deviceType.label;
110
118
  })
111
119
  .join(" / ")}
112
- </div>`}
120
+ </div>`
121
+ }
113
122
  </md-list-item>
114
123
  <md-list-item>
115
124
  <div class="btn-row">
116
125
  <md-outlined-button @click=${handleAsync(() => this._reinterview())}
117
126
  >Interview<ha-svg-icon slot="icon" .path=${mdiChatProcessing}></ha-svg-icon
118
127
  ></md-outlined-button>
119
- ${this._updateInitiated
120
- ? html` <md-outlined-button disabled
128
+ ${
129
+ this._updateInitiated
130
+ ? html` <md-outlined-button disabled
121
131
  >Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
122
132
  ></md-outlined-button>`
123
- : (this.node.updateState ?? 0) > 1
124
- ? html` <md-outlined-button disabled
133
+ : (this.node.updateState ?? 0) > 1
134
+ ? html` <md-outlined-button disabled
125
135
  >${getUpdateStateLabel(
126
136
  this.node.updateState!,
127
137
  this.node.updateStateProgress,
128
138
  )}<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
129
139
  ></md-outlined-button>`
130
- : html`<md-outlined-button @click=${handleAsync(() => this._searchUpdate())}
140
+ : html`<md-outlined-button @click=${handleAsync(() => this._searchUpdate())}
131
141
  >Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
132
- ></md-outlined-button>`}
133
- ${bindings
134
- ? html`
142
+ ></md-outlined-button>`
143
+ }
144
+ ${
145
+ bindings
146
+ ? html`
135
147
  <md-outlined-button @click=${handleAsync(() => this._binding())}>
136
148
  Binding
137
149
  <ha-svg-icon slot="icon" .path=${mdiLink}></ha-svg-icon>
138
150
  </md-outlined-button>
139
151
  `
140
- : nothing}
152
+ : nothing
153
+ }
141
154
 
142
155
  <md-outlined-button @click=${handleAsync(() => this._openCommissioningWindow())}
143
156
  >Share<ha-svg-icon slot="icon" .path=${mdiShareVariant}></ha-svg-icon
@@ -32,7 +32,13 @@ export class ServerDetails extends LitElement {
32
32
  <md-list-item>
33
33
  <div slot="headline">
34
34
  <b>Open Home Foundation Matter Server ${this.client.isProduction ? "" : `(${this.client.serverBaseAddress})`}</b>
35
- ${this.client.connection.connected ? nothing : html`<span class="status">OFFLINE</span>`}
35
+ ${
36
+ this.client.connection.connected
37
+ ? nothing
38
+ : html`
39
+ <span class="status">OFFLINE</span>
40
+ `
41
+ }
36
42
  </div>
37
43
  </md-list-item>
38
44
  <md-list-item>
@@ -17,10 +17,10 @@ import { clusters } from "../client/models/descriptions.js";
17
17
  import { showAlertDialog } from "../components/dialog-box/show-dialog-box.js";
18
18
  import "../components/ha-svg-icon";
19
19
  import "../pages/components/node-details";
20
- import { bindingContext } from "./components/context.js";
21
20
  // Cluster command components (auto-register on import)
22
21
  import { formatHex, formatNodeAddress, getEffectiveFabricIndex } from "../util/format_hex.js";
23
22
  import { getClusterCommandsTag } from "./cluster-commands/index.js";
23
+ import { bindingContext } from "./components/context.js";
24
24
 
25
25
  declare global {
26
26
  interface HTMLElementTagNameMap {
@@ -118,23 +118,27 @@ class MatterClusterView extends LitElement {
118
118
  (attribute, index) => html`
119
119
  <md-list-item class=${index % 2 === 1 ? "alternate-row" : ""}>
120
120
  <div slot="headline">
121
- ${clusters[this.cluster!]?.attributes[attribute.key]?.label ??
122
- "Custom/Unknown Attribute"}
121
+ ${
122
+ clusters[this.cluster!]?.attributes[attribute.key]?.label ??
123
+ "Custom/Unknown Attribute"
124
+ }
123
125
  </div>
124
126
  <div slot="supporting-text">
125
127
  AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
126
128
  ${clusters[this.cluster!]?.attributes[attribute.key]?.type ?? "unknown"}
127
129
  </div>
128
130
  <div slot="end">
129
- ${toBigIntAwareJson(attribute.value).length > 20
130
- ? html`<button
131
+ ${
132
+ toBigIntAwareJson(attribute.value).length > 20
133
+ ? html`<button
131
134
  @click=${() => {
132
135
  this._showAttributeValue(attribute.value);
133
136
  }}
134
137
  >
135
138
  Show value
136
139
  </button>`
137
- : html`<code>${toBigIntAwareJson(attribute.value)}</code>`}
140
+ : html`<code>${toBigIntAwareJson(attribute.value)}</code>`
141
+ }
138
142
  </div>
139
143
  </md-list-item>
140
144
  `,
@@ -75,14 +75,16 @@ class MatterNodeView extends LitElement {
75
75
  <div class="node-title-bar">
76
76
  <ha-svg-icon class="node-icon" .path=${getDeviceIcon(this.node)}></ha-svg-icon>
77
77
  <h2>Node ${this.node.node_id} <span class="node-id-hex">${nodeHex}</span></h2>
78
- ${showGraphButton
79
- ? html`
78
+ ${
79
+ showGraphButton
80
+ ? html`
80
81
  <a href=${graphUrl} class="show-in-graph-button" title="Show in ${graphViewType} graph">
81
82
  <ha-svg-icon .path=${mdiGraphOutline}></ha-svg-icon>
82
83
  <span class="button-text">Show in graph</span>
83
84
  </a>
84
85
  `
85
- : ""}
86
+ : ""
87
+ }
86
88
  </div>
87
89
  <node-details .node=${this.node} .client=${this.client}></node-details>
88
90
  </div>
@@ -97,7 +97,13 @@ class MatterServerView extends LitElement {
97
97
  node.node_id,
98
98
  )})</span
99
99
  >
100
- ${node.available ? "" : html`<span class="status">OFFLINE</span>`}
100
+ ${
101
+ node.available
102
+ ? ""
103
+ : html`
104
+ <span class="status">OFFLINE</span>
105
+ `
106
+ }
101
107
  </div>
102
108
  <div slot="supporting-text">
103
109
  ${node.nodeLabel ? `${node.nodeLabel} | ` : nothing} ${node.vendorName} |
@@ -96,8 +96,9 @@ export class DevicePanel extends LitElement {
96
96
  class="expand-icon"
97
97
  ></ha-svg-icon>
98
98
  </div>
99
- ${this._isExpanded
100
- ? html`
99
+ ${
100
+ this._isExpanded
101
+ ? html`
101
102
  <md-list class="device-list">
102
103
  ${this.nodeIds.map(nodeId => {
103
104
  const node = this.nodes[nodeId.toString()];
@@ -113,7 +114,8 @@ export class DevicePanel extends LitElement {
113
114
  })}
114
115
  </md-list>
115
116
  `
116
- : nothing}
117
+ : nothing
118
+ }
117
119
  </div>
118
120
  `;
119
121
  }