mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-24 09:46:36 +00:00
feat: Dynamically adjust gradient percentages based on min/max values (#18479)
This commit is contained in:
parent
a9e34d7590
commit
5f2375fe84
@ -58,10 +58,10 @@ const matchMaxScale = (
|
||||
return outputColors.map((value) => Math.round(value * factor));
|
||||
};
|
||||
|
||||
const mired2kelvin = (miredTemperature: number) =>
|
||||
export const mired2kelvin = (miredTemperature: number) =>
|
||||
Math.floor(1000000 / miredTemperature);
|
||||
|
||||
const kelvin2mired = (kelvintTemperature: number) =>
|
||||
export const kelvin2mired = (kelvintTemperature: number) =>
|
||||
Math.floor(1000000 / kelvintTemperature);
|
||||
|
||||
export const rgbww2rgb = (
|
||||
|
@ -1,9 +1,13 @@
|
||||
import { css, html, LitElement } from "lit";
|
||||
import { html, LitElement } from "lit";
|
||||
import { customElement, property } from "lit/decorators";
|
||||
import { styleMap } from "lit/directives/style-map";
|
||||
import memoizeOne from "memoize-one";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import type { ColorTempSelector } from "../../data/selector";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
import "../ha-labeled-slider";
|
||||
import { generateColorTemperatureGradient } from "../../dialogs/more-info/components/lights/light-color-temp-picker";
|
||||
import { mired2kelvin } from "../../common/color/convert-light-color";
|
||||
|
||||
@customElement("ha-selector-color_temp")
|
||||
export class HaColorTempSelector extends LitElement {
|
||||
@ -22,13 +26,21 @@ export class HaColorTempSelector extends LitElement {
|
||||
@property({ type: Boolean }) public required = true;
|
||||
|
||||
protected render() {
|
||||
const min = this.selector.color_temp?.min_mireds ?? 153;
|
||||
const max = this.selector.color_temp?.max_mireds ?? 500;
|
||||
|
||||
const gradient = this._generateTemperatureGradient(min, max);
|
||||
|
||||
return html`
|
||||
<ha-labeled-slider
|
||||
style=${styleMap({
|
||||
"--ha-slider-background": `linear-gradient( to var(--float-end), ${gradient})`,
|
||||
})}
|
||||
labeled
|
||||
icon="hass:thermometer"
|
||||
.caption=${this.label || ""}
|
||||
.min=${this.selector.color_temp?.min_mireds ?? 153}
|
||||
.max=${this.selector.color_temp?.max_mireds ?? 500}
|
||||
.min=${min}
|
||||
.max=${max}
|
||||
.value=${this.value}
|
||||
.disabled=${this.disabled}
|
||||
.helper=${this.helper}
|
||||
@ -38,22 +50,16 @@ export class HaColorTempSelector extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private _generateTemperatureGradient = memoizeOne(
|
||||
(min: number, max: number) =>
|
||||
generateColorTemperatureGradient(mired2kelvin(min), mired2kelvin(max))
|
||||
);
|
||||
|
||||
private _valueChanged(ev: CustomEvent) {
|
||||
fireEvent(this, "value-changed", {
|
||||
value: Number((ev.detail as any).value),
|
||||
});
|
||||
}
|
||||
|
||||
static styles = css`
|
||||
ha-labeled-slider {
|
||||
--ha-slider-background: linear-gradient(
|
||||
to var(--float-end),
|
||||
rgb(255, 160, 0) 0%,
|
||||
white 50%,
|
||||
rgb(166, 209, 255) 100%
|
||||
);
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
Loading…
x
Reference in New Issue
Block a user