Agent Skillshome-assistant/frontend › ha-frontend-components

ha-frontend-components

GitHub

提供Home Assistant前端组件的开发与审查指南,涵盖对话框、按钮、表单及警报等UI模式的实现规范。

.agents/skills/ha-frontend-components/SKILL.md home-assistant/frontend

Trigger Scenarios

实现 Home Assistant UI 组件 审查前端交互模式 使用 ha-dialog, ha-button, ha-form

Install

npx skills add home-assistant/frontend --skill ha-frontend-components -g -y
More Options

Non-standard path

npx skills add https://github.com/home-assistant/frontend/tree/dev/.agents/skills/ha-frontend-components -g -y

Use without installing

npx skills use home-assistant/frontend@ha-frontend-components

指定 Agent (Claude Code)

npx skills add home-assistant/frontend --skill ha-frontend-components -a claude-code -g -y

安装 repo 全部 skill

npx skills add home-assistant/frontend --all -g -y

预览 repo 内 skill

npx skills add home-assistant/frontend --list

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 implements HassDialogNext<T>, for new dialogs. See src/dialogs/dialog-mixin.ts.
  • Read dialog parameters from the mixin's params property and render the dialog open. Return nothing while required parameters are absent.
  • Call the mixin's closeDialog() to close a new dialog. The mixin handles the closed event, fires dialog-closed, and removes the host element.
  • Existing dialogs may implement the legacy HassDialog<T> interface from src/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 a DialogMixin dialog.
  • Use header-title and header-subtitle for simple header text.
  • Use slots when standard header attributes are not enough.
  • Use ha-dialog-footer with primaryAction and secondaryAction slots.
  • Add autofocus to 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 in slot="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: icon for custom leading icon, action for 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

Same Skill Collection

.agents/skills/ha-frontend-contexts/SKILL.md
.agents/skills/ha-frontend-demo/SKILL.md
.agents/skills/ha-frontend-events/SKILL.md
.agents/skills/ha-frontend-gallery/SKILL.md
.agents/skills/ha-frontend-lit/SKILL.md
.agents/skills/ha-frontend-review/SKILL.md
.agents/skills/ha-frontend-styling/SKILL.md
.agents/skills/ha-frontend-testing/SKILL.md
.agents/skills/ha-frontend-types/SKILL.md
.agents/skills/ha-frontend-user-facing-text/SKILL.md

Metadata

Files
0
Version
3c7560a
Hash
7ce63017
Indexed
2026-08-20 08:57

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-26 00:59
浙ICP备14020137号-1 $방문자$