ha-frontend-components
GitHub提供Home Assistant前端组件的开发与审查指南,涵盖对话框、按钮、表单及警报等UI模式的实现规范。
Trigger Scenarios
Install
npx skills add home-assistant/frontend --skill ha-frontend-components -g -y
SKILL.md
Frontmatter
{
"name": "ha-frontend-components",
"description": "Home Assistant frontend component patterns. Use when implementing or reviewing dialogs, ha-form, ha-alert, keyboard shortcuts, tooltips, panels, Lovelace cards, or ha-button usage."
}
HA Frontend Components
Use this skill when creating or reviewing Home Assistant UI components and common interaction patterns.
Cross-load ha-frontend-events when component work includes event listener typing, custom event dispatch, or event-map declarations.
Dialogs
Open dialogs through the fire-event pattern:
fireEvent(this, "show-dialog", {
dialogTag: "dialog-example",
dialogImport: () => import("./dialog-example"),
dialogParams: { title: "Example", data: someData },
});
Dialog implementation requirements:
- Use
ha-dialog. - Use
DialogMixin, which implementsHassDialogNext<T>, for new dialogs. Seesrc/dialogs/dialog-mixin.ts. - Read dialog parameters from the mixin's
paramsproperty and render the dialog open. Returnnothingwhile required parameters are absent. - Call the mixin's
closeDialog()to close a new dialog. The mixin handles theclosedevent, firesdialog-closed, and removes the host element. - Existing dialogs may implement the legacy
HassDialog<T>interface fromsrc/dialogs/make-dialog-manager.ts. - Preserve the existing
showDialog(), open-state, and close-event lifecycle when maintaining a legacy dialog; do not copy that lifecycle into aDialogMixindialog. - Use
header-titleandheader-subtitlefor simple header text. - Use slots when standard header attributes are not enough.
- Use
ha-dialog-footerwithprimaryActionandsecondaryActionslots. - Add
autofocusto the first focusable element, such as<ha-form autofocus>, and forward it internally if needed.
Use standard dialog widths: small, medium, large, or full. Avoid custom dialog sizing unless there is a clear product need.
Buttons
ha-button wraps the Web Awesome button in src/components/ha-button.ts.
Axes:
variant:brand,neutral,danger,warning,success.appearance:accent,filled,outlined,plain.size:xs,s,m,l,xl.
Common usage:
- Use
appearance="filled"for primary emphasis when needed. - Use
appearance="plain"for cancel and dismiss actions. - Use
variant="danger"for destructive actions. - Place primary actions in
slot="primaryAction"and secondary actions inslot="secondaryAction".
Forms
ha-form is schema-driven with HaFormSchema[] and supports common selectors for entities, devices, areas, targets, numbers, booleans, time, actions, text, objects, selects, icons, media, and location.
Use computeLabel, computeError, and computeHelper for translated labels, validation, and helper text.
<ha-form
.hass=${this.hass}
.data=${this._data}
.schema=${this._schema}
.error=${this._errors}
.computeLabel=${(schema) => this._localize(`ui.panel.${schema.name}`)}
@value-changed=${this._valueChanged}
></ha-form>
Alerts
Use ha-alert for user-visible status messaging.
- Alert types:
error,warning,info,success. - Useful properties:
title,alert-type,dismissable,narrow. - Slots:
iconfor custom leading icon,actionfor custom action content. - Content is announced by screen readers when dynamically displayed.
html`
<ha-alert alert-type="error">${this._localize("ui.example.error")}</ha-alert>
<ha-alert alert-type="warning" .title=${this._localize("ui.example.warning")}>
${this._localize("ui.example.description")}
</ha-alert>
<ha-alert alert-type="success" dismissable>
${this._localize("ui.example.success")}
</ha-alert>
`;
Shortcuts And Tooltips
Use ShortcutManager from src/common/keyboard/shortcuts.ts for keyboard shortcuts. It blocks shortcuts in input fields, can prevent shortcuts during text selection, and supports character and KeyCode shortcuts for non-latin keyboards. See src/state/quick-bar-mixin.ts for global shortcut examples.
Use ha-tooltip from src/components/ha-tooltip.ts for contextual hover help. See src/components/ha-label.ts for an example.
Panels And Lovelace Cards
Panels commonly extend SubscribeMixin(LitElement) and receive route and narrow-layout properties.
Lovelace cards should implement LovelaceCard, validate config in setConfig(), handle loading, error, unavailable, and missing-entity states, and add a configuration editor when needed.
Cards are user-story surfaces. Support different households, entity types, responsive layouts, and accessible interaction states.
Version History
- 3c7560a Current 2026-08-20 08:57


