mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
Rename indicator property and add show-handle property for ha bar slider (#14466)
This commit is contained in:
parent
40d0455936
commit
e43f3b193e
@ -8,7 +8,7 @@ import "../../../../src/components/ha-card";
|
|||||||
const sliders: {
|
const sliders: {
|
||||||
id: string;
|
id: string;
|
||||||
label: string;
|
label: string;
|
||||||
mode?: "start" | "end" | "indicator";
|
mode?: "start" | "end" | "cursor";
|
||||||
class?: string;
|
class?: string;
|
||||||
}[] = [
|
}[] = [
|
||||||
{
|
{
|
||||||
@ -22,9 +22,9 @@ const sliders: {
|
|||||||
mode: "end",
|
mode: "end",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "slider-indicator",
|
id: "slider-cursor",
|
||||||
label: "Slider (indicator mode)",
|
label: "Slider (cursor mode)",
|
||||||
mode: "indicator",
|
mode: "cursor",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "slider-start-custom",
|
id: "slider-start-custom",
|
||||||
@ -39,9 +39,9 @@ const sliders: {
|
|||||||
class: "custom",
|
class: "custom",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "slider-indicator-custom",
|
id: "slider-cursor-custom",
|
||||||
label: "Slider (indicator mode) and custom style",
|
label: "Slider (cursor mode) and custom style",
|
||||||
mode: "indicator",
|
mode: "cursor",
|
||||||
class: "custom",
|
class: "custom",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
@ -48,11 +48,14 @@ export class HaBarSlider extends LitElement {
|
|||||||
public disabled = false;
|
public disabled = false;
|
||||||
|
|
||||||
@property()
|
@property()
|
||||||
public mode?: "start" | "end" | "indicator" = "start";
|
public mode?: "start" | "end" | "cursor" = "start";
|
||||||
|
|
||||||
@property({ type: Boolean })
|
@property({ type: Boolean, reflect: true })
|
||||||
public vertical = false;
|
public vertical = false;
|
||||||
|
|
||||||
|
@property({ type: Boolean, attribute: "show-handle" })
|
||||||
|
public showHandle = false;
|
||||||
|
|
||||||
@property({ type: Number })
|
@property({ type: Number })
|
||||||
public value?: number;
|
public value?: number;
|
||||||
|
|
||||||
@ -71,7 +74,7 @@ export class HaBarSlider extends LitElement {
|
|||||||
public pressed = false;
|
public pressed = false;
|
||||||
|
|
||||||
valueToPercentage(value: number) {
|
valueToPercentage(value: number) {
|
||||||
return (value - this.min) / (this.max - this.min);
|
return (this.boundedValue(value) - this.min) / (this.max - this.min);
|
||||||
}
|
}
|
||||||
|
|
||||||
percentageToValue(value: number) {
|
percentageToValue(value: number) {
|
||||||
@ -241,11 +244,11 @@ export class HaBarSlider extends LitElement {
|
|||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<div class="slider-track-background"></div>
|
<div class="slider-track-background"></div>
|
||||||
${this.mode === "indicator"
|
${this.mode === "cursor"
|
||||||
? html`
|
? html`
|
||||||
<div
|
<div
|
||||||
class=${classMap({
|
class=${classMap({
|
||||||
"slider-track-indicator": true,
|
"slider-track-cursor": true,
|
||||||
vertical: this.vertical,
|
vertical: this.vertical,
|
||||||
})}
|
})}
|
||||||
></div>
|
></div>
|
||||||
@ -256,6 +259,7 @@ export class HaBarSlider extends LitElement {
|
|||||||
"slider-track-bar": true,
|
"slider-track-bar": true,
|
||||||
vertical: this.vertical,
|
vertical: this.vertical,
|
||||||
[this.mode ?? "start"]: true,
|
[this.mode ?? "start"]: true,
|
||||||
|
"show-handle": this.showHandle,
|
||||||
})}
|
})}
|
||||||
></div>
|
></div>
|
||||||
`}
|
`}
|
||||||
@ -302,12 +306,18 @@ export class HaBarSlider extends LitElement {
|
|||||||
--border-radius: var(--slider-bar-border-radius);
|
--border-radius: var(--slider-bar-border-radius);
|
||||||
--handle-size: 4px;
|
--handle-size: 4px;
|
||||||
--handle-margin: calc(var(--slider-bar-thickness) / 8);
|
--handle-margin: calc(var(--slider-bar-thickness) / 8);
|
||||||
|
--slider-size: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: var(--slider-bar-color);
|
background-color: var(--slider-bar-color);
|
||||||
transition: transform 180ms ease-in-out;
|
transition: transform 180ms ease-in-out;
|
||||||
}
|
}
|
||||||
|
.slider .slider-track-bar.show-handle {
|
||||||
|
--slider-size: calc(
|
||||||
|
100% - 2 * var(--handle-margin) - var(--handle-size)
|
||||||
|
);
|
||||||
|
}
|
||||||
.slider .slider-track-bar::after {
|
.slider .slider-track-bar::after {
|
||||||
display: block;
|
display: block;
|
||||||
content: "";
|
content: "";
|
||||||
@ -319,7 +329,11 @@ export class HaBarSlider extends LitElement {
|
|||||||
.slider .slider-track-bar {
|
.slider .slider-track-bar {
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
transform: translate3d(calc((var(--value, 0) - 1) * 100%), 0, 0);
|
transform: translate3d(
|
||||||
|
calc((var(--value, 0) - 1) * var(--slider-size)),
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
);
|
||||||
border-radius: 0 var(--border-radius) var(--border-radius) 0;
|
border-radius: 0 var(--border-radius) var(--border-radius) 0;
|
||||||
}
|
}
|
||||||
.slider .slider-track-bar:after {
|
.slider .slider-track-bar:after {
|
||||||
@ -332,7 +346,11 @@ export class HaBarSlider extends LitElement {
|
|||||||
.slider .slider-track-bar.end {
|
.slider .slider-track-bar.end {
|
||||||
right: 0;
|
right: 0;
|
||||||
left: initial;
|
left: initial;
|
||||||
transform: translate3d(calc(var(--value, 0) * 100%), 0, 0);
|
transform: translate3d(
|
||||||
|
calc(var(--value, 0) * var(--slider-size)),
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
);
|
||||||
border-radius: var(--border-radius) 0 0 var(--border-radius);
|
border-radius: var(--border-radius) 0 0 var(--border-radius);
|
||||||
}
|
}
|
||||||
.slider .slider-track-bar.end::after {
|
.slider .slider-track-bar.end::after {
|
||||||
@ -343,7 +361,11 @@ export class HaBarSlider extends LitElement {
|
|||||||
.slider .slider-track-bar.vertical {
|
.slider .slider-track-bar.vertical {
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
transform: translate3d(0, calc((1 - var(--value, 0)) * 100%), 0);
|
transform: translate3d(
|
||||||
|
0,
|
||||||
|
calc((1 - var(--value, 0)) * var(--slider-size)),
|
||||||
|
0
|
||||||
|
);
|
||||||
border-radius: var(--border-radius) var(--border-radius) 0 0;
|
border-radius: var(--border-radius) var(--border-radius) 0 0;
|
||||||
}
|
}
|
||||||
.slider .slider-track-bar.vertical:after {
|
.slider .slider-track-bar.vertical:after {
|
||||||
@ -357,7 +379,11 @@ export class HaBarSlider extends LitElement {
|
|||||||
.slider .slider-track-bar.vertical.end {
|
.slider .slider-track-bar.vertical.end {
|
||||||
top: 0;
|
top: 0;
|
||||||
bottom: initial;
|
bottom: initial;
|
||||||
transform: translate3d(0, calc((0 - var(--value, 0)) * 100%), 0);
|
transform: translate3d(
|
||||||
|
0,
|
||||||
|
calc((0 - var(--value, 0)) * var(--slider-size)),
|
||||||
|
0
|
||||||
|
);
|
||||||
border-radius: 0 0 var(--border-radius) var(--border-radius);
|
border-radius: 0 0 var(--border-radius) var(--border-radius);
|
||||||
}
|
}
|
||||||
.slider .slider-track-bar.vertical.end::after {
|
.slider .slider-track-bar.vertical.end::after {
|
||||||
@ -365,7 +391,7 @@ export class HaBarSlider extends LitElement {
|
|||||||
bottom: var(--handle-margin);
|
bottom: var(--handle-margin);
|
||||||
}
|
}
|
||||||
|
|
||||||
.slider .slider-track-indicator:after {
|
.slider .slider-track-cursor:after {
|
||||||
display: block;
|
display: block;
|
||||||
content: "";
|
content: "";
|
||||||
background-color: rgb(var(--rgb-secondary-text-color));
|
background-color: rgb(var(--rgb-secondary-text-color));
|
||||||
@ -378,8 +404,8 @@ export class HaBarSlider extends LitElement {
|
|||||||
border-radius: var(--handle-size);
|
border-radius: var(--handle-size);
|
||||||
}
|
}
|
||||||
|
|
||||||
.slider .slider-track-indicator {
|
.slider .slider-track-cursor {
|
||||||
--indicator-size: calc(var(--slider-bar-thickness) / 4);
|
--cursor-size: calc(var(--slider-bar-thickness) / 4);
|
||||||
--handle-size: 4px;
|
--handle-size: 4px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
@ -387,29 +413,29 @@ export class HaBarSlider extends LitElement {
|
|||||||
transition: left 180ms ease-in-out, bottom 180ms ease-in-out;
|
transition: left 180ms ease-in-out, bottom 180ms ease-in-out;
|
||||||
top: 0;
|
top: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: calc(var(--value, 0) * (100% - var(--indicator-size)));
|
left: calc(var(--value, 0) * (100% - var(--cursor-size)));
|
||||||
width: var(--indicator-size);
|
width: var(--cursor-size);
|
||||||
}
|
}
|
||||||
.slider .slider-track-indicator:after {
|
.slider .slider-track-cursor:after {
|
||||||
height: 50%;
|
height: 50%;
|
||||||
width: var(--handle-size);
|
width: var(--handle-size);
|
||||||
}
|
}
|
||||||
|
|
||||||
.slider .slider-track-indicator.vertical {
|
.slider .slider-track-cursor.vertical {
|
||||||
top: initial;
|
top: initial;
|
||||||
right: 0;
|
right: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
bottom: calc(var(--value, 0) * (100% - var(--indicator-size)));
|
bottom: calc(var(--value, 0) * (100% - var(--cursor-size)));
|
||||||
height: var(--indicator-size);
|
height: var(--cursor-size);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.slider .slider-track-indicator.vertical:after {
|
.slider .slider-track-cursor.vertical:after {
|
||||||
height: var(--handle-size);
|
height: var(--handle-size);
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
:host([pressed]) .slider-track-bar,
|
:host([pressed]) .slider-track-bar,
|
||||||
:host([pressed]) .slider-track-indicator {
|
:host([pressed]) .slider-track-cursor {
|
||||||
transition: none;
|
transition: none;
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
@ -9,7 +9,10 @@ export class HaTileSlider extends LitElement {
|
|||||||
public disabled = false;
|
public disabled = false;
|
||||||
|
|
||||||
@property()
|
@property()
|
||||||
public mode?: "start" | "end" | "indicator" = "start";
|
public mode?: "start" | "end" | "cursor" = "start";
|
||||||
|
|
||||||
|
@property({ type: Boolean, attribute: "show-handle" })
|
||||||
|
public showHandle = false;
|
||||||
|
|
||||||
@property({ type: Number })
|
@property({ type: Number })
|
||||||
public value?: number;
|
public value?: number;
|
||||||
@ -35,6 +38,7 @@ export class HaTileSlider extends LitElement {
|
|||||||
.min=${this.min}
|
.min=${this.min}
|
||||||
.max=${this.max}
|
.max=${this.max}
|
||||||
aria-label=${ifDefined(this.label)}
|
aria-label=${ifDefined(this.label)}
|
||||||
|
.showHandle=${this.showHandle}
|
||||||
>
|
>
|
||||||
</ha-bar-slider>
|
</ha-bar-slider>
|
||||||
`;
|
`;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { HassEntity } from "home-assistant-js-websocket";
|
import { HassEntity } from "home-assistant-js-websocket";
|
||||||
import { css, html, LitElement, TemplateResult } from "lit";
|
import { css, html, LitElement, TemplateResult } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
|
import { stateActive } from "../../../common/entity/state_active";
|
||||||
import "../../../components/tile/ha-tile-slider";
|
import "../../../components/tile/ha-tile-slider";
|
||||||
import { UNAVAILABLE } from "../../../data/entity";
|
import { UNAVAILABLE } from "../../../data/entity";
|
||||||
import { HomeAssistant } from "../../../types";
|
import { HomeAssistant } from "../../../types";
|
||||||
@ -50,6 +51,7 @@ class HuiLightBrightnessTileFeature
|
|||||||
.value=${position}
|
.value=${position}
|
||||||
min="1"
|
min="1"
|
||||||
max="100"
|
max="100"
|
||||||
|
.showHandle=${stateActive(this.stateObj)}
|
||||||
.disabled=${this.stateObj!.state === UNAVAILABLE}
|
.disabled=${this.stateObj!.state === UNAVAILABLE}
|
||||||
@value-changed=${this._valueChanged}
|
@value-changed=${this._valueChanged}
|
||||||
.label=${this.hass.localize("ui.card.light.brightness")}
|
.label=${this.hass.localize("ui.card.light.brightness")}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user