mirror of
https://github.com/home-assistant/developers.home-assistant.git
synced 2025-07-18 06:46:29 +00:00
Add custom panel example (#631)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
This commit is contained in:
parent
3a68bdf691
commit
9846041f25
@ -8,7 +8,74 @@ Besides components registering panels, users can also register panels using the
|
|||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
Panels are defined as custom elements. You can use any framework that you want, as long as you wrap it up as a custom element. To quickly get started with a panel, we've created a [React custom panel starter kit](https://github.com/home-assistant/custom-panel-starter-kit-react).
|
Panels are defined as custom elements. You can use any framework that you want, as long as you wrap it up as a custom element. To quickly get started with a panel, create a new file `<config>/www/example-panel.js` with this content
|
||||||
|
|
||||||
|
```js
|
||||||
|
import "https://unpkg.com/wired-card@2.1.0/lib/wired-card.js?module";
|
||||||
|
import {
|
||||||
|
LitElement,
|
||||||
|
html,
|
||||||
|
css,
|
||||||
|
} from "https://unpkg.com/lit-element@2.4.0/lit-element.js?module";
|
||||||
|
|
||||||
|
class ExamplePanel extends LitElement {
|
||||||
|
static get properties() {
|
||||||
|
return {
|
||||||
|
hass: { type: Object },
|
||||||
|
narrow: { type: Boolean },
|
||||||
|
route: { type: Object },
|
||||||
|
panel: { type: Object },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return html`
|
||||||
|
<wired-card elevation="2">
|
||||||
|
<p>There are ${Object.keys(this.hass.states).length} entities.</p>
|
||||||
|
<p>The screen is${this.narrow ? "" : " not"} narrow.</p>
|
||||||
|
Configured panel config
|
||||||
|
<pre>${JSON.stringify(this.panel.config, undefined, 2)}</pre>
|
||||||
|
Current route
|
||||||
|
<pre>${JSON.stringify(this.route, undefined, 2)}</pre>
|
||||||
|
</wired-card>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
static get styles() {
|
||||||
|
return css`
|
||||||
|
:host {
|
||||||
|
background-color: #fafafa;
|
||||||
|
padding: 16px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
wired-card {
|
||||||
|
background-color: white;
|
||||||
|
padding: 16px;
|
||||||
|
display: block;
|
||||||
|
font-size: 18px;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
customElements.define("example-panel", ExamplePanel);
|
||||||
|
```
|
||||||
|
|
||||||
|
Then add to your `configuration.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
panel_custom:
|
||||||
|
- name: example-panel
|
||||||
|
# url_path needs to be unique for each panel_custom config
|
||||||
|
url_path: redirect-server-controls
|
||||||
|
sidebar_title: Example Panel
|
||||||
|
sidebar_icon: mdi:server
|
||||||
|
module_url: /local/example-panel.js
|
||||||
|
config:
|
||||||
|
# Data you want to make available to panel
|
||||||
|
hello: world
|
||||||
|
```
|
||||||
|
|
||||||
## API reference
|
## API reference
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user