Add shoelace loading spinner component (#24525)

* Add loading spinner component

* Update some spinners

* Update some spinners

* Update indeterminate to ha-spinner

* add ha-spinner-delayed

* Remove ha-circular-progress component

* Update demo/src/custom-cards/ha-demo-card.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Fix gallery

* Update set size

* Add ha-fade-in

* Remove wrong testing conditions

* Remove size number option

---------

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
This commit is contained in:
Wendelin 2025-03-13 17:05:51 +01:00 committed by GitHub
parent e09dbb474b
commit 28c355812c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
116 changed files with 497 additions and 583 deletions

View File

@ -5,7 +5,7 @@ import { until } from "lit/directives/until";
import { fireEvent } from "../../../src/common/dom/fire_event"; import { fireEvent } from "../../../src/common/dom/fire_event";
import "../../../src/components/ha-card"; import "../../../src/components/ha-card";
import "../../../src/components/ha-button"; import "../../../src/components/ha-button";
import "../../../src/components/ha-circular-progress"; import "../../../src/components/ha-spinner";
import type { LovelaceCardConfig } from "../../../src/data/lovelace/config/card"; import type { LovelaceCardConfig } from "../../../src/data/lovelace/config/card";
import type { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; import type { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
import type { import type {
@ -44,9 +44,7 @@ export class HADemoCard extends LitElement implements LovelaceCard {
<div class="picker"> <div class="picker">
<div class="label"> <div class="label">
${this._switching ${this._switching
? html` ? html`<ha-spinner></ha-spinner>`
<ha-circular-progress indeterminate></ha-circular-progress>
`
: until( : until(
selectedDemoConfig.then( selectedDemoConfig.then(
(conf) => html` (conf) => html`

View File

@ -1,63 +0,0 @@
import type { TemplateResult } from "lit";
import { html, css, LitElement } from "lit";
import { customElement, property } from "lit/decorators";
import "../../../../src/components/ha-bar";
import "../../../../src/components/ha-card";
import "../../../../src/components/ha-circular-progress";
import "@material/web/progress/circular-progress";
import type { HomeAssistant } from "../../../../src/types";
@customElement("demo-components-ha-circular-progress")
export class DemoHaCircularProgress extends LitElement {
@property({ attribute: false }) hass!: HomeAssistant;
protected render(): TemplateResult {
return html`<ha-card header="Basic circular progress">
<div class="card-content">
<ha-circular-progress indeterminate></ha-circular-progress></div
></ha-card>
<ha-card header="Different circular progress sizes">
<div class="card-content">
<ha-circular-progress
indeterminate
size="tiny"
></ha-circular-progress>
<ha-circular-progress
indeterminate
size="small"
></ha-circular-progress>
<ha-circular-progress
indeterminate
size="medium"
></ha-circular-progress>
<ha-circular-progress
indeterminate
size="large"
></ha-circular-progress></div
></ha-card>
<ha-card header="Circular progress with an aria-label">
<div class="card-content">
<ha-circular-progress
indeterminate
aria-label="Doing something..."
></ha-circular-progress>
<ha-circular-progress
indeterminate
.ariaLabel=${"Doing something..."}
></ha-circular-progress></div
></ha-card>`;
}
static styles = css`
ha-card {
max-width: 600px;
margin: 24px auto;
}
`;
}
declare global {
interface HTMLElementTagNameMap {
"demo-components-ha-circular-progress": DemoHaCircularProgress;
}
}

View File

@ -1,4 +1,4 @@
--- ---
title: Circular Progress title: Spinner
subtitle: Can be used to indicate an ongoing task. subtitle: Can be used to indicate an ongoing task.
--- ---

View File

@ -0,0 +1,44 @@
import type { TemplateResult } from "lit";
import { html, css, LitElement } from "lit";
import { customElement, property } from "lit/decorators";
import "../../../../src/components/ha-bar";
import "../../../../src/components/ha-card";
import "../../../../src/components/ha-spinner";
import type { HomeAssistant } from "../../../../src/types";
@customElement("demo-components-ha-spinner")
export class DemoHaSpinner extends LitElement {
@property({ attribute: false }) hass!: HomeAssistant;
protected render(): TemplateResult {
return html`<ha-card header="Basic spinner">
<div class="card-content">
<ha-spinner></ha-spinner></div
></ha-card>
<ha-card header="Different spinner sizes">
<div class="card-content">
<ha-spinner size="tiny"></ha-spinner>
<ha-spinner size="small"></ha-spinner>
<ha-spinner size="medium"></ha-spinner>
<ha-spinner size="large"></ha-spinner></div
></ha-card>
<ha-card header="Spinner with an aria-label">
<div class="card-content">
<ha-spinner aria-label="Doing something..."></ha-spinner>
<ha-spinner .ariaLabel=${"Doing something..."}></ha-spinner></div
></ha-card>`;
}
static styles = css`
ha-card {
max-width: 600px;
margin: 24px auto;
}
`;
}
declare global {
interface HTMLElementTagNameMap {
"demo-components-ha-spinner": DemoHaSpinner;
}
}

View File

@ -1,7 +1,7 @@
import type { CSSResultGroup, TemplateResult } from "lit"; import type { CSSResultGroup, TemplateResult } from "lit";
import { css, html, LitElement } from "lit"; import { css, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-spinner";
import type { HassioAddonDetails } from "../../../../src/data/hassio/addon"; import type { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import type { Supervisor } from "../../../../src/data/supervisor/supervisor"; import type { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles"; import { haStyle } from "../../../../src/resources/styles";
@ -21,7 +21,7 @@ class HassioAddonConfigDashboard extends LitElement {
protected render(): TemplateResult { protected render(): TemplateResult {
if (!this.addon) { if (!this.addon) {
return html`<ha-circular-progress indeterminate></ha-circular-progress>`; return html`<ha-spinner></ha-spinner>`;
} }
const hasConfiguration = const hasConfiguration =
(this.addon.options && Object.keys(this.addon.options).length) || (this.addon.options && Object.keys(this.addon.options).length) ||

View File

@ -2,7 +2,7 @@ import "../../../../src/components/ha-card";
import type { CSSResultGroup, TemplateResult } from "lit"; import type { CSSResultGroup, TemplateResult } from "lit";
import { css, html, LitElement } from "lit"; import { css, html, LitElement } from "lit";
import "../../../../src/components/ha-alert"; import "../../../../src/components/ha-alert";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-spinner";
import "../../../../src/components/ha-markdown"; import "../../../../src/components/ha-markdown";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import type { HassioAddonDetails } from "../../../../src/data/hassio/addon"; import type { HassioAddonDetails } from "../../../../src/data/hassio/addon";
@ -33,7 +33,7 @@ class HassioAddonDocumentationDashboard extends LitElement {
protected render(): TemplateResult { protected render(): TemplateResult {
if (!this.addon) { if (!this.addon) {
return html`<ha-circular-progress indeterminate></ha-circular-progress>`; return html`<ha-spinner></ha-spinner>`;
} }
return html` return html`
<div class="content"> <div class="content">

View File

@ -11,7 +11,6 @@ import memoizeOne from "memoize-one";
import { fireEvent } from "../../../src/common/dom/fire_event"; import { fireEvent } from "../../../src/common/dom/fire_event";
import { navigate } from "../../../src/common/navigate"; import { navigate } from "../../../src/common/navigate";
import { extractSearchParam } from "../../../src/common/url/search-params"; import { extractSearchParam } from "../../../src/common/url/search-params";
import "../../../src/components/ha-circular-progress";
import type { HassioAddonDetails } from "../../../src/data/hassio/addon"; import type { HassioAddonDetails } from "../../../src/data/hassio/addon";
import { import {
fetchAddonInfo, fetchAddonInfo,

View File

@ -1,7 +1,7 @@
import type { CSSResultGroup, TemplateResult } from "lit"; import type { CSSResultGroup, TemplateResult } from "lit";
import { css, html, LitElement } from "lit"; import { css, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-spinner";
import type { HassioAddonDetails } from "../../../../src/data/hassio/addon"; import type { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import type { Supervisor } from "../../../../src/data/supervisor/supervisor"; import type { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles"; import { haStyle } from "../../../../src/resources/styles";
@ -23,7 +23,7 @@ class HassioAddonInfoDashboard extends LitElement {
protected render(): TemplateResult { protected render(): TemplateResult {
if (!this.addon) { if (!this.addon) {
return html`<ha-circular-progress indeterminate></ha-circular-progress>`; return html`<ha-spinner></ha-spinner>`;
} }
return html` return html`

View File

@ -6,7 +6,7 @@ import {
type TemplateResult, type TemplateResult,
} from "lit"; } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-spinner";
import type { HassioAddonDetails } from "../../../../src/data/hassio/addon"; import type { HassioAddonDetails } from "../../../../src/data/hassio/addon";
import type { Supervisor } from "../../../../src/data/supervisor/supervisor"; import type { Supervisor } from "../../../../src/data/supervisor/supervisor";
import { haStyle } from "../../../../src/resources/styles"; import { haStyle } from "../../../../src/resources/styles";
@ -28,9 +28,7 @@ class HassioAddonLogDashboard extends LitElement {
protected render(): TemplateResult { protected render(): TemplateResult {
if (!this.addon) { if (!this.addon) {
return html` return html` <ha-spinner></ha-spinner> `;
<ha-circular-progress indeterminate></ha-circular-progress>
`;
} }
return html` return html`
<div class="search"> <div class="search">

View File

@ -3,7 +3,6 @@ import type { TemplateResult } from "lit";
import { html, LitElement } from "lit"; import { html, LitElement } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../src/common/dom/fire_event"; import { fireEvent } from "../../../src/common/dom/fire_event";
import "../../../src/components/ha-circular-progress";
import "../../../src/components/ha-file-upload"; import "../../../src/components/ha-file-upload";
import type { HassioBackup } from "../../../src/data/hassio/backup"; import type { HassioBackup } from "../../../src/data/hassio/backup";
import { uploadBackup } from "../../../src/data/hassio/backup"; import { uploadBackup } from "../../../src/data/hassio/backup";

View File

@ -12,6 +12,7 @@ import "../../../../src/components/ha-md-dialog";
import "../../../../src/components/ha-dialog-header"; import "../../../../src/components/ha-dialog-header";
import "../../../../src/components/buttons/ha-progress-button"; import "../../../../src/components/buttons/ha-progress-button";
import "../../../../src/components/ha-alert"; import "../../../../src/components/ha-alert";
import "../../../../src/components/ha-spinner";
import "../../../../src/components/ha-button"; import "../../../../src/components/ha-button";
import "../../../../src/components/ha-button-menu"; import "../../../../src/components/ha-button-menu";
import "../../../../src/components/ha-header-bar"; import "../../../../src/components/ha-header-bar";
@ -138,7 +139,7 @@ class HassioBackupDialog
? html`<ha-alert alert-type="error">${this._error}</ha-alert>` ? html`<ha-alert alert-type="error">${this._error}</ha-alert>`
: this._restoringBackup : this._restoringBackup
? html`<div class="loading"> ? html`<div class="loading">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div>` </div>`
: html` : html`
<supervisor-backup-content <supervisor-backup-content
@ -310,10 +311,6 @@ class HassioBackupDialog
haStyle, haStyle,
haStyleDialog, haStyleDialog,
css` css`
ha-circular-progress {
display: block;
text-align: center;
}
ha-header-bar { ha-header-bar {
--mdc-theme-on-primary: var(--primary-text-color); --mdc-theme-on-primary: var(--primary-text-color);
--mdc-theme-primary: var(--mdc-theme-surface); --mdc-theme-primary: var(--mdc-theme-surface);

View File

@ -5,6 +5,7 @@ import { customElement, property, query, state } from "lit/decorators";
import { fireEvent } from "../../../../src/common/dom/fire_event"; import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/buttons/ha-progress-button"; import "../../../../src/components/buttons/ha-progress-button";
import "../../../../src/components/ha-alert"; import "../../../../src/components/ha-alert";
import "../../../../src/components/ha-spinner";
import { createCloseHeading } from "../../../../src/components/ha-dialog"; import { createCloseHeading } from "../../../../src/components/ha-dialog";
import { import {
createHassioFullBackup, createHassioFullBackup,
@ -58,7 +59,7 @@ class HassioCreateBackupDialog extends LitElement {
)} )}
> >
${this._creatingBackup ${this._creatingBackup
? html`<ha-circular-progress indeterminate></ha-circular-progress>` ? html`<ha-spinner></ha-spinner>`
: html`<supervisor-backup-content : html`<supervisor-backup-content
.hass=${this.hass} .hass=${this.hass}
.supervisor=${this._dialogParams.supervisor} .supervisor=${this._dialogParams.supervisor}
@ -142,10 +143,6 @@ class HassioCreateBackupDialog extends LitElement {
:host { :host {
direction: var(--direction); direction: var(--direction);
} }
ha-circular-progress {
display: block;
text-align: center;
}
`, `,
]; ];
} }

View File

@ -4,7 +4,7 @@ import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { fireEvent } from "../../../../src/common/dom/fire_event"; import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-spinner";
import "../../../../src/components/ha-select"; import "../../../../src/components/ha-select";
import "../../../../src/components/ha-dialog"; import "../../../../src/components/ha-dialog";
import { import {
@ -69,12 +69,7 @@ class HassioDatadiskDialog extends LitElement {
?hideActions=${this.moving} ?hideActions=${this.moving}
> >
${this.moving ${this.moving
? html` <ha-circular-progress ? html`<ha-spinner aria-label="Moving" size="large"></ha-spinner>
aria-label="Moving"
size="large"
indeterminate
>
</ha-circular-progress>
<p class="progress-text"> <p class="progress-text">
${this.dialogParams.supervisor.localize( ${this.dialogParams.supervisor.localize(
"dialog.datadisk_move.moving_desc" "dialog.datadisk_move.moving_desc"
@ -166,7 +161,7 @@ class HassioDatadiskDialog extends LitElement {
ha-select { ha-select {
width: 100%; width: 100%;
} }
ha-circular-progress { ha-spinner {
display: block; display: block;
margin: 32px; margin: 32px;
text-align: center; text-align: center;

View File

@ -10,7 +10,7 @@ import { customElement, property, state } from "lit/decorators";
import { cache } from "lit/directives/cache"; import { cache } from "lit/directives/cache";
import { fireEvent } from "../../../../src/common/dom/fire_event"; import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/ha-alert"; import "../../../../src/components/ha-alert";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-spinner";
import "../../../../src/components/ha-dialog"; import "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-expansion-panel"; import "../../../../src/components/ha-expansion-panel";
import "../../../../src/components/ha-formfield"; import "../../../../src/components/ha-formfield";
@ -161,12 +161,8 @@ export class DialogHassioNetwork
.disabled=${this._scanning} .disabled=${this._scanning}
> >
${this._scanning ${this._scanning
? html`<ha-circular-progress ? html`<ha-spinner aria-label="Scanning" size="small">
aria-label="Scanning" </ha-spinner>`
indeterminate
size="small"
>
</ha-circular-progress>`
: this.supervisor.localize("dialog.network.scan_ap")} : this.supervisor.localize("dialog.network.scan_ap")}
</mwc-button> </mwc-button>
${this._accessPoints && ${this._accessPoints &&
@ -282,8 +278,7 @@ export class DialogHassioNetwork
</mwc-button> </mwc-button>
<mwc-button @click=${this._updateNetwork} .disabled=${!this._dirty}> <mwc-button @click=${this._updateNetwork} .disabled=${!this._dirty}>
${this._processing ${this._processing
? html`<ha-circular-progress indeterminate size="small"> ? html`<ha-spinner size="small"> </ha-spinner>`
</ha-circular-progress>`
: this.supervisor.localize("common.save")} : this.supervisor.localize("common.save")}
</mwc-button> </mwc-button>
</div>`; </div>`;

View File

@ -8,7 +8,7 @@ import { fireEvent } from "../../../../src/common/dom/fire_event";
import { caseInsensitiveStringCompare } from "../../../../src/common/string/compare"; import { caseInsensitiveStringCompare } from "../../../../src/common/string/compare";
import "../../../../src/components/ha-alert"; import "../../../../src/components/ha-alert";
import "../../../../src/components/ha-tooltip"; import "../../../../src/components/ha-tooltip";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-spinner";
import { createCloseHeading } from "../../../../src/components/ha-dialog"; import { createCloseHeading } from "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-icon-button"; import "../../../../src/components/ha-icon-button";
import type { import type {
@ -161,10 +161,7 @@ class HassioRepositoriesDialog extends LitElement {
></ha-textfield> ></ha-textfield>
<mwc-button @click=${this._addRepository}> <mwc-button @click=${this._addRepository}>
${this._processing ${this._processing
? html`<ha-circular-progress ? html`<ha-spinner size="small"></ha-spinner>`
indeterminate
size="small"
></ha-circular-progress>`
: this._dialogParams!.supervisor.localize( : this._dialogParams!.supervisor.localize(
"dialog.repositories.add" "dialog.repositories.add"
)} )}
@ -202,7 +199,7 @@ class HassioRepositoriesDialog extends LitElement {
margin-inline-start: 8px; margin-inline-start: 8px;
margin-inline-end: initial; margin-inline-end: initial;
} }
ha-circular-progress { ha-spinner {
display: block; display: block;
margin: 32px; margin: 32px;
text-align: center; text-align: center;

View File

@ -15,6 +15,7 @@ import "../../../src/components/buttons/ha-progress-button";
import "../../../src/components/ha-alert"; import "../../../src/components/ha-alert";
import "../../../src/components/ha-button-menu"; import "../../../src/components/ha-button-menu";
import "../../../src/components/ha-card"; import "../../../src/components/ha-card";
import "../../../src/components/ha-spinner";
import "../../../src/components/ha-checkbox"; import "../../../src/components/ha-checkbox";
import "../../../src/components/ha-faded"; import "../../../src/components/ha-faded";
import "../../../src/components/ha-icon-button"; import "../../../src/components/ha-icon-button";
@ -192,12 +193,10 @@ class UpdateAvailableCard extends LitElement {
` `
: nothing} : nothing}
` `
: html`<ha-circular-progress : html`<ha-spinner
aria-label="Updating" aria-label="Updating"
size="large" size="large"
indeterminate ></ha-spinner>
>
</ha-circular-progress>
<p class="progress-text"> <p class="progress-text">
${this.supervisor.localize("update_available.updating", { ${this.supervisor.localize("update_available.updating", {
name: this._name, name: this._name,
@ -465,7 +464,7 @@ class UpdateAvailableCard extends LitElement {
justify-content: space-between; justify-content: space-between;
} }
ha-circular-progress { ha-spinner {
display: block; display: block;
margin: 32px; margin: 32px;
text-align: center; text-align: center;

View File

@ -3,7 +3,7 @@ import { mdiAlertOctagram, mdiCheckBold } from "@mdi/js";
import type { TemplateResult } from "lit"; import type { TemplateResult } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import "../ha-circular-progress"; import "../ha-spinner";
import "../ha-svg-icon"; import "../ha-svg-icon";
@customElement("ha-progress-button") @customElement("ha-progress-button")
@ -35,12 +35,7 @@ export class HaProgressButton extends LitElement {
: this._result === "error" : this._result === "error"
? html`<ha-svg-icon .path=${mdiAlertOctagram}></ha-svg-icon>` ? html`<ha-svg-icon .path=${mdiAlertOctagram}></ha-svg-icon>`
: this.progress : this.progress
? html` ? html`<ha-spinner size="small"></ha-spinner>`
<ha-circular-progress
size="small"
indeterminate
></ha-circular-progress>
`
: nothing} : nothing}
</div> </div>
`} `}

View File

@ -1,49 +0,0 @@
import { MdCircularProgress } from "@material/web/progress/circular-progress";
import type { PropertyValues } from "lit";
import { css } from "lit";
import { customElement, property } from "lit/decorators";
@customElement("ha-circular-progress")
export class HaCircularProgress extends MdCircularProgress {
@property({ attribute: "aria-label", type: String }) public ariaLabel =
"Loading";
@property() public size?: "tiny" | "small" | "medium" | "large";
protected updated(changedProps: PropertyValues) {
super.updated(changedProps);
if (changedProps.has("size")) {
switch (this.size) {
case "tiny":
this.style.setProperty("--md-circular-progress-size", "16px");
break;
case "small":
this.style.setProperty("--md-circular-progress-size", "28px");
break;
case "medium":
this.style.setProperty("--md-circular-progress-size", "48px");
break;
case "large":
this.style.setProperty("--md-circular-progress-size", "68px");
break;
}
}
}
static override styles = [
...super.styles,
css`
:host {
--md-sys-color-primary: var(--primary-color);
--md-circular-progress-size: 48px;
}
`,
];
}
declare global {
interface HTMLElementTagNameMap {
"ha-circular-progress": HaCircularProgress;
}
}

View File

@ -0,0 +1,19 @@
import SlAnimation from "@shoelace-style/shoelace/dist/components/animation/animation.component";
import { customElement, property } from "lit/decorators";
@customElement("ha-fade-in")
export class HaFadeIn extends SlAnimation {
@property() public name = "fadeIn";
@property() public fill: FillMode = "both";
@property({ type: Boolean }) public play = true;
@property({ type: Number }) public iterations = 1;
}
declare global {
interface HTMLElementTagNameMap {
"ha-fade-in": HaFadeIn;
}
}

View File

@ -17,7 +17,6 @@ import type { CropOptions } from "../dialogs/image-cropper-dialog/show-image-cro
import { showImageCropperDialog } from "../dialogs/image-cropper-dialog/show-image-cropper-dialog"; import { showImageCropperDialog } from "../dialogs/image-cropper-dialog/show-image-cropper-dialog";
import type { HomeAssistant } from "../types"; import type { HomeAssistant } from "../types";
import "./ha-button"; import "./ha-button";
import "./ha-circular-progress";
import "./ha-file-upload"; import "./ha-file-upload";
import { showMediaBrowserDialog } from "./media-player/show-media-browser-dialog"; import { showMediaBrowserDialog } from "./media-player/show-media-browser-dialog";

View File

@ -0,0 +1,58 @@
import ProgressRing from "@shoelace-style/shoelace/dist/components/progress-ring/progress-ring.component";
import progressRingStyles from "@shoelace-style/shoelace/dist/components/progress-ring/progress-ring.styles";
import { css } from "lit";
import { customElement, property } from "lit/decorators";
@customElement("ha-progress-ring")
export class HaProgressRing extends ProgressRing {
@property() public size?: "tiny" | "small" | "medium" | "large";
public updated(changedProps) {
super.updated(changedProps);
if (changedProps.has("size")) {
switch (this.size) {
case "tiny":
this.style.setProperty("--ha-progress-ring-size", "16px");
break;
case "small":
this.style.setProperty("--ha-progress-ring-size", "28px");
break;
case "medium":
this.style.setProperty("--ha-progress-ring-size", "48px");
break;
case "large":
this.style.setProperty("--ha-progress-ring-size", "68px");
break;
case undefined:
this.style.removeProperty("--ha-progress-ring-size");
break;
}
}
}
static override styles = [
progressRingStyles,
css`
:host {
--indicator-color: var(
--ha-progress-ring-indicator-color,
var(--primary-color)
);
--track-color: var(
--ha-progress-ring-divider-color,
var(--divider-color)
);
--track-width: 4px;
--speed: 3.5s;
--size: var(--ha-progress-ring-size, 48px);
}
`,
];
}
declare global {
interface HTMLElementTagNameMap {
"ha-progress-ring": HaProgressRing;
}
}

View File

@ -0,0 +1,56 @@
import Spinner from "@shoelace-style/shoelace/dist/components/spinner/spinner.component";
import spinnerStyles from "@shoelace-style/shoelace/dist/components/spinner/spinner.styles";
import type { PropertyValues } from "lit";
import { css } from "lit";
import { customElement, property } from "lit/decorators";
@customElement("ha-spinner")
export class HaSpinner extends Spinner {
@property() public size?: "tiny" | "small" | "medium" | "large";
protected updated(changedProps: PropertyValues) {
super.updated(changedProps);
if (changedProps.has("size")) {
switch (this.size) {
case "tiny":
this.style.setProperty("--ha-spinner-size", "16px");
break;
case "small":
this.style.setProperty("--ha-spinner-size", "28px");
break;
case "medium":
this.style.setProperty("--ha-spinner-size", "48px");
break;
case "large":
this.style.setProperty("--ha-spinner-size", "68px");
break;
case undefined:
this.style.removeProperty("--ha-progress-ring-size");
break;
}
}
}
static override styles = [
spinnerStyles,
css`
:host {
--indicator-color: var(
--ha-spinner-indicator-color,
var(--primary-color)
);
--track-color: var(--ha-spinner-divider-color, var(--divider-color));
--track-width: 4px;
--speed: 3.5s;
font-size: var(--ha-spinner-size, 48px);
}
`,
];
}
declare global {
interface HTMLElementTagNameMap {
"ha-spinner": HaSpinner;
}
}

View File

@ -22,7 +22,7 @@ import { haStyleDialog } from "../../resources/styles";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import "../ha-button"; import "../ha-button";
import "../ha-check-list-item"; import "../ha-check-list-item";
import "../ha-circular-progress"; import "../ha-spinner";
import "../ha-dialog"; import "../ha-dialog";
import "../ha-dialog-header"; import "../ha-dialog-header";
import "../ha-svg-icon"; import "../ha-svg-icon";
@ -151,7 +151,7 @@ class DialogMediaManage extends LitElement {
${!this._currentItem ${!this._currentItem
? html` ? html`
<div class="refresh"> <div class="refresh">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
` `
: !children.length : !children.length

View File

@ -62,8 +62,7 @@ class MediaManageButton extends LitElement {
--mdc-button-disabled-ink-color: --mdc-theme-primary; --mdc-button-disabled-ink-color: --mdc-theme-primary;
} }
ha-svg-icon[slot="icon"], ha-svg-icon[slot="icon"] {
ha-circular-progress[slot="icon"] {
vertical-align: middle; vertical-align: middle;
} }

View File

@ -45,7 +45,7 @@ import "../entity/ha-entity-picker";
import "../ha-alert"; import "../ha-alert";
import "../ha-button-menu"; import "../ha-button-menu";
import "../ha-card"; import "../ha-card";
import "../ha-circular-progress"; import "../ha-spinner";
import "../ha-fab"; import "../ha-fab";
import "../ha-icon-button"; import "../ha-icon-button";
import "../ha-svg-icon"; import "../ha-svg-icon";
@ -325,7 +325,7 @@ export class HaMediaPlayerBrowse extends LitElement {
} }
if (!this._currentItem) { if (!this._currentItem) {
return html`<ha-circular-progress indeterminate></ha-circular-progress>`; return html`<ha-spinner></ha-spinner>`;
} }
const currentItem = this._currentItem; const currentItem = this._currentItem;
@ -873,11 +873,8 @@ export class HaMediaPlayerBrowse extends LitElement {
direction: ltr; direction: ltr;
} }
ha-circular-progress { ha-spinner {
--mdc-theme-primary: var(--primary-color); margin: 40px auto;
display: flex;
justify-content: center;
margin: 40px;
} }
.container { .container {

View File

@ -10,7 +10,7 @@ import {
} from "../../data/media_source"; } from "../../data/media_source";
import { showAlertDialog } from "../../dialogs/generic/show-dialog-box"; import { showAlertDialog } from "../../dialogs/generic/show-dialog-box";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import "../ha-circular-progress"; import "../ha-spinner";
import "../ha-svg-icon"; import "../ha-svg-icon";
declare global { declare global {
@ -52,12 +52,11 @@ class MediaUploadButton extends LitElement {
> >
${this._uploading > 0 ${this._uploading > 0
? html` ? html`
<ha-circular-progress <ha-spinner
size="small" size="small"
indeterminate
area-label="Uploading" area-label="Uploading"
slot="icon" slot="icon"
></ha-circular-progress> ></ha-spinner>
` `
: html` <ha-svg-icon .path=${mdiUpload} slot="icon"></ha-svg-icon> `} : html` <ha-svg-icon .path=${mdiUpload} slot="icon"></ha-svg-icon> `}
</mwc-button> </mwc-button>
@ -116,7 +115,7 @@ class MediaUploadButton extends LitElement {
} }
ha-svg-icon[slot="icon"], ha-svg-icon[slot="icon"],
ha-circular-progress[slot="icon"] { ha-spinner[slot="icon"] {
vertical-align: middle; vertical-align: middle;
} }

View File

@ -6,7 +6,6 @@ import { LitElement, css, html, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import type { HASSDomEvent } from "../../common/dom/fire_event"; import type { HASSDomEvent } from "../../common/dom/fire_event";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-circular-progress";
import "../../components/ha-dialog"; import "../../components/ha-dialog";
import "../../components/ha-icon-button"; import "../../components/ha-icon-button";
import type { DataEntryFlowStep } from "../../data/data_entry_flow"; import type { DataEntryFlowStep } from "../../data/data_entry_flow";

View File

@ -2,7 +2,7 @@ import { html, nothing } from "lit";
import { customElement } from "lit/decorators"; import { customElement } from "lit/decorators";
import { FlowPreviewGeneric } from "./flow-preview-generic"; import { FlowPreviewGeneric } from "./flow-preview-generic";
import "../../../components/ha-hls-player"; import "../../../components/ha-hls-player";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
@customElement("flow-preview-generic_camera") @customElement("flow-preview-generic_camera")
class FlowPreviewGenericCamera extends FlowPreviewGeneric { class FlowPreviewGenericCamera extends FlowPreviewGeneric {
@ -25,12 +25,11 @@ class FlowPreviewGenericCamera extends FlowPreviewGeneric {
: ""} : ""}
${streamUrl ${streamUrl
? html`<p>Stream:</p> ? html`<p>Stream:</p>
<ha-circular-progress <ha-spinner
class="render-spinner" class="render-spinner"
id="hls-load-spinner" id="hls-load-spinner"
indeterminate
size="large" size="large"
></ha-circular-progress> ></ha-spinner>
<ha-hls-player <ha-hls-player
autoplay autoplay
playsinline playsinline

View File

@ -6,7 +6,7 @@ import { dynamicElement } from "../../common/dom/dynamic-element-directive";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import { isNavigationClick } from "../../common/dom/is-navigation-click"; import { isNavigationClick } from "../../common/dom/is-navigation-click";
import "../../components/ha-alert"; import "../../components/ha-alert";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import { computeInitialHaFormData } from "../../components/ha-form/compute-initial-ha-form-data"; import { computeInitialHaFormData } from "../../components/ha-form/compute-initial-ha-form-data";
import "../../components/ha-form/ha-form"; import "../../components/ha-form/ha-form";
import type { HaFormSchema } from "../../components/ha-form/types"; import type { HaFormSchema } from "../../components/ha-form/types";
@ -84,7 +84,7 @@ class StepFlowForm extends LitElement {
${this._loading ${this._loading
? html` ? html`
<div class="submit-spinner"> <div class="submit-spinner">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
` `
: html` : html`

View File

@ -1,7 +1,7 @@
import type { TemplateResult } from "lit"; import type { TemplateResult } from "lit";
import { css, html, LitElement } from "lit"; import { css, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import type { DataEntryFlowStep } from "../../data/data_entry_flow"; import type { DataEntryFlowStep } from "../../data/data_entry_flow";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import type { FlowConfig, LoadingReason } from "./show-dialog-data-entry-flow"; import type { FlowConfig, LoadingReason } from "./show-dialog-data-entry-flow";
@ -28,7 +28,7 @@ class StepFlowLoading extends LitElement {
return html` return html`
<div class="init-spinner"> <div class="init-spinner">
${description ? html`<div>${description}</div>` : ""} ${description ? html`<div>${description}</div>` : ""}
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
`; `;
} }
@ -38,7 +38,7 @@ class StepFlowLoading extends LitElement {
padding: 50px 100px; padding: 50px 100px;
text-align: center; text-align: center;
} }
ha-circular-progress { ha-spinner {
margin-top: 16px; margin-top: 16px;
} }
`; `;

View File

@ -2,7 +2,7 @@ import "@material/mwc-button";
import type { CSSResultGroup, TemplateResult } from "lit"; import type { CSSResultGroup, TemplateResult } from "lit";
import { css, html, LitElement } from "lit"; import { css, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import type { DataEntryFlowStepProgress } from "../../data/data_entry_flow"; import type { DataEntryFlowStepProgress } from "../../data/data_entry_flow";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import type { FlowConfig } from "./show-dialog-data-entry-flow"; import type { FlowConfig } from "./show-dialog-data-entry-flow";
@ -25,7 +25,7 @@ class StepFlowProgress extends LitElement {
${this.flowConfig.renderShowFormProgressHeader(this.hass, this.step)} ${this.flowConfig.renderShowFormProgressHeader(this.hass, this.step)}
</h2> </h2>
<div class="content"> <div class="content">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
${this.flowConfig.renderShowFormProgressDescription( ${this.flowConfig.renderShowFormProgressDescription(
this.hass, this.hass,
this.step this.step
@ -42,7 +42,7 @@ class StepFlowProgress extends LitElement {
padding: 50px 100px; padding: 50px 100px;
text-align: center; text-align: center;
} }
ha-circular-progress { ha-spinner {
margin-bottom: 16px; margin-bottom: 16px;
} }
`, `,

View File

@ -3,7 +3,7 @@ import type { HassEntity } from "home-assistant-js-websocket";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-markdown"; import "../../../components/ha-markdown";
import "../../../components/ha-textfield"; import "../../../components/ha-textfield";
import type { HomeAssistant } from "../../../types"; import type { HomeAssistant } from "../../../types";
@ -52,10 +52,10 @@ export class MoreInfoConfigurator extends LitElement {
@click=${this._submitClicked} @click=${this._submitClicked}
> >
${this._isConfiguring ${this._isConfiguring
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate size="tiny"
aria-label="Configuring" aria-label="Configuring"
></ha-circular-progress>` ></ha-spinner>`
: ""} : ""}
${this.stateObj.attributes.submit_caption} ${this.stateObj.attributes.submit_caption}
</mwc-button> </mwc-button>
@ -114,12 +114,10 @@ export class MoreInfoConfigurator extends LitElement {
height: 41px; height: 41px;
} }
ha-circular-progress { ha-spinner {
width: 14px; --ha-spinner-indicator-color: var(--primary-text-color);
height: 14px; margin-right: auto;
margin-right: 20px; margin-left: auto;
margin-inline-end: 20px;
margin-inline-start: initial;
} }
`; `;
} }

View File

@ -5,7 +5,7 @@ import { customElement, property, state } from "lit/decorators";
import "../../../components/ha-attributes"; import "../../../components/ha-attributes";
import type { HomeAssistant } from "../../../types"; import type { HomeAssistant } from "../../../types";
import "../../../components/ha-assist-chat"; import "../../../components/ha-assist-chat";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import type { AssistPipeline } from "../../../data/assist_pipeline"; import type { AssistPipeline } from "../../../data/assist_pipeline";
import { getAssistPipeline } from "../../../data/assist_pipeline"; import { getAssistPipeline } from "../../../data/assist_pipeline";
@ -82,10 +82,7 @@ class MoreInfoConversation extends LitElement {
></ha-assist-chat> ></ha-assist-chat>
` `
: html`<div class="pipelines-loading"> : html`<div class="pipelines-loading">
<ha-circular-progress <ha-spinner size="large"></ha-spinner>
indeterminate
size="large"
></ha-circular-progress>
</div>`} </div>`}
`; `;
} }

View File

@ -7,7 +7,7 @@ import { supportsFeature } from "../../../common/entity/supports-feature";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-button"; import "../../../components/ha-button";
import "../../../components/ha-checkbox"; import "../../../components/ha-checkbox";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-faded"; import "../../../components/ha-faded";
import "../../../components/ha-formfield"; import "../../../components/ha-formfield";
import "../../../components/ha-markdown"; import "../../../components/ha-markdown";
@ -307,7 +307,7 @@ class MoreInfoUpdate extends LitElement {
private _renderLoader() { private _renderLoader() {
return html` return html`
<div class="flex center loader"> <div class="flex center loader">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
`; `;
} }

View File

@ -25,7 +25,7 @@ import { caseInsensitiveStringCompare } from "../../common/string/compare";
import type { ScorableTextItem } from "../../common/string/filter/sequence-matching"; import type { ScorableTextItem } from "../../common/string/filter/sequence-matching";
import { fuzzyFilterSort } from "../../common/string/filter/sequence-matching"; import { fuzzyFilterSort } from "../../common/string/filter/sequence-matching";
import { debounce } from "../../common/util/debounce"; import { debounce } from "../../common/util/debounce";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import "../../components/ha-icon-button"; import "../../components/ha-icon-button";
import "../../components/ha-label"; import "../../components/ha-label";
import "../../components/ha-list-item"; import "../../components/ha-list-item";
@ -237,10 +237,7 @@ export class QuickBar extends LitElement {
</ha-textfield> </ha-textfield>
</div> </div>
${!items ${!items
? html`<ha-circular-progress ? html`<ha-spinner size="small"></ha-spinner>`
size="small"
indeterminate
></ha-circular-progress>`
: items.length === 0 : items.length === 0
? html` ? html`
<div class="nothing-found"> <div class="nothing-found">
@ -425,10 +422,9 @@ export class QuickBar extends LitElement {
} }
private _addSpinnerToCommandItem(index: number): void { private _addSpinnerToCommandItem(index: number): void {
const spinner = document.createElement("ha-circular-progress"); const spinner = document.createElement("ha-spinner");
spinner.size = "small"; spinner.size = "small";
spinner.slot = "meta"; spinner.slot = "meta";
spinner.indeterminate = true;
this._getItemAtIndex(index)?.appendChild(spinner); this._getItemAtIndex(index)?.appendChild(spinner);
} }

View File

@ -11,7 +11,7 @@ import { LitElement, css, html, nothing } from "lit";
import { customElement, property, state, query } from "lit/decorators"; import { customElement, property, state, query } from "lit/decorators";
import { isComponentLoaded } from "../../common/config/is_component_loaded"; import { isComponentLoaded } from "../../common/config/is_component_loaded";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import "../../components/ha-md-dialog"; import "../../components/ha-md-dialog";
import type { HaMdDialog } from "../../components/ha-md-dialog"; import type { HaMdDialog } from "../../components/ha-md-dialog";
import "../../components/ha-md-list"; import "../../components/ha-md-list";
@ -103,7 +103,7 @@ class DialogRestart extends LitElement {
${this._loadingHostInfo ${this._loadingHostInfo
? html` ? html`
<div class="loader"> <div class="loader">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
` `
: html` : html`

View File

@ -11,7 +11,7 @@ import { convertTextToSpeech } from "../../data/tts";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import { showAlertDialog } from "../generic/show-dialog-box"; import { showAlertDialog } from "../generic/show-dialog-box";
import type { TTSTryDialogParams } from "./show-dialog-tts-try"; import type { TTSTryDialogParams } from "./show-dialog-tts-try";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
@customElement("dialog-tts-try") @customElement("dialog-tts-try")
export class TTSTryDialog extends LitElement { export class TTSTryDialog extends LitElement {
@ -83,12 +83,11 @@ export class TTSTryDialog extends LitElement {
</ha-textarea> </ha-textarea>
${this._loadingExample ${this._loadingExample
? html` ? html`
<ha-circular-progress <ha-spinner
size="small" size="small"
indeterminate
slot="primaryAction" slot="primaryAction"
class="loading" class="loading"
></ha-circular-progress> ></ha-spinner>
` `
: html` : html`
<ha-button <ha-button

View File

@ -2,7 +2,7 @@ import { html, LitElement, nothing, type PropertyValues } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-button"; import "../../components/ha-button";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import { testAssistSatelliteConnection } from "../../data/assist_satellite"; import { testAssistSatelliteConnection } from "../../data/assist_satellite";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import { AssistantSetupStyles } from "./styles"; import { AssistantSetupStyles } from "./styles";
@ -83,11 +83,7 @@ export class HaVoiceAssistantSetupStepCheck extends LitElement {
)} )}
</p> </p>
${this._showLoader ${this._showLoader ? html`<ha-spinner></ha-spinner>` : nothing}`}
? html`<ha-circular-progress
indeterminate
></ha-circular-progress>`
: nothing} `}
</div>`; </div>`;
} }

View File

@ -5,7 +5,7 @@ import { customElement, property, state } from "lit/decorators";
import { isComponentLoaded } from "../../common/config/is_component_loaded"; import { isComponentLoaded } from "../../common/config/is_component_loaded";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import { computeDomain } from "../../common/entity/compute_domain"; import { computeDomain } from "../../common/entity/compute_domain";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import { import {
createAssistPipeline, createAssistPipeline,
listAssistPipelines, listAssistPipelines,
@ -64,7 +64,7 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement {
"ui.panel.config.voice_assistants.satellite_wizard.local.secondary" "ui.panel.config.voice_assistants.satellite_wizard.local.secondary"
)} )}
</p> </p>
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<p> <p>
${this._detailState || "Installation can take several minutes"} ${this._detailState || "Installation can take several minutes"}
</p>` </p>`
@ -425,7 +425,7 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement {
static styles = [ static styles = [
AssistantSetupStyles, AssistantSetupStyles,
css` css`
ha-circular-progress { ha-spinner {
margin-top: 24px; margin-top: 24px;
margin-bottom: 24px; margin-bottom: 24px;
} }

View File

@ -2,7 +2,8 @@ import type { PropertyValues } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-circular-progress"; import "../../components/ha-progress-ring";
import "../../components/ha-spinner";
import { ON, UNAVAILABLE } from "../../data/entity"; import { ON, UNAVAILABLE } from "../../data/entity";
import { import {
updateCanInstall, updateCanInstall,
@ -84,12 +85,13 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {
"ui.panel.config.voice_assistants.satellite_wizard.update.secondary" "ui.panel.config.voice_assistants.satellite_wizard.update.secondary"
)} )}
</p> </p>
<ha-circular-progress ${progressIsNumeric
.value=${progressIsNumeric ? html`
? (stateObj.attributes.update_percentage as number) / 100 <ha-progress-ring
: undefined} .value=${stateObj.attributes.update_percentage as number}
.indeterminate=${!progressIsNumeric} ></ha-progress-ring>
></ha-circular-progress> `
: html`<ha-spinner></ha-spinner>`}
<p> <p>
${stateObj?.state === UNAVAILABLE ${stateObj?.state === UNAVAILABLE
? "Restarting voice assistant" ? "Restarting voice assistant"
@ -145,7 +147,8 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {
static styles = [ static styles = [
AssistantSetupStyles, AssistantSetupStyles,
css` css`
ha-circular-progress { ha-progress-ring,
ha-spinner {
margin-top: 24px; margin-top: 24px;
margin-bottom: 24px; margin-bottom: 24px;
} }

View File

@ -5,6 +5,7 @@ import { customElement, property, state } from "lit/decorators";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-button"; import "../../components/ha-button";
import "../../components/ha-spinner";
import "../../components/ha-dialog-header"; import "../../components/ha-dialog-header";
import type { AssistSatelliteConfiguration } from "../../data/assist_satellite"; import type { AssistSatelliteConfiguration } from "../../data/assist_satellite";
import { interceptWakeWord } from "../../data/assist_satellite"; import { interceptWakeWord } from "../../data/assist_satellite";
@ -93,7 +94,7 @@ export class HaVoiceAssistantSetupStepWakeWord extends LitElement {
const entityState = this.hass.states[this.assistEntityId]; const entityState = this.hass.states[this.assistEntityId];
if (entityState.state !== "idle") { if (entityState.state !== "idle") {
return html`<ha-circular-progress indeterminate></ha-circular-progress>`; return html`<ha-spinner></ha-spinner>`;
} }
return html`<div class="content"> return html`<div class="content">

View File

@ -19,7 +19,7 @@ import "../../components/ha-icon-button";
import "../../components/ha-list-item"; import "../../components/ha-list-item";
import "../../components/ha-alert"; import "../../components/ha-alert";
import "../../components/ha-assist-chat"; import "../../components/ha-assist-chat";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import type { AssistPipeline } from "../../data/assist_pipeline"; import type { AssistPipeline } from "../../data/assist_pipeline";
import { import {
getAssistPipeline, getAssistPipeline,
@ -113,10 +113,7 @@ export class HaVoiceCommandDialog extends LitElement {
</ha-button> </ha-button>
${!this._pipelines ${!this._pipelines
? html`<div class="pipelines-loading"> ? html`<div class="pipelines-loading">
<ha-circular-progress <ha-spinner size="small"></ha-spinner>
indeterminate
size="small"
></ha-circular-progress>
</div>` </div>`
: this._pipelines?.map( : this._pipelines?.map(
(pipeline) => (pipeline) =>
@ -180,10 +177,7 @@ export class HaVoiceCommandDialog extends LitElement {
</ha-assist-chat> </ha-assist-chat>
` `
: html`<div class="pipelines-loading"> : html`<div class="pipelines-loading">
<ha-circular-progress <ha-spinner size="large"></ha-spinner>
indeterminate
size="large"
></ha-circular-progress>
</div>`} </div>`}
</ha-dialog> </ha-dialog>
`; `;

View File

@ -36,7 +36,7 @@ class HaInitPage extends LitElement {
` `
: html` : html`
<div id="progress-indicator-wrapper"> <div id="progress-indicator-wrapper">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
<div id="loading-text"> <div id="loading-text">
${this.migration ${this.migration
@ -70,7 +70,7 @@ class HaInitPage extends LitElement {
protected firstUpdated() { protected firstUpdated() {
this._showProgressIndicatorTimeout = window.setTimeout(() => { this._showProgressIndicatorTimeout = window.setTimeout(() => {
import("../components/ha-circular-progress"); import("../components/ha-spinner");
}, 5000); }, 5000);
this._retryInterval = window.setInterval(() => { this._retryInterval = window.setInterval(() => {

View File

@ -1,7 +1,7 @@
import type { CSSResultGroup, TemplateResult } from "lit"; import type { CSSResultGroup, TemplateResult } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../components/ha-circular-progress"; import "../components/ha-spinner";
import "../components/ha-icon-button-arrow-prev"; import "../components/ha-icon-button-arrow-prev";
import "../components/ha-menu-button"; import "../components/ha-menu-button";
import { haStyle } from "../resources/styles"; import { haStyle } from "../resources/styles";
@ -40,7 +40,7 @@ class HassLoadingScreen extends LitElement {
`} `}
</div>`} </div>`}
<div class="content"> <div class="content">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
${this.message ${this.message
? html`<div id="loading-text">${this.message}</div>` ? html`<div id="loading-text">${this.message}</div>`
: nothing} : nothing}

View File

@ -6,7 +6,7 @@ import { LOCAL_TIME_ZONE } from "../common/datetime/resolve-time-zone";
import { fireEvent } from "../common/dom/fire_event"; import { fireEvent } from "../common/dom/fire_event";
import type { LocalizeFunc } from "../common/translations/localize"; import type { LocalizeFunc } from "../common/translations/localize";
import "../components/ha-alert"; import "../components/ha-alert";
import "../components/ha-circular-progress"; import "../components/ha-spinner";
import { COUNTRIES } from "../components/ha-country-picker"; import { COUNTRIES } from "../components/ha-country-picker";
import type { ConfigUpdateValues } from "../data/core"; import type { ConfigUpdateValues } from "../data/core";
import { saveCoreConfig } from "../data/core"; import { saveCoreConfig } from "../data/core";
@ -52,7 +52,7 @@ class OnboardingCoreConfig extends LitElement {
} }
if (this._skipCore) { if (this._skipCore) {
return html`<div class="row center"> return html`<div class="row center">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div>`; </div>`;
} }
return html` return html`

View File

@ -13,7 +13,7 @@ import memoizeOne from "memoize-one";
import { fireEvent } from "../common/dom/fire_event"; import { fireEvent } from "../common/dom/fire_event";
import type { LocalizeFunc } from "../common/translations/localize"; import type { LocalizeFunc } from "../common/translations/localize";
import "../components/ha-alert"; import "../components/ha-alert";
import "../components/ha-circular-progress"; import "../components/ha-spinner";
import "../components/ha-formfield"; import "../components/ha-formfield";
import "../components/ha-list-item"; import "../components/ha-list-item";
import "../components/ha-radio"; import "../components/ha-radio";
@ -115,13 +115,7 @@ class OnboardingLocation extends LitElement {
> >
<ha-svg-icon slot="leadingIcon" .path=${mdiMagnify}></ha-svg-icon> <ha-svg-icon slot="leadingIcon" .path=${mdiMagnify}></ha-svg-icon>
${this._working ${this._working
? html` ? html` <ha-spinner slot="trailingIcon" size="small"></ha-spinner> `
<ha-circular-progress
slot="trailingIcon"
indeterminate
size="small"
></ha-circular-progress>
`
: html` : html`
<ha-icon-button <ha-icon-button
@click=${this._handleButtonClick} @click=${this._handleButtonClick}
@ -500,7 +494,7 @@ class OnboardingLocation extends LitElement {
inset-inline-end: 10px; inset-inline-end: 10px;
direction: var(--direction); direction: var(--direction);
} }
ha-textfield > ha-circular-progress { ha-textfield > ha-spinner {
position: relative; position: relative;
left: 12px; left: 12px;
inset-inline-start: 12px; inset-inline-start: 12px;

View File

@ -8,7 +8,7 @@ import "./restore-backup/onboarding-restore-backup-status";
import type { LocalizeFunc } from "../common/translations/localize"; import type { LocalizeFunc } from "../common/translations/localize";
import "../components/ha-card"; import "../components/ha-card";
import "../components/ha-icon-button-arrow-prev"; import "../components/ha-icon-button-arrow-prev";
import "../components/ha-circular-progress"; import "../components/ha-spinner";
import "../components/ha-alert"; import "../components/ha-alert";
import "./onboarding-loading"; import "./onboarding-loading";
import { removeSearchParam } from "../common/url/search-params"; import { removeSearchParam } from "../common/url/search-params";
@ -91,7 +91,7 @@ class OnboardingRestoreBackup extends LitElement {
${ ${
this._view === "loading" this._view === "loading"
? html`<div class="loading"> ? html`<div class="loading">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div>` </div>`
: this._view === "upload" : this._view === "upload"
? html` ? html`

View File

@ -1,7 +1,6 @@
import { css, html, LitElement, type CSSResultGroup } from "lit"; import { css, html, LitElement, type CSSResultGroup } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../components/ha-card"; import "../../components/ha-card";
import "../../components/ha-circular-progress";
import "../../components/ha-alert"; import "../../components/ha-alert";
import "../../components/ha-button"; import "../../components/ha-button";
import "../../panels/config/backup/components/ha-backup-details-restore"; import "../../panels/config/backup/components/ha-backup-details-restore";

View File

@ -1,7 +1,7 @@
import { css, html, LitElement, nothing, type CSSResultGroup } from "lit"; import { css, html, LitElement, nothing, type CSSResultGroup } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../components/ha-card"; import "../../components/ha-card";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import "../../components/ha-alert"; import "../../components/ha-alert";
import "../../components/ha-button"; import "../../components/ha-button";
import { haStyle } from "../../resources/styles"; import { haStyle } from "../../resources/styles";
@ -29,7 +29,7 @@ class OnboardingRestoreBackupStatus extends LitElement {
${this.backupInfo.state === "restore_backup" ${this.backupInfo.state === "restore_backup"
? html` ? html`
<div class="loading"> <div class="loading">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
<p> <p>
${this.localize( ${this.localize(

View File

@ -7,7 +7,7 @@ import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-button"; import "../../../components/ha-button";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-combo-box"; import "../../../components/ha-combo-box";
import { createCloseHeading } from "../../../components/ha-dialog"; import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-markdown"; import "../../../components/ha-markdown";
@ -231,7 +231,7 @@ export class DialogAddApplicationCredential extends LitElement {
${this._loading ${this._loading
? html` ? html`
<div slot="primaryAction" class="submit-spinner"> <div slot="primaryAction" class="submit-spinner">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
` `
: html` : html`

View File

@ -9,7 +9,7 @@ import { css, html, LitElement, nothing } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../../../components/ha-button"; import "../../../../components/ha-button";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-circular-progress"; import "../../../../components/ha-spinner";
import "../../../../components/ha-icon"; import "../../../../components/ha-icon";
type SummaryStatus = "success" | "error" | "info" | "warning" | "loading"; type SummaryStatus = "success" | "error" | "info" | "warning" | "loading";
@ -41,7 +41,7 @@ class HaBackupSummaryCard extends LitElement {
<ha-card outlined> <ha-card outlined>
<div class="summary"> <div class="summary">
${this.status === "loading" ${this.status === "loading"
? html`<ha-circular-progress indeterminate></ha-circular-progress>` ? html`<ha-spinner></ha-spinner>`
: html` : html`
<div class="icon ${this.status}"> <div class="icon ${this.status}">
<ha-svg-icon .path=${ICONS[this.status]}></ha-svg-icon> <ha-svg-icon .path=${ICONS[this.status]}></ha-svg-icon>
@ -115,8 +115,8 @@ class HaBackupSummaryCard extends LitElement {
width: 24px; width: 24px;
height: 24px; height: 24px;
} }
ha-circular-progress { ha-spinner {
--md-circular-progress-size: 40px; --ha-spinner-size: 40px;
} }
.content { .content {
display: flex; display: flex;

View File

@ -5,7 +5,7 @@ import { css, html, LitElement, nothing } from "lit";
import { customElement, property, query, state } from "lit/decorators"; import { customElement, property, query, state } from "lit/decorators";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import "../../../../components/ha-button"; import "../../../../components/ha-button";
import "../../../../components/ha-circular-progress"; import "../../../../components/ha-spinner";
import "../../../../components/ha-dialog-header"; import "../../../../components/ha-dialog-header";
import "../../../../components/ha-password-field"; import "../../../../components/ha-password-field";
@ -239,7 +239,7 @@ class DialogRestoreBackup extends LitElement implements HassDialog {
private _renderProgress() { private _renderProgress() {
return html`<div class="centered"> return html`<div class="centered">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<p> <p>
${this.hass.connected ${this.hass.connected
? this._restoreState() ? this._restoreState()
@ -366,7 +366,7 @@ class DialogRestoreBackup extends LitElement implements HassDialog {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
ha-circular-progress { ha-spinner {
margin-bottom: 16px; margin-bottom: 16px;
} }
ha-alert[alert-type="warning"] { ha-alert[alert-type="warning"] {

View File

@ -27,7 +27,7 @@ import type {
} from "../../../components/data-table/ha-data-table"; } from "../../../components/data-table/ha-data-table";
import "../../../components/ha-button"; import "../../../components/ha-button";
import "../../../components/ha-button-menu"; import "../../../components/ha-button-menu";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-fab"; import "../../../components/ha-fab";
import "../../../components/ha-filter-states"; import "../../../components/ha-filter-states";
import "../../../components/ha-icon"; import "../../../components/ha-icon";
@ -456,11 +456,8 @@ class HaConfigBackupBackups extends SubscribeMixin(LitElement) {
@click=${this._newBackup} @click=${this._newBackup}
> >
${backupInProgress ${backupInProgress
? html`<div slot="icon"> ? html`<div slot="icon" class="loading">
<ha-circular-progress <ha-spinner .size=${"small"}></ha-spinner>
.size=${"small"}
indeterminate
></ha-circular-progress>
</div>` </div>`
: html`<ha-svg-icon : html`<ha-svg-icon
slot="icon" slot="icon"
@ -613,8 +610,11 @@ class HaConfigBackupBackups extends SubscribeMixin(LitElement) {
return [ return [
haStyle, haStyle,
css` css`
ha-circular-progress { .loading {
--md-sys-color-primary: var(--mdc-theme-on-secondary); display: flex;
}
ha-spinner {
--ha-spinner-indicator-color: var(--mdc-theme-on-secondary);
} }
`, `,
]; ];

View File

@ -14,7 +14,8 @@ import "../../../components/ha-alert";
import "../../../components/ha-button"; import "../../../components/ha-button";
import "../../../components/ha-button-menu"; import "../../../components/ha-button-menu";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-fade-in";
import "../../../components/ha-spinner";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
import "../../../components/ha-list-item"; import "../../../components/ha-list-item";
import "../../../components/ha-md-list"; import "../../../components/ha-md-list";
@ -146,7 +147,9 @@ class HaConfigBackupDetails extends LitElement {
</ha-alert> </ha-alert>
` `
: !this._backup : !this._backup
? html`<ha-circular-progress active></ha-circular-progress>` ? html`<ha-fade-in .delay=${1000}
><ha-spinner></ha-spinner
></ha-fade-in>`
: html` : html`
<ha-backup-details-summary <ha-backup-details-summary
.backup=${this._backup} .backup=${this._backup}
@ -357,6 +360,9 @@ class HaConfigBackupDetails extends LitElement {
display: grid; display: grid;
margin-bottom: 24px; margin-bottom: 24px;
} }
ha-spinner {
margin: 24px auto;
}
.card-content { .card-content {
padding: 0 20px; padding: 0 20px;
} }

View File

@ -6,7 +6,8 @@ import "../../../components/ha-button";
import "../../../components/ha-switch"; import "../../../components/ha-switch";
import "../../../components/ha-button-menu"; import "../../../components/ha-button-menu";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-fade-in";
import "../../../components/ha-spinner";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
import "../../../components/ha-list-item"; import "../../../components/ha-list-item";
import "../../../components/ha-md-list"; import "../../../components/ha-md-list";
@ -92,7 +93,9 @@ class HaConfigBackupDetails extends LitElement {
</ha-alert> </ha-alert>
` `
: !this.agentId : !this.agentId
? html`<ha-circular-progress active></ha-circular-progress>` ? html`<ha-fade-in .delay=${1000}
><ha-spinner></ha-spinner
></ha-fade-in>`
: html` : html`
${CLOUD_AGENT === this.agentId ${CLOUD_AGENT === this.agentId
? html` ? html`
@ -358,6 +361,9 @@ class HaConfigBackupDetails extends LitElement {
.card-header { .card-header {
padding-bottom: 8px; padding-bottom: 8px;
} }
ha-spinner {
margin: 24px auto;
}
`; `;
} }

View File

@ -8,7 +8,7 @@ import "../../../components/ha-button";
import "../../../components/ha-button-menu"; import "../../../components/ha-button-menu";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-fab"; import "../../../components/ha-fab";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-icon"; import "../../../components/ha-icon";
import "../../../components/ha-icon-next"; import "../../../components/ha-icon-next";
import "../../../components/ha-icon-overflow-menu"; import "../../../components/ha-icon-overflow-menu";
@ -231,11 +231,8 @@ class HaConfigBackupOverview extends LitElement {
@click=${this._newBackup} @click=${this._newBackup}
> >
${backupInProgress ${backupInProgress
? html`<div slot="icon"> ? html`<div slot="icon" class="loading">
<ha-circular-progress <ha-spinner .size=${"small"}></ha-spinner>
.size=${"small"}
indeterminate
></ha-circular-progress>
</div>` </div>`
: html`<ha-svg-icon slot="icon" .path=${mdiPlus}></ha-svg-icon>`} : html`<ha-svg-icon slot="icon" .path=${mdiPlus}></ha-svg-icon>`}
</ha-fab> </ha-fab>
@ -264,8 +261,11 @@ class HaConfigBackupOverview extends LitElement {
padding-left: 0; padding-left: 0;
padding-right: 0; padding-right: 0;
} }
ha-circular-progress { .loading {
--md-sys-color-primary: var(--mdc-theme-on-secondary); display: flex;
}
ha-spinner {
--ha-spinner-indicator-color: var(--mdc-theme-on-secondary);
} }
`, `,
]; ];

View File

@ -5,7 +5,7 @@ import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-blueprint-picker"; import "../../../components/ha-blueprint-picker";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-markdown"; import "../../../components/ha-markdown";
import "../../../components/ha-selector/ha-selector"; import "../../../components/ha-selector/ha-selector";
import "../../../components/ha-settings-row"; import "../../../components/ha-settings-row";
@ -77,7 +77,7 @@ export abstract class HaBlueprintGenericEditor extends LitElement {
: this.hass.localize( : this.hass.localize(
"ui.panel.config.automation.editor.blueprint.no_blueprints" "ui.panel.config.automation.editor.blueprint.no_blueprints"
) )
: html`<ha-circular-progress indeterminate></ha-circular-progress>`} : html`<ha-spinner></ha-spinner>`}
</div> </div>
${this._config.use_blueprint.path ${this._config.use_blueprint.path

View File

@ -3,7 +3,7 @@ import { mdiOpenInNew } from "@mdi/js";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, query, state } from "lit/decorators"; import { customElement, property, query, state } from "lit/decorators";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import { createCloseHeading } from "../../../components/ha-dialog"; import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-expansion-panel"; import "../../../components/ha-expansion-panel";
import "../../../components/ha-markdown"; import "../../../components/ha-markdown";
@ -159,13 +159,12 @@ class DialogImportBlueprint extends LitElement {
.disabled=${this._importing} .disabled=${this._importing}
> >
${this._importing ${this._importing
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate
size="small" size="small"
.ariaLabel=${this.hass.localize( .ariaLabel=${this.hass.localize(
"ui.panel.config.blueprint.add.importing" "ui.panel.config.blueprint.add.importing"
)} )}
></ha-circular-progress>` ></ha-spinner>`
: ""} : ""}
${this.hass.localize( ${this.hass.localize(
"ui.panel.config.blueprint.add.import_btn" "ui.panel.config.blueprint.add.import_btn"
@ -179,13 +178,12 @@ class DialogImportBlueprint extends LitElement {
.disabled=${this._saving || this._result.validation_errors} .disabled=${this._saving || this._result.validation_errors}
> >
${this._saving ${this._saving
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate
size="small" size="small"
.ariaLabel=${this.hass.localize( .ariaLabel=${this.hass.localize(
"ui.panel.config.blueprint.add.saving" "ui.panel.config.blueprint.add.saving"
)} )}
></ha-circular-progress>` ></ha-spinner>`
: ""} : ""}
${this._result.exists ${this._result.exists
? this.hass.localize( ? this.hass.localize(

View File

@ -3,7 +3,7 @@ import { css, html, LitElement } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { isComponentLoaded } from "../../../../common/config/is_component_loaded"; import { isComponentLoaded } from "../../../../common/config/is_component_loaded";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-circular-progress"; import "../../../../components/ha-spinner";
import "../../../../components/ha-settings-row"; import "../../../../components/ha-settings-row";
import "../../../../components/ha-switch"; import "../../../../components/ha-switch";
import type { CloudStatusLoggedIn, CloudWebhook } from "../../../../data/cloud"; import type { CloudStatusLoggedIn, CloudWebhook } from "../../../../data/cloud";
@ -88,9 +88,7 @@ export class CloudWebhooks extends LitElement {
${this._progress.includes(entry.webhook_id) ${this._progress.includes(entry.webhook_id)
? html` ? html`
<div class="progress"> <div class="progress">
<ha-circular-progress <ha-spinner></ha-spinner>
indeterminate
></ha-circular-progress>
</div> </div>
` `
: this._cloudHooks![entry.webhook_id] : this._cloudHooks![entry.webhook_id]

View File

@ -6,7 +6,7 @@ import { customElement, property, query, state } from "lit/decorators";
import { fireEvent } from "../../../../common/dom/fire_event"; import { fireEvent } from "../../../../common/dom/fire_event";
import "../../../../components/ha-alert"; import "../../../../components/ha-alert";
import "../../../../components/ha-button"; import "../../../../components/ha-button";
import "../../../../components/ha-circular-progress"; import "../../../../components/ha-spinner";
import "../../../../components/ha-dialog-header"; import "../../../../components/ha-dialog-header";
import "../../../../components/ha-markdown-element"; import "../../../../components/ha-markdown-element";
import "../../../../components/ha-md-dialog"; import "../../../../components/ha-md-dialog";
@ -67,7 +67,7 @@ export class DialogSupportPackage extends LitElement {
></ha-markdown-element>` ></ha-markdown-element>`
: html` : html`
<div class="progress-container"> <div class="progress-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
Generating preview... Generating preview...
</div> </div>
`} `}

View File

@ -9,7 +9,7 @@ import memoizeOne from "memoize-one";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/entity/state-badge"; import "../../../components/entity/state-badge";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-icon-next"; import "../../../components/ha-icon-next";
import "../../../components/ha-list-item"; import "../../../components/ha-list-item";
import type { DeviceRegistryEntry } from "../../../data/device_registry"; import type { DeviceRegistryEntry } from "../../../data/device_registry";
@ -103,14 +103,14 @@ class HaConfigUpdates extends SubscribeMixin(LitElement) {
)} )}
></state-badge> ></state-badge>
${this.narrow && entity.attributes.in_progress ${this.narrow && entity.attributes.in_progress
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate
slot="graphic" slot="graphic"
class="absolute" class="absolute"
size="small"
.ariaLabel=${this.hass.localize( .ariaLabel=${this.hass.localize(
"ui.panel.config.updates.update_in_progress" "ui.panel.config.updates.update_in_progress"
)} )}
></ha-circular-progress>` ></ha-spinner>`
: ""} : ""}
<span <span
>${deviceEntry >${deviceEntry
@ -125,14 +125,13 @@ class HaConfigUpdates extends SubscribeMixin(LitElement) {
</span> </span>
${!this.narrow ${!this.narrow
? entity.attributes.in_progress ? entity.attributes.in_progress
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate
size="small" size="small"
slot="meta" slot="meta"
.ariaLabel=${this.hass.localize( .ariaLabel=${this.hass.localize(
"ui.panel.config.updates.update_in_progress" "ui.panel.config.updates.update_in_progress"
)} )}
></ha-circular-progress>` ></ha-spinner>`
: html`<ha-icon-next slot="meta"></ha-icon-next>` : html`<ha-icon-next slot="meta"></ha-icon-next>`
: ""} : ""}
</ha-list-item> </ha-list-item>
@ -190,10 +189,10 @@ class HaConfigUpdates extends SubscribeMixin(LitElement) {
cursor: pointer; cursor: pointer;
font-size: 16px; font-size: 16px;
} }
ha-circular-progress.absolute { ha-spinner.absolute {
position: absolute; position: absolute;
width: 40px; width: 28px;
height: 40px; height: 28px;
} }
state-badge.updating { state-badge.updating {
opacity: 0.5; opacity: 0.5;

View File

@ -6,7 +6,7 @@ import { classMap } from "lit/directives/class-map";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { isComponentLoaded } from "../../../common/config/is_component_loaded";
import { dynamicElement } from "../../../common/dom/dynamic-element-directive"; import { dynamicElement } from "../../../common/dom/dynamic-element-directive";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import { createCloseHeading } from "../../../components/ha-dialog"; import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-list-item"; import "../../../components/ha-list-item";
import "../../../components/ha-tooltip"; import "../../../components/ha-tooltip";
@ -175,9 +175,7 @@ export class DialogHelperDetail extends LitElement {
</mwc-button>`} </mwc-button>`}
`; `;
} else if (this._loading || this._helperFlows === undefined) { } else if (this._loading || this._helperFlows === undefined) {
content = html`<ha-circular-progress content = html`<ha-spinner></ha-spinner>`;
indeterminate
></ha-circular-progress>`;
} else { } else {
const items = this._filterHelpers( const items = this._filterHelpers(
HELPERS, HELPERS,

View File

@ -48,6 +48,7 @@ import { loadVirtualizer } from "../../../resources/virtualizer";
import type { HomeAssistant } from "../../../types"; import type { HomeAssistant } from "../../../types";
import "./ha-domain-integrations"; import "./ha-domain-integrations";
import "./ha-integration-list-item"; import "./ha-integration-list-item";
import "../../../components/ha-spinner";
import type { AddIntegrationDialogParams } from "./show-add-integration-dialog"; import type { AddIntegrationDialogParams } from "./show-add-integration-dialog";
import { showYamlIntegrationDialog } from "./show-add-integration-dialog"; import { showYamlIntegrationDialog } from "./show-add-integration-dialog";
@ -468,7 +469,7 @@ class AddIntegrationDialog extends LitElement {
</lit-virtualizer> </lit-virtualizer>
</mwc-list>` </mwc-list>`
: html`<div class="flex center"> : html`<div class="flex center">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div>`} `; </div>`} `;
} }
@ -740,7 +741,7 @@ class AddIntegrationDialog extends LitElement {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
ha-circular-progress { ha-spinner {
margin: 24px 0; margin: 24px 0;
} }
mwc-list { mwc-list {

View File

@ -5,7 +5,7 @@ import type { CSSResultGroup } from "lit";
import { LitElement, css, html, nothing } from "lit"; import { LitElement, css, html, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import "../../../../../components/ha-list-item"; import "../../../../../components/ha-list-item";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import "../../../../../components/ha-qr-code"; import "../../../../../components/ha-qr-code";
@ -80,7 +80,7 @@ class DialogMatterManageFabrics extends LitElement {
)} )}
</mwc-list>` </mwc-list>`
: html`<div class="center"> : html`<div class="center">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div>`} </div>`}
</ha-dialog> </ha-dialog>
`; `;

View File

@ -4,7 +4,7 @@ import type { CSSResultGroup } from "lit";
import { LitElement, css, html, nothing } from "lit"; import { LitElement, css, html, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import "../../../../../components/ha-qr-code"; import "../../../../../components/ha-qr-code";
import { domainToName } from "../../../../../data/integration"; import { domainToName } from "../../../../../data/integration";
@ -99,7 +99,7 @@ class DialogMatterOpenCommissioningWindow extends LitElement {
: this._status === "started" : this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
<b> <b>
@ -230,7 +230,7 @@ class DialogMatterOpenCommissioningWindow extends LitElement {
text-align: center; text-align: center;
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
} }

View File

@ -5,7 +5,7 @@ import type { CSSResultGroup } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import "../../../../../components/ha-list-item"; import "../../../../../components/ha-list-item";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import { pingMatterNode } from "../../../../../data/matter"; import { pingMatterNode } from "../../../../../data/matter";
@ -92,7 +92,7 @@ class DialogMatterPingNode extends LitElement {
: this._status === "started" : this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
<b> <b>
@ -185,7 +185,7 @@ class DialogMatterPingNode extends LitElement {
--mdc-list-side-padding: 0; --mdc-list-side-padding: 0;
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
} }

View File

@ -4,7 +4,7 @@ import type { CSSResultGroup } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import { interviewMatterNode } from "../../../../../data/matter"; import { interviewMatterNode } from "../../../../../data/matter";
import { haStyleDialog } from "../../../../../resources/styles"; import { haStyleDialog } from "../../../../../resources/styles";
@ -62,7 +62,7 @@ class DialogMatterReinterviewNode extends LitElement {
: this._status === "started" : this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
<b> <b>
@ -178,7 +178,7 @@ class DialogMatterReinterviewNode extends LitElement {
height: 48px; height: 48px;
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
} }

View File

@ -2,7 +2,7 @@ import { LitElement, css, html } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import type { HomeAssistant } from "../../../../../../types"; import type { HomeAssistant } from "../../../../../../types";
import { sharedStyles } from "./matter-add-device-shared-styles"; import { sharedStyles } from "./matter-add-device-shared-styles";
import "../../../../../../components/ha-circular-progress"; import "../../../../../../components/ha-spinner";
@customElement("matter-add-device-commissioning") @customElement("matter-add-device-commissioning")
class MatterAddDeviceCommissioning extends LitElement { class MatterAddDeviceCommissioning extends LitElement {
@ -11,10 +11,7 @@ class MatterAddDeviceCommissioning extends LitElement {
render() { render() {
return html` return html`
<div class="content"> <div class="content">
<ha-circular-progress <ha-spinner size="medium"></ha-spinner>
size="medium"
indeterminate
></ha-circular-progress>
<p> <p>
${this.hass.localize( ${this.hass.localize(
"ui.dialogs.matter-add-device.commissioning.note" "ui.dialogs.matter-add-device.commissioning.note"
@ -33,7 +30,7 @@ class MatterAddDeviceCommissioning extends LitElement {
flex-direction: column; flex-direction: column;
text-align: center; text-align: center;
} }
ha-circular-progress { ha-spinner {
margin-bottom: 24px; margin-bottom: 24px;
} }
`, `,

View File

@ -1,6 +1,6 @@
import { LitElement, css, html } from "lit"; import { LitElement, css, html } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import "../../../../../../components/ha-circular-progress"; import "../../../../../../components/ha-spinner";
import { import {
canCommissionMatterExternal, canCommissionMatterExternal,
startExternalCommissioning, startExternalCommissioning,
@ -23,10 +23,7 @@ class MatterAddDeviceNew extends LitElement {
if (canCommissionMatterExternal(this.hass)) { if (canCommissionMatterExternal(this.hass)) {
return html` return html`
<div class="content"> <div class="content">
<ha-circular-progress <ha-spinner size="medium"></ha-spinner>
size="medium"
indeterminate
></ha-circular-progress>
</div> </div>
`; `;
} }

View File

@ -5,7 +5,7 @@ import type { CSSResultGroup } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import "../../../../../components/ha-svg-icon"; import "../../../../../components/ha-svg-icon";
import "../../../../../components/ha-tooltip"; import "../../../../../components/ha-tooltip";
@ -108,7 +108,7 @@ class DialogZHAReconfigureDevice extends LitElement {
${this._status === "started" ${this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
<b> <b>
@ -452,7 +452,7 @@ class DialogZHAReconfigureDevice extends LitElement {
height: 48px; height: 48px;
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
margin-inline-end: 20px; margin-inline-end: 20px;

View File

@ -2,7 +2,7 @@ import "@material/mwc-button";
import type { CSSResultGroup, PropertyValues, TemplateResult } from "lit"; import type { CSSResultGroup, PropertyValues, TemplateResult } from "lit";
import { css, html, LitElement } from "lit"; import { css, html, LitElement } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import type { ZHADevice } from "../../../../../data/zha"; import type { ZHADevice } from "../../../../../data/zha";
import { DEVICE_MESSAGE_TYPES, LOG_OUTPUT } from "../../../../../data/zha"; import { DEVICE_MESSAGE_TYPES, LOG_OUTPUT } from "../../../../../data/zha";
import "../../../../../layouts/hass-tabs-subpage"; import "../../../../../layouts/hass-tabs-subpage";
@ -89,10 +89,7 @@ class ZHAAddDevicesPage extends LitElement {
"ui.panel.config.zha.add_device_page.spinner" "ui.panel.config.zha.add_device_page.spinner"
)} )}
</h1> </h1>
<ha-circular-progress <ha-spinner aria-label="Searching"></ha-spinner>
indeterminate
aria-label="Searching"
></ha-circular-progress>
` `
: html` : html`
<div> <div>
@ -237,7 +234,7 @@ class ZHAAddDevicesPage extends LitElement {
.error { .error {
color: var(--error-color); color: var(--error-color);
} }
ha-circular-progress { ha-spinner {
margin: 20px; margin: 20px;
} }
.searching { .searching {

View File

@ -5,7 +5,7 @@ import { customElement, property, state, query } from "lit/decorators";
import type { HASSDomEvent } from "../../../../../common/dom/fire_event"; import type { HASSDomEvent } from "../../../../../common/dom/fire_event";
import { navigate } from "../../../../../common/navigate"; import { navigate } from "../../../../../common/navigate";
import type { SelectionChangedEvent } from "../../../../../components/data-table/ha-data-table"; import type { SelectionChangedEvent } from "../../../../../components/data-table/ha-data-table";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import type { ZHADeviceEndpoint, ZHAGroup } from "../../../../../data/zha"; import type { ZHADeviceEndpoint, ZHAGroup } from "../../../../../data/zha";
import { addGroup, fetchGroupableDevices } from "../../../../../data/zha"; import { addGroup, fetchGroupableDevices } from "../../../../../data/zha";
import "../../../../../layouts/hass-subpage"; import "../../../../../layouts/hass-subpage";
@ -105,13 +105,12 @@ export class ZHAAddGroupPage extends LitElement {
class="button" class="button"
> >
${this._processingAdd ${this._processingAdd
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate
size="small" size="small"
.ariaLabel=${this.hass!.localize( .ariaLabel=${this.hass!.localize(
"ui.panel.config.zha.groups.creating_group" "ui.panel.config.zha.groups.creating_group"
)} )}
></ha-circular-progress>` ></ha-spinner>`
: ""} : ""}
${this.hass!.localize( ${this.hass!.localize(
"ui.panel.config.zha.groups.create" "ui.panel.config.zha.groups.create"

View File

@ -7,7 +7,7 @@ import type {
DataTableColumnContainer, DataTableColumnContainer,
DataTableRowData, DataTableRowData,
} from "../../../../../components/data-table/ha-data-table"; } from "../../../../../components/data-table/ha-data-table";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import "../../../../../components/ha-code-editor"; import "../../../../../components/ha-code-editor";
import type { ZHADevice } from "../../../../../data/zha"; import type { ZHADevice } from "../../../../../data/zha";
import { fetchDevices } from "../../../../../data/zha"; import { fetchDevices } from "../../../../../data/zha";
@ -116,10 +116,7 @@ class ZHADeviceNeighbors extends LitElement {
} }
return html` return html`
${!this._devices ${!this._devices
? html`<ha-circular-progress ? html`<ha-spinner size="large"></ha-spinner>`
size="large"
indeterminate
></ha-circular-progress>`
: html`<ha-data-table : html`<ha-data-table
.hass=${this.hass} .hass=${this.hass}
.columns=${this._columns(this.narrow)} .columns=${this._columns(this.narrow)}

View File

@ -7,7 +7,7 @@ import type { HASSDomEvent } from "../../../../../common/dom/fire_event";
import { navigate } from "../../../../../common/navigate"; import { navigate } from "../../../../../common/navigate";
import type { SelectionChangedEvent } from "../../../../../components/data-table/ha-data-table"; import type { SelectionChangedEvent } from "../../../../../components/data-table/ha-data-table";
import "../../../../../components/ha-card"; import "../../../../../components/ha-card";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import "../../../../../components/ha-icon-button"; import "../../../../../components/ha-icon-button";
import type { ZHADeviceEndpoint, ZHAGroup } from "../../../../../data/zha"; import type { ZHADeviceEndpoint, ZHAGroup } from "../../../../../data/zha";
import { import {
@ -171,12 +171,11 @@ export class ZHAGroupPage extends LitElement {
class="button" class="button"
> >
${this._processingRemove ${this._processingRemove
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate
.ariaLabel=${this.hass.localize( .ariaLabel=${this.hass.localize(
"ui.panel.config.zha.groups.removing_members" "ui.panel.config.zha.groups.removing_members"
)} )}
></ha-circular-progress>` ></ha-spinner>`
: nothing} : nothing}
${this.hass!.localize( ${this.hass!.localize(
"ui.panel.config.zha.groups.remove_members" "ui.panel.config.zha.groups.remove_members"
@ -208,11 +207,10 @@ export class ZHAGroupPage extends LitElement {
class="button" class="button"
> >
${this._processingAdd ${this._processingAdd
? html`<ha-circular-progress ? html`<ha-spinner
active
size="small" size="small"
aria-label="Saving" aria-label="Saving"
></ha-circular-progress>` ></ha-spinner>`
: ""} : ""}
${this.hass!.localize( ${this.hass!.localize(
"ui.panel.config.zha.groups.add_members" "ui.panel.config.zha.groups.add_members"

View File

@ -4,7 +4,7 @@ import type { DeviceRegistryEntry } from "../../../../../../data/device_registry
import type { HomeAssistant } from "../../../../../../types"; import type { HomeAssistant } from "../../../../../../types";
import { invokeZWaveCCApi } from "../../../../../../data/zwave_js"; import { invokeZWaveCCApi } from "../../../../../../data/zwave_js";
import "../../../../../../components/ha-alert"; import "../../../../../../components/ha-alert";
import "../../../../../../components/ha-circular-progress"; import "../../../../../../components/ha-spinner";
import { extractApiErrorMessage } from "../../../../../../data/hassio/common"; import { extractApiErrorMessage } from "../../../../../../data/hassio/common";
import "./zwave_js-capability-control-multilevel-switch"; import "./zwave_js-capability-control-multilevel-switch";
@ -41,7 +41,7 @@ class ZWaveJSCapabilityColorSwitch extends LitElement {
return html`<ha-alert alert-type="error">${this._error}</ha-alert>`; return html`<ha-alert alert-type="error">${this._error}</ha-alert>`;
} }
if (!this._color_components) { if (!this._color_components) {
return html`<ha-circular-progress indeterminate></ha-circular-progress>`; return html`<ha-spinner></ha-spinner>`;
} }
return this._color_components.map( return this._color_components.map(
(color) => (color) =>

View File

@ -11,7 +11,7 @@ import "../../../../../../components/ha-list-item";
import "../../../../../../components/ha-alert"; import "../../../../../../components/ha-alert";
import "../../../../../../components/ha-switch"; import "../../../../../../components/ha-switch";
import "../../../../../../components/ha-formfield"; import "../../../../../../components/ha-formfield";
import "../../../../../../components/ha-circular-progress"; import "../../../../../../components/ha-spinner";
import type { HaSwitch } from "../../../../../../components/ha-switch"; import type { HaSwitch } from "../../../../../../components/ha-switch";
import type { HaProgressButton } from "../../../../../../components/buttons/ha-progress-button"; import type { HaProgressButton } from "../../../../../../components/buttons/ha-progress-button";
import { extractApiErrorMessage } from "../../../../../../data/hassio/common"; import { extractApiErrorMessage } from "../../../../../../data/hassio/common";
@ -100,7 +100,7 @@ class ZWaveJSCapabilityDoorLock extends LitElement {
!this._capabilities || !this._capabilities ||
this._currentDoorLockMode === undefined this._currentDoorLockMode === undefined
) { ) {
return html`<ha-circular-progress indeterminate></ha-circular-progress>`; return html`<ha-spinner></ha-spinner>`;
} }
const isValid = this._isValid(); const isValid = this._isValid();

View File

@ -8,7 +8,7 @@ import { ifDefined } from "lit/directives/if-defined";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-alert"; import "../../../../../components/ha-alert";
import type { HaCheckbox } from "../../../../../components/ha-checkbox"; import type { HaCheckbox } from "../../../../../components/ha-checkbox";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import "../../../../../components/ha-checkbox"; import "../../../../../components/ha-checkbox";
import "../../../../../components/ha-formfield"; import "../../../../../components/ha-formfield";
@ -146,14 +146,11 @@ class DialogZWaveJSAddNode extends LitElement {
> >
${this._status === "loading" ${this._status === "loading"
? html`<div style="display: flex; justify-content: center;"> ? html`<div style="display: flex; justify-content: center;">
<ha-circular-progress <ha-spinner size="large"></ha-spinner>
size="large"
indeterminate
></ha-circular-progress>
</div>` </div>`
: this._status === "waiting_for_device" : this._status === "waiting_for_device"
? html`<div class="flex-container"> ? html`<div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<p> <p>
${this.hass.localize( ${this.hass.localize(
"ui.panel.config.zwave_js.add_node.waiting_for_device" "ui.panel.config.zwave_js.add_node.waiting_for_device"
@ -338,9 +335,7 @@ class DialogZWaveJSAddNode extends LitElement {
"ui.panel.config.zwave_js.add_node.searching_device" "ui.panel.config.zwave_js.add_node.searching_device"
)} )}
</h3> </h3>
<ha-circular-progress <ha-spinner></ha-spinner>
indeterminate
></ha-circular-progress>
<p> <p>
${this.hass.localize( ${this.hass.localize(
"ui.panel.config.zwave_js.add_node.follow_device_instructions" "ui.panel.config.zwave_js.add_node.follow_device_instructions"
@ -355,9 +350,7 @@ class DialogZWaveJSAddNode extends LitElement {
"ui.panel.config.zwave_js.add_node.searching_device" "ui.panel.config.zwave_js.add_node.searching_device"
)} )}
</h2> </h2>
<ha-circular-progress <ha-spinner></ha-spinner>
indeterminate
></ha-circular-progress>
<p> <p>
${this.hass.localize( ${this.hass.localize(
"ui.panel.config.zwave_js.add_node.follow_device_instructions" "ui.panel.config.zwave_js.add_node.follow_device_instructions"
@ -409,9 +402,7 @@ class DialogZWaveJSAddNode extends LitElement {
: this._status === "interviewing" : this._status === "interviewing"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress <ha-spinner></ha-spinner>
indeterminate
></ha-circular-progress>
<div class="status"> <div class="status">
<p> <p>
<b <b
@ -1004,7 +995,7 @@ class DialogZWaveJSAddNode extends LitElement {
color: var(--secondary-text-color); color: var(--secondary-text-color);
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
margin-inline-end: 20px; margin-inline-end: 20px;

View File

@ -4,7 +4,7 @@ import type { CSSResultGroup } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import type { DeviceRegistryEntry } from "../../../../../data/device_registry"; import type { DeviceRegistryEntry } from "../../../../../data/device_registry";
import { computeDeviceName } from "../../../../../data/device_registry"; import { computeDeviceName } from "../../../../../data/device_registry";
@ -96,7 +96,7 @@ class DialogZWaveJSRebuildNodeRoutes extends LitElement {
${this._status === "started" ${this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
${this.hass.localize( ${this.hass.localize(
@ -252,7 +252,7 @@ class DialogZWaveJSRebuildNodeRoutes extends LitElement {
} }
.flex-container ha-svg-icon, .flex-container ha-svg-icon,
.flex-container ha-circular-progress { .flex-container ha-spinner {
margin-right: 20px; margin-right: 20px;
margin-inline-end: 20px; margin-inline-end: 20px;
margin-inline-start: initial; margin-inline-start: initial;

View File

@ -5,7 +5,7 @@ import type { CSSResultGroup } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import { reinterviewZwaveNode } from "../../../../../data/zwave_js"; import { reinterviewZwaveNode } from "../../../../../data/zwave_js";
import { haStyleDialog } from "../../../../../resources/styles"; import { haStyleDialog } from "../../../../../resources/styles";
@ -69,7 +69,7 @@ class DialogZWaveJSReinterviewNode extends LitElement {
${this._status === "started" ${this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
<b> <b>
@ -234,7 +234,7 @@ class DialogZWaveJSReinterviewNode extends LitElement {
height: 48px; height: 48px;
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
margin-inline-end: 20px; margin-inline-end: 20px;

View File

@ -5,7 +5,7 @@ import type { CSSResultGroup } from "lit";
import { css, html, LitElement, nothing } from "lit"; import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import type { ZWaveJSRemovedNode } from "../../../../../data/zwave_js"; import type { ZWaveJSRemovedNode } from "../../../../../data/zwave_js";
import { removeFailedZwaveNode } from "../../../../../data/zwave_js"; import { removeFailedZwaveNode } from "../../../../../data/zwave_js";
@ -90,7 +90,7 @@ class DialogZWaveJSRemoveFailedNode extends LitElement {
${this._status === "started" ${this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
<b> <b>
@ -216,7 +216,7 @@ class DialogZWaveJSRemoveFailedNode extends LitElement {
height: 48px; height: 48px;
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
margin-inline-end: 20px; margin-inline-end: 20px;

View File

@ -5,7 +5,7 @@ import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import type { UnsubscribeFunc } from "home-assistant-js-websocket"; import type { UnsubscribeFunc } from "home-assistant-js-websocket";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import "../../../../../components/ha-alert"; import "../../../../../components/ha-alert";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
import { haStyleDialog } from "../../../../../resources/styles"; import { haStyleDialog } from "../../../../../resources/styles";
@ -82,7 +82,7 @@ class DialogZWaveJSRemoveNode extends LitElement {
${this._status === "started" ${this._status === "started"
? html` ? html`
<div class="flex-container"> <div class="flex-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
<div class="status"> <div class="status">
<p> <p>
<b <b
@ -249,7 +249,7 @@ class DialogZWaveJSRemoveNode extends LitElement {
height: 48px; height: 48px;
} }
.flex-container ha-circular-progress, .flex-container ha-spinner,
.flex-container ha-svg-icon { .flex-container ha-svg-icon {
margin-right: 20px; margin-right: 20px;
margin-inline-end: 20px; margin-inline-end: 20px;

View File

@ -15,6 +15,7 @@ import { classMap } from "lit/directives/class-map";
import "../../../../../components/ha-card"; import "../../../../../components/ha-card";
import "../../../../../components/ha-expansion-panel"; import "../../../../../components/ha-expansion-panel";
import "../../../../../components/ha-fab"; import "../../../../../components/ha-fab";
import "../../../../../components/ha-spinner";
import "../../../../../components/ha-icon-button"; import "../../../../../components/ha-icon-button";
import "../../../../../components/ha-icon-next"; import "../../../../../components/ha-icon-next";
import "../../../../../components/ha-svg-icon"; import "../../../../../components/ha-svg-icon";
@ -141,9 +142,7 @@ class ZWaveJSConfigDashboard extends SubscribeMixin(LitElement) {
<div class="heading"> <div class="heading">
<div class="icon"> <div class="icon">
${this._status === "disconnected" ${this._status === "disconnected"
? html`<ha-circular-progress ? html`<ha-spinner></ha-spinner>`
indeterminate
></ha-circular-progress>`
: html` : html`
<ha-svg-icon <ha-svg-icon
.path=${this._icon} .path=${this._icon}
@ -423,12 +422,7 @@ class ZWaveJSConfigDashboard extends SubscribeMixin(LitElement) {
@change=${this._dataCollectionToggled} @change=${this._dataCollectionToggled}
></ha-switch> ></ha-switch>
` `
: html` : html` <ha-spinner size="small"></ha-spinner> `}
<ha-circular-progress
size="small"
indeterminate
></ha-circular-progress>
`}
</div> </div>
<div class="card-content"> <div class="card-content">
<p> <p>

View File

@ -4,7 +4,7 @@ import { mdiCloseCircle } from "@mdi/js";
import "../../../../../components/ha-textfield"; import "../../../../../components/ha-textfield";
import "../../../../../components/ha-select"; import "../../../../../components/ha-select";
import "../../../../../components/ha-button"; import "../../../../../components/ha-button";
import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-spinner";
import "../../../../../components/ha-list-item"; import "../../../../../components/ha-list-item";
import type { HomeAssistant } from "../../../../../types"; import type { HomeAssistant } from "../../../../../types";
import { import {
@ -91,9 +91,7 @@ class ZWaveJSCustomParam extends LitElement {
</ha-select> </ha-select>
</div> </div>
<div class="custom-config-buttons"> <div class="custom-config-buttons">
${this._isLoading ${this._isLoading ? html`<ha-spinner></ha-spinner>` : nothing}
? html`<ha-circular-progress indeterminate></ha-circular-progress>`
: nothing}
<ha-button @click=${this._getCustomConfigValue}> <ha-button @click=${this._getCustomConfigValue}>
${this.hass.localize( ${this.hass.localize(
"ui.panel.config.zwave_js.node_config.get_value" "ui.panel.config.zwave_js.node_config.get_value"

View File

@ -34,7 +34,7 @@ import "../../../components/ha-card";
import "../../../components/ha-button"; import "../../../components/ha-button";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
import "../../../components/ha-svg-icon"; import "../../../components/ha-svg-icon";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/chips/ha-assist-chip"; import "../../../components/chips/ha-assist-chip";
import "../../../components/ha-menu"; import "../../../components/ha-menu";
import "../../../components/ha-md-menu-item"; import "../../../components/ha-md-menu-item";
@ -284,9 +284,7 @@ class ErrorLogCard extends LitElement {
<div id="scroll-top-marker"></div> <div id="scroll-top-marker"></div>
${this._loadingPrevState === "loading" ${this._loadingPrevState === "loading"
? html`<div class="loading-old"> ? html`<div class="loading-old">
<ha-circular-progress <ha-spinner></ha-spinner>
.indeterminate=${this._loadingPrevState === "loading"}
></ha-circular-progress>
</div>` </div>`
: nothing} : nothing}
${this._loadingState === "loading" ${this._loadingState === "loading"

View File

@ -9,7 +9,7 @@ import "../../../components/buttons/ha-call-service-button";
import "../../../components/buttons/ha-progress-button"; import "../../../components/buttons/ha-progress-button";
import "../../../components/ha-button-menu"; import "../../../components/ha-button-menu";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
import "../../../components/ha-list-item"; import "../../../components/ha-list-item";
import { getSignedPath } from "../../../data/auth"; import { getSignedPath } from "../../../data/auth";
@ -102,7 +102,7 @@ export class SystemLogCard extends LitElement {
${this._items === undefined ${this._items === undefined
? html` ? html`
<div class="loading-container"> <div class="loading-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
` `
: html` : html`

View File

@ -6,7 +6,7 @@ import { css, html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-expansion-panel"; import "../../../components/ha-expansion-panel";
import "../../../components/ha-formfield"; import "../../../components/ha-formfield";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
@ -70,8 +70,7 @@ export class HassioHostname extends LitElement {
<div class="card-actions"> <div class="card-actions">
<mwc-button @click=${this._save} .disabled=${this._processing}> <mwc-button @click=${this._save} .disabled=${this._processing}>
${this._processing ${this._processing
? html`<ha-circular-progress indeterminate size="small"> ? html`<ha-spinner size="small"></ha-spinner>`
</ha-circular-progress>`
: this.hass.localize("ui.common.save")} : this.hass.localize("ui.common.save")}
</mwc-button> </mwc-button>
</div> </div>

View File

@ -9,7 +9,7 @@ import "../../../components/ha-alert";
import "../../../components/ha-button"; import "../../../components/ha-button";
import "../../../components/ha-button-menu"; import "../../../components/ha-button-menu";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-expansion-panel"; import "../../../components/ha-expansion-panel";
import "../../../components/ha-formfield"; import "../../../components/ha-formfield";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
@ -146,8 +146,7 @@ export class HassioNetwork extends LitElement {
.disabled=${this._scanning} .disabled=${this._scanning}
> >
${this._scanning ${this._scanning
? html`<ha-circular-progress indeterminate size="small"> ? html`<ha-spinner size="small"> </ha-spinner>`
</ha-circular-progress>`
: this.hass.localize( : this.hass.localize(
"ui.panel.config.network.supervisor.scan_ap" "ui.panel.config.network.supervisor.scan_ap"
)} )}
@ -263,8 +262,7 @@ export class HassioNetwork extends LitElement {
<div class="card-actions"> <div class="card-actions">
<ha-button @click=${this._updateNetwork} .disabled=${!this._dirty}> <ha-button @click=${this._updateNetwork} .disabled=${!this._dirty}>
${this._processing ${this._processing
? html`<ha-circular-progress indeterminate size="small"> ? html`<ha-spinner size="small"></ha-spinner>`
</ha-circular-progress>`
: this.hass.localize("ui.common.save")} : this.hass.localize("ui.common.save")}
</ha-button> </ha-button>
<ha-button @click=${this._clear}> <ha-button @click=${this._clear}>

View File

@ -10,7 +10,7 @@ import { copyToClipboard } from "../../../common/util/copy-clipboard";
import { subscribePollingCollection } from "../../../common/util/subscribe-polling"; import { subscribePollingCollection } from "../../../common/util/subscribe-polling";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import { createCloseHeading } from "../../../components/ha-dialog"; import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-metric"; import "../../../components/ha-metric";
import type { HassioStats } from "../../../data/hassio/common"; import type { HassioStats } from "../../../data/hassio/common";
@ -295,7 +295,7 @@ class DialogSystemInformation extends LitElement {
if (!this._systemInfo) { if (!this._systemInfo) {
sections.push(html` sections.push(html`
<div class="loading-container"> <div class="loading-container">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
`); `);
} else { } else {
@ -314,12 +314,7 @@ class DialogSystemInformation extends LitElement {
const info = domainInfo.info[key] as SystemCheckValueObject; const info = domainInfo.info[key] as SystemCheckValueObject;
if (info.type === "pending") { if (info.type === "pending") {
value = html` value = html` <ha-spinner size="small"></ha-spinner> `;
<ha-circular-progress
indeterminate
size="small"
></ha-circular-progress>
`;
} else if (info.type === "failed") { } else if (info.type === "failed") {
value = html` value = html`
<span class="error">${info.error}</span>${!info.more_info <span class="error">${info.error}</span>${!info.more_info

View File

@ -5,7 +5,7 @@ import { customElement, property, state } from "lit/decorators";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import { stopPropagation } from "../../../common/dom/stop_propagation"; import { stopPropagation } from "../../../common/dom/stop_propagation";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-select"; import "../../../components/ha-select";
import "../../../components/ha-dialog"; import "../../../components/ha-dialog";
import { import {
@ -109,12 +109,7 @@ class MoveDatadiskDialog extends LitElement {
> >
${this._moving ${this._moving
? html` ? html`
<ha-circular-progress <ha-spinner aria-label="Moving" size="large"> </ha-spinner>
aria-label="Moving"
size="large"
indeterminate
>
</ha-circular-progress>
<p class="progress-text"> <p class="progress-text">
${this.hass.localize( ${this.hass.localize(
"ui.panel.config.storage.datadisk.moving_desc" "ui.panel.config.storage.datadisk.moving_desc"
@ -207,7 +202,7 @@ class MoveDatadiskDialog extends LitElement {
ha-select { ha-select {
width: 100%; width: 100%;
} }
ha-circular-progress { ha-spinner {
display: block; display: block;
margin: 32px; margin: 32px;
text-align: center; text-align: center;

View File

@ -3,7 +3,7 @@ import { LitElement, css, html, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-button"; import "../../../components/ha-button";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import { createCloseHeading } from "../../../components/ha-dialog"; import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-formfield"; import "../../../components/ha-formfield";
import "../../../components/ha-icon-button"; import "../../../components/ha-icon-button";
@ -194,7 +194,7 @@ export class DialogAddUser extends LitElement {
${this._loading ${this._loading
? html` ? html`
<div slot="primaryAction" class="submit-spinner"> <div slot="primaryAction" class="submit-spinner">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
` `
: html` : html`

View File

@ -4,7 +4,7 @@ import { customElement, property } from "lit/decorators";
import "../../../../components/ha-card"; import "../../../../components/ha-card";
import "../../../../components/ha-alert"; import "../../../../components/ha-alert";
import "../../../../components/ha-button"; import "../../../../components/ha-button";
import "../../../../components/ha-circular-progress"; import "../../../../components/ha-spinner";
import "../../../../components/ha-expansion-panel"; import "../../../../components/ha-expansion-panel";
import type { PipelineRun } from "../../../../data/assist_pipeline"; import type { PipelineRun } from "../../../../data/assist_pipeline";
import type { HomeAssistant } from "../../../../types"; import type { HomeAssistant } from "../../../../types";
@ -90,9 +90,7 @@ const renderProgress = (
if ("error" in pipelineRun) { if ("error" in pipelineRun) {
return html``; return html``;
} }
return html` return html` <ha-spinner size="small"></ha-spinner> `;
<ha-circular-progress size="small" indeterminate></ha-circular-progress>
`;
} }
const duration = const duration =

View File

@ -6,7 +6,7 @@ import { customElement, property, state } from "lit/decorators";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { formatDateTime } from "../../../common/datetime/format_date_time"; import { formatDateTime } from "../../../common/datetime/format_date_time";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-dialog"; import "../../../components/ha-dialog";
import "../../../components/ha-form/ha-form"; import "../../../components/ha-form/ha-form";
import "../../../components/ha-icon-next"; import "../../../components/ha-icon-next";
@ -129,7 +129,7 @@ export class DialogStatisticsFixUnsupportedUnitMetadata extends LitElement {
let stats: TemplateResult; let stats: TemplateResult;
if (!this._stats5min || !this._statsHour) { if (!this._stats5min || !this._statsHour) {
stats = html`<ha-circular-progress indeterminate></ha-circular-progress>`; stats = html`<ha-spinner></ha-spinner>`;
} else if (this._statsHour.length < 1 && this._stats5min.length < 1) { } else if (this._statsHour.length < 1 && this._stats5min.length < 1) {
stats = html`<p> stats = html`<p>
${this.hass.localize( ${this.hass.localize(
@ -526,7 +526,7 @@ export class DialogStatisticsFixUnsupportedUnitMetadata extends LitElement {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.stat-list ha-circular-progress { .stat-list ha-spinner {
margin: 0 auto; margin: 0 auto;
} }
`, `,

View File

@ -2,7 +2,7 @@ import "@material/mwc-button/mwc-button";
import type { CSSResultGroup } from "lit"; import type { CSSResultGroup } from "lit";
import { html, LitElement, nothing } from "lit"; import { html, LitElement, nothing } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-dialog"; import "../../../components/ha-dialog";
import { clearStatistics, getStatisticLabel } from "../../../data/recorder"; import { clearStatistics, getStatisticLabel } from "../../../data/recorder";
@ -139,11 +139,10 @@ export class DialogStatisticsFix extends LitElement {
.disabled=${this._clearing} .disabled=${this._clearing}
> >
${this._clearing ${this._clearing
? html`<ha-circular-progress ? html`<ha-spinner
indeterminate
size="small" size="small"
aria-label="Saving" aria-label="Saving"
></ha-circular-progress>` ></ha-spinner>`
: nothing} : nothing}
${this.hass.localize("ui.common.delete")} ${this.hass.localize("ui.common.delete")}
</mwc-button> </mwc-button>

View File

@ -6,7 +6,7 @@ import { customElement, property, state } from "lit/decorators";
import { classMap } from "lit/directives/class-map"; import { classMap } from "lit/directives/class-map";
import { debounce } from "../../../common/util/debounce"; import { debounce } from "../../../common/util/debounce";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import "../../../components/ha-code-editor"; import "../../../components/ha-code-editor";
import "../../../components/ha-card"; import "../../../components/ha-card";
import type { RenderTemplateResult } from "../../../data/ws-templates"; import type { RenderTemplateResult } from "../../../data/ws-templates";
@ -168,11 +168,10 @@ class HaPanelDevTemplate extends LitElement {
> >
<div class="card-content"> <div class="card-content">
${this._rendering ${this._rendering
? html`<ha-circular-progress ? html`<ha-spinner
class="render-spinner" class="render-spinner"
indeterminate
size="small" size="small"
></ha-circular-progress>` ></ha-spinner>`
: ""} : ""}
${this._error ${this._error
? html`<ha-alert ? html`<ha-alert

View File

@ -6,7 +6,7 @@ import { componentsWithService } from "../../../common/config/components_with_se
import "../../../components/buttons/ha-call-service-button"; import "../../../components/buttons/ha-call-service-button";
import "../../../components/ha-alert"; import "../../../components/ha-alert";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import type { CheckConfigResult } from "../../../data/core"; import type { CheckConfigResult } from "../../../data/core";
import { checkCoreConfig } from "../../../data/core"; import { checkCoreConfig } from "../../../data/core";
import { domainToName } from "../../../data/integration"; import { domainToName } from "../../../data/integration";
@ -94,7 +94,7 @@ export class DeveloperYamlConfig extends LitElement {
? html`<div ? html`<div
class="validate-container layout vertical center-center" class="validate-container layout vertical center-center"
> >
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> ` </div> `
: nothing : nothing
: html` : html`

View File

@ -27,7 +27,7 @@ import {
import { MIN_TIME_BETWEEN_UPDATES } from "../../components/chart/ha-chart-base"; import { MIN_TIME_BETWEEN_UPDATES } from "../../components/chart/ha-chart-base";
import "../../components/chart/state-history-charts"; import "../../components/chart/state-history-charts";
import type { StateHistoryCharts } from "../../components/chart/state-history-charts"; import type { StateHistoryCharts } from "../../components/chart/state-history-charts";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import "../../components/ha-date-range-picker"; import "../../components/ha-date-range-picker";
import "../../components/ha-icon-button"; import "../../components/ha-icon-button";
import "../../components/ha-button-menu"; import "../../components/ha-button-menu";
@ -185,7 +185,7 @@ class HaPanelHistory extends LitElement {
</div> </div>
${this._isLoading ${this._isLoading
? html`<div class="progress-wrapper"> ? html`<div class="progress-wrapper">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div>` </div>`
: !entitiesSelected : !entitiesSelected
? html`<div class="start-search"> ? html`<div class="start-search">

View File

@ -14,7 +14,6 @@ import { computeDomain } from "../../common/entity/compute_domain";
import { navigate } from "../../common/navigate"; import { navigate } from "../../common/navigate";
import { computeTimelineColor } from "../../components/chart/timeline-color"; import { computeTimelineColor } from "../../components/chart/timeline-color";
import "../../components/entity/state-badge"; import "../../components/entity/state-badge";
import "../../components/ha-circular-progress";
import "../../components/ha-icon-next"; import "../../components/ha-icon-next";
import "../../components/ha-relative-time"; import "../../components/ha-relative-time";
import type { LogbookEntry } from "../../data/logbook"; import type { LogbookEntry } from "../../data/logbook";

View File

@ -4,7 +4,7 @@ import { customElement, property, state } from "lit/decorators";
import { isComponentLoaded } from "../../common/config/is_component_loaded"; import { isComponentLoaded } from "../../common/config/is_component_loaded";
import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { computeStateDomain } from "../../common/entity/compute_state_domain";
import { throttle } from "../../common/util/throttle"; import { throttle } from "../../common/util/throttle";
import "../../components/ha-circular-progress"; import "../../components/ha-spinner";
import type { LogbookEntry, LogbookStreamMessage } from "../../data/logbook"; import type { LogbookEntry, LogbookStreamMessage } from "../../data/logbook";
import { subscribeLogbook } from "../../data/logbook"; import { subscribeLogbook } from "../../data/logbook";
import type { TraceContexts } from "../../data/trace"; import type { TraceContexts } from "../../data/trace";
@ -103,7 +103,7 @@ export class HaLogbook extends LitElement {
if (this._logbookEntries === undefined) { if (this._logbookEntries === undefined) {
return html` return html`
<div class="progress-wrapper"> <div class="progress-wrapper">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
</div> </div>
`; `;
} }

View File

@ -5,7 +5,7 @@ import { css, html, LitElement, nothing } from "lit";
import { customElement, property } from "lit/decorators"; import { customElement, property } from "lit/decorators";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import type { LovelaceCardConfig } from "../../../data/lovelace/config/card"; import type { LovelaceCardConfig } from "../../../data/lovelace/config/card";
import type { HomeAssistant } from "../../../types"; import type { HomeAssistant } from "../../../types";
import type { LovelaceCard } from "../types"; import type { LovelaceCard } from "../types";
@ -39,7 +39,7 @@ export class HuiStartingCard extends LitElement implements LovelaceCard {
return html` return html`
<div class="content"> <div class="content">
<ha-circular-progress indeterminate></ha-circular-progress> <ha-spinner></ha-spinner>
${this.hass.localize("ui.panel.lovelace.cards.starting.description")} ${this.hass.localize("ui.panel.lovelace.cards.starting.description")}
</div> </div>
`; `;
@ -50,7 +50,7 @@ export class HuiStartingCard extends LitElement implements LovelaceCard {
display: block; display: block;
height: calc(100vh - var(--header-height)); height: calc(100vh - var(--header-height));
} }
ha-circular-progress { ha-spinner {
margin-bottom: 20px; margin-bottom: 20px;
} }
.content { .content {

View File

@ -8,7 +8,7 @@ import { computeDomain } from "../../../common/entity/compute_domain";
import parseAspectRatio from "../../../common/util/parse-aspect-ratio"; import parseAspectRatio from "../../../common/util/parse-aspect-ratio";
import "../../../components/ha-camera-stream"; import "../../../components/ha-camera-stream";
import type { HaCameraStream } from "../../../components/ha-camera-stream"; import type { HaCameraStream } from "../../../components/ha-camera-stream";
import "../../../components/ha-circular-progress"; import "../../../components/ha-spinner";
import type { CameraEntity } from "../../../data/camera"; import type { CameraEntity } from "../../../data/camera";
import { fetchThumbnailUrlWithCache } from "../../../data/camera"; import { fetchThumbnailUrlWithCache } from "../../../data/camera";
import { UNAVAILABLE } from "../../../data/entity"; import { UNAVAILABLE } from "../../../data/entity";
@ -256,11 +256,7 @@ export class HuiImage extends LitElement {
: undefined, : undefined,
})} })}
> >
<ha-circular-progress <ha-spinner class="render-spinner" size="small"></ha-spinner>
class="render-spinner"
indeterminate
size="small"
></ha-circular-progress>
</div>` </div>`
: ""} : ""}
</div> </div>

Some files were not shown because too many files have changed in this diff Show More