mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
20230202.0 (#15323)
This commit is contained in:
commit
e6de8ec94d
@ -67,7 +67,7 @@ module.exports.babelOptions = ({ latestBuild }) => ({
|
|||||||
"@babel/preset-env",
|
"@babel/preset-env",
|
||||||
{
|
{
|
||||||
useBuiltIns: "entry",
|
useBuiltIns: "entry",
|
||||||
corejs: "3.15",
|
corejs: { version: "3.27", proposals: true },
|
||||||
bugfixes: true,
|
bugfixes: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// Compat needs to be first import
|
// Compat needs to be first import
|
||||||
|
import "../../src/resources/compatibility";
|
||||||
import { isNavigationClick } from "../../src/common/dom/is-navigation-click";
|
import { isNavigationClick } from "../../src/common/dom/is-navigation-click";
|
||||||
import { navigate } from "../../src/common/navigate";
|
import { navigate } from "../../src/common/navigate";
|
||||||
import {
|
import {
|
||||||
@ -6,7 +7,6 @@ import {
|
|||||||
provideHass,
|
provideHass,
|
||||||
} from "../../src/fake_data/provide_hass";
|
} from "../../src/fake_data/provide_hass";
|
||||||
import { HomeAssistantAppEl } from "../../src/layouts/home-assistant";
|
import { HomeAssistantAppEl } from "../../src/layouts/home-assistant";
|
||||||
import "../../src/resources/compatibility";
|
|
||||||
import { HomeAssistant } from "../../src/types";
|
import { HomeAssistant } from "../../src/types";
|
||||||
import { selectedDemoConfig } from "./configs/demo-configs";
|
import { selectedDemoConfig } from "./configs/demo-configs";
|
||||||
import { mockAuth } from "./stubs/auth";
|
import { mockAuth } from "./stubs/auth";
|
||||||
|
17
package.json
17
package.json
@ -24,7 +24,7 @@
|
|||||||
"author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)",
|
"author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@braintree/sanitize-url": "^6.0.0",
|
"@braintree/sanitize-url": "^6.0.2",
|
||||||
"@codemirror/autocomplete": "^6.4.0",
|
"@codemirror/autocomplete": "^6.4.0",
|
||||||
"@codemirror/commands": "^6.2.0",
|
"@codemirror/commands": "^6.2.0",
|
||||||
"@codemirror/language": "^6.4.0",
|
"@codemirror/language": "^6.4.0",
|
||||||
@ -32,10 +32,10 @@
|
|||||||
"@codemirror/search": "^6.2.3",
|
"@codemirror/search": "^6.2.3",
|
||||||
"@codemirror/state": "^6.2.0",
|
"@codemirror/state": "^6.2.0",
|
||||||
"@codemirror/view": "^6.7.1",
|
"@codemirror/view": "^6.7.1",
|
||||||
"@formatjs/intl-datetimeformat": "^4.2.5",
|
"@formatjs/intl-datetimeformat": "^6.4.3",
|
||||||
"@formatjs/intl-getcanonicallocales": "^2.0.5",
|
"@formatjs/intl-getcanonicallocales": "^2.0.5",
|
||||||
"@formatjs/intl-locale": "^3.0.11",
|
"@formatjs/intl-locale": "^3.0.11",
|
||||||
"@formatjs/intl-numberformat": "^7.2.5",
|
"@formatjs/intl-numberformat": "^8.3.3",
|
||||||
"@formatjs/intl-pluralrules": "^5.1.8",
|
"@formatjs/intl-pluralrules": "^5.1.8",
|
||||||
"@formatjs/intl-relativetimeformat": "^11.1.8",
|
"@formatjs/intl-relativetimeformat": "^11.1.8",
|
||||||
"@fullcalendar/common": "^5.11.4",
|
"@fullcalendar/common": "^5.11.4",
|
||||||
@ -99,7 +99,7 @@
|
|||||||
"app-datepicker": "^5.1.0",
|
"app-datepicker": "^5.1.0",
|
||||||
"chart.js": "^3.3.2",
|
"chart.js": "^3.3.2",
|
||||||
"comlink": "^4.3.1",
|
"comlink": "^4.3.1",
|
||||||
"core-js": "^3.15.2",
|
"core-js": "^3.27.2",
|
||||||
"cropperjs": "^1.5.13",
|
"cropperjs": "^1.5.13",
|
||||||
"date-fns": "^2.29.3",
|
"date-fns": "^2.29.3",
|
||||||
"date-fns-tz": "^1.3.7",
|
"date-fns-tz": "^1.3.7",
|
||||||
@ -121,7 +121,7 @@
|
|||||||
"node-vibrant": "3.2.1-alpha.1",
|
"node-vibrant": "3.2.1-alpha.1",
|
||||||
"proxy-polyfill": "^0.3.2",
|
"proxy-polyfill": "^0.3.2",
|
||||||
"punycode": "^2.3.0",
|
"punycode": "^2.3.0",
|
||||||
"qr-scanner": "^1.3.0",
|
"qr-scanner": "^1.4.2",
|
||||||
"qrcode": "^1.5.1",
|
"qrcode": "^1.5.1",
|
||||||
"regenerator-runtime": "^0.13.11",
|
"regenerator-runtime": "^0.13.11",
|
||||||
"resize-observer-polyfill": "^1.5.1",
|
"resize-observer-polyfill": "^1.5.1",
|
||||||
@ -228,12 +228,12 @@
|
|||||||
"rollup-plugin-visualizer": "^5.9.0",
|
"rollup-plugin-visualizer": "^5.9.0",
|
||||||
"serve": "^11.3.2",
|
"serve": "^11.3.2",
|
||||||
"sinon": "^15.0.1",
|
"sinon": "^15.0.1",
|
||||||
"source-map-url": "^0.4.0",
|
"source-map-url": "^0.4.1",
|
||||||
"systemjs": "^6.13.0",
|
"systemjs": "^6.13.0",
|
||||||
"tar": "^6.1.11",
|
"tar": "^6.1.11",
|
||||||
"terser-webpack-plugin": "^5.2.4",
|
"terser-webpack-plugin": "^5.2.4",
|
||||||
"ts-lit-plugin": "^1.2.1",
|
"ts-lit-plugin": "^1.2.1",
|
||||||
"typescript": "^4.9.4",
|
"typescript": "^4.9.5",
|
||||||
"vinyl-buffer": "^1.0.1",
|
"vinyl-buffer": "^1.0.1",
|
||||||
"vinyl-source-stream": "^2.0.0",
|
"vinyl-source-stream": "^2.0.0",
|
||||||
"webpack": "^5.55.1",
|
"webpack": "^5.55.1",
|
||||||
@ -245,8 +245,7 @@
|
|||||||
},
|
},
|
||||||
"_comment": "Polymer 3.2 contained a bug, fixed in https://github.com/Polymer/polymer/pull/5569, add as patch",
|
"_comment": "Polymer 3.2 contained a bug, fixed in https://github.com/Polymer/polymer/pull/5569, add as patch",
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@polymer/polymer": "patch:@polymer/polymer@3.4.1#./.yarn/patches/@polymer/polymer/pr-5569.patch",
|
"@polymer/polymer": "patch:@polymer/polymer@3.4.1#./.yarn/patches/@polymer/polymer/pr-5569.patch"
|
||||||
"@webcomponents/webcomponentsjs": "^2.2.10"
|
|
||||||
},
|
},
|
||||||
"main": "src/home-assistant.js",
|
"main": "src/home-assistant.js",
|
||||||
"prettier": {
|
"prettier": {
|
||||||
|
@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "home-assistant-frontend"
|
name = "home-assistant-frontend"
|
||||||
version = "20230201.0"
|
version = "20230202.0"
|
||||||
license = {text = "Apache-2.0"}
|
license = {text = "Apache-2.0"}
|
||||||
description = "The Home Assistant frontend"
|
description = "The Home Assistant frontend"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
import { getWeekStartByLocale } from "weekstart";
|
import { getWeekStartByLocale } from "weekstart";
|
||||||
import { FrontendLocaleData, FirstWeekday } from "../../data/translation";
|
import { FrontendLocaleData, FirstWeekday } from "../../data/translation";
|
||||||
|
|
||||||
|
import { polyfillsLoaded } from "../translations/localize";
|
||||||
|
|
||||||
|
if (__BUILD__ === "latest" && polyfillsLoaded) {
|
||||||
|
await polyfillsLoaded;
|
||||||
|
}
|
||||||
|
|
||||||
export const weekdays = [
|
export const weekdays = [
|
||||||
"sunday",
|
"sunday",
|
||||||
"monday",
|
"monday",
|
||||||
|
@ -65,19 +65,21 @@ export interface FormatsType {
|
|||||||
|
|
||||||
const loadedPolyfillLocale = new Set();
|
const loadedPolyfillLocale = new Set();
|
||||||
|
|
||||||
|
const locale = getLocalLanguage();
|
||||||
|
|
||||||
const polyfills: Promise<any>[] = [];
|
const polyfills: Promise<any>[] = [];
|
||||||
if (__BUILD__ === "latest") {
|
if (__BUILD__ === "latest") {
|
||||||
if (shouldPolyfillLocale()) {
|
if (shouldPolyfillLocale()) {
|
||||||
polyfills.push(import("@formatjs/intl-locale/polyfill"));
|
await import("@formatjs/intl-locale/polyfill");
|
||||||
}
|
}
|
||||||
if (shouldPolyfillPluralRules()) {
|
if (shouldPolyfillPluralRules(locale)) {
|
||||||
polyfills.push(import("@formatjs/intl-pluralrules/polyfill"));
|
polyfills.push(import("@formatjs/intl-pluralrules/polyfill"));
|
||||||
polyfills.push(import("@formatjs/intl-pluralrules/locale-data/en"));
|
polyfills.push(import("@formatjs/intl-pluralrules/locale-data/en"));
|
||||||
}
|
}
|
||||||
if (shouldPolyfillRelativeTime()) {
|
if (shouldPolyfillRelativeTime(locale)) {
|
||||||
polyfills.push(import("@formatjs/intl-relativetimeformat/polyfill"));
|
polyfills.push(import("@formatjs/intl-relativetimeformat/polyfill"));
|
||||||
}
|
}
|
||||||
if (shouldPolyfillDateTime()) {
|
if (shouldPolyfillDateTime(locale)) {
|
||||||
polyfills.push(import("@formatjs/intl-datetimeformat/polyfill"));
|
polyfills.push(import("@formatjs/intl-datetimeformat/polyfill"));
|
||||||
polyfills.push(import("@formatjs/intl-datetimeformat/add-all-tz"));
|
polyfills.push(import("@formatjs/intl-datetimeformat/add-all-tz"));
|
||||||
}
|
}
|
||||||
@ -88,7 +90,7 @@ export const polyfillsLoaded =
|
|||||||
? undefined
|
? undefined
|
||||||
: Promise.all(polyfills).then(() =>
|
: Promise.all(polyfills).then(() =>
|
||||||
// Load the default language
|
// Load the default language
|
||||||
loadPolyfillLocales(getLocalLanguage())
|
loadPolyfillLocales(locale)
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -214,7 +216,7 @@ export const loadPolyfillLocales = async (language: string) => {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
Intl.DateTimeFormat.__addLocaleData(await result.json());
|
Intl.DateTimeFormat.__addLocaleData(await result.json());
|
||||||
}
|
}
|
||||||
} catch (_e) {
|
} catch (e) {
|
||||||
// Ignore
|
// Ignore
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,22 +1,33 @@
|
|||||||
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
import {
|
||||||
|
css,
|
||||||
|
CSSResultGroup,
|
||||||
|
html,
|
||||||
|
LitElement,
|
||||||
|
PropertyValues,
|
||||||
|
TemplateResult,
|
||||||
|
} from "lit";
|
||||||
import { customElement, property } from "lit/decorators";
|
import { customElement, property } from "lit/decorators";
|
||||||
import { dynamicElement } from "../../common/dom/dynamic-element-directive";
|
import { dynamicElement } from "../../common/dom/dynamic-element-directive";
|
||||||
import { fireEvent } from "../../common/dom/fire_event";
|
import { fireEvent } from "../../common/dom/fire_event";
|
||||||
import { HomeAssistant } from "../../types";
|
import { HomeAssistant } from "../../types";
|
||||||
import "../ha-alert";
|
import "../ha-alert";
|
||||||
import "../ha-selector/ha-selector";
|
import "../ha-selector/ha-selector";
|
||||||
import "./ha-form-boolean";
|
|
||||||
import "./ha-form-constant";
|
|
||||||
import "./ha-form-float";
|
|
||||||
import "./ha-form-grid";
|
|
||||||
import "./ha-form-expandable";
|
|
||||||
import "./ha-form-integer";
|
|
||||||
import "./ha-form-multi_select";
|
|
||||||
import "./ha-form-positive_time_period_dict";
|
|
||||||
import "./ha-form-select";
|
|
||||||
import "./ha-form-string";
|
|
||||||
import { HaFormDataContainer, HaFormElement, HaFormSchema } from "./types";
|
import { HaFormDataContainer, HaFormElement, HaFormSchema } from "./types";
|
||||||
|
|
||||||
|
const LOAD_ELEMENTS = {
|
||||||
|
boolean: () => import("./ha-form-boolean"),
|
||||||
|
constant: () => import("./ha-form-constant"),
|
||||||
|
float: () => import("./ha-form-float"),
|
||||||
|
grid: () => import("./ha-form-grid"),
|
||||||
|
expandable: () => import("./ha-form-expandable"),
|
||||||
|
integer: () => import("./ha-form-integer"),
|
||||||
|
multi_select: () => import("./ha-form-multi_select"),
|
||||||
|
positive_time_period_dict: () =>
|
||||||
|
import("./ha-form-positive_time_period_dict"),
|
||||||
|
select: () => import("./ha-form-select"),
|
||||||
|
string: () => import("./ha-form-string"),
|
||||||
|
};
|
||||||
|
|
||||||
const getValue = (obj, item) =>
|
const getValue = (obj, item) =>
|
||||||
obj ? (!item.name ? obj : obj[item.name]) : null;
|
obj ? (!item.name ? obj : obj[item.name]) : null;
|
||||||
|
|
||||||
@ -58,6 +69,17 @@ export class HaForm extends LitElement implements HaFormElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected willUpdate(changedProps: PropertyValues) {
|
||||||
|
if (changedProps.has("schema") && this.schema) {
|
||||||
|
this.schema.forEach((item) => {
|
||||||
|
if ("selector" in item) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LOAD_ELEMENTS[item.type]?.();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
return html`
|
return html`
|
||||||
<div class="root" part="root">
|
<div class="root" part="root">
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { html, LitElement } from "lit";
|
import { html, LitElement } 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 { computeDomain } from "../../common/entity/compute_domain";
|
||||||
|
import { domainIcon } from "../../common/entity/domain_icon";
|
||||||
import { IconSelector } from "../../data/selector";
|
import { IconSelector } from "../../data/selector";
|
||||||
import { HomeAssistant } from "../../types";
|
import { HomeAssistant } from "../../types";
|
||||||
import "../ha-icon-picker";
|
import "../ha-icon-picker";
|
||||||
@ -21,7 +23,22 @@ export class HaIconSelector extends LitElement {
|
|||||||
|
|
||||||
@property({ type: Boolean }) public required = true;
|
@property({ type: Boolean }) public required = true;
|
||||||
|
|
||||||
|
@property() public context?: {
|
||||||
|
icon_entity?: string;
|
||||||
|
};
|
||||||
|
|
||||||
protected render() {
|
protected render() {
|
||||||
|
const iconEntity = this.context?.icon_entity;
|
||||||
|
|
||||||
|
const stateObj = iconEntity ? this.hass.states[iconEntity] : undefined;
|
||||||
|
|
||||||
|
const placeholder =
|
||||||
|
this.selector.icon?.placeholder || stateObj?.attributes.icon;
|
||||||
|
const fallbackPath =
|
||||||
|
!placeholder && stateObj
|
||||||
|
? domainIcon(computeDomain(iconEntity!), stateObj)
|
||||||
|
: undefined;
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<ha-icon-picker
|
<ha-icon-picker
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
@ -30,8 +47,8 @@ export class HaIconSelector extends LitElement {
|
|||||||
.required=${this.required}
|
.required=${this.required}
|
||||||
.disabled=${this.disabled}
|
.disabled=${this.disabled}
|
||||||
.helper=${this.helper}
|
.helper=${this.helper}
|
||||||
.fallbackPath=${this.selector.icon?.fallbackPath}
|
.fallbackPath=${this.selector.icon?.fallbackPath ?? fallbackPath}
|
||||||
.placeholder=${this.selector.icon?.placeholder}
|
.placeholder=${this.selector.icon?.placeholder ?? placeholder}
|
||||||
@value-changed=${this._valueChanged}
|
@value-changed=${this._valueChanged}
|
||||||
></ha-icon-picker>
|
></ha-icon-picker>
|
||||||
`;
|
`;
|
||||||
|
@ -43,6 +43,9 @@
|
|||||||
<%= renderTemplate('_preload_roboto') %>
|
<%= renderTemplate('_preload_roboto') %>
|
||||||
|
|
||||||
<script crossorigin="use-credentials">
|
<script crossorigin="use-credentials">
|
||||||
|
if (!window.globalThis) {
|
||||||
|
window.globalThis = window;
|
||||||
|
}
|
||||||
// Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5
|
// Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5
|
||||||
if (!isS11_12) {
|
if (!isS11_12) {
|
||||||
import("<%= latestPageJS %>");
|
import("<%= latestPageJS %>");
|
||||||
@ -50,9 +53,6 @@
|
|||||||
window.providersPromise = fetch("/auth/providers", {
|
window.providersPromise = fetch("/auth/providers", {
|
||||||
credentials: "same-origin",
|
credentials: "same-origin",
|
||||||
});
|
});
|
||||||
if (!window.globalThis) {
|
|
||||||
window.globalThis = window;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -90,15 +90,15 @@
|
|||||||
<%= renderTemplate('_preload_roboto') %>
|
<%= renderTemplate('_preload_roboto') %>
|
||||||
|
|
||||||
<script <% if (!useWDS) { %>crossorigin="use-credentials"<% } %>>
|
<script <% if (!useWDS) { %>crossorigin="use-credentials"<% } %>>
|
||||||
|
if (!window.globalThis) {
|
||||||
|
window.globalThis = window;
|
||||||
|
}
|
||||||
// Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5
|
// Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5
|
||||||
if (!isS11_12) {
|
if (!isS11_12) {
|
||||||
import("<%= latestCoreJS %>");
|
import("<%= latestCoreJS %>");
|
||||||
import("<%= latestAppJS %>");
|
import("<%= latestAppJS %>");
|
||||||
window.customPanelJS = "<%= latestCustomPanelJS %>";
|
window.customPanelJS = "<%= latestCustomPanelJS %>";
|
||||||
window.latestJS = true;
|
window.latestJS = true;
|
||||||
if (!window.globalThis) {
|
|
||||||
window.globalThis = window;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
|
@ -75,6 +75,9 @@
|
|||||||
<%= renderTemplate('_preload_roboto') %>
|
<%= renderTemplate('_preload_roboto') %>
|
||||||
|
|
||||||
<script crossorigin="use-credentials">
|
<script crossorigin="use-credentials">
|
||||||
|
if (!window.globalThis) {
|
||||||
|
window.globalThis = window;
|
||||||
|
}
|
||||||
// Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5
|
// Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5
|
||||||
if (!isS11_12) {
|
if (!isS11_12) {
|
||||||
import("<%= latestPageJS %>");
|
import("<%= latestPageJS %>");
|
||||||
@ -82,9 +85,6 @@
|
|||||||
window.stepsPromise = fetch("/api/onboarding", {
|
window.stepsPromise = fetch("/api/onboarding", {
|
||||||
credentials: "same-origin",
|
credentials: "same-origin",
|
||||||
});
|
});
|
||||||
if (!window.globalThis) {
|
|
||||||
window.globalThis = window;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
import type { HassEntity } from "home-assistant-js-websocket";
|
|
||||||
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import memoizeOne from "memoize-one";
|
|
||||||
import { assert, assign, boolean, object, optional, string } from "superstruct";
|
import { assert, assign, boolean, object, optional, string } from "superstruct";
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import { computeDomain } from "../../../../common/entity/compute_domain";
|
|
||||||
import { domainIcon } from "../../../../common/entity/domain_icon";
|
|
||||||
import { entityId } from "../../../../common/structs/is-entity-id";
|
import { entityId } from "../../../../common/structs/is-entity-id";
|
||||||
import "../../../../components/ha-form/ha-form";
|
import "../../../../components/ha-form/ha-form";
|
||||||
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
||||||
@ -32,6 +28,52 @@ const cardConfigStruct = assign(
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const SCHEMA = [
|
||||||
|
{ name: "entity", selector: { entity: {} } },
|
||||||
|
{
|
||||||
|
name: "",
|
||||||
|
type: "grid",
|
||||||
|
schema: [
|
||||||
|
{ name: "name", selector: { text: {} } },
|
||||||
|
{
|
||||||
|
name: "icon",
|
||||||
|
selector: {
|
||||||
|
icon: {},
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
icon_entity: "entity",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "",
|
||||||
|
type: "grid",
|
||||||
|
column_min_width: "100px",
|
||||||
|
schema: [
|
||||||
|
{ name: "show_name", selector: { boolean: {} } },
|
||||||
|
{ name: "show_state", selector: { boolean: {} } },
|
||||||
|
{ name: "show_icon", selector: { boolean: {} } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "",
|
||||||
|
type: "grid",
|
||||||
|
schema: [
|
||||||
|
{ name: "icon_height", selector: { text: { suffix: "px" } } },
|
||||||
|
{ name: "theme", selector: { theme: {} } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "tap_action",
|
||||||
|
selector: { "ui-action": {} },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hold_action",
|
||||||
|
selector: { "ui-action": {} },
|
||||||
|
},
|
||||||
|
] as const;
|
||||||
|
|
||||||
@customElement("hui-button-card-editor")
|
@customElement("hui-button-card-editor")
|
||||||
export class HuiButtonCardEditor
|
export class HuiButtonCardEditor
|
||||||
extends LitElement
|
extends LitElement
|
||||||
@ -46,76 +88,11 @@ export class HuiButtonCardEditor
|
|||||||
this._config = config;
|
this._config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _schema = memoizeOne(
|
|
||||||
(entity?: string, icon?: string, entityState?: HassEntity) =>
|
|
||||||
[
|
|
||||||
{ name: "entity", selector: { entity: {} } },
|
|
||||||
{
|
|
||||||
name: "",
|
|
||||||
type: "grid",
|
|
||||||
schema: [
|
|
||||||
{ name: "name", selector: { text: {} } },
|
|
||||||
{
|
|
||||||
name: "icon",
|
|
||||||
selector: {
|
|
||||||
icon: {
|
|
||||||
placeholder: icon || entityState?.attributes.icon,
|
|
||||||
fallbackPath:
|
|
||||||
!icon &&
|
|
||||||
!entityState?.attributes.icon &&
|
|
||||||
entityState &&
|
|
||||||
entity
|
|
||||||
? domainIcon(computeDomain(entity), entityState)
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "",
|
|
||||||
type: "grid",
|
|
||||||
column_min_width: "100px",
|
|
||||||
schema: [
|
|
||||||
{ name: "show_name", selector: { boolean: {} } },
|
|
||||||
{ name: "show_state", selector: { boolean: {} } },
|
|
||||||
{ name: "show_icon", selector: { boolean: {} } },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "",
|
|
||||||
type: "grid",
|
|
||||||
schema: [
|
|
||||||
{ name: "icon_height", selector: { text: { suffix: "px" } } },
|
|
||||||
{ name: "theme", selector: { theme: {} } },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "tap_action",
|
|
||||||
selector: { "ui-action": {} },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "hold_action",
|
|
||||||
selector: { "ui-action": {} },
|
|
||||||
},
|
|
||||||
] as const
|
|
||||||
);
|
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
if (!this.hass || !this._config) {
|
if (!this.hass || !this._config) {
|
||||||
return html``;
|
return html``;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entityState = this._config.entity
|
|
||||||
? this.hass.states[this._config.entity]
|
|
||||||
: undefined;
|
|
||||||
|
|
||||||
const schema = this._schema(
|
|
||||||
this._config.entity,
|
|
||||||
this._config.icon,
|
|
||||||
entityState
|
|
||||||
);
|
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
show_name: true,
|
show_name: true,
|
||||||
show_icon: true,
|
show_icon: true,
|
||||||
@ -130,7 +107,7 @@ export class HuiButtonCardEditor
|
|||||||
<ha-form
|
<ha-form
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.data=${data}
|
.data=${data}
|
||||||
.schema=${schema}
|
.schema=${SCHEMA}
|
||||||
.computeLabel=${this._computeLabelCallback}
|
.computeLabel=${this._computeLabelCallback}
|
||||||
.computeHelper=${this._computeHelperCallback}
|
.computeHelper=${this._computeHelperCallback}
|
||||||
@value-changed=${this._valueChanged}
|
@value-changed=${this._valueChanged}
|
||||||
@ -148,9 +125,7 @@ export class HuiButtonCardEditor
|
|||||||
fireEvent(this, "config-changed", { config });
|
fireEvent(this, "config-changed", { config });
|
||||||
}
|
}
|
||||||
|
|
||||||
private _computeHelperCallback = (
|
private _computeHelperCallback = (schema: SchemaUnion<typeof SCHEMA>) => {
|
||||||
schema: SchemaUnion<ReturnType<typeof this._schema>>
|
|
||||||
) => {
|
|
||||||
switch (schema.name) {
|
switch (schema.name) {
|
||||||
case "tap_action":
|
case "tap_action":
|
||||||
case "hold_action":
|
case "hold_action":
|
||||||
@ -162,9 +137,7 @@ export class HuiButtonCardEditor
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private _computeLabelCallback = (
|
private _computeLabelCallback = (schema: SchemaUnion<typeof SCHEMA>) => {
|
||||||
schema: SchemaUnion<ReturnType<typeof this._schema>>
|
|
||||||
) => {
|
|
||||||
switch (schema.name) {
|
switch (schema.name) {
|
||||||
case "theme":
|
case "theme":
|
||||||
case "tap_action":
|
case "tap_action":
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
import type { HassEntity } from "home-assistant-js-websocket/dist/types";
|
|
||||||
import { html, LitElement, TemplateResult } from "lit";
|
import { html, LitElement, TemplateResult } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import memoizeOne from "memoize-one";
|
|
||||||
import { assert, assign, boolean, object, optional, string } from "superstruct";
|
import { assert, assign, boolean, object, optional, string } from "superstruct";
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import { computeDomain } from "../../../../common/entity/compute_domain";
|
|
||||||
import { domainIcon } from "../../../../common/entity/domain_icon";
|
|
||||||
import { entityId } from "../../../../common/structs/is-entity-id";
|
import { entityId } from "../../../../common/structs/is-entity-id";
|
||||||
import "../../../../components/ha-form/ha-form";
|
import "../../../../components/ha-form/ha-form";
|
||||||
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
||||||
@ -29,6 +25,38 @@ const cardConfigStruct = assign(
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const SCHEMA = [
|
||||||
|
{ name: "entity", required: true, selector: { entity: {} } },
|
||||||
|
{
|
||||||
|
type: "grid",
|
||||||
|
name: "",
|
||||||
|
schema: [
|
||||||
|
{ name: "name", selector: { text: {} } },
|
||||||
|
{
|
||||||
|
name: "icon",
|
||||||
|
selector: {
|
||||||
|
icon: {},
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
icon_entity: "entity",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "attribute",
|
||||||
|
selector: {
|
||||||
|
attribute: {},
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
filter_entity: "entity",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ name: "unit", selector: { text: {} } },
|
||||||
|
{ name: "theme", selector: { theme: {} } },
|
||||||
|
{ name: "state_color", selector: { boolean: {} } },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
] as const;
|
||||||
|
|
||||||
@customElement("hui-entity-card-editor")
|
@customElement("hui-entity-card-editor")
|
||||||
export class HuiEntityCardEditor
|
export class HuiEntityCardEditor
|
||||||
extends LitElement
|
extends LitElement
|
||||||
@ -43,58 +71,16 @@ export class HuiEntityCardEditor
|
|||||||
this._config = config;
|
this._config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _schema = memoizeOne(
|
|
||||||
(entity: string, icon: string, entityState: HassEntity) =>
|
|
||||||
[
|
|
||||||
{ name: "entity", required: true, selector: { entity: {} } },
|
|
||||||
{
|
|
||||||
type: "grid",
|
|
||||||
name: "",
|
|
||||||
schema: [
|
|
||||||
{ name: "name", selector: { text: {} } },
|
|
||||||
{
|
|
||||||
name: "icon",
|
|
||||||
selector: {
|
|
||||||
icon: {
|
|
||||||
placeholder: icon || entityState?.attributes.icon,
|
|
||||||
fallbackPath:
|
|
||||||
!icon && !entityState?.attributes.icon && entityState
|
|
||||||
? domainIcon(computeDomain(entity), entityState)
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
name: "attribute",
|
|
||||||
selector: { attribute: { entity_id: entity } },
|
|
||||||
},
|
|
||||||
{ name: "unit", selector: { text: {} } },
|
|
||||||
{ name: "theme", selector: { theme: {} } },
|
|
||||||
{ name: "state_color", selector: { boolean: {} } },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
] as const
|
|
||||||
);
|
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
if (!this.hass || !this._config) {
|
if (!this.hass || !this._config) {
|
||||||
return html``;
|
return html``;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entityState = this.hass.states[this._config.entity];
|
|
||||||
|
|
||||||
const schema = this._schema(
|
|
||||||
this._config.entity,
|
|
||||||
this._config.icon,
|
|
||||||
entityState
|
|
||||||
);
|
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<ha-form
|
<ha-form
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.data=${this._config}
|
.data=${this._config}
|
||||||
.schema=${schema}
|
.schema=${SCHEMA}
|
||||||
.computeLabel=${this._computeLabelCallback}
|
.computeLabel=${this._computeLabelCallback}
|
||||||
@value-changed=${this._valueChanged}
|
@value-changed=${this._valueChanged}
|
||||||
></ha-form>
|
></ha-form>
|
||||||
@ -107,9 +93,7 @@ export class HuiEntityCardEditor
|
|||||||
fireEvent(this, "config-changed", { config });
|
fireEvent(this, "config-changed", { config });
|
||||||
}
|
}
|
||||||
|
|
||||||
private _computeLabelCallback = (
|
private _computeLabelCallback = (schema: SchemaUnion<typeof SCHEMA>) => {
|
||||||
schema: SchemaUnion<ReturnType<typeof this._schema>>
|
|
||||||
) => {
|
|
||||||
if (schema.name === "entity") {
|
if (schema.name === "entity") {
|
||||||
return this.hass!.localize(
|
return this.hass!.localize(
|
||||||
"ui.panel.lovelace.editor.card.generic.entity"
|
"ui.panel.lovelace.editor.card.generic.entity"
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
import "../../../../components/ha-form/ha-form";
|
|
||||||
import type { HassEntity } from "home-assistant-js-websocket";
|
|
||||||
import { html, LitElement, TemplateResult } from "lit";
|
import { html, LitElement, TemplateResult } 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 { assert } from "superstruct";
|
import { assert } from "superstruct";
|
||||||
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 { domainIcon } from "../../../../common/entity/domain_icon";
|
|
||||||
import type { LocalizeFunc } from "../../../../common/translations/localize";
|
import type { LocalizeFunc } from "../../../../common/translations/localize";
|
||||||
|
import "../../../../components/ha-form/ha-form";
|
||||||
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
||||||
import type { HomeAssistant } from "../../../../types";
|
import type { HomeAssistant } from "../../../../types";
|
||||||
import type { EntitiesCardEntityConfig } from "../../cards/types";
|
import type { EntitiesCardEntityConfig } from "../../cards/types";
|
||||||
@ -39,73 +37,56 @@ export class HuiGenericEntityRowEditor
|
|||||||
this._config = config;
|
this._config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _schema = memoizeOne(
|
private _schema = memoizeOne((entity: string, localize: LocalizeFunc) => {
|
||||||
(
|
const domain = computeDomain(entity);
|
||||||
entity: string,
|
|
||||||
icon: string | undefined,
|
|
||||||
entityState: HassEntity,
|
|
||||||
localize: LocalizeFunc
|
|
||||||
) => {
|
|
||||||
const domain = computeDomain(entity);
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{ name: "entity", required: true, selector: { entity: {} } },
|
{ name: "entity", required: true, selector: { entity: {} } },
|
||||||
{
|
{
|
||||||
type: "grid",
|
type: "grid",
|
||||||
name: "",
|
name: "",
|
||||||
schema: [
|
schema: [
|
||||||
{ name: "name", selector: { text: {} } },
|
{ name: "name", selector: { text: {} } },
|
||||||
{
|
{
|
||||||
name: "icon",
|
name: "icon",
|
||||||
selector: {
|
selector: {
|
||||||
icon: {
|
icon: {},
|
||||||
placeholder: icon || entityState?.attributes.icon,
|
|
||||||
fallbackPath:
|
|
||||||
!icon && !entityState?.attributes.icon && entityState
|
|
||||||
? domainIcon(domain, entityState)
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
],
|
context: {
|
||||||
},
|
icon_entity: "entity",
|
||||||
{
|
|
||||||
name: "secondary_info",
|
|
||||||
selector: {
|
|
||||||
select: {
|
|
||||||
options: (
|
|
||||||
Object.keys(SecondaryInfoValues).filter(
|
|
||||||
(info) =>
|
|
||||||
!("domains" in SecondaryInfoValues[info]) ||
|
|
||||||
("domains" in SecondaryInfoValues[info] &&
|
|
||||||
SecondaryInfoValues[info].domains!.includes(domain))
|
|
||||||
) as Array<keyof typeof SecondaryInfoValues>
|
|
||||||
).map((info) => ({
|
|
||||||
value: info,
|
|
||||||
label: localize(
|
|
||||||
`ui.panel.lovelace.editor.card.entities.secondary_info_values.${info}`
|
|
||||||
),
|
|
||||||
})),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "secondary_info",
|
||||||
|
selector: {
|
||||||
|
select: {
|
||||||
|
options: (
|
||||||
|
Object.keys(SecondaryInfoValues).filter(
|
||||||
|
(info) =>
|
||||||
|
!("domains" in SecondaryInfoValues[info]) ||
|
||||||
|
("domains" in SecondaryInfoValues[info] &&
|
||||||
|
SecondaryInfoValues[info].domains!.includes(domain))
|
||||||
|
) as Array<keyof typeof SecondaryInfoValues>
|
||||||
|
).map((info) => ({
|
||||||
|
value: info,
|
||||||
|
label: localize(
|
||||||
|
`ui.panel.lovelace.editor.card.entities.secondary_info_values.${info}`
|
||||||
|
),
|
||||||
|
})),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
] as const;
|
},
|
||||||
}
|
] as const;
|
||||||
);
|
});
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
if (!this.hass || !this._config) {
|
if (!this.hass || !this._config) {
|
||||||
return html``;
|
return html``;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entityState = this.hass.states[this._config.entity];
|
const schema = this._schema(this._config.entity, this.hass.localize);
|
||||||
|
|
||||||
const schema = this._schema(
|
|
||||||
this._config.entity,
|
|
||||||
this._config.icon,
|
|
||||||
entityState,
|
|
||||||
this.hass.localize
|
|
||||||
);
|
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<ha-form
|
<ha-form
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
import type { HassEntity } from "home-assistant-js-websocket";
|
|
||||||
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import memoizeOne from "memoize-one";
|
|
||||||
import { assert, assign, object, optional, string } from "superstruct";
|
import { assert, assign, object, optional, string } from "superstruct";
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import { computeDomain } from "../../../../common/entity/compute_domain";
|
|
||||||
import { domainIcon } from "../../../../common/entity/domain_icon";
|
|
||||||
import { entityId } from "../../../../common/structs/is-entity-id";
|
import { entityId } from "../../../../common/structs/is-entity-id";
|
||||||
import "../../../../components/ha-form/ha-form";
|
import "../../../../components/ha-form/ha-form";
|
||||||
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
||||||
@ -28,6 +24,39 @@ const cardConfigStruct = assign(
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const SCHEMA = [
|
||||||
|
{
|
||||||
|
name: "entity",
|
||||||
|
required: true,
|
||||||
|
selector: { entity: { domain: "light" } },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "grid",
|
||||||
|
name: "",
|
||||||
|
schema: [
|
||||||
|
{ name: "name", selector: { text: {} } },
|
||||||
|
{
|
||||||
|
name: "icon",
|
||||||
|
selector: {
|
||||||
|
icon: {},
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
icon_entity: "entity",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{ name: "theme", selector: { theme: {} } },
|
||||||
|
{
|
||||||
|
name: "hold_action",
|
||||||
|
selector: { "ui-action": {} },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "double_tap_action",
|
||||||
|
selector: { "ui-action": {} },
|
||||||
|
},
|
||||||
|
] as const;
|
||||||
|
|
||||||
@customElement("hui-light-card-editor")
|
@customElement("hui-light-card-editor")
|
||||||
export class HuiLightCardEditor
|
export class HuiLightCardEditor
|
||||||
extends LitElement
|
extends LitElement
|
||||||
@ -42,62 +71,16 @@ export class HuiLightCardEditor
|
|||||||
this._config = config;
|
this._config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _schema = memoizeOne(
|
|
||||||
(entity: string, icon: string | undefined, entityState: HassEntity) =>
|
|
||||||
[
|
|
||||||
{
|
|
||||||
name: "entity",
|
|
||||||
required: true,
|
|
||||||
selector: { entity: { domain: "light" } },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "grid",
|
|
||||||
name: "",
|
|
||||||
schema: [
|
|
||||||
{ name: "name", selector: { text: {} } },
|
|
||||||
{
|
|
||||||
name: "icon",
|
|
||||||
selector: {
|
|
||||||
icon: {
|
|
||||||
placeholder: icon || entityState?.attributes.icon,
|
|
||||||
fallbackPath:
|
|
||||||
!icon && !entityState?.attributes.icon && entityState
|
|
||||||
? domainIcon(computeDomain(entity), entityState)
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{ name: "theme", selector: { theme: {} } },
|
|
||||||
{
|
|
||||||
name: "hold_action",
|
|
||||||
selector: { "ui-action": {} },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "double_tap_action",
|
|
||||||
selector: { "ui-action": {} },
|
|
||||||
},
|
|
||||||
] as const
|
|
||||||
);
|
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
if (!this.hass || !this._config) {
|
if (!this.hass || !this._config) {
|
||||||
return html``;
|
return html``;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entityState = this.hass.states[this._config.entity];
|
|
||||||
const schema = this._schema(
|
|
||||||
this._config.entity,
|
|
||||||
this._config.icon,
|
|
||||||
entityState
|
|
||||||
);
|
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<ha-form
|
<ha-form
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.data=${this._config}
|
.data=${this._config}
|
||||||
.schema=${schema}
|
.schema=${SCHEMA}
|
||||||
.computeLabel=${this._computeLabelCallback}
|
.computeLabel=${this._computeLabelCallback}
|
||||||
@value-changed=${this._valueChanged}
|
@value-changed=${this._valueChanged}
|
||||||
></ha-form>
|
></ha-form>
|
||||||
@ -108,9 +91,7 @@ export class HuiLightCardEditor
|
|||||||
fireEvent(this, "config-changed", { config: ev.detail.value });
|
fireEvent(this, "config-changed", { config: ev.detail.value });
|
||||||
}
|
}
|
||||||
|
|
||||||
private _computeLabelCallback = (
|
private _computeLabelCallback = (schema: SchemaUnion<typeof SCHEMA>) => {
|
||||||
schema: SchemaUnion<ReturnType<typeof this._schema>>
|
|
||||||
) => {
|
|
||||||
switch (schema.name) {
|
switch (schema.name) {
|
||||||
case "theme":
|
case "theme":
|
||||||
case "hold_action":
|
case "hold_action":
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
import type { HassEntity } from "home-assistant-js-websocket";
|
|
||||||
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
import { CSSResultGroup, html, LitElement, TemplateResult } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import memoizeOne from "memoize-one";
|
|
||||||
import {
|
import {
|
||||||
assert,
|
assert,
|
||||||
assign,
|
assign,
|
||||||
@ -13,8 +11,6 @@ import {
|
|||||||
union,
|
union,
|
||||||
} from "superstruct";
|
} from "superstruct";
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import { computeDomain } from "../../../../common/entity/compute_domain";
|
|
||||||
import { domainIcon } from "../../../../common/entity/domain_icon";
|
|
||||||
import { entityId } from "../../../../common/structs/is-entity-id";
|
import { entityId } from "../../../../common/structs/is-entity-id";
|
||||||
import "../../../../components/ha-form/ha-form";
|
import "../../../../components/ha-form/ha-form";
|
||||||
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
||||||
@ -38,6 +34,55 @@ const cardConfigStruct = assign(
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const SCHEMA = [
|
||||||
|
{
|
||||||
|
name: "entity",
|
||||||
|
selector: {
|
||||||
|
entity: { domain: ["counter", "input_number", "number", "sensor"] },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ name: "name", selector: { text: {} } },
|
||||||
|
{
|
||||||
|
type: "grid",
|
||||||
|
name: "",
|
||||||
|
schema: [
|
||||||
|
{
|
||||||
|
name: "icon",
|
||||||
|
selector: {
|
||||||
|
icon: {},
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
icon_entity: "entity",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "graph",
|
||||||
|
selector: {
|
||||||
|
select: {
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
value: "none",
|
||||||
|
label: "None",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: "line",
|
||||||
|
label: "Line",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ name: "unit", selector: { text: {} } },
|
||||||
|
{ name: "detail", selector: { boolean: {} } },
|
||||||
|
{ name: "theme", selector: { theme: {} } },
|
||||||
|
{
|
||||||
|
name: "hours_to_show",
|
||||||
|
selector: { number: { min: 1, mode: "box" } },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
] as const;
|
||||||
|
|
||||||
@customElement("hui-sensor-card-editor")
|
@customElement("hui-sensor-card-editor")
|
||||||
export class HuiSensorCardEditor
|
export class HuiSensorCardEditor
|
||||||
extends LitElement
|
extends LitElement
|
||||||
@ -52,74 +97,11 @@ export class HuiSensorCardEditor
|
|||||||
this._config = config;
|
this._config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _schema = memoizeOne(
|
|
||||||
(entity: string, icon: string | undefined, entityState: HassEntity) =>
|
|
||||||
[
|
|
||||||
{
|
|
||||||
name: "entity",
|
|
||||||
selector: {
|
|
||||||
entity: { domain: ["counter", "input_number", "number", "sensor"] },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{ name: "name", selector: { text: {} } },
|
|
||||||
{
|
|
||||||
type: "grid",
|
|
||||||
name: "",
|
|
||||||
schema: [
|
|
||||||
{
|
|
||||||
name: "icon",
|
|
||||||
selector: {
|
|
||||||
icon: {
|
|
||||||
placeholder: icon || entityState?.attributes.icon,
|
|
||||||
fallbackPath:
|
|
||||||
!icon && !entityState?.attributes.icon && entityState
|
|
||||||
? domainIcon(computeDomain(entity), entityState)
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "graph",
|
|
||||||
selector: {
|
|
||||||
select: {
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
value: "none",
|
|
||||||
label: "None",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: "line",
|
|
||||||
label: "Line",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{ name: "unit", selector: { text: {} } },
|
|
||||||
{ name: "detail", selector: { boolean: {} } },
|
|
||||||
{ name: "theme", selector: { theme: {} } },
|
|
||||||
{
|
|
||||||
name: "hours_to_show",
|
|
||||||
selector: { number: { min: 1, mode: "box" } },
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
] as const
|
|
||||||
);
|
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
if (!this.hass || !this._config) {
|
if (!this.hass || !this._config) {
|
||||||
return html``;
|
return html``;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entityState = this.hass.states[this._config.entity];
|
|
||||||
|
|
||||||
const schema = this._schema(
|
|
||||||
this._config.entity,
|
|
||||||
this._config.icon,
|
|
||||||
entityState
|
|
||||||
);
|
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
hours_to_show: 24,
|
hours_to_show: 24,
|
||||||
graph: "none",
|
graph: "none",
|
||||||
@ -131,7 +113,7 @@ export class HuiSensorCardEditor
|
|||||||
<ha-form
|
<ha-form
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.data=${data}
|
.data=${data}
|
||||||
.schema=${schema}
|
.schema=${SCHEMA}
|
||||||
.computeLabel=${this._computeLabelCallback}
|
.computeLabel=${this._computeLabelCallback}
|
||||||
@value-changed=${this._valueChanged}
|
@value-changed=${this._valueChanged}
|
||||||
></ha-form>
|
></ha-form>
|
||||||
@ -144,9 +126,7 @@ export class HuiSensorCardEditor
|
|||||||
fireEvent(this, "config-changed", { config });
|
fireEvent(this, "config-changed", { config });
|
||||||
}
|
}
|
||||||
|
|
||||||
private _computeLabelCallback = (
|
private _computeLabelCallback = (schema: SchemaUnion<typeof SCHEMA>) => {
|
||||||
schema: SchemaUnion<ReturnType<typeof this._schema>>
|
|
||||||
) => {
|
|
||||||
switch (schema.name) {
|
switch (schema.name) {
|
||||||
case "theme":
|
case "theme":
|
||||||
return `${this.hass!.localize(
|
return `${this.hass!.localize(
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
import type { HassEntity } from "home-assistant-js-websocket/dist/types";
|
|
||||||
import { html, LitElement, TemplateResult } from "lit";
|
import { html, LitElement, TemplateResult } 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 { any, assert, assign, object, optional, string } from "superstruct";
|
import { any, assert, assign, object, optional, string } from "superstruct";
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
import { computeDomain } from "../../../../common/entity/compute_domain";
|
|
||||||
import { domainIcon } from "../../../../common/entity/domain_icon";
|
|
||||||
import { LocalizeFunc } from "../../../../common/translations/localize";
|
import { LocalizeFunc } from "../../../../common/translations/localize";
|
||||||
import { deepEqual } from "../../../../common/util/deep-equal";
|
import { deepEqual } from "../../../../common/util/deep-equal";
|
||||||
import "../../../../components/ha-form/ha-form";
|
import "../../../../components/ha-form/ha-form";
|
||||||
@ -100,10 +97,7 @@ export class HuiStatisticCardEditor
|
|||||||
|
|
||||||
private _schema = memoizeOne(
|
private _schema = memoizeOne(
|
||||||
(
|
(
|
||||||
entity: string,
|
|
||||||
icon: string,
|
|
||||||
selectedPeriodKey: string | undefined,
|
selectedPeriodKey: string | undefined,
|
||||||
entityState: HassEntity,
|
|
||||||
localize: LocalizeFunc,
|
localize: LocalizeFunc,
|
||||||
metadata?: StatisticsMetaData
|
metadata?: StatisticsMetaData
|
||||||
) =>
|
) =>
|
||||||
@ -155,13 +149,10 @@ export class HuiStatisticCardEditor
|
|||||||
{
|
{
|
||||||
name: "icon",
|
name: "icon",
|
||||||
selector: {
|
selector: {
|
||||||
icon: {
|
icon: {},
|
||||||
placeholder: icon || entityState?.attributes.icon,
|
},
|
||||||
fallbackPath:
|
context: {
|
||||||
!icon && !entityState?.attributes.icon && entityState
|
icon_entity: "entity",
|
||||||
? domainIcon(computeDomain(entity), entityState)
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ name: "unit", selector: { text: {} } },
|
{ name: "unit", selector: { text: {} } },
|
||||||
@ -176,15 +167,10 @@ export class HuiStatisticCardEditor
|
|||||||
return html``;
|
return html``;
|
||||||
}
|
}
|
||||||
|
|
||||||
const entityState = this.hass.states[this._config.entity];
|
|
||||||
|
|
||||||
const data = this._data(this._config);
|
const data = this._data(this._config);
|
||||||
|
|
||||||
const schema = this._schema(
|
const schema = this._schema(
|
||||||
this._config.entity,
|
|
||||||
this._config.icon,
|
|
||||||
typeof data.period === "string" ? data.period : undefined,
|
typeof data.period === "string" ? data.period : undefined,
|
||||||
entityState,
|
|
||||||
this.hass.localize,
|
this.hass.localize,
|
||||||
this._metadata
|
this._metadata
|
||||||
);
|
);
|
||||||
|
@ -14,9 +14,8 @@ import {
|
|||||||
string,
|
string,
|
||||||
} from "superstruct";
|
} from "superstruct";
|
||||||
import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event";
|
||||||
import { computeDomain } from "../../../../common/entity/compute_domain";
|
|
||||||
import { domainIcon } from "../../../../common/entity/domain_icon";
|
|
||||||
import { entityId } from "../../../../common/structs/is-entity-id";
|
import { entityId } from "../../../../common/structs/is-entity-id";
|
||||||
|
import { LocalizeFunc } from "../../../../common/translations/localize";
|
||||||
import "../../../../components/ha-form/ha-form";
|
import "../../../../components/ha-form/ha-form";
|
||||||
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
import type { SchemaUnion } from "../../../../components/ha-form/types";
|
||||||
import type { HomeAssistant } from "../../../../types";
|
import type { HomeAssistant } from "../../../../types";
|
||||||
@ -65,16 +64,14 @@ export class HuiTileCardEditor
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _schema = memoizeOne(
|
private _schema = memoizeOne(
|
||||||
(entity: string, icon?: string, stateObj?: HassEntity) =>
|
(localize: LocalizeFunc) =>
|
||||||
[
|
[
|
||||||
{ name: "entity", selector: { entity: {} } },
|
{ name: "entity", selector: { entity: {} } },
|
||||||
{
|
{
|
||||||
name: "",
|
name: "",
|
||||||
type: "expandable",
|
type: "expandable",
|
||||||
iconPath: mdiPalette,
|
iconPath: mdiPalette,
|
||||||
title: this.hass!.localize(
|
title: localize(`ui.panel.lovelace.editor.card.tile.appearance`),
|
||||||
`ui.panel.lovelace.editor.card.tile.appearance`
|
|
||||||
),
|
|
||||||
schema: [
|
schema: [
|
||||||
{
|
{
|
||||||
name: "",
|
name: "",
|
||||||
@ -84,14 +81,9 @@ export class HuiTileCardEditor
|
|||||||
{
|
{
|
||||||
name: "icon",
|
name: "icon",
|
||||||
selector: {
|
selector: {
|
||||||
icon: {
|
icon: {},
|
||||||
placeholder: icon || stateObj?.attributes.icon,
|
|
||||||
fallbackPath:
|
|
||||||
!icon && !stateObj?.attributes.icon && stateObj
|
|
||||||
? domainIcon(computeDomain(entity), stateObj)
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
context: { icon_entity: "entity" },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "color",
|
name: "color",
|
||||||
@ -118,9 +110,7 @@ export class HuiTileCardEditor
|
|||||||
{
|
{
|
||||||
name: "",
|
name: "",
|
||||||
type: "expandable",
|
type: "expandable",
|
||||||
title: this.hass!.localize(
|
title: localize(`ui.panel.lovelace.editor.card.tile.actions`),
|
||||||
`ui.panel.lovelace.editor.card.tile.actions`
|
|
||||||
),
|
|
||||||
iconPath: mdiGestureTap,
|
iconPath: mdiGestureTap,
|
||||||
schema: [
|
schema: [
|
||||||
{
|
{
|
||||||
@ -153,11 +143,7 @@ export class HuiTileCardEditor
|
|||||||
| HassEntity
|
| HassEntity
|
||||||
| undefined;
|
| undefined;
|
||||||
|
|
||||||
const schema = this._schema(
|
const schema = this._schema(this.hass!.localize);
|
||||||
this._config.entity,
|
|
||||||
this._config.icon,
|
|
||||||
stateObj
|
|
||||||
);
|
|
||||||
|
|
||||||
if (this._subElementEditorConfig) {
|
if (this._subElementEditorConfig) {
|
||||||
return html`
|
return html`
|
||||||
|
@ -131,7 +131,7 @@ export class HuiGraphHeaderFooter
|
|||||||
|
|
||||||
public connectedCallback() {
|
public connectedCallback() {
|
||||||
super.connectedCallback();
|
super.connectedCallback();
|
||||||
if (this.hasUpdated) {
|
if (this.hasUpdated && this._config) {
|
||||||
this._subscribeHistory();
|
this._subscribeHistory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,27 +142,31 @@ export class HuiGraphHeaderFooter
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _subscribeHistory() {
|
private _subscribeHistory() {
|
||||||
if (!isComponentLoaded(this.hass!, "history") || this._subscribed) {
|
if (
|
||||||
|
!isComponentLoaded(this.hass!, "history") ||
|
||||||
|
this._subscribed ||
|
||||||
|
!this._config
|
||||||
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._subscribed = subscribeHistoryStatesTimeWindow(
|
this._subscribed = subscribeHistoryStatesTimeWindow(
|
||||||
this.hass!,
|
this.hass!,
|
||||||
(combinedHistory) => {
|
(combinedHistory) => {
|
||||||
if (!this._subscribed) {
|
if (!this._subscribed || !this._config) {
|
||||||
// Message came in before we had a chance to unload
|
// Message came in before we had a chance to unload
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._coordinates =
|
this._coordinates =
|
||||||
coordinatesMinimalResponseCompressedState(
|
coordinatesMinimalResponseCompressedState(
|
||||||
combinedHistory[this._config!.entity],
|
combinedHistory[this._config.entity],
|
||||||
this._config!.hours_to_show!,
|
this._config.hours_to_show!,
|
||||||
500,
|
500,
|
||||||
this._config!.detail!,
|
this._config.detail!,
|
||||||
this._config!.limits
|
this._config.limits
|
||||||
) || [];
|
) || [];
|
||||||
},
|
},
|
||||||
this._config!.hours_to_show!,
|
this._config.hours_to_show!,
|
||||||
[this._config!.entity]
|
[this._config.entity]
|
||||||
).catch((err) => {
|
).catch((err) => {
|
||||||
this._subscribed = undefined;
|
this._subscribed = undefined;
|
||||||
this._error = err;
|
this._error = err;
|
||||||
|
@ -20,6 +20,12 @@ import "@formatjs/intl-datetimeformat/add-all-tz";
|
|||||||
import "proxy-polyfill";
|
import "proxy-polyfill";
|
||||||
import "unfetch/polyfill";
|
import "unfetch/polyfill";
|
||||||
|
|
||||||
|
import ResizeObserver from "resize-observer-polyfill";
|
||||||
|
|
||||||
|
if (!window.ResizeObserver) {
|
||||||
|
window.ResizeObserver = ResizeObserver;
|
||||||
|
}
|
||||||
|
|
||||||
// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/append()/append().md
|
// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/append()/append().md
|
||||||
(function (arr) {
|
(function (arr) {
|
||||||
arr.forEach((item) => {
|
arr.forEach((item) => {
|
||||||
|
117
yarn.lock
117
yarn.lock
@ -1360,7 +1360,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@braintree/sanitize-url@npm:^6.0.0":
|
"@braintree/sanitize-url@npm:^6.0.2":
|
||||||
version: 6.0.2
|
version: 6.0.2
|
||||||
resolution: "@braintree/sanitize-url@npm:6.0.2"
|
resolution: "@braintree/sanitize-url@npm:6.0.2"
|
||||||
checksum: 6a9dfd4081cc96516eeb281d1a83d3b5f1ad3d2837adf968fcc2ba18889ee833554f9c641b4083c36d3360a932e4504ddf25b0b51e9933c3742622df82cf7c9a
|
checksum: 6a9dfd4081cc96516eeb281d1a83d3b5f1ad3d2837adf968fcc2ba18889ee833554f9c641b4083c36d3360a932e4504ddf25b0b51e9933c3742622df82cf7c9a
|
||||||
@ -1472,16 +1472,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@formatjs/ecma402-abstract@npm:1.10.0":
|
|
||||||
version: 1.10.0
|
|
||||||
resolution: "@formatjs/ecma402-abstract@npm:1.10.0"
|
|
||||||
dependencies:
|
|
||||||
"@formatjs/intl-localematcher": 0.2.21
|
|
||||||
tslib: ^2.1.0
|
|
||||||
checksum: 3ea000ba9e9e9ca21018a782d0cd26c0ef84ce7a242b3538b17f4450ff5eeac539a0d1b41bad629499bd8c7857119da5363690958e68bb4724bb01341f68559d
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@formatjs/ecma402-abstract@npm:1.14.3":
|
"@formatjs/ecma402-abstract@npm:1.14.3":
|
||||||
version: 1.14.3
|
version: 1.14.3
|
||||||
resolution: "@formatjs/ecma402-abstract@npm:1.14.3"
|
resolution: "@formatjs/ecma402-abstract@npm:1.14.3"
|
||||||
@ -1522,14 +1512,14 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@formatjs/intl-datetimeformat@npm:^4.2.5":
|
"@formatjs/intl-datetimeformat@npm:^6.4.3":
|
||||||
version: 4.2.5
|
version: 6.4.3
|
||||||
resolution: "@formatjs/intl-datetimeformat@npm:4.2.5"
|
resolution: "@formatjs/intl-datetimeformat@npm:6.4.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract": 1.10.0
|
"@formatjs/ecma402-abstract": 1.14.3
|
||||||
"@formatjs/intl-localematcher": 0.2.21
|
"@formatjs/intl-localematcher": 0.2.32
|
||||||
tslib: ^2.1.0
|
tslib: ^2.4.0
|
||||||
checksum: 6d796ba2dd98b49884f542ba902a0fc8b36464371c970673cfd2c9ce312df9eb0c9a41ceaf1cab23e36981e4686428ecc15feecc7f100eebc8be20e68ca36de5
|
checksum: 5c77fd9e823a9596665abf45607cfcc3aba786836aeb0a79aeb67026b7991ef4963f0b10998994fc2b487bb1c777145d5ef2938d3e8dd44d4048fe36e779f038
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -1553,15 +1543,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@formatjs/intl-localematcher@npm:0.2.21":
|
|
||||||
version: 0.2.21
|
|
||||||
resolution: "@formatjs/intl-localematcher@npm:0.2.21"
|
|
||||||
dependencies:
|
|
||||||
tslib: ^2.1.0
|
|
||||||
checksum: d766eb8ce8b2628d781fdb34fd0833a0a1b28f20e70a72dfabbca27cf02bd1b994a72c357b2b3d4888bc20c33b6b7cc7e10e92847ec228a40745a2e84d8d2e24
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"@formatjs/intl-localematcher@npm:0.2.32":
|
"@formatjs/intl-localematcher@npm:0.2.32":
|
||||||
version: 0.2.32
|
version: 0.2.32
|
||||||
resolution: "@formatjs/intl-localematcher@npm:0.2.32"
|
resolution: "@formatjs/intl-localematcher@npm:0.2.32"
|
||||||
@ -1571,13 +1552,14 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@formatjs/intl-numberformat@npm:^7.2.5":
|
"@formatjs/intl-numberformat@npm:^8.3.3":
|
||||||
version: 7.2.5
|
version: 8.3.3
|
||||||
resolution: "@formatjs/intl-numberformat@npm:7.2.5"
|
resolution: "@formatjs/intl-numberformat@npm:8.3.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@formatjs/ecma402-abstract": 1.10.0
|
"@formatjs/ecma402-abstract": 1.14.3
|
||||||
tslib: ^2.1.0
|
"@formatjs/intl-localematcher": 0.2.32
|
||||||
checksum: 1eda71418fbffbf7fc07eebbe04eca93cf84879b7d445cfc3fa130b5bf6a65b241d784fd7741b46fbb65d699aa5949fa8e613c51cb7833d7f67d8c4210ad67cc
|
tslib: ^2.4.0
|
||||||
|
checksum: 56fc8e25c445944f43295ee28a8f2dd059770e28e4a368b977787591157f3da357528ee8bcab5e00a54c9f850a879b1fedb92cc1934b93400a30699a3834c119
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -4317,6 +4299,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/offscreencanvas@npm:^2019.6.4":
|
||||||
|
version: 2019.7.0
|
||||||
|
resolution: "@types/offscreencanvas@npm:2019.7.0"
|
||||||
|
checksum: 018cfcd19e0c59c44d14ba61caaca7246f77fbb512839c7881654b7f2b6591dbdd5857362eccbf49f29cdc93724e71a4b37c8b6cf203388f9c04e913a53ea390
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@types/parse5@npm:^6.0.0, @types/parse5@npm:^6.0.1":
|
"@types/parse5@npm:^6.0.0, @types/parse5@npm:^6.0.1":
|
||||||
version: 6.0.3
|
version: 6.0.3
|
||||||
resolution: "@types/parse5@npm:6.0.3"
|
resolution: "@types/parse5@npm:6.0.3"
|
||||||
@ -7001,10 +6990,10 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"core-js@npm:^3.15.2":
|
"core-js@npm:^3.27.2":
|
||||||
version: 3.15.2
|
version: 3.27.2
|
||||||
resolution: "core-js@npm:3.15.2"
|
resolution: "core-js@npm:3.27.2"
|
||||||
checksum: f8f61569c4c3bdf50679226f5a1045551192a2f4bc3fa46a873b6fa834cff6d1634ee138a6e4bae3eea99f1b1db2d588fa693de74640447476292b41f595a4c3
|
checksum: 718debd426f55a6b97cf9b757c936be258afd6d4f7052f89d0f96c982d7013e9000b0b006df42831a0cf32adad298e34d6a19052dce9ae1c7ab87162c0c665e0
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -9378,7 +9367,7 @@ fsevents@^1.2.7:
|
|||||||
"@babel/plugin-syntax-top-level-await": ^7.14.5
|
"@babel/plugin-syntax-top-level-await": ^7.14.5
|
||||||
"@babel/preset-env": ^7.20.2
|
"@babel/preset-env": ^7.20.2
|
||||||
"@babel/preset-typescript": ^7.18.6
|
"@babel/preset-typescript": ^7.18.6
|
||||||
"@braintree/sanitize-url": ^6.0.0
|
"@braintree/sanitize-url": ^6.0.2
|
||||||
"@codemirror/autocomplete": ^6.4.0
|
"@codemirror/autocomplete": ^6.4.0
|
||||||
"@codemirror/commands": ^6.2.0
|
"@codemirror/commands": ^6.2.0
|
||||||
"@codemirror/language": ^6.4.0
|
"@codemirror/language": ^6.4.0
|
||||||
@ -9386,10 +9375,10 @@ fsevents@^1.2.7:
|
|||||||
"@codemirror/search": ^6.2.3
|
"@codemirror/search": ^6.2.3
|
||||||
"@codemirror/state": ^6.2.0
|
"@codemirror/state": ^6.2.0
|
||||||
"@codemirror/view": ^6.7.1
|
"@codemirror/view": ^6.7.1
|
||||||
"@formatjs/intl-datetimeformat": ^4.2.5
|
"@formatjs/intl-datetimeformat": ^6.4.3
|
||||||
"@formatjs/intl-getcanonicallocales": ^2.0.5
|
"@formatjs/intl-getcanonicallocales": ^2.0.5
|
||||||
"@formatjs/intl-locale": ^3.0.11
|
"@formatjs/intl-locale": ^3.0.11
|
||||||
"@formatjs/intl-numberformat": ^7.2.5
|
"@formatjs/intl-numberformat": ^8.3.3
|
||||||
"@formatjs/intl-pluralrules": ^5.1.8
|
"@formatjs/intl-pluralrules": ^5.1.8
|
||||||
"@formatjs/intl-relativetimeformat": ^11.1.8
|
"@formatjs/intl-relativetimeformat": ^11.1.8
|
||||||
"@fullcalendar/common": ^5.11.4
|
"@fullcalendar/common": ^5.11.4
|
||||||
@ -9481,7 +9470,7 @@ fsevents@^1.2.7:
|
|||||||
chai: ^4.3.4
|
chai: ^4.3.4
|
||||||
chart.js: ^3.3.2
|
chart.js: ^3.3.2
|
||||||
comlink: ^4.3.1
|
comlink: ^4.3.1
|
||||||
core-js: ^3.15.2
|
core-js: ^3.27.2
|
||||||
cropperjs: ^1.5.13
|
cropperjs: ^1.5.13
|
||||||
date-fns: ^2.29.3
|
date-fns: ^2.29.3
|
||||||
date-fns-tz: ^1.3.7
|
date-fns-tz: ^1.3.7
|
||||||
@ -9538,7 +9527,7 @@ fsevents@^1.2.7:
|
|||||||
prettier: ^2.8.3
|
prettier: ^2.8.3
|
||||||
proxy-polyfill: ^0.3.2
|
proxy-polyfill: ^0.3.2
|
||||||
punycode: ^2.3.0
|
punycode: ^2.3.0
|
||||||
qr-scanner: ^1.3.0
|
qr-scanner: ^1.4.2
|
||||||
qrcode: ^1.5.1
|
qrcode: ^1.5.1
|
||||||
regenerator-runtime: ^0.13.11
|
regenerator-runtime: ^0.13.11
|
||||||
require-dir: ^1.2.0
|
require-dir: ^1.2.0
|
||||||
@ -9552,7 +9541,7 @@ fsevents@^1.2.7:
|
|||||||
serve: ^11.3.2
|
serve: ^11.3.2
|
||||||
sinon: ^15.0.1
|
sinon: ^15.0.1
|
||||||
sortablejs: ^1.14.0
|
sortablejs: ^1.14.0
|
||||||
source-map-url: ^0.4.0
|
source-map-url: ^0.4.1
|
||||||
superstruct: ^1.0.3
|
superstruct: ^1.0.3
|
||||||
systemjs: ^6.13.0
|
systemjs: ^6.13.0
|
||||||
tar: ^6.1.11
|
tar: ^6.1.11
|
||||||
@ -9560,7 +9549,7 @@ fsevents@^1.2.7:
|
|||||||
tinykeys: ^1.1.3
|
tinykeys: ^1.1.3
|
||||||
ts-lit-plugin: ^1.2.1
|
ts-lit-plugin: ^1.2.1
|
||||||
tsparticles: ^1.34.0
|
tsparticles: ^1.34.0
|
||||||
typescript: ^4.9.4
|
typescript: ^4.9.5
|
||||||
unfetch: ^4.1.0
|
unfetch: ^4.1.0
|
||||||
vinyl-buffer: ^1.0.1
|
vinyl-buffer: ^1.0.1
|
||||||
vinyl-source-stream: ^2.0.0
|
vinyl-source-stream: ^2.0.0
|
||||||
@ -9655,9 +9644,9 @@ fsevents@^1.2.7:
|
|||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"http-cache-semantics@npm:^4.1.0":
|
"http-cache-semantics@npm:^4.1.0":
|
||||||
version: 4.1.0
|
version: 4.1.1
|
||||||
resolution: "http-cache-semantics@npm:4.1.0"
|
resolution: "http-cache-semantics@npm:4.1.1"
|
||||||
checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42
|
checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -13198,10 +13187,12 @@ fsevents@^1.2.7:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"qr-scanner@npm:^1.3.0":
|
"qr-scanner@npm:^1.4.2":
|
||||||
version: 1.3.0
|
version: 1.4.2
|
||||||
resolution: "qr-scanner@npm:1.3.0"
|
resolution: "qr-scanner@npm:1.4.2"
|
||||||
checksum: 421ff00626252d0f9e50550fb550a463166e4d0438baffb469c9450079f1f802f6df22784509bb571ef50ece81aecaadc00f91d442959f37655ad29710c81c8b
|
dependencies:
|
||||||
|
"@types/offscreencanvas": ^2019.6.4
|
||||||
|
checksum: 554855c1d61cc9f502162d43d76d0cd03d6df77b0ecbfcae2c0f936c31cbd1ac45e673857b91628dde1d3f5156eca6651c4973187fa061ae9ec7ec07a95f7738
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -14413,10 +14404,10 @@ fsevents@^1.2.7:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"source-map-url@npm:^0.4.0":
|
"source-map-url@npm:^0.4.0, source-map-url@npm:^0.4.1":
|
||||||
version: 0.4.0
|
version: 0.4.1
|
||||||
resolution: "source-map-url@npm:0.4.0"
|
resolution: "source-map-url@npm:0.4.1"
|
||||||
checksum: 63ed54045fcd7b4ec7ca17513f48fdc23b573eef679326ecf1a31333e1aaecc0a9c085adaa7d118283b160e65b71cc72da9e1385f2de4ac5ed68294e3920d719
|
checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -15380,13 +15371,13 @@ typescript@^3.8.3:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"typescript@npm:^4.9.4":
|
"typescript@npm:^4.9.5":
|
||||||
version: 4.9.4
|
version: 4.9.5
|
||||||
resolution: "typescript@npm:4.9.4"
|
resolution: "typescript@npm:4.9.5"
|
||||||
bin:
|
bin:
|
||||||
tsc: bin/tsc
|
tsc: bin/tsc
|
||||||
tsserver: bin/tsserver
|
tsserver: bin/tsserver
|
||||||
checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9
|
checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -15400,13 +15391,13 @@ typescript@^3.8.3:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"typescript@patch:typescript@^4.9.4#~builtin<compat/typescript>":
|
"typescript@patch:typescript@^4.9.5#~builtin<compat/typescript>":
|
||||||
version: 4.9.4
|
version: 4.9.5
|
||||||
resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin<compat/typescript>::version=4.9.4&hash=ad5954"
|
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=ad5954"
|
||||||
bin:
|
bin:
|
||||||
tsc: bin/tsc
|
tsc: bin/tsc
|
||||||
tsserver: bin/tsserver
|
tsserver: bin/tsserver
|
||||||
checksum: 1caaea6cb7f813e64345190fddc4e6c924d0b698ab81189b503763c4a18f7f5501c69362979d36e19c042d89d936443e768a78b0675690b35eb663d19e0eae71
|
checksum: 8f6260acc86b56bfdda6004bc53f32ea548f543e8baef7071c8e34d29d292f3e375c8416556c8de10b24deef6933cd1c16a8233dc84a3dd43a13a13265d0faab
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user