Développeurs - Cartes personnalisées
En règle générale, UIX devrait fonctionner avec toutes les cartes personnalisées.
Cas où UIX fonctionne directement
- La carte personnalisée est chargée par Home Assistant et n'est pas enfant d'une autre carte personnalisée. UIX intervient alors via
<hui-card>. - La carte personnalisée inclut
<ha-card>et stocke sa configuration dans la propriétéconfigou_config. UIX intervient alors via<ha-card>.
Cas où UIX nécessite du code ou un style fourni par la carte parente
- La carte personnalisée est chargée par une autre carte personnalisée qui n'utilise PAS la méthode moderne
<hui-card>ET :- la carte personnalisée n'utilise PAS
<ha-card>; OU - elle utilise
<ha-card>mais ne stocke PAS sa configuration dansconfigou_config. UIX ne peut alors pas trouver la configurationuix:à appliquer.
- la carte personnalisée n'utilise PAS
Si votre carte personnalisée ne fonctionne pas lorsqu'elle est utilisée avec d'autres cartes personnalisées, vous pouvez appliquer UIX directement avec uix.applyToElement().
js
customElements.whenDefined("uix-node").then((uix) => {
uix.applyToElement(
el, // The root element
"type", // Determines which theme variables should apply (uix-<type>, uix-<type>-yaml)
config, // The UIX configuration. See below
variables, // Any variables passed on to jinja templates, preferably { config: <element configuration> }. Default: {}
shadow // whether the styles should be based in the #shadow-root of el. Default: true
cls // An extra class to apply to the element. Default: undefined
)
}La configuration UIX est un objet qui accepte les propriétés facultatives suivantes :
style- définition du style UIX (chaîne ou objet) ;theme- nom du thème Home Assistant appliqué uniquement à la branche de cet élément (uix.themeest prioritaire sur le thème hérité ou actif) ;class- chaîne ou tableau de classes à appliquer à l'élément ;debug- booléen qui active le mode de débogage de l'élément (par défautfalse).
Lorsque theme est défini, UIX applique directement à l'élément cible la logique applyThemesOnElement() du frontend Home Assistant avant de traiter les styles et macros du thème UIX.
Exemple
Custom card javascript:
js
const LitElement = customElements.get("ha-panel-lovelace")
? Object.getPrototypeOf(customElements.get("ha-panel-lovelace"))
: Object.getPrototypeOf(customElements.get("hc-lovelace"));
const html = LitElement.prototype.html;
class MyAwesomeCard extends LitElement {
setConfig(config) {
this._config = config;
}
firstUpdated() {
customElements
.whenDefined("uix-node")
.then((uix) =>
uix.applyToElement(
this,
"card",
this._config.uix,
{ config: this._config },
true,
"type-custom-my-awesome-card"
)
);
}
render() {
return html`
<div class="content">
<h1> This is a custom card</h1>
<div class="my-class">
Cette carte sert à tester la configuration UIX des cartes personnalisées.
Elle ne contient pas d'élément <b>ha-card</b>,
mais elle peut tout de même utiliser les styles de carte de la configuration ou du thème UIX
lorsqu'elle est intégrée à une autre carte personnalisée.
</div>
</div>
`;
}
}
customElements.define("my-awesome-card", MyAwesomeCard);With the following dashboard configuration:
yaml
type: custom:my-awesome-card
uix:
style: |
.content {
padding: 0 20px 20px 20px;
}
h1 {
color: red;
}And this theme:
yaml
UIX Test:
uix-theme: UIX Test
uix-card: |
b {
color: orange;
}
dark:
