custom-card-helpers 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/dependabot.yml +13 -0
- package/.github/workflows/claude-code-review.yml +44 -0
- package/.github/workflows/claude.yml +50 -0
- package/.github/workflows/release.yml +4 -0
- package/.github/workflows/test.yml +1 -0
- package/dist/compute-name.d.ts +7 -0
- package/dist/compute-state-display.d.ts +1 -2
- package/dist/datetime/duration_to_seconds.d.ts +1 -1
- package/dist/datetime/seconds_to_duration.d.ts +1 -1
- package/dist/datetime/select_unit.d.ts +8 -0
- package/dist/get-lovelace.d.ts +5 -1
- package/dist/index.js +259 -23
- package/dist/index.js.map +1 -1
- package/dist/index.m.js +254 -23
- package/dist/index.m.js.map +1 -1
- package/dist/index.umd.js +263 -25
- package/dist/index.umd.js.map +1 -1
- package/dist/scroll-to-target.d.ts +1 -1
- package/dist/translations/localize.d.ts +1 -2
- package/dist/turn-on-off-entity.d.ts +2 -0
- package/dist/types.d.ts +156 -4
- package/package.json +7 -8
- package/src/compute-name.ts +7 -0
- package/src/compute-state-display.ts +2 -3
- package/src/cover_icon.ts +74 -6
- package/src/datetime/duration_to_seconds.ts +1 -1
- package/src/datetime/relative_time.ts +1 -2
- package/src/datetime/seconds_to_duration.ts +1 -1
- package/src/datetime/select_unit.ts +94 -0
- package/src/datetime/timer_time_remaining.ts +1 -1
- package/src/get-lovelace.ts +22 -16
- package/src/handle-action.ts +19 -2
- package/src/handle-click.ts +1 -1
- package/src/scroll-to-target.ts +1 -1
- package/src/state_icon.ts +1 -1
- package/src/translations/localize.ts +1 -3
- package/src/turn-on-off-entity.ts +10 -0
- package/src/types.ts +203 -3
- package/test/datetime.test.ts +2 -2
- package/test/icons.test.ts +51 -0
- package/test/service-actions.test.ts +19 -1
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/apply_themes_on_element.ts","../src/compute-card-size.ts","../src/compute-domain.ts","../src/compute-entity.ts","../src/compute-icon.ts","../src/compute-name.ts","../src/compute-rtl.ts","../src/compute-state.ts","../src/types.ts","../src/datetime/use_am_pm.ts","../src/datetime/format_date_time.ts","../src/datetime/format_date.ts","../src/datetime/format_time.ts","../src/compute-state-domain.ts","../src/format-number.ts","../src/compute-state-display.ts","../src/const.ts","../src/fire-event.ts","../src/create-thing.ts","../src/datetime/duration_to_seconds.ts","../src/datetime/relative_time.ts","../src/datetime/timer_time_remaining.ts","../src/debounce.ts","../src/deep-equal.ts","../src/domain_icons.ts","../src/evaluate-filter.ts","../src/format-timestamp.ts","../src/get-lovelace.ts","../src/haptic.ts","../src/navigate.ts","../src/turn-on-off-entity.ts","../src/toggle-entity.ts","../src/handle-action.ts","../src/handle-click.ts","../src/has-action.ts","../src/has-changed.ts","../src/has-double-click.ts","../src/binary_sensor_icon.ts","../src/cover_icon.ts","../src/sensor_icon.ts","../src/input_datetime_icon.ts","../src/state_icon.ts","../src/turn-on-off-entities.ts"],"sourcesContent":["/**\n * Apply a theme to an element by setting the CSS variables on it.\n *\n * element: Element to apply theme on.\n * themes: HASS Theme information\n * localTheme: selected theme.\n * updateMeta: boolean if we should update the theme-color meta element.\n */\nexport const applyThemesOnElement = (\n element,\n themes,\n localTheme,\n updateMeta = false\n) => {\n if (!element._themes) {\n element._themes = {};\n }\n let themeName = themes.default_theme;\n if (localTheme === \"default\" || (localTheme && themes.themes[localTheme])) {\n themeName = localTheme;\n }\n const styles = { ...element._themes };\n if (themeName !== \"default\") {\n const theme = themes.themes[themeName];\n Object.keys(theme).forEach((key) => {\n const prefixedKey = \"--\" + key;\n element._themes[prefixedKey] = \"\";\n styles[prefixedKey] = theme[key];\n });\n }\n if (element.updateStyles) {\n element.updateStyles(styles);\n } else if ((window as any).ShadyCSS) {\n // implement updateStyles() method of Polemer elements\n (window as any).ShadyCSS.styleSubtree(/** @type {!HTMLElement} */ (element), styles);\n }\n\n if (!updateMeta) {\n return;\n }\n\n const meta = document.querySelector(\"meta[name=theme-color]\");\n if (meta) {\n if (!meta.hasAttribute(\"default-content\")) {\n meta.setAttribute(\"default-content\", meta.getAttribute(\"content\")!);\n }\n const themeColor =\n styles[\"--primary-color\"] || meta.getAttribute(\"default-content\");\n meta.setAttribute(\"content\", themeColor);\n }\n}\n","import { LovelaceCard } from \"./types\";\n\nexport const computeCardSize = (card: LovelaceCard): number | Promise<number> => {\n return typeof card.getCardSize === \"function\" ? card.getCardSize() : 4;\n};","export function computeDomain(entityId: string): string {\n return entityId.substr(0, entityId.indexOf(\".\"));\n}\n","export function computeEntity(entityId: string): string {\n return entityId.substr(entityId.indexOf(\".\") + 1);\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nconst DOMAIN_ICONS: Record<string, string> = {\n light: \"mdi:lightbulb\",\n switch: \"mdi:toggle-switch\",\n sensor: \"mdi:gauge\",\n binary_sensor: \"mdi:checkbox-marked-circle\",\n climate: \"mdi:thermostat\",\n cover: \"mdi:window-shutter\",\n fan: \"mdi:fan\",\n lock: \"mdi:lock\",\n media_player: \"mdi:cast\",\n vacuum: \"mdi:robot-vacuum\",\n camera: \"mdi:camera\",\n person: \"mdi:account\",\n device_tracker: \"mdi:account-circle\",\n sun: \"mdi:white-balance-sunny\",\n weather: \"mdi:weather-cloudy\",\n};\n\nexport const computeIcon = (stateObj: HassEntity, icon?: string): string => {\n if (icon) {\n return icon;\n }\n\n if (stateObj.attributes.icon) {\n return stateObj.attributes.icon;\n }\n\n const domain = stateObj.entity_id.split(\".\")[0];\n return DOMAIN_ICONS[domain] || \"mdi:bookmark\";\n};\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nexport const computeName = (stateObj: HassEntity): string =>\n stateObj.attributes.friendly_name || stateObj.entity_id;\n","import { HomeAssistant } from \"./types\";\n\nexport function computeRTL(hass: HomeAssistant) {\n const lang = hass?.locale?.language || \"en\";\n if (hass.translationMetadata.translations[lang]) {\n return hass.translationMetadata.translations[lang].isRTL || false;\n }\n return false;\n}\n\nexport function computeRTLDirection(hass: HomeAssistant) {\n return computeRTL(hass) ? \"rtl\" : \"ltr\";\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nconst CAP_STATE: string[] = [\n \"on\",\n \"off\",\n \"open\",\n \"closed\",\n \"locked\",\n \"unlocked\",\n];\n\nexport const computeState = (stateObj: HassEntity): string => {\n const state = stateObj.state;\n const unit = stateObj.attributes.unit_of_measurement;\n\n if (unit) {\n return `${state} ${unit}`;\n }\n\n if (CAP_STATE.includes(state)) {\n return state.charAt(0).toUpperCase() + state.slice(1);\n }\n\n return state;\n};\n","import {\n HassEntities,\n HassConfig,\n Auth,\n Connection,\n MessageBase,\n HassServices,\n HassServiceTarget,\n} from \"home-assistant-js-websocket\";\nimport { HapticType } from \"./haptic\";\nimport { HASSDomEvent } from \"./fire-event\";\n\nexport interface ToggleMenuActionConfig extends BaseActionConfig {\n action: \"toggle-menu\";\n}\n\nexport interface ToggleActionConfig extends BaseActionConfig {\n action: \"toggle\";\n}\n\nexport interface CallServiceActionConfig extends BaseActionConfig {\n action: \"call-service\";\n service: string;\n service_data?: {\n entity_id?: string | [string];\n [key: string]: any;\n };\n\n target?: HassServiceTarget;\n repeat?: number;\n haptic?: HapticType;\n}\n\nexport interface NavigateActionConfig extends BaseActionConfig {\n action: \"navigate\";\n navigation_path: string;\n}\n\nexport interface UrlActionConfig extends BaseActionConfig {\n action: \"url\";\n url_path: string;\n}\n\nexport interface MoreInfoActionConfig extends BaseActionConfig {\n action: \"more-info\";\n entity?: string;\n}\n\nexport interface NoActionConfig extends BaseActionConfig {\n action: \"none\";\n}\n\nexport interface CustomActionConfig extends BaseActionConfig {\n action: \"fire-dom-event\";\n}\n\n/**\n * `repeat` and `haptic` are specifically for use in custom cards like the Button-Card\n */\nexport interface BaseActionConfig {\n confirmation?: ConfirmationRestrictionConfig;\n repeat?: number;\n repeat_limit?: number;\n haptic?: HapticType;\n}\n\nexport interface ConfirmationRestrictionConfig {\n text?: string;\n exemptions?: RestrictionConfig[];\n}\n\nexport interface RestrictionConfig {\n user: string;\n}\n\nexport type ActionConfig =\n | ToggleActionConfig\n | CallServiceActionConfig\n | NavigateActionConfig\n | UrlActionConfig\n | MoreInfoActionConfig\n | NoActionConfig\n | CustomActionConfig\n | ToggleMenuActionConfig;\n\nexport interface Window {\n // Custom panel entry point url\n customPanelJS: string;\n ShadyCSS: {\n nativeCss: boolean;\n nativeShadow: boolean;\n prepareTemplate(templateElement, elementName, elementExtension);\n styleElement(element);\n styleSubtree(element, overrideProperties);\n styleDocument(overrideProperties);\n getComputedStyleValue(element, propertyName);\n };\n}\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"value-changed\": {\n value: unknown;\n };\n \"config-changed\": {\n config: any;\n };\n \"hass-more-info\": {\n entityId: string | undefined;\n };\n \"ll-rebuild\": {};\n \"ll-custom\": {};\n \"location-changed\": {\n replace: boolean;\n };\n \"show-dialog\": {};\n undefined;\n action: {\n action: string;\n };\n }\n}\n\ntype ValidHassDomEvent = keyof HASSDomEvents;\n\nexport type LocalizeFunc = (key: string, ...args: any[]) => string;\n\nexport interface Credential {\n auth_provider_type: string;\n auth_provider_id: string;\n}\n\nexport interface MFAModule {\n id: string;\n name: string;\n enabled: boolean;\n}\n\nexport interface CurrentUser {\n id: string;\n is_owner: boolean;\n is_admin: boolean;\n name: string;\n credentials: Credential[];\n mfa_modules: MFAModule[];\n}\n\nexport interface Theme {\n // Incomplete\n \"primary-color\": string;\n \"text-primary-color\": string;\n \"accent-color\": string;\n}\n\nexport interface Themes {\n default_theme: string;\n themes: { [key: string]: Theme };\n}\n\nexport interface Panel {\n component_name: string;\n config: { [key: string]: any } | null;\n icon: string | null;\n title: string | null;\n url_path: string;\n}\n\nexport interface Panels {\n [name: string]: Panel;\n}\n\nexport interface Resources {\n [language: string]: { [key: string]: string };\n}\n\nexport interface Translation {\n nativeName: string;\n isRTL: boolean;\n fingerprints: { [fragment: string]: string };\n}\n\nexport interface ServiceCallRequest {\n domain: string;\n service: string;\n serviceData?: Record<string, any>;\n target?: HassServiceTarget;\n}\n\nexport interface HomeAssistant {\n auth: Auth;\n connection: Connection;\n connected: boolean;\n states: HassEntities;\n services: HassServices;\n config: HassConfig;\n themes: Themes;\n selectedTheme?: string | null;\n panels: Panels;\n panelUrl: string;\n\n // i18n\n // current effective language, in that order:\n // - backend saved user selected lanugage\n // - language in local appstorage\n // - browser language\n // - english (en)\n language: string;\n locale: FrontendLocaleData;\n // local stored language, keep that name for backward compability\n selectedLanguage: string | null;\n resources: Resources;\n localize: LocalizeFunc;\n translationMetadata: {\n fragments: string[];\n translations: {\n [lang: string]: Translation;\n };\n };\n\n dockedSidebar: boolean;\n moreInfoEntityId: string;\n user: CurrentUser;\n callService: (\n domain: ServiceCallRequest[\"domain\"],\n service: ServiceCallRequest[\"service\"],\n serviceData?: ServiceCallRequest[\"serviceData\"],\n target?: ServiceCallRequest[\"target\"]\n ) => Promise<void>;\n callApi: <T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n parameters?: { [key: string]: any }\n ) => Promise<T>;\n fetchWithAuth: (\n path: string,\n init?: { [key: string]: any }\n ) => Promise<Response>;\n sendWS: (msg: MessageBase) => Promise<void>;\n callWS: <T>(msg: MessageBase) => Promise<T>;\n}\n\nexport enum NumberFormat {\n language = \"language\",\n system = \"system\",\n comma_decimal = \"comma_decimal\",\n decimal_comma = \"decimal_comma\",\n space_comma = \"space_comma\",\n none = \"none\",\n}\n\nexport enum TimeFormat {\n language = \"language\",\n system = \"system\",\n am_pm = \"12\",\n twenty_four = \"24\",\n}\n\nexport interface FrontendLocaleData {\n language: string;\n number_format: NumberFormat;\n time_format: TimeFormat;\n}\n\nexport interface LovelaceCardConfig {\n index?: number;\n view_index?: number;\n type: string;\n [key: string]: any;\n}\n\nexport interface LovelaceCard extends HTMLElement {\n hass?: HomeAssistant;\n isPanel?: boolean;\n editMode?: boolean;\n getCardSize(): number | Promise<number>;\n setConfig(config: LovelaceCardConfig): void;\n}\n\nexport interface LovelaceCardEditor extends HTMLElement {\n hass?: HomeAssistant;\n lovelace?: LovelaceConfig;\n setConfig(config: LovelaceCardConfig): void;\n}\n\nexport interface LovelaceConfig {\n title?: string;\n views: LovelaceViewConfig[];\n background?: string;\n}\n\nexport interface LovelaceViewConfig {\n index?: number;\n title?: string;\n badges?: Array<string | LovelaceBadgeConfig>;\n cards?: LovelaceCardConfig[];\n path?: string;\n icon?: string;\n theme?: string;\n panel?: boolean;\n background?: string;\n visible?: boolean | ShowViewConfig[];\n}\n\nexport interface ShowViewConfig {\n user?: string;\n}\n\nexport interface LovelaceBadgeConfig {\n type?: string;\n [key: string]: any;\n}\n\nexport interface ActionHandlerDetail {\n action: string;\n}\n\nexport type ActionHandlerEvent = HASSDomEvent<ActionHandlerDetail>;\n\nexport interface ActionHandlerOptions {\n hasHold?: boolean;\n hasDoubleClick?: boolean;\n repeat?: number;\n repeatLimit?: number;\n isMomentary?: boolean;\n disableKbd?: boolean;\n disabled?: boolean;\n}\n\nexport interface EntitiesCardEntityConfig extends EntityConfig {\n type?: string;\n secondary_info?:\n | \"entity-id\"\n | \"last-changed\"\n | \"last-triggered\"\n | \"last-updated\"\n | \"position\"\n | \"tilt-position\"\n | \"brightness\";\n action_name?: string;\n service?: string;\n service_data?: Record<string, unknown>;\n url?: string;\n tap_action?: ActionConfig;\n hold_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n state_color?: boolean;\n show_name?: boolean;\n show_icon?: boolean;\n}\n\nexport interface EntityConfig {\n entity: string;\n type?: string;\n name?: string;\n icon?: string;\n image?: string;\n}\n\nexport interface LovelaceElementConfigBase {\n type: string;\n style: Record<string, string>;\n}\n","// REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/use_am_pm.ts\r\n\r\nimport { FrontendLocaleData, TimeFormat } from \"../types\"\r\n\r\n/**\r\n * Checking if AM/PM time format is used within the browser.\r\n * @param locale Homeassistant frontend locale data\r\n * @returns \r\n */\r\nexport const useAmPm = (locale: FrontendLocaleData): boolean => {\r\n if (\r\n locale.time_format === TimeFormat.language ||\r\n locale.time_format === TimeFormat.system\r\n ) {\r\n const testLanguage =\r\n locale.time_format === TimeFormat.language ? locale.language : undefined;\r\n const test = new Date().toLocaleString(testLanguage);\r\n return test.includes(\"AM\") || test.includes(\"PM\");\r\n }\r\n\r\n return locale.time_format === TimeFormat.am_pm;\r\n};\r\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/format_date_time.ts\n\nimport { FrontendLocaleData } from \"../types\";\nimport { useAmPm } from \"./use_am_pm\";\n\n// August 9, 2021, 8:23 AM\n/**\n * Formatting a dateObject to date with time e.g. August 9, 2021, 8:23 AM\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"August 9, 2021, 8:23 AM\"\n */\nexport const formatDateTime = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateTimeMem(locale).format(dateObj);\n\nconst formatDateTimeMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n\n/**\n * Formatting a dateObject to date with time e.g. August 9, 2021, 8:23:15 AM\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"August 9, 2021, 8:23:15 AM\"\n */\nexport const formatDateTimeWithSeconds = (\n dateObj: Date,\n locale: FrontendLocaleData\n) => formatDateTimeWithSecondsMem(locale).format(dateObj);\n\nconst formatDateTimeWithSecondsMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n/**\n * Formatting a Date to just date with AM/PM time e.g. 9/8/2021, 8:23 AM\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"9/8/2021, 8:23 AM\"\n */\nexport const formatDateTimeNumeric = (\n dateObj: Date,\n locale: FrontendLocaleData\n) => formatDateTimeNumericMem(locale).format(dateObj);\n\nconst formatDateTimeNumericMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: useAmPm(locale),\n });","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/format_date.ts\n\nimport { FrontendLocaleData } from \"../types\";\n\n/**\n * Formatting a Date to the dddd, mmmm yy format e.g. Tuesday, August 10\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns date string like \"Tuesday, August 10\"\n */\nexport const formatDateWeekday = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateWeekdayMem(locale).format(dateObj);\n\nconst formatDateWeekdayMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n });\n\n/**\n * Formatting a Date to the mmmm dd, yyyy format e.g. August 10, 2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns date string like \"August 10, 2021\"\n */\nexport const formatDate = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateMem(locale).format(dateObj);\n\nconst formatDateMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n\n/**\n * Formatting a Date to the classic date format e.g. 10/08/2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns classic date format \"10/08/2021\"\n */\nexport const formatDateNumeric = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateNumericMem(locale).format(dateObj);\n\nconst formatDateNumericMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n });\n\n\n/**\n * Formatting a Date to just a month with days e.g. Aug 10\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"Aug 10\"\n */\nexport const formatDateShort = (dateObj: Date, locale: FrontendLocaleData) =>\nformatDateShortMem(locale).format(dateObj);\n\nconst formatDateShortMem =\n(locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n day: \"numeric\",\n month: \"short\",\n });\n\n\n/**\n * Formatting a Date to just a month with year e.g. August 2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and year like \"August 2021\"\n */\nexport const formatDateMonthYear = (\ndateObj: Date,\nlocale: FrontendLocaleData\n) => formatDateMonthYearMem(locale).format(dateObj);\n\nconst formatDateMonthYearMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n month: \"long\",\n year: \"numeric\",\n });\n\n\n/**\n * Formatting a Date to just a month e.g. August\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns the written out months of the date\n */\nexport const formatDateMonth = (dateObj: Date, locale: FrontendLocaleData) =>\nformatDateMonthMem(locale).format(dateObj);\n\nconst formatDateMonthMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n month: \"long\",\n });\n\n\n/**\n * Formatting a Date to just a year e.g. 2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns the year of the date in yyyy\n */\nexport const formatDateYear = (dateObj: Date, locale: FrontendLocaleData) =>\nformatDateYearMem(locale).format(dateObj);\n\nconst formatDateYearMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n });\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/format_time.ts\n\nimport { FrontendLocaleData } from \"../types\";\nimport { useAmPm } from \"./use_am_pm\";\n\n/**\n * 9:15 PM or 21:15\n * @param dateObj The time to convert\n * @param locale The users's locale settings\n * @returns Reformated time in hh:mm\n */\n export const formatTime = (dateObj: Date, locale: FrontendLocaleData) =>\n formatTimeMem(locale).format(dateObj);\n\n const formatTimeMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n/**\n* 9:15:24 PM or 21:15:24\n* @param dateObj The time to convert\n* @param locale The users's locale settings\n* @returns Reformated time in hh:mm:ss\n*/\nexport const formatTimeWithSeconds = (\n dateObj: Date,\n locale: FrontendLocaleData\n) => formatTimeWithSecondsMem(locale).format(dateObj);\n\nconst formatTimeWithSecondsMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n/**\n* Tuesday 7:00 PM or Tuesday 19:00\n* @param dateObj The datetime to convert\n* @param locale The users's locale settings\n* @returns Reformated weekday/time in dddd hh:mm\n*/\nexport const formatTimeWeekday = (dateObj: Date, locale: FrontendLocaleData) =>\n formatTimeWeekdayMem(locale).format(dateObj);\n\nconst formatTimeWeekdayMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: useAmPm(locale),\n }); \n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport { computeDomain } from \"./compute-domain\";\n\nexport function computeStateDomain(stateObj: HassEntity) {\n return computeDomain(stateObj.entity_id);\n}\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/number/format_number.ts\n\nimport { HassEntity } from \"home-assistant-js-websocket\";\nimport { FrontendLocaleData, NumberFormat } from \"./types\";\n\n/**\n * Returns true if the entity is considered numeric based on the attributes it has\n * @param stateObj The entity state object\n */\n export const isNumericState = (stateObj: HassEntity): boolean =>\n !!stateObj.attributes.unit_of_measurement ||\n !!stateObj.attributes.state_class;\n\nexport const numberFormatToLocale = (\n localeOptions: FrontendLocaleData\n): string | string[] | undefined => {\n switch (localeOptions.number_format) {\n case NumberFormat.comma_decimal:\n return [\"en-US\", \"en\"]; // Use United States with fallback to English formatting 1,234,567.89\n case NumberFormat.decimal_comma:\n return [\"de\", \"es\", \"it\"]; // Use German with fallback to Spanish then Italian formatting 1.234.567,89\n case NumberFormat.space_comma:\n return [\"fr\", \"sv\", \"cs\"]; // Use French with fallback to Swedish and Czech formatting 1 234 567,89\n case NumberFormat.system:\n return undefined;\n default:\n return localeOptions.language;\n }\n};\n\nexport const round = (value: number, precision = 2): number =>\n Math.round(value * 10 ** precision) / 10 ** precision;\n\n/**\n * Formats a number based on the specified language with thousands separator(s) and decimal character for better legibility.\n * @param num The number to format\n * @param locale The user-selected language and number format, from `hass.locale`\n * @param options Intl.NumberFormatOptions to use\n */\nexport const formatNumber = (\n num: string | number,\n localeOptions?: FrontendLocaleData,\n options?: Intl.NumberFormatOptions\n): string => {\n const locale = localeOptions\n ? numberFormatToLocale(localeOptions)\n : undefined;\n\n // Polyfill for Number.isNaN, which is more reliable than the global isNaN()\n Number.isNaN =\n Number.isNaN ||\n function isNaN(input) {\n return typeof input === \"number\" && isNaN(input);\n };\n\n if (\n localeOptions?.number_format !== NumberFormat.none &&\n !Number.isNaN(Number(num)) &&\n Intl\n ) {\n try {\n return new Intl.NumberFormat(\n locale,\n getDefaultFormatOptions(num, options)\n ).format(Number(num));\n } catch (err: any) {\n // Don't fail when using \"TEST\" language\n // eslint-disable-next-line no-console\n console.error(err);\n return new Intl.NumberFormat(\n undefined,\n getDefaultFormatOptions(num, options)\n ).format(Number(num));\n }\n }\n if (typeof num === \"string\") {\n return num;\n }\n return `${round(num, options?.maximumFractionDigits).toString()}${\n options?.style === \"currency\" ? ` ${options.currency}` : \"\"\n }`;\n};\n\n/**\n * Generates default options for Intl.NumberFormat\n * @param num The number to be formatted\n * @param options The Intl.NumberFormatOptions that should be included in the returned options\n */\nconst getDefaultFormatOptions = (\n num: string | number,\n options?: Intl.NumberFormatOptions\n): Intl.NumberFormatOptions => {\n const defaultOptions: Intl.NumberFormatOptions = {\n maximumFractionDigits: 2,\n ...options,\n };\n\n if (typeof num !== \"string\") {\n return defaultOptions;\n }\n\n // Keep decimal trailing zeros if they are present in a string numeric value\n if (\n !options ||\n (!options.minimumFractionDigits && !options.maximumFractionDigits)\n ) {\n const digits = num.indexOf(\".\") > -1 ? num.split(\".\")[1].length : 0;\n defaultOptions.minimumFractionDigits = digits;\n defaultOptions.maximumFractionDigits = digits;\n }\n\n return defaultOptions;\n};\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport { formatDateTime } from \"./datetime/format_date_time\";\nimport { formatDate } from \"./datetime/format_date\";\nimport { formatTime } from \"./datetime/format_time\";\nimport { LocalizeFunc } from \"./translations/localize\";\nimport { computeStateDomain } from \"./compute-state-domain\";\nimport { FrontendLocaleData } from \"./types\";\nimport { formatNumber, isNumericState } from \"./format-number\";\n\nexport const computeStateDisplay = (\n localize: LocalizeFunc,\n stateObj: HassEntity,\n locale: FrontendLocaleData,\n state?: string\n): string => {\n const compareState = state !== undefined ? state : stateObj.state;\n\n if (compareState === \"unknown\" || compareState === \"unavailable\") {\n return localize(`state.default.${compareState}`);\n }\n\n // Entities with a `unit_of_measurement` or `state_class` are numeric values and should use `formatNumber`\n if (isNumericState(stateObj)) {\n if (stateObj.attributes.device_class === \"monetary\") {\n try {\n return formatNumber(compareState, locale, {\n style: \"currency\",\n currency: stateObj.attributes.unit_of_measurement,\n });\n } catch (_err) {\n // fallback to default\n }\n }\n return `${formatNumber(compareState, locale)}${\n stateObj.attributes.unit_of_measurement\n ? \" \" + stateObj.attributes.unit_of_measurement\n : \"\"\n }`;\n }\n\n const domain = computeStateDomain(stateObj);\n\n if (domain === \"input_datetime\") {\n if (state !== undefined) {\n // If trying to display an explicit state, need to parse the explict state to `Date` then format.\n // Attributes aren't available, we have to use `state`.\n try {\n const components = state.split(\" \");\n if (components.length === 2) {\n // Date and time.\n return formatDateTime(new Date(components.join(\"T\")), locale);\n }\n if (components.length === 1) {\n if (state.includes(\"-\")) {\n // Date only.\n return formatDate(new Date(`${state}T00:00`), locale);\n }\n if (state.includes(\":\")) {\n // Time only.\n const now = new Date();\n return formatTime(\n new Date(`${now.toISOString().split(\"T\")[0]}T${state}`),\n locale\n );\n }\n }\n return state;\n } catch (_e) {\n // Formatting methods may throw error if date parsing doesn't go well,\n // just return the state string in that case.\n return state;\n }\n } else {\n // If not trying to display an explicit state, create `Date` object from `stateObj`'s attributes then format.\n let date: Date;\n if (stateObj.attributes.has_date && stateObj.attributes.has_time) {\n date = new Date(\n stateObj.attributes.year,\n stateObj.attributes.month - 1,\n stateObj.attributes.day,\n stateObj.attributes.hour,\n stateObj.attributes.minute\n );\n return formatDateTime(date, locale);\n }\n if (stateObj.attributes.has_date) {\n date = new Date(\n stateObj.attributes.year,\n stateObj.attributes.month - 1,\n stateObj.attributes.day\n );\n return formatDate(date, locale);\n }\n if (stateObj.attributes.has_time) {\n date = new Date();\n date.setHours(stateObj.attributes.hour, stateObj.attributes.minute);\n return formatTime(date, locale);\n }\n return stateObj.state;\n }\n }\n\n if (domain === \"humidifier\") {\n if (compareState === \"on\" && stateObj.attributes.humidity) {\n return `${stateObj.attributes.humidity} %`;\n }\n }\n\n // `counter` `number` and `input_number` domains do not have a unit of measurement but should still use `formatNumber`\n if (\n domain === \"counter\" ||\n domain === \"number\" ||\n domain === \"input_number\"\n ) {\n return formatNumber(compareState, locale);\n }\n\n return (\n // Return device class translation\n (stateObj.attributes.device_class &&\n localize(\n `component.${domain}.state.${stateObj.attributes.device_class}.${compareState}`\n )) ||\n // Return default translation\n localize(`component.${domain}.state._.${compareState}`) ||\n // We don't know! Return the raw state.\n compareState\n );\n};","/** Constants to be used in the frontend. */\n\n// Constants should be alphabetically sorted by name.\n// Arrays with values should be alphabetically sorted if order doesn't matter.\n// Each constant should have a description what it is supposed to be used for.\n\n/** Icon to use when no icon specified for domain. */\nexport const DEFAULT_DOMAIN_ICON = \"mdi:bookmark\";\n\n/** Panel to show when no panel is picked. */\nexport const DEFAULT_PANEL = \"lovelace\";\n\n/** Domains that have a state card. */\nexport const DOMAINS_WITH_CARD = [\n \"climate\",\n \"cover\",\n \"configurator\",\n \"input_select\",\n \"input_number\",\n \"input_text\",\n \"lock\",\n \"media_player\",\n \"scene\",\n \"script\",\n \"timer\",\n \"vacuum\",\n \"water_heater\",\n \"weblink\"\n];\n\n/** Domains with separate more info dialog. */\nexport const DOMAINS_WITH_MORE_INFO = [\n \"alarm_control_panel\",\n \"automation\",\n \"camera\",\n \"climate\",\n \"configurator\",\n \"cover\",\n \"fan\",\n \"group\",\n \"history_graph\",\n \"input_datetime\",\n \"light\",\n \"lock\",\n \"media_player\",\n \"script\",\n \"sun\",\n \"updater\",\n \"vacuum\",\n \"water_heater\",\n \"weather\"\n];\n\n/** Domains that show no more info dialog. */\nexport const DOMAINS_HIDE_MORE_INFO = [\n \"input_number\",\n \"input_select\",\n \"input_text\",\n \"scene\",\n \"weblink\"\n];\n\n/** Domains that should have the history hidden in the more info dialog. */\nexport const DOMAINS_MORE_INFO_NO_HISTORY = [\n \"camera\",\n \"configurator\",\n \"history_graph\",\n \"scene\"\n];\n\n/** States that we consider \"off\". */\nexport const STATES_OFF = [\"closed\", \"locked\", \"off\"];\n\n/** Domains where we allow toggle in Lovelace. */\nexport const DOMAINS_TOGGLE = new Set([\n \"fan\",\n \"input_boolean\",\n \"light\",\n \"switch\",\n \"group\",\n \"automation\"\n]);\n\n/** Temperature units. */\nexport const UNIT_C = \"°C\";\nexport const UNIT_F = \"°F\";\n\n/** Entity ID of the default view. */\nexport const DEFAULT_VIEW_ENTITY_ID = \"group.default_view\";\n","// Polymer legacy event helpers used courtesy of the Polymer project.\n//\n// Copyright (c) 2017 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ndeclare global {\n // tslint:disable-next-line\n interface HASSDomEvents {}\n}\n\nexport type ValidHassDomEvent = keyof HASSDomEvents;\n\nexport interface HASSDomEvent<T> extends Event {\n detail: T;\n}\n\n/**\n * Dispatches a custom event with an optional detail value.\n *\n * @param {string} type Name of event type.\n * @param {*=} detail Detail value containing event-specific\n * payload.\n * @param {{ bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * composed: (boolean|undefined) }=}\n * options Object specifying options. These may include:\n * `bubbles` (boolean, defaults to `true`),\n * `cancelable` (boolean, defaults to false), and\n * `node` on which to fire the event (HTMLElement, defaults to `this`).\n * @return {Event} The new event that was fired.\n */\nexport const fireEvent = <HassEvent extends ValidHassDomEvent>(\n node: HTMLElement | Window,\n type: HassEvent,\n detail?: HASSDomEvents[HassEvent],\n options?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n }\n) => {\n options = options || {};\n // @ts-ignore\n detail = detail === null || detail === undefined ? {} : detail;\n const event = new Event(type, {\n bubbles: options.bubbles === undefined ? true : options.bubbles,\n cancelable: Boolean(options.cancelable),\n composed: options.composed === undefined ? true : options.composed\n });\n (event as any).detail = detail;\n node.dispatchEvent(event);\n return event;\n};\n","import { fireEvent } from \"./fire-event\";\n\nconst SPECIAL_TYPES = new Set([\n \"call-service\",\n \"divider\",\n \"section\",\n \"weblink\",\n \"cast\",\n \"select\"\n]);\nconst DOMAIN_TO_ELEMENT_TYPE = {\n alert: \"toggle\",\n automation: \"toggle\",\n climate: \"climate\",\n cover: \"cover\",\n fan: \"toggle\",\n group: \"group\",\n input_boolean: \"toggle\",\n input_number: \"input-number\",\n input_select: \"input-select\",\n input_text: \"input-text\",\n light: \"toggle\",\n lock: \"lock\",\n media_player: \"media-player\",\n remote: \"toggle\",\n scene: \"scene\",\n script: \"script\",\n sensor: \"sensor\",\n timer: \"timer\",\n switch: \"toggle\",\n vacuum: \"toggle\",\n // Temporary. Once climate is rewritten,\n // water heater should get it's own row.\n water_heater: \"climate\",\n input_datetime: \"input-datetime\"\n};\n\nexport const createThing = (cardConfig, isRow = false) => {\n const _createError = (error, config) => {\n return _createThing(\n \"hui-error-card\",\n {\n type: \"error\",\n error,\n config\n }\n );\n };\n\n const _createThing = (tag, config) => {\n const element = window.document.createElement(tag);\n try {\n // Preventing an error-card infinity loop: https://github.com/custom-cards/custom-card-helpers/issues/54\n if (!element.setConfig) return;\n element.setConfig(config);\n } catch (err) {\n console.error(tag, err);\n return _createError((err as Error).message, config);\n }\n return element;\n };\n\n if (!cardConfig || typeof cardConfig !== \"object\" || (!isRow && !cardConfig.type))\n return _createError(\"No type defined\", cardConfig);\n let tag = cardConfig.type;\n if (tag && tag.startsWith(\"custom:\")) {\n tag = tag.substr(\"custom:\".length);\n } else if (isRow) {\n if (SPECIAL_TYPES.has(tag)) {\n tag = `hui-${tag}-row`;\n } else {\n if (!cardConfig.entity) {\n return _createError(\"Invalid config given.\", cardConfig);\n }\n \n const domain = cardConfig.entity.split(\".\", 1)[0];\n tag = `hui-${DOMAIN_TO_ELEMENT_TYPE[domain] || \"text\"}-entity-row`;\n }\n } else {\n tag = `hui-${tag}-card`;\n }\n\n if (customElements.get(tag)) return _createThing(tag, cardConfig);\n\n // If element doesn't exist (yet) create an error\n const element = _createError(\n `Custom element doesn't exist: ${cardConfig.type}.`,\n cardConfig\n );\n element.style.display = \"None\";\n const timer = setTimeout(() => {\n element.style.display = \"\";\n }, 2000);\n // Remove error if element is defined later\n customElements.whenDefined(cardConfig.type).then(() => {\n clearTimeout(timer);\n fireEvent(element, \"ll-rebuild\", {}, element);\n });\n\n return element;\n};\n","/**\n * Convert a Duration hh:mm:ss format to seconds\n * @param duration hh:mm:ss formated duration\n * @returns duration in seconds\n */\n export default function durationToSeconds(duration: string): number {\n const parts = duration.split(\":\").map(Number);\n return parts[0] * 3600 + parts[1] * 60 + parts[2];\n}\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/relative_time.ts\n\nimport { selectUnit } from \"@formatjs/intl-utils\";\nimport { FrontendLocaleData } from \"../types\";\n\n const formatRelTimeMem =\n (locale: FrontendLocaleData) =>\n new Intl.RelativeTimeFormat(locale.language, { numeric: \"auto\" });\n\n/**\n * Calculate a string representing a date object as relative time from now.\n *\n * Example output: 5 minutes ago, in 3 days.\n */\n export const relativeTime = (\n from: Date,\n locale: FrontendLocaleData,\n to?: Date,\n includeTense = true\n): string => {\n const diff = selectUnit(from, to);\n if (includeTense) {\n return formatRelTimeMem(locale).format(diff.value, diff.unit);\n }\n return Intl.NumberFormat(locale.language, {\n style: \"unit\",\n unit: diff.unit,\n unitDisplay: \"long\",\n }).format(Math.abs(diff.value));\n};\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport durationToSeconds from \"../datetime/duration_to_seconds\";\n\nexport function timerTimeRemaining(stateObj: HassEntity) {\n let timeRemaining = durationToSeconds(stateObj.attributes.remaining);\n\n if (stateObj.state === \"active\") {\n const now = new Date().getTime();\n const madeActive = new Date(stateObj.last_changed).getTime();\n timeRemaining = Math.max(timeRemaining - (now - madeActive) / 1000, 0);\n }\n\n return timeRemaining;\n}\n","/**\r\n * Returns a function, that, as long as it continues to be invoked, will not be triggered. It will be called after it stops being called for `wait` ms.\r\n * This can be usefull for ResizeObservers for example.\r\n * @param func The function you want to debounce\r\n * @param wait Period to wait in ms\r\n * @param immediate Triggering on the leading edge instead of the trailing\r\n * @returns Debounced Function\r\n */\r\n// eslint-disable-next-line: ban-types\r\nexport const debounce = <T extends (...args) => unknown>(\r\n func: T,\r\n wait: number,\r\n immediate = false\r\n): T => {\r\n let timeout;\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n return function (...args) {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const context = this;\r\n const later = () => {\r\n timeout = null;\r\n if (!immediate) {\r\n func.apply(context, args);\r\n }\r\n };\r\n const callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) {\r\n func.apply(context, args);\r\n }\r\n };\r\n};\r\n","const compareArrayBufferViews = (\n a: ArrayBufferView,\n b: ArrayBufferView\n): boolean => {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n const viewA = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n const viewB = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);\n\n for (let index = 0; index < viewA.length; index++) {\n if (viewA[index] !== viewB[index]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const deepEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n let i: number | [unknown, unknown];\n let length: number;\n if (Array.isArray(a)) {\n const bArray = b as unknown[];\n length = a.length;\n if (length !== bArray.length) {\n return false;\n }\n for (i = length; i-- !== 0; ) {\n if (!deepEqual(a[i], bArray[i])) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (i of a.entries()) {\n if (!b.has(i[0])) {\n return false;\n }\n }\n for (i of a.entries()) {\n if (!deepEqual(i[1], b.get(i[0]))) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n for (i of a.entries()) {\n if (!b.has(i[0])) {\n return false;\n }\n }\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n return compareArrayBufferViews(a, b);\n }\n\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n if (a.valueOf !== Object.prototype.valueOf) {\n return a.valueOf() === b.valueOf();\n }\n if (a.toString !== Object.prototype.toString) {\n return a.toString() === b.toString();\n }\n\n const aRecord = a as Record<string, unknown>;\n const bRecord = b as Record<string, unknown>;\n const keys = Object.keys(aRecord);\n length = keys.length;\n if (length !== Object.keys(bRecord).length) {\n return false;\n }\n for (i = length; i-- !== 0; ) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n\n for (i = length; i-- !== 0; ) {\n const key = keys[i];\n\n if (!deepEqual(aRecord[key], bRecord[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return a !== a && b !== b;\n};\n","/**\n * Return the icon to be used for a domain.\n *\n * Optionally pass in a state to influence the domain icon.\n */\nimport { DEFAULT_DOMAIN_ICON } from \"./const\";\n\nexport const fixedIcons = {\n alert: \"mdi:alert\",\n automation: \"mdi:playlist-play\",\n calendar: \"mdi:calendar\",\n camera: \"mdi:video\",\n climate: \"mdi:thermostat\",\n configurator: \"mdi:settings\",\n conversation: \"mdi:text-to-speech\",\n device_tracker: \"mdi:account\",\n fan: \"mdi:fan\",\n group: \"mdi:google-circles-communities\",\n history_graph: \"mdi:chart-line\",\n homeassistant: \"mdi:home-assistant\",\n homekit: \"mdi:home-automation\",\n image_processing: \"mdi:image-filter-frames\",\n input_boolean: \"mdi:drawing\",\n input_datetime: \"mdi:calendar-clock\",\n input_number: \"mdi:ray-vertex\",\n input_select: \"mdi:format-list-bulleted\",\n input_text: \"mdi:textbox\",\n light: \"mdi:lightbulb\",\n mailbox: \"mdi:mailbox\",\n notify: \"mdi:comment-alert\",\n person: \"mdi:account\",\n plant: \"mdi:flower\",\n proximity: \"mdi:apple-safari\",\n remote: \"mdi:remote\",\n scene: \"mdi:google-pages\",\n script: \"mdi:file-document\",\n sensor: \"mdi:eye\",\n simple_alarm: \"mdi:bell\",\n sun: \"mdi:white-balance-sunny\",\n switch: \"mdi:flash\",\n timer: \"mdi:timer\",\n updater: \"mdi:cloud-upload\",\n vacuum: \"mdi:robot-vacuum\",\n water_heater: \"mdi:thermometer\",\n weblink: \"mdi:open-in-new\"\n};\n\nexport function domainIcon(domain: string, state?: string): string {\n if (domain in fixedIcons) {\n return fixedIcons[domain];\n }\n\n switch (domain) {\n case \"alarm_control_panel\":\n switch (state) {\n case \"armed_home\":\n return \"mdi:bell-plus\";\n case \"armed_night\":\n return \"mdi:bell-sleep\";\n case \"disarmed\":\n return \"mdi:bell-outline\";\n case \"triggered\":\n return \"mdi:bell-ring\";\n default:\n return \"mdi:bell\";\n }\n\n case \"binary_sensor\":\n return state && state === \"off\"\n ? \"mdi:radiobox-blank\"\n : \"mdi:checkbox-marked-circle\";\n\n case \"cover\":\n return state === \"closed\" ? \"mdi:window-closed\" : \"mdi:window-open\";\n\n case \"lock\":\n return state && state === \"unlocked\" ? \"mdi:lock-open\" : \"mdi:lock\";\n\n case \"media_player\":\n return state && state !== \"off\" && state !== \"idle\"\n ? \"mdi:cast-connected\"\n : \"mdi:cast\";\n\n case \"zwave\":\n switch (state) {\n case \"dead\":\n return \"mdi:emoticon-dead\";\n case \"sleeping\":\n return \"mdi:sleep\";\n case \"initializing\":\n return \"mdi:timer-sand\";\n default:\n return \"mdi:z-wave\";\n }\n\n default:\n // tslint:disable-next-line\n console.warn(\n \"Unable to find icon for domain \" + domain + \" (\" + state + \")\"\n );\n return DEFAULT_DOMAIN_ICON;\n }\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nexport const evaluateFilter = (stateObj: HassEntity, filter: any): boolean => {\n const operator = filter.operator || \"==\";\n const value = filter.value || filter;\n const state = filter.attribute\n ? stateObj.attributes[filter.attribute]\n : stateObj.state;\n\n switch (operator) {\n case \"==\":\n return state === value;\n case \"<=\":\n return state <= value;\n case \"<\":\n return state < value;\n case \">=\":\n return state >= value;\n case \">\":\n return state > value;\n case \"!=\":\n return state !== value;\n case \"regex\": {\n return state.match(value);\n }\n default:\n return false;\n }\n};\n","export const formatTimestamp = (timestamp: string): string => {\n const date = new Date(timestamp);\n\n if (Number.isNaN(date.getTime())) {\n return timestamp;\n }\n\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n\n if (diffSec < 60) {\n return `${diffSec} seconds ago`;\n }\n if (diffMin < 60) {\n return `${diffMin} minutes ago`;\n }\n if (diffHour < 24) {\n return `${diffHour} hours ago`;\n }\n if (diffDay < 7) {\n return `${diffDay} days ago`;\n }\n return date.toLocaleString();\n};\n","export const getLovelace = () => {\n let root: any = document.querySelector('home-assistant');\n root = root && root.shadowRoot;\n root = root && root.querySelector('home-assistant-main');\n root = root && root.shadowRoot;\n root = root && root.querySelector('app-drawer-layout partial-panel-resolver');\n root = root && root.shadowRoot || root;\n root = root && root.querySelector('ha-panel-lovelace');\n root = root && root.shadowRoot;\n root = root && root.querySelector('hui-root');\n if (root) {\n const ll = root.lovelace;\n ll.current_view = root.___curView;\n return ll;\n }\n return null;\n}\n","import { HASSDomEvent, fireEvent } from \"./fire-event\";\n\n/**\n * Broadcast haptic feedback requests\n */\n\n\n// Allowed types are from iOS HIG.\n// https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/feedback/#haptics\n// Implementors on platforms other than iOS should attempt to match the patterns (shown in HIG) as closely as possible.\nexport type HapticType =\n | \"success\"\n | \"warning\"\n | \"failure\"\n | \"light\"\n | \"medium\"\n | \"heavy\"\n | \"selection\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n haptic: HapticType;\n }\n\n interface GlobalEventHandlersEventMap {\n haptic: HASSDomEvent<HapticType>;\n }\n}\n\nexport const forwardHaptic = (hapticType: HapticType) => {\n fireEvent(window, \"haptic\", hapticType);\n};\n","import { fireEvent } from \"./fire-event\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"location-changed\": {\n replace: boolean;\n };\n }\n}\n\nexport const navigate = (\n _node: any,\n path: string,\n replace: boolean = false\n) => {\n if (replace) {\n history.replaceState(null, \"\", path);\n } else {\n history.pushState(null, \"\", path);\n }\n fireEvent(window, \"location-changed\", {\n replace\n });\n};\n","import { HomeAssistant } from \"./types\";\nimport { computeDomain } from \"./compute-domain\";\n\nexport const turnOnOffEntity = (\n hass: HomeAssistant,\n entityId: string,\n turnOn = true\n): Promise<void> => {\n const stateDomain = computeDomain(entityId);\n const serviceDomain = stateDomain === \"group\" ? \"homeassistant\" : stateDomain;\n\n let service;\n switch (stateDomain) {\n case \"lock\":\n service = turnOn ? \"unlock\" : \"lock\";\n break;\n case \"cover\":\n service = turnOn ? \"open_cover\" : \"close_cover\";\n break;\n default:\n service = turnOn ? \"turn_on\" : \"turn_off\";\n }\n\n return hass.callService(serviceDomain, service, { entity_id: entityId });\n};\n","import { STATES_OFF } from \"./const\";\nimport { turnOnOffEntity } from \"./turn-on-off-entity\";\nimport { HomeAssistant } from \"./types\";\n\nexport const toggleEntity = (\n hass: HomeAssistant,\n entityId: string\n): Promise<void> => {\n const turnOn = STATES_OFF.includes(hass.states[entityId].state);\n return turnOnOffEntity(hass, entityId, turnOn);\n};\n","import { HomeAssistant, ActionConfig } from \"./types\";\nimport { forwardHaptic } from \"./haptic\";\nimport { fireEvent } from \"./fire-event\";\nimport { navigate } from \"./navigate\";\nimport { toggleEntity } from \"./toggle-entity\";\n\nexport const handleActionConfig = (\n node: HTMLElement,\n hass: HomeAssistant,\n config: {\n entity?: string;\n camera_image?: string;\n hold_action?: ActionConfig;\n tap_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n },\n actionConfig: ActionConfig | undefined\n): void => {\n if (!actionConfig) {\n actionConfig = {\n action: \"more-info\",\n };\n }\n\n if (\n actionConfig.confirmation &&\n (!actionConfig.confirmation.exemptions ||\n !actionConfig.confirmation.exemptions.some(\n (e) => e.user === hass!.user!.id\n ))\n ) {\n forwardHaptic(\"warning\");\n\n if (\n !confirm(\n actionConfig.confirmation.text ||\n `Are you sure you want to ${actionConfig.action}?`\n )\n ) {\n return;\n }\n }\n\n switch (actionConfig.action) {\n case \"more-info\":\n if (config.entity || config.camera_image) {\n fireEvent(node, \"hass-more-info\", {\n entityId: config.entity ? config.entity : config.camera_image!,\n });\n }\n break;\n case \"navigate\":\n if (actionConfig.navigation_path) {\n navigate(node, actionConfig.navigation_path);\n }\n break;\n case \"url\":\n if (actionConfig.url_path) {\n window.open(actionConfig.url_path);\n }\n break;\n case \"toggle\":\n if (config.entity) {\n toggleEntity(hass, config.entity!);\n forwardHaptic(\"success\");\n }\n break;\n case \"call-service\": {\n if (!actionConfig.service) {\n forwardHaptic(\"failure\");\n return;\n }\n const [domain, service] = actionConfig.service.split(\".\", 2);\n hass.callService(domain, service, actionConfig.service_data, actionConfig.target);\n forwardHaptic(\"success\");\n break;\n }\n case \"fire-dom-event\": {\n fireEvent(node, \"ll-custom\", actionConfig);\n }\n }\n};\n\nexport const handleAction = (\n node: HTMLElement,\n hass: HomeAssistant,\n config: {\n entity?: string;\n camera_image?: string;\n hold_action?: ActionConfig;\n tap_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n },\n action: string\n): void => {\n let actionConfig: ActionConfig | undefined;\n\n if (action === \"double_tap\" && config.double_tap_action) {\n actionConfig = config.double_tap_action;\n } else if (action === \"hold\" && config.hold_action) {\n actionConfig = config.hold_action;\n } else if (action === \"tap\" && config.tap_action) {\n actionConfig = config.tap_action;\n }\n\n handleActionConfig(node, hass, config, actionConfig);\n};\n","import { HomeAssistant, ActionConfig } from \"./types\";\nimport { fireEvent } from \"./fire-event\";\nimport { forwardHaptic } from \"./haptic\";\nimport { navigate } from \"./navigate\";\nimport { toggleEntity } from \"./toggle-entity\";\n\nexport const handleClick = (\n node: HTMLElement,\n hass: HomeAssistant,\n config: {\n entity?: string;\n camera_image?: string;\n hold_action?: ActionConfig;\n tap_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n },\n hold: boolean,\n dblClick: boolean\n): void => {\n let actionConfig: ActionConfig | undefined;\n\n if (dblClick && config.double_tap_action) {\n actionConfig = config.double_tap_action;\n } else if (hold && config.hold_action) {\n actionConfig = config.hold_action;\n } else if (!hold && config.tap_action) {\n actionConfig = config.tap_action;\n }\n\n if (!actionConfig) {\n actionConfig = {\n action: \"more-info\"\n };\n }\n\n if (\n actionConfig.confirmation &&\n (!actionConfig.confirmation.exemptions ||\n !actionConfig.confirmation.exemptions.some(\n e => e.user === hass!.user!.id\n ))\n ) {\n if (\n !confirm(\n actionConfig.confirmation.text ||\n `Are you sure you want to ${actionConfig.action}?`\n )\n ) {\n return;\n }\n }\n\n switch (actionConfig.action) {\n case \"more-info\":\n if (actionConfig.entity || config.entity || config.camera_image) {\n fireEvent(node, \"hass-more-info\", {\n entityId: actionConfig.entity\n ? actionConfig.entity\n : config.entity\n ? config.entity\n : config.camera_image\n });\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n }\n break;\n case \"navigate\":\n if (actionConfig.navigation_path) {\n navigate(node, actionConfig.navigation_path);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n }\n break;\n case \"url\":\n actionConfig.url_path && window.open(actionConfig.url_path);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n break;\n case \"toggle\":\n if (config.entity) {\n toggleEntity(hass, config.entity!);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n }\n break;\n case \"call-service\": {\n if (!actionConfig.service) {\n return;\n }\n const [domain, service] = actionConfig.service.split(\".\", 2);\n const serviceData = { ...actionConfig.service_data };\n if (serviceData.entity_id === \"entity\") {\n serviceData.entity_id = config.entity;\n }\n hass.callService(domain, service, serviceData, actionConfig.target);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n break;\n }\n case \"fire-dom-event\": {\n fireEvent(node, \"ll-custom\", actionConfig);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n break;\n }\n }\n};\n","import { ActionConfig } from \"./types\";\n\nexport function hasAction(config?: ActionConfig): boolean {\n return config !== undefined && config.action !== \"none\";\n}\n","import { PropertyValues } from \"lit\";\n\nimport { HomeAssistant } from \"./types\";\n\n// Check if config or Entity changed\nexport function hasConfigOrEntityChanged(\n element: any,\n changedProps: PropertyValues,\n forceUpdate: Boolean,\n): boolean {\n if (changedProps.has('config') || forceUpdate) {\n return true;\n }\n\n if (element.config!.entity) {\n const oldHass = changedProps.get('hass') as HomeAssistant | undefined;\n if (oldHass) {\n return (\n oldHass.states[element.config!.entity]\n !== element.hass!.states[element.config!.entity]\n );\n }\n return true;\n } else {\n return false;\n }\n}","import { ActionConfig } from \"./types\";\n\n// Check if config or Entity changed\nexport function hasDoubleClick(config?: ActionConfig): boolean {\n return config !== undefined && config.action !== \"none\";\n}","import { HassEntity } from \"home-assistant-js-websocket\";\n\n/** Return an icon representing a binary sensor state. */\n\nexport const binarySensorIcon = (state?: string, stateObj?: HassEntity) => {\n const is_off = state === \"off\";\n switch (stateObj?.attributes.device_class) {\n case \"battery\":\n return is_off ? \"mdi:battery\" : \"mdi:battery-outline\";\n case \"battery_charging\":\n return is_off ? \"mdi:battery\" : \"mdi:battery-charging\";\n case \"cold\":\n return is_off ? \"mdi:thermometer\" : \"mdi:snowflake\";\n case \"connectivity\":\n return is_off ? \"mdi:server-network-off\" : \"mdi:server-network\";\n case \"door\":\n return is_off ? \"mdi:door-closed\" : \"mdi:door-open\";\n case \"garage_door\":\n return is_off ? \"mdi:garage\" : \"mdi:garage-open\";\n case \"power\":\n return is_off ? \"mdi:power-plug-off\" : \"mdi:power-plug\";\n case \"gas\":\n case \"problem\":\n case \"safety\":\n case \"tamper\":\n return is_off ? \"mdi:check-circle\" : \"mdi:alert-circle\";\n case \"smoke\":\n return is_off ? \"mdi:check-circle\" : \"mdi:smoke\";\n case \"heat\":\n return is_off ? \"mdi:thermometer\" : \"mdi:fire\";\n case \"light\":\n return is_off ? \"mdi:brightness-5\" : \"mdi:brightness-7\";\n case \"lock\":\n return is_off ? \"mdi:lock\" : \"mdi:lock-open\";\n case \"moisture\":\n return is_off ? \"mdi:water-off\" : \"mdi:water\";\n case \"motion\":\n return is_off ? \"mdi:walk\" : \"mdi:run\";\n case \"occupancy\":\n return is_off ? \"mdi:home-outline\" : \"mdi:home\";\n case \"opening\":\n return is_off ? \"mdi:square\" : \"mdi:square-outline\";\n case \"plug\":\n return is_off ? \"mdi:power-plug-off\" : \"mdi:power-plug\";\n case \"presence\":\n return is_off ? \"mdi:home-outline\" : \"mdi:home\";\n case \"running\":\n return is_off ? \"mdi:stop\" : \"mdi:play\";\n case \"sound\":\n return is_off ? \"mdi:music-note-off\" : \"mdi:music-note\";\n case \"update\":\n return is_off ? \"mdi:package\" : \"mdi:package-up\";\n case \"vibration\":\n return is_off ? \"mdi:crop-portrait\" : \"mdi:vibrate\";\n case \"window\":\n return is_off ? \"mdi:window-closed\" : \"mdi:window-open\";\n default:\n return is_off ? \"mdi:radiobox-blank\" : \"mdi:checkbox-marked-circle\";\n }\n};\n","/** Return an icon representing a cover state. */\nimport { HassEntity } from \"home-assistant-js-websocket\";\nimport { domainIcon } from \"./domain_icons\";\n\nexport const coverIcon = (state: HassEntity): string => {\n const open = state.state !== \"closed\";\n switch (state.attributes.device_class) {\n case \"garage\":\n return open ? \"mdi:garage-open\" : \"mdi:garage\";\n case \"door\":\n return open ? \"mdi:door-open\" : \"mdi:door-closed\";\n case \"shutter\":\n return open ? \"mdi:window-shutter-open\" : \"mdi:window-shutter\";\n case \"blind\":\n return open ? \"mdi:blinds-open\" : \"mdi:blinds\";\n case \"window\":\n return open ? \"mdi:window-open\" : \"mdi:window-closed\";\n default:\n return domainIcon(\"cover\", state.state);\n }\n};\n","/** Return an icon representing a sensor state. */\nimport { HassEntity } from \"home-assistant-js-websocket\";\nimport { UNIT_C, UNIT_F } from \"./const\";\nimport { domainIcon } from \"./domain_icons\";\n\nconst fixedDeviceClassIcons = {\n humidity: \"mdi:water-percent\",\n illuminance: \"mdi:brightness-5\",\n temperature: \"mdi:thermometer\",\n pressure: \"mdi:gauge\",\n power: \"mdi:flash\",\n signal_strength: \"mdi:wifi\",\n};\n\nexport const sensorIcon = (state: HassEntity) => {\n const dclass = state.attributes.device_class;\n\n if (dclass && dclass in fixedDeviceClassIcons) {\n return fixedDeviceClassIcons[dclass];\n }\n if (dclass === \"battery\") {\n const battery = Number(state.state);\n if (isNaN(battery)) {\n return \"mdi:battery-unknown\";\n }\n const batteryRound = Math.round(battery / 10) * 10;\n if (batteryRound >= 100) {\n return \"mdi:battery\";\n }\n if (batteryRound <= 0) {\n return \"mdi:battery-alert\";\n }\n // Will return one of the following icons: (listed so extractor picks up)\n // mdi:battery-10\n // mdi:battery-20\n // mdi:battery-30\n // mdi:battery-40\n // mdi:battery-50\n // mdi:battery-60\n // mdi:battery-70\n // mdi:battery-80\n // mdi:battery-90\n // We obscure 'hass' in iconname so this name does not get picked up\n return `${\"hass\"}:battery-${batteryRound}`;\n }\n\n const unit = state.attributes.unit_of_measurement;\n if (unit === UNIT_C || unit === UNIT_F) {\n return \"mdi:thermometer\";\n }\n return domainIcon(\"sensor\");\n};\n","/** Return an icon representing an input datetime state. */\nimport { domainIcon } from \"./domain_icons\";\nimport { HassEntity } from \"home-assistant-js-websocket\";\n\nexport const inputDateTimeIcon = (state: HassEntity): string => {\n if (!state.attributes.has_date) {\n return \"mdi:clock\";\n }\n if (!state.attributes.has_time) {\n return \"mdi:calendar\";\n }\n return domainIcon(\"input_datetime\");\n};\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport { computeDomain } from \"./compute-domain\";\nimport { DEFAULT_DOMAIN_ICON } from \"./const\";\nimport { binarySensorIcon } from \"./binary_sensor_icon\";\nimport { coverIcon } from \"./cover_icon\";\nimport { sensorIcon } from \"./sensor_icon\";\nimport { inputDateTimeIcon } from \"./input_datetime_icon\";\nimport { domainIcon } from \"./domain_icons\";\n\nconst domainIcons = {\n binary_sensor: binarySensorIcon,\n cover: coverIcon,\n sensor: sensorIcon,\n input_datetime: inputDateTimeIcon,\n};\n\nexport const stateIcon = (state: HassEntity) => {\n if (!state) {\n return DEFAULT_DOMAIN_ICON;\n }\n if (state.attributes.icon) {\n return state.attributes.icon;\n }\n\n const domain = computeDomain(state.entity_id);\n\n if (domain in domainIcons) {\n return domainIcons[domain](state);\n }\n return domainIcon(domain, state.state);\n};\n","import { HomeAssistant } from \"./types\";\nimport { STATES_OFF } from \"./const\";\nimport { computeDomain } from \"./compute-domain\";\n\nexport const turnOnOffEntities = (\n hass: HomeAssistant,\n entityIds: string[],\n turnOn = true\n): void => {\n const domainsToCall = {};\n entityIds.forEach((entityId) => {\n if (STATES_OFF.includes(hass.states[entityId].state) === turnOn) {\n const stateDomain = computeDomain(entityId);\n const serviceDomain = [\"cover\", \"lock\"].includes(stateDomain)\n ? stateDomain\n : \"homeassistant\";\n\n if (!(serviceDomain in domainsToCall)) {\n domainsToCall[serviceDomain] = [];\n }\n domainsToCall[serviceDomain].push(entityId);\n }\n });\n\n Object.keys(domainsToCall).forEach((domain) => {\n let service;\n switch (domain) {\n case \"lock\":\n service = turnOn ? \"unlock\" : \"lock\";\n break;\n case \"cover\":\n service = turnOn ? \"open_cover\" : \"close_cover\";\n break;\n default:\n service = turnOn ? \"turn_on\" : \"turn_off\";\n }\n\n const entities = domainsToCall[domain];\n hass.callService(domain, service, { entity_id: entities });\n });\n};\n"],"names":["NumberFormat","TimeFormat","selectUnit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/apply_themes_on_element.ts","../src/compute-card-size.ts","../src/compute-domain.ts","../src/compute-entity.ts","../src/compute-icon.ts","../src/compute-name.ts","../src/compute-rtl.ts","../src/compute-state.ts","../src/types.ts","../src/datetime/use_am_pm.ts","../src/datetime/format_date_time.ts","../src/datetime/format_date.ts","../src/datetime/format_time.ts","../src/compute-state-domain.ts","../src/format-number.ts","../src/compute-state-display.ts","../src/const.ts","../src/fire-event.ts","../src/create-thing.ts","../src/datetime/duration_to_seconds.ts","../src/datetime/select_unit.ts","../src/datetime/relative_time.ts","../src/datetime/seconds_to_duration.ts","../src/datetime/timer_time_remaining.ts","../src/debounce.ts","../src/deep-equal.ts","../src/domain_icons.ts","../src/evaluate-filter.ts","../src/format-timestamp.ts","../src/get-lovelace.ts","../src/haptic.ts","../src/navigate.ts","../src/turn-on-off-entity.ts","../src/toggle-entity.ts","../src/handle-action.ts","../src/handle-click.ts","../src/has-action.ts","../src/has-changed.ts","../src/has-double-click.ts","../src/scroll-to-target.ts","../src/binary_sensor_icon.ts","../src/cover_icon.ts","../src/sensor_icon.ts","../src/input_datetime_icon.ts","../src/state_icon.ts","../src/turn-on-off-entities.ts"],"sourcesContent":["/**\n * Apply a theme to an element by setting the CSS variables on it.\n *\n * element: Element to apply theme on.\n * themes: HASS Theme information\n * localTheme: selected theme.\n * updateMeta: boolean if we should update the theme-color meta element.\n */\nexport const applyThemesOnElement = (\n element,\n themes,\n localTheme,\n updateMeta = false\n) => {\n if (!element._themes) {\n element._themes = {};\n }\n let themeName = themes.default_theme;\n if (localTheme === \"default\" || (localTheme && themes.themes[localTheme])) {\n themeName = localTheme;\n }\n const styles = { ...element._themes };\n if (themeName !== \"default\") {\n const theme = themes.themes[themeName];\n Object.keys(theme).forEach((key) => {\n const prefixedKey = \"--\" + key;\n element._themes[prefixedKey] = \"\";\n styles[prefixedKey] = theme[key];\n });\n }\n if (element.updateStyles) {\n element.updateStyles(styles);\n } else if ((window as any).ShadyCSS) {\n // implement updateStyles() method of Polemer elements\n (window as any).ShadyCSS.styleSubtree(/** @type {!HTMLElement} */ (element), styles);\n }\n\n if (!updateMeta) {\n return;\n }\n\n const meta = document.querySelector(\"meta[name=theme-color]\");\n if (meta) {\n if (!meta.hasAttribute(\"default-content\")) {\n meta.setAttribute(\"default-content\", meta.getAttribute(\"content\")!);\n }\n const themeColor =\n styles[\"--primary-color\"] || meta.getAttribute(\"default-content\");\n meta.setAttribute(\"content\", themeColor);\n }\n}\n","import { LovelaceCard } from \"./types\";\n\nexport const computeCardSize = (card: LovelaceCard): number | Promise<number> => {\n return typeof card.getCardSize === \"function\" ? card.getCardSize() : 4;\n};","export function computeDomain(entityId: string): string {\n return entityId.substr(0, entityId.indexOf(\".\"));\n}\n","export function computeEntity(entityId: string): string {\n return entityId.substr(entityId.indexOf(\".\") + 1);\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nconst DOMAIN_ICONS: Record<string, string> = {\n light: \"mdi:lightbulb\",\n switch: \"mdi:toggle-switch\",\n sensor: \"mdi:gauge\",\n binary_sensor: \"mdi:checkbox-marked-circle\",\n climate: \"mdi:thermostat\",\n cover: \"mdi:window-shutter\",\n fan: \"mdi:fan\",\n lock: \"mdi:lock\",\n media_player: \"mdi:cast\",\n vacuum: \"mdi:robot-vacuum\",\n camera: \"mdi:camera\",\n person: \"mdi:account\",\n device_tracker: \"mdi:account-circle\",\n sun: \"mdi:white-balance-sunny\",\n weather: \"mdi:weather-cloudy\",\n};\n\nexport const computeIcon = (stateObj: HassEntity, icon?: string): string => {\n if (icon) {\n return icon;\n }\n\n if (stateObj.attributes.icon) {\n return stateObj.attributes.icon;\n }\n\n const domain = stateObj.entity_id.split(\".\")[0];\n return DOMAIN_ICONS[domain] || \"mdi:bookmark\";\n};\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\n/**\n * @deprecated Reads `friendly_name`, which Home Assistant is moving away from -\n * it now always includes the device name, so this duplicates context the\n * surrounding UI already shows. Prefer `hass.formatEntityName(stateObj, name)`\n * on HA 2026.4 and later, which resolves the name from the entity's registry\n * context and lets users choose which parts to include.\n */\nexport const computeName = (stateObj: HassEntity): string =>\n stateObj.attributes.friendly_name || stateObj.entity_id;\n","import { HomeAssistant } from \"./types\";\n\nexport function computeRTL(hass: HomeAssistant) {\n const lang = hass?.locale?.language || \"en\";\n if (hass.translationMetadata.translations[lang]) {\n return hass.translationMetadata.translations[lang].isRTL || false;\n }\n return false;\n}\n\nexport function computeRTLDirection(hass: HomeAssistant) {\n return computeRTL(hass) ? \"rtl\" : \"ltr\";\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nconst CAP_STATE: string[] = [\n \"on\",\n \"off\",\n \"open\",\n \"closed\",\n \"locked\",\n \"unlocked\",\n];\n\nexport const computeState = (stateObj: HassEntity): string => {\n const state = stateObj.state;\n const unit = stateObj.attributes.unit_of_measurement;\n\n if (unit) {\n return `${state} ${unit}`;\n }\n\n if (CAP_STATE.includes(state)) {\n return state.charAt(0).toUpperCase() + state.slice(1);\n }\n\n return state;\n};\n","import {\n HassEntities,\n HassEntity,\n HassConfig,\n Auth,\n Connection,\n MessageBase,\n HassServices,\n HassServiceTarget,\n} from \"home-assistant-js-websocket\";\nimport { HapticType } from \"./haptic\";\n\nexport interface DeviceRegistryEntry {\n id: string;\n name: string | null;\n name_by_user: string | null;\n area_id: string | null;\n /** Set when this device is a sub-device of another. @since Home Assistant 2026.4 */\n parent_device_id?: string | null;\n}\n\nexport interface AreaRegistryEntry {\n area_id: string;\n name: string;\n floor_id: string | null;\n}\n\nexport interface FloorRegistryEntry {\n floor_id: string;\n name: string;\n level: number | null;\n}\n\n/** One part of a composed entity name, as accepted by `formatEntityName`. */\nexport type EntityNameItem =\n | { type: \"entity\" | \"device\" | \"area\" | \"floor\" }\n | { type: \"text\"; text: string };\n\nexport interface EntityNameOptions {\n /** Joins the resolved parts. Defaults to a single space. */\n separator?: string;\n}\nimport { HASSDomEvent } from \"./fire-event\";\n\nexport interface ToggleMenuActionConfig extends BaseActionConfig {\n action: \"toggle-menu\";\n}\n\nexport interface ToggleActionConfig extends BaseActionConfig {\n action: \"toggle\";\n}\n\nexport interface CallServiceActionConfig extends BaseActionConfig {\n action: \"call-service\";\n service: string;\n data?: {\n entity_id?: string | [string];\n [key: string]: any;\n };\n\n target?: HassServiceTarget;\n repeat?: number;\n haptic?: HapticType;\n}\n\nexport interface NavigateActionConfig extends BaseActionConfig {\n action: \"navigate\";\n navigation_path: string;\n}\n\nexport interface UrlActionConfig extends BaseActionConfig {\n action: \"url\";\n url_path: string;\n}\n\nexport interface MoreInfoActionConfig extends BaseActionConfig {\n action: \"more-info\";\n entity?: string;\n}\n\nexport interface NoActionConfig extends BaseActionConfig {\n action: \"none\";\n}\n\nexport interface CustomActionConfig extends BaseActionConfig {\n action: \"fire-dom-event\";\n}\n\nexport interface TurnOnActionConfig extends BaseActionConfig {\n action: \"turn_on\";\n entity?: string;\n}\n\nexport interface TurnOffActionConfig extends BaseActionConfig {\n action: \"turn_off\";\n entity?: string;\n}\n\n/**\n * `repeat` and `haptic` are specifically for use in custom cards like the Button-Card\n */\nexport interface BaseActionConfig {\n confirmation?: ConfirmationRestrictionConfig;\n repeat?: number;\n repeat_limit?: number;\n haptic?: HapticType;\n}\n\nexport interface ConfirmationRestrictionConfig {\n text?: string;\n exemptions?: RestrictionConfig[];\n}\n\nexport interface RestrictionConfig {\n user: string;\n}\n\nexport type ActionConfig =\n | ToggleActionConfig\n | CallServiceActionConfig\n | NavigateActionConfig\n | UrlActionConfig\n | MoreInfoActionConfig\n | NoActionConfig\n | CustomActionConfig\n | ToggleMenuActionConfig\n | TurnOnActionConfig\n | TurnOffActionConfig;\n\nexport interface HuiRootElement extends HTMLElement {\n lovelace: {\n config: LovelaceConfig;\n current_view: number;\n [key: string]: any;\n };\n ___curView: number;\n}\n\nexport interface Window {\n // Custom panel entry point url\n customPanelJS: string;\n ShadyCSS: {\n nativeCss: boolean;\n nativeShadow: boolean;\n prepareTemplate(templateElement, elementName, elementExtension);\n styleElement(element);\n styleSubtree(element, overrideProperties);\n styleDocument(overrideProperties);\n getComputedStyleValue(element, propertyName);\n };\n}\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"value-changed\": {\n value: unknown;\n };\n \"config-changed\": {\n config: any;\n };\n \"hass-more-info\": {\n entityId: string | undefined;\n };\n \"ll-rebuild\": {};\n \"ll-custom\": {};\n \"location-changed\": {\n replace: boolean;\n };\n \"show-dialog\": {};\n undefined;\n action: {\n action: string;\n };\n }\n}\n\ntype ValidHassDomEvent = keyof HASSDomEvents;\n\nexport type LocalizeFunc = (key: string, ...args: any[]) => string;\n\nexport interface Credential {\n auth_provider_type: string;\n auth_provider_id: string;\n}\n\nexport interface MFAModule {\n id: string;\n name: string;\n enabled: boolean;\n}\n\nexport interface CurrentUser {\n id: string;\n is_owner: boolean;\n is_admin: boolean;\n name: string;\n credentials: Credential[];\n mfa_modules: MFAModule[];\n}\n\nexport interface Theme {\n // Incomplete\n \"primary-color\": string;\n \"text-primary-color\": string;\n \"accent-color\": string;\n}\n\nexport interface Themes {\n default_theme: string;\n themes: { [key: string]: Theme };\n}\n\nexport interface Panel {\n component_name: string;\n config: { [key: string]: any } | null;\n icon: string | null;\n title: string | null;\n url_path: string;\n}\n\nexport interface Panels {\n [name: string]: Panel;\n}\n\nexport interface Resources {\n [language: string]: { [key: string]: string };\n}\n\nexport interface Translation {\n nativeName: string;\n isRTL: boolean;\n fingerprints: { [fragment: string]: string };\n}\n\nexport interface ServiceCallRequest {\n domain: string;\n service: string;\n serviceData?: Record<string, any>;\n target?: HassServiceTarget;\n}\n\n// Entry of the entity registry as exposed by the HA frontend in `hass.entities`.\nexport interface EntityRegistryDisplayEntry {\n entity_id: string;\n name?: string;\n icon?: string;\n device_id?: string;\n area_id?: string;\n labels: string[];\n hidden?: boolean;\n entity_category?: \"config\" | \"diagnostic\";\n translation_key?: string;\n platform?: string;\n display_precision?: number;\n}\n\nexport interface HomeAssistant {\n auth: Auth;\n connection: Connection;\n connected: boolean;\n states: HassEntities;\n services: HassServices;\n config: HassConfig;\n themes: Themes;\n selectedTheme?: string | null;\n panels: Panels;\n panelUrl: string;\n\n // i18n\n // current effective language, in that order:\n // - backend saved user selected lanugage\n // - language in local appstorage\n // - browser language\n // - english (en)\n language: string;\n locale: FrontendLocaleData;\n // local stored language, keep that name for backward compability\n selectedLanguage: string | null;\n resources: Resources;\n localize: LocalizeFunc;\n translationMetadata: {\n fragments: string[];\n translations: {\n [lang: string]: Translation;\n };\n };\n\n // Registry data. Populated over the websocket connection after connect, and\n // needed to resolve an entity's naming context. All optional: `floors` only\n // exists from HA 2024.4, and marking the rest optional keeps this interface\n // safe to construct in tests and mocks.\n /** Entity registry keyed by entity_id. */\n entities?: Record<string, EntityRegistryDisplayEntry>;\n devices?: Record<string, DeviceRegistryEntry>;\n areas?: Record<string, AreaRegistryEntry>;\n floors?: Record<string, FloorRegistryEntry>;\n\n // Display formatters, which apply the user's locale, precision and naming\n // preferences the same way the built-in cards do. Optional because each was\n // added in a specific Home Assistant version - check before calling, or gate\n // on `hass.config.version`.\n /** @since Home Assistant 2024.4 */\n formatEntityState?: (stateObj: HassEntity, state?: string) => string;\n /** @since Home Assistant 2024.4 */\n formatEntityAttributeName?: (stateObj: HassEntity, attribute: string) => string;\n /** @since Home Assistant 2024.4 */\n formatEntityAttributeValue?: (\n stateObj: HassEntity,\n attribute: string,\n value?: unknown\n ) => string;\n /**\n * Formats an entity's display name from its registry context.\n *\n * Accepts a plain string (returned as-is), a single name item, an array of\n * items joined with the separator, or `undefined` for the default name.\n *\n * @since Home Assistant 2026.4 in this shape. The helper exists from 2025.10,\n * but took bare type strings then, and only accepted `EntityNameItem`s\n * between 2025.11 and 2026.3 - so feature detection is not sufficient, check\n * `hass.config.version` before calling with a card's `name` option.\n */\n formatEntityName?: (\n stateObj: HassEntity,\n name?: string | EntityNameItem | EntityNameItem[],\n options?: EntityNameOptions\n ) => string;\n\n dockedSidebar: boolean;\n moreInfoEntityId: string;\n user: CurrentUser;\n callService: (\n domain: ServiceCallRequest[\"domain\"],\n service: ServiceCallRequest[\"service\"],\n serviceData?: ServiceCallRequest[\"serviceData\"],\n target?: ServiceCallRequest[\"target\"]\n ) => Promise<void>;\n callApi: <T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n parameters?: { [key: string]: any }\n ) => Promise<T>;\n fetchWithAuth: (\n path: string,\n init?: { [key: string]: any }\n ) => Promise<Response>;\n sendWS: (msg: MessageBase) => Promise<void>;\n callWS: <T>(msg: MessageBase) => Promise<T>;\n hassUrl: (path?: string) => string;\n}\n\nexport enum NumberFormat {\n language = \"language\",\n system = \"system\",\n comma_decimal = \"comma_decimal\",\n decimal_comma = \"decimal_comma\",\n space_comma = \"space_comma\",\n none = \"none\",\n}\n\nexport enum TimeFormat {\n language = \"language\",\n system = \"system\",\n am_pm = \"12\",\n twenty_four = \"24\",\n}\n\nexport enum TimeZone {\n local = \"local\",\n server = \"server\",\n}\n\nexport enum DateFormat {\n language = \"language\",\n system = \"system\",\n DMY = \"DMY\",\n MDY = \"MDY\",\n YMD = \"YMD\",\n}\n\nexport enum FirstWeekday {\n language = \"language\",\n monday = \"monday\",\n tuesday = \"tuesday\",\n wednesday = \"wednesday\",\n thursday = \"thursday\",\n friday = \"friday\",\n saturday = \"saturday\",\n sunday = \"sunday\",\n}\n\nexport interface FrontendLocaleData {\n language: string;\n number_format: NumberFormat;\n time_format: TimeFormat;\n date_format: DateFormat;\n first_weekday: FirstWeekday;\n time_zone: TimeZone;\n}\n\nexport interface LovelaceCardConfig {\n index?: number;\n view_index?: number;\n type: string;\n [key: string]: any;\n}\n\nexport interface LovelaceCard extends HTMLElement {\n hass?: HomeAssistant;\n isPanel?: boolean;\n editMode?: boolean;\n getCardSize(): number | Promise<number>;\n setConfig(config: LovelaceCardConfig): void;\n}\n\nexport interface LovelaceCardEditor extends HTMLElement {\n hass?: HomeAssistant;\n lovelace?: LovelaceConfig;\n setConfig(config: LovelaceCardConfig): void;\n}\n\nexport interface LovelaceCardFeatureConfig {\n type: string;\n [key: string]: any;\n}\n\nexport type LovelaceCardFeaturePosition = \"bottom\" | \"inline\";\n\nexport interface LovelaceCardFeatureContext {\n entity_id?: string;\n area_id?: string;\n}\n\nexport interface LovelaceCardFeature extends HTMLElement {\n hass?: HomeAssistant;\n /** @deprecated Use `context` instead */\n stateObj?: HassEntity;\n context?: LovelaceCardFeatureContext;\n setConfig(config: LovelaceCardFeatureConfig): void;\n color?: string;\n position?: LovelaceCardFeaturePosition;\n}\n\nexport interface LovelaceCardFeatureEditor extends HTMLElement {\n hass?: HomeAssistant;\n lovelace?: LovelaceConfig;\n context?: LovelaceCardFeatureContext;\n setConfig(config: LovelaceCardFeatureConfig): void;\n}\n\n// Loose description of a ha-form schema item\nexport interface HaFormSchema {\n name?: string;\n type?: string;\n [key: string]: any;\n}\n\n// Static side of a card feature class, e.g. `MyFeature satisfies LovelaceCardFeatureConstructor`\nexport interface LovelaceCardFeatureConstructor {\n new (...args: any[]): LovelaceCardFeature;\n getStubConfig?: (\n hass: HomeAssistant,\n context?: LovelaceCardFeatureContext\n ) => LovelaceCardFeatureConfig;\n getConfigElement?: () => LovelaceCardFeatureEditor;\n getConfigForm?: () => {\n schema: HaFormSchema[];\n assertConfig?: (config: LovelaceCardConfig) => void;\n };\n}\n\n// Entry for `window.customCardFeatures`, shown in the card feature picker\nexport interface CustomCardFeatureEntry {\n type: string;\n name?: string;\n configurable?: boolean;\n isSupported?: (\n hass: HomeAssistant,\n context: LovelaceCardFeatureContext\n ) => boolean;\n /** @deprecated Use `isSupported` instead */\n supported?: (stateObj: HassEntity) => boolean;\n}\n\nexport interface LovelaceConfig {\n title?: string;\n views: LovelaceViewConfig[];\n background?: string;\n}\n\nexport interface LovelaceViewConfig {\n index?: number;\n title?: string;\n badges?: Array<string | LovelaceBadgeConfig>;\n cards?: LovelaceCardConfig[];\n path?: string;\n icon?: string;\n theme?: string;\n panel?: boolean;\n background?: string;\n visible?: boolean | ShowViewConfig[];\n}\n\nexport interface ShowViewConfig {\n user?: string;\n}\n\nexport interface LovelaceBadgeConfig {\n type?: string;\n [key: string]: any;\n}\n\nexport interface ActionHandlerDetail {\n action: string;\n}\n\nexport type ActionHandlerEvent = HASSDomEvent<ActionHandlerDetail>;\n\nexport interface ActionHandlerOptions {\n hasHold?: boolean;\n hasDoubleClick?: boolean;\n repeat?: number;\n repeatLimit?: number;\n isMomentary?: boolean;\n disableKbd?: boolean;\n disabled?: boolean;\n}\n\nexport interface EntitiesCardEntityConfig extends EntityConfig {\n type?: string;\n secondary_info?:\n | \"entity-id\"\n | \"last-changed\"\n | \"last-triggered\"\n | \"last-updated\"\n | \"position\"\n | \"tilt-position\"\n | \"brightness\";\n action_name?: string;\n service?: string;\n data?: Record<string, unknown>;\n url?: string;\n tap_action?: ActionConfig;\n hold_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n state_color?: boolean;\n show_name?: boolean;\n show_icon?: boolean;\n}\n\nexport interface EntityConfig {\n entity: string;\n type?: string;\n name?: string;\n icon?: string;\n image?: string;\n}\n\nexport interface LovelaceElementConfigBase {\n type: string;\n style: Record<string, string>;\n}\n","// REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/use_am_pm.ts\r\n\r\nimport { FrontendLocaleData, TimeFormat } from \"../types\"\r\n\r\n/**\r\n * Checking if AM/PM time format is used within the browser.\r\n * @param locale Homeassistant frontend locale data\r\n * @returns \r\n */\r\nexport const useAmPm = (locale: FrontendLocaleData): boolean => {\r\n if (\r\n locale.time_format === TimeFormat.language ||\r\n locale.time_format === TimeFormat.system\r\n ) {\r\n const testLanguage =\r\n locale.time_format === TimeFormat.language ? locale.language : undefined;\r\n const test = new Date().toLocaleString(testLanguage);\r\n return test.includes(\"AM\") || test.includes(\"PM\");\r\n }\r\n\r\n return locale.time_format === TimeFormat.am_pm;\r\n};\r\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/format_date_time.ts\n\nimport { FrontendLocaleData } from \"../types\";\nimport { useAmPm } from \"./use_am_pm\";\n\n// August 9, 2021, 8:23 AM\n/**\n * Formatting a dateObject to date with time e.g. August 9, 2021, 8:23 AM\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"August 9, 2021, 8:23 AM\"\n */\nexport const formatDateTime = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateTimeMem(locale).format(dateObj);\n\nconst formatDateTimeMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n\n/**\n * Formatting a dateObject to date with time e.g. August 9, 2021, 8:23:15 AM\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"August 9, 2021, 8:23:15 AM\"\n */\nexport const formatDateTimeWithSeconds = (\n dateObj: Date,\n locale: FrontendLocaleData\n) => formatDateTimeWithSecondsMem(locale).format(dateObj);\n\nconst formatDateTimeWithSecondsMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n/**\n * Formatting a Date to just date with AM/PM time e.g. 9/8/2021, 8:23 AM\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"9/8/2021, 8:23 AM\"\n */\nexport const formatDateTimeNumeric = (\n dateObj: Date,\n locale: FrontendLocaleData\n) => formatDateTimeNumericMem(locale).format(dateObj);\n\nconst formatDateTimeNumericMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: useAmPm(locale),\n });","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/format_date.ts\n\nimport { FrontendLocaleData } from \"../types\";\n\n/**\n * Formatting a Date to the dddd, mmmm yy format e.g. Tuesday, August 10\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns date string like \"Tuesday, August 10\"\n */\nexport const formatDateWeekday = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateWeekdayMem(locale).format(dateObj);\n\nconst formatDateWeekdayMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n });\n\n/**\n * Formatting a Date to the mmmm dd, yyyy format e.g. August 10, 2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns date string like \"August 10, 2021\"\n */\nexport const formatDate = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateMem(locale).format(dateObj);\n\nconst formatDateMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n\n/**\n * Formatting a Date to the classic date format e.g. 10/08/2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns classic date format \"10/08/2021\"\n */\nexport const formatDateNumeric = (dateObj: Date, locale: FrontendLocaleData) =>\n formatDateNumericMem(locale).format(dateObj);\n\nconst formatDateNumericMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n });\n\n\n/**\n * Formatting a Date to just a month with days e.g. Aug 10\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and day like \"Aug 10\"\n */\nexport const formatDateShort = (dateObj: Date, locale: FrontendLocaleData) =>\nformatDateShortMem(locale).format(dateObj);\n\nconst formatDateShortMem =\n(locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n day: \"numeric\",\n month: \"short\",\n });\n\n\n/**\n * Formatting a Date to just a month with year e.g. August 2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns month and year like \"August 2021\"\n */\nexport const formatDateMonthYear = (\ndateObj: Date,\nlocale: FrontendLocaleData\n) => formatDateMonthYearMem(locale).format(dateObj);\n\nconst formatDateMonthYearMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n month: \"long\",\n year: \"numeric\",\n });\n\n\n/**\n * Formatting a Date to just a month e.g. August\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns the written out months of the date\n */\nexport const formatDateMonth = (dateObj: Date, locale: FrontendLocaleData) =>\nformatDateMonthMem(locale).format(dateObj);\n\nconst formatDateMonthMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n month: \"long\",\n });\n\n\n/**\n * Formatting a Date to just a year e.g. 2021\n * @param dateObj The date to convert\n * @param locale The users's locale settings\n * @returns the year of the date in yyyy\n */\nexport const formatDateYear = (dateObj: Date, locale: FrontendLocaleData) =>\nformatDateYearMem(locale).format(dateObj);\n\nconst formatDateYearMem = (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n year: \"numeric\",\n });\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/format_time.ts\n\nimport { FrontendLocaleData } from \"../types\";\nimport { useAmPm } from \"./use_am_pm\";\n\n/**\n * 9:15 PM or 21:15\n * @param dateObj The time to convert\n * @param locale The users's locale settings\n * @returns Reformated time in hh:mm\n */\n export const formatTime = (dateObj: Date, locale: FrontendLocaleData) =>\n formatTimeMem(locale).format(dateObj);\n\n const formatTimeMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n/**\n* 9:15:24 PM or 21:15:24\n* @param dateObj The time to convert\n* @param locale The users's locale settings\n* @returns Reformated time in hh:mm:ss\n*/\nexport const formatTimeWithSeconds = (\n dateObj: Date,\n locale: FrontendLocaleData\n) => formatTimeWithSecondsMem(locale).format(dateObj);\n\nconst formatTimeWithSecondsMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: useAmPm(locale),\n });\n\n/**\n* Tuesday 7:00 PM or Tuesday 19:00\n* @param dateObj The datetime to convert\n* @param locale The users's locale settings\n* @returns Reformated weekday/time in dddd hh:mm\n*/\nexport const formatTimeWeekday = (dateObj: Date, locale: FrontendLocaleData) =>\n formatTimeWeekdayMem(locale).format(dateObj);\n\nconst formatTimeWeekdayMem =\n (locale: FrontendLocaleData) =>\n new Intl.DateTimeFormat(locale.language, {\n hour: useAmPm(locale) ? \"numeric\" : \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: useAmPm(locale),\n }); \n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport { computeDomain } from \"./compute-domain\";\n\nexport function computeStateDomain(stateObj: HassEntity) {\n return computeDomain(stateObj.entity_id);\n}\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/number/format_number.ts\n\nimport { HassEntity } from \"home-assistant-js-websocket\";\nimport { FrontendLocaleData, NumberFormat } from \"./types\";\n\n/**\n * Returns true if the entity is considered numeric based on the attributes it has\n * @param stateObj The entity state object\n */\n export const isNumericState = (stateObj: HassEntity): boolean =>\n !!stateObj.attributes.unit_of_measurement ||\n !!stateObj.attributes.state_class;\n\nexport const numberFormatToLocale = (\n localeOptions: FrontendLocaleData\n): string | string[] | undefined => {\n switch (localeOptions.number_format) {\n case NumberFormat.comma_decimal:\n return [\"en-US\", \"en\"]; // Use United States with fallback to English formatting 1,234,567.89\n case NumberFormat.decimal_comma:\n return [\"de\", \"es\", \"it\"]; // Use German with fallback to Spanish then Italian formatting 1.234.567,89\n case NumberFormat.space_comma:\n return [\"fr\", \"sv\", \"cs\"]; // Use French with fallback to Swedish and Czech formatting 1 234 567,89\n case NumberFormat.system:\n return undefined;\n default:\n return localeOptions.language;\n }\n};\n\nexport const round = (value: number, precision = 2): number =>\n Math.round(value * 10 ** precision) / 10 ** precision;\n\n/**\n * Formats a number based on the specified language with thousands separator(s) and decimal character for better legibility.\n * @param num The number to format\n * @param locale The user-selected language and number format, from `hass.locale`\n * @param options Intl.NumberFormatOptions to use\n */\nexport const formatNumber = (\n num: string | number,\n localeOptions?: FrontendLocaleData,\n options?: Intl.NumberFormatOptions\n): string => {\n const locale = localeOptions\n ? numberFormatToLocale(localeOptions)\n : undefined;\n\n // Polyfill for Number.isNaN, which is more reliable than the global isNaN()\n Number.isNaN =\n Number.isNaN ||\n function isNaN(input) {\n return typeof input === \"number\" && isNaN(input);\n };\n\n if (\n localeOptions?.number_format !== NumberFormat.none &&\n !Number.isNaN(Number(num)) &&\n Intl\n ) {\n try {\n return new Intl.NumberFormat(\n locale,\n getDefaultFormatOptions(num, options)\n ).format(Number(num));\n } catch (err: any) {\n // Don't fail when using \"TEST\" language\n // eslint-disable-next-line no-console\n console.error(err);\n return new Intl.NumberFormat(\n undefined,\n getDefaultFormatOptions(num, options)\n ).format(Number(num));\n }\n }\n if (typeof num === \"string\") {\n return num;\n }\n return `${round(num, options?.maximumFractionDigits).toString()}${\n options?.style === \"currency\" ? ` ${options.currency}` : \"\"\n }`;\n};\n\n/**\n * Generates default options for Intl.NumberFormat\n * @param num The number to be formatted\n * @param options The Intl.NumberFormatOptions that should be included in the returned options\n */\nconst getDefaultFormatOptions = (\n num: string | number,\n options?: Intl.NumberFormatOptions\n): Intl.NumberFormatOptions => {\n const defaultOptions: Intl.NumberFormatOptions = {\n maximumFractionDigits: 2,\n ...options,\n };\n\n if (typeof num !== \"string\") {\n return defaultOptions;\n }\n\n // Keep decimal trailing zeros if they are present in a string numeric value\n if (\n !options ||\n (!options.minimumFractionDigits && !options.maximumFractionDigits)\n ) {\n const digits = num.indexOf(\".\") > -1 ? num.split(\".\")[1].length : 0;\n defaultOptions.minimumFractionDigits = digits;\n defaultOptions.maximumFractionDigits = digits;\n }\n\n return defaultOptions;\n};\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport { formatDateTime } from \"./datetime/format_date_time\";\nimport { formatDate } from \"./datetime/format_date\";\nimport { formatTime } from \"./datetime/format_time\";\nimport { computeStateDomain } from \"./compute-state-domain\";\nimport { FrontendLocaleData, LocalizeFunc } from \"./types\";\nimport { formatNumber, isNumericState } from \"./format-number\";\n\nexport const computeStateDisplay = (\n localize: LocalizeFunc,\n stateObj: HassEntity,\n locale: FrontendLocaleData,\n state?: string\n): string => {\n const compareState = state !== undefined ? state : stateObj.state;\n\n if (compareState === \"unknown\" || compareState === \"unavailable\") {\n return localize(`state.default.${compareState}`);\n }\n\n // Entities with a `unit_of_measurement` or `state_class` are numeric values and should use `formatNumber`\n if (isNumericState(stateObj)) {\n if (stateObj.attributes.device_class === \"monetary\") {\n try {\n return formatNumber(compareState, locale, {\n style: \"currency\",\n currency: stateObj.attributes.unit_of_measurement,\n });\n } catch (_err) {\n // fallback to default\n }\n }\n return `${formatNumber(compareState, locale)}${\n stateObj.attributes.unit_of_measurement\n ? \" \" + stateObj.attributes.unit_of_measurement\n : \"\"\n }`;\n }\n\n const domain = computeStateDomain(stateObj);\n\n if (domain === \"input_datetime\") {\n if (state !== undefined) {\n // If trying to display an explicit state, need to parse the explict state to `Date` then format.\n // Attributes aren't available, we have to use `state`.\n try {\n const components = state.split(\" \");\n if (components.length === 2) {\n // Date and time.\n return formatDateTime(new Date(components.join(\"T\")), locale);\n }\n if (components.length === 1) {\n if (state.includes(\"-\")) {\n // Date only.\n return formatDate(new Date(`${state}T00:00`), locale);\n }\n if (state.includes(\":\")) {\n // Time only.\n const now = new Date();\n return formatTime(\n new Date(`${now.toISOString().split(\"T\")[0]}T${state}`),\n locale\n );\n }\n }\n return state;\n } catch (_e) {\n // Formatting methods may throw error if date parsing doesn't go well,\n // just return the state string in that case.\n return state;\n }\n } else {\n // If not trying to display an explicit state, create `Date` object from `stateObj`'s attributes then format.\n let date: Date;\n if (stateObj.attributes.has_date && stateObj.attributes.has_time) {\n date = new Date(\n stateObj.attributes.year,\n stateObj.attributes.month - 1,\n stateObj.attributes.day,\n stateObj.attributes.hour,\n stateObj.attributes.minute\n );\n return formatDateTime(date, locale);\n }\n if (stateObj.attributes.has_date) {\n date = new Date(\n stateObj.attributes.year,\n stateObj.attributes.month - 1,\n stateObj.attributes.day\n );\n return formatDate(date, locale);\n }\n if (stateObj.attributes.has_time) {\n date = new Date();\n date.setHours(stateObj.attributes.hour, stateObj.attributes.minute);\n return formatTime(date, locale);\n }\n return stateObj.state;\n }\n }\n\n if (domain === \"humidifier\") {\n if (compareState === \"on\" && stateObj.attributes.humidity) {\n return `${stateObj.attributes.humidity} %`;\n }\n }\n\n // `counter` `number` and `input_number` domains do not have a unit of measurement but should still use `formatNumber`\n if (\n domain === \"counter\" ||\n domain === \"number\" ||\n domain === \"input_number\"\n ) {\n return formatNumber(compareState, locale);\n }\n\n return (\n // Return device class translation\n (stateObj.attributes.device_class &&\n localize(\n `component.${domain}.state.${stateObj.attributes.device_class}.${compareState}`\n )) ||\n // Return default translation\n localize(`component.${domain}.state._.${compareState}`) ||\n // We don't know! Return the raw state.\n compareState\n );\n};\n","/** Constants to be used in the frontend. */\n\n// Constants should be alphabetically sorted by name.\n// Arrays with values should be alphabetically sorted if order doesn't matter.\n// Each constant should have a description what it is supposed to be used for.\n\n/** Icon to use when no icon specified for domain. */\nexport const DEFAULT_DOMAIN_ICON = \"mdi:bookmark\";\n\n/** Panel to show when no panel is picked. */\nexport const DEFAULT_PANEL = \"lovelace\";\n\n/** Domains that have a state card. */\nexport const DOMAINS_WITH_CARD = [\n \"climate\",\n \"cover\",\n \"configurator\",\n \"input_select\",\n \"input_number\",\n \"input_text\",\n \"lock\",\n \"media_player\",\n \"scene\",\n \"script\",\n \"timer\",\n \"vacuum\",\n \"water_heater\",\n \"weblink\"\n];\n\n/** Domains with separate more info dialog. */\nexport const DOMAINS_WITH_MORE_INFO = [\n \"alarm_control_panel\",\n \"automation\",\n \"camera\",\n \"climate\",\n \"configurator\",\n \"cover\",\n \"fan\",\n \"group\",\n \"history_graph\",\n \"input_datetime\",\n \"light\",\n \"lock\",\n \"media_player\",\n \"script\",\n \"sun\",\n \"updater\",\n \"vacuum\",\n \"water_heater\",\n \"weather\"\n];\n\n/** Domains that show no more info dialog. */\nexport const DOMAINS_HIDE_MORE_INFO = [\n \"input_number\",\n \"input_select\",\n \"input_text\",\n \"scene\",\n \"weblink\"\n];\n\n/** Domains that should have the history hidden in the more info dialog. */\nexport const DOMAINS_MORE_INFO_NO_HISTORY = [\n \"camera\",\n \"configurator\",\n \"history_graph\",\n \"scene\"\n];\n\n/** States that we consider \"off\". */\nexport const STATES_OFF = [\"closed\", \"locked\", \"off\"];\n\n/** Domains where we allow toggle in Lovelace. */\nexport const DOMAINS_TOGGLE = new Set([\n \"fan\",\n \"input_boolean\",\n \"light\",\n \"switch\",\n \"group\",\n \"automation\"\n]);\n\n/** Temperature units. */\nexport const UNIT_C = \"°C\";\nexport const UNIT_F = \"°F\";\n\n/** Entity ID of the default view. */\nexport const DEFAULT_VIEW_ENTITY_ID = \"group.default_view\";\n","// Polymer legacy event helpers used courtesy of the Polymer project.\n//\n// Copyright (c) 2017 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ndeclare global {\n // tslint:disable-next-line\n interface HASSDomEvents {}\n}\n\nexport type ValidHassDomEvent = keyof HASSDomEvents;\n\nexport interface HASSDomEvent<T> extends Event {\n detail: T;\n}\n\n/**\n * Dispatches a custom event with an optional detail value.\n *\n * @param {string} type Name of event type.\n * @param {*=} detail Detail value containing event-specific\n * payload.\n * @param {{ bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * composed: (boolean|undefined) }=}\n * options Object specifying options. These may include:\n * `bubbles` (boolean, defaults to `true`),\n * `cancelable` (boolean, defaults to false), and\n * `node` on which to fire the event (HTMLElement, defaults to `this`).\n * @return {Event} The new event that was fired.\n */\nexport const fireEvent = <HassEvent extends ValidHassDomEvent>(\n node: HTMLElement | Window,\n type: HassEvent,\n detail?: HASSDomEvents[HassEvent],\n options?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n }\n) => {\n options = options || {};\n // @ts-ignore\n detail = detail === null || detail === undefined ? {} : detail;\n const event = new Event(type, {\n bubbles: options.bubbles === undefined ? true : options.bubbles,\n cancelable: Boolean(options.cancelable),\n composed: options.composed === undefined ? true : options.composed\n });\n (event as any).detail = detail;\n node.dispatchEvent(event);\n return event;\n};\n","import { fireEvent } from \"./fire-event\";\n\nconst SPECIAL_TYPES = new Set([\n \"call-service\",\n \"divider\",\n \"section\",\n \"weblink\",\n \"cast\",\n \"select\"\n]);\nconst DOMAIN_TO_ELEMENT_TYPE = {\n alert: \"toggle\",\n automation: \"toggle\",\n climate: \"climate\",\n cover: \"cover\",\n fan: \"toggle\",\n group: \"group\",\n input_boolean: \"toggle\",\n input_number: \"input-number\",\n input_select: \"input-select\",\n input_text: \"input-text\",\n light: \"toggle\",\n lock: \"lock\",\n media_player: \"media-player\",\n remote: \"toggle\",\n scene: \"scene\",\n script: \"script\",\n sensor: \"sensor\",\n timer: \"timer\",\n switch: \"toggle\",\n vacuum: \"toggle\",\n // Temporary. Once climate is rewritten,\n // water heater should get it's own row.\n water_heater: \"climate\",\n input_datetime: \"input-datetime\"\n};\n\nexport const createThing = (cardConfig, isRow = false) => {\n const _createError = (error, config) => {\n return _createThing(\n \"hui-error-card\",\n {\n type: \"error\",\n error,\n config\n }\n );\n };\n\n const _createThing = (tag, config) => {\n const element = window.document.createElement(tag);\n try {\n // Preventing an error-card infinity loop: https://github.com/custom-cards/custom-card-helpers/issues/54\n if (!element.setConfig) return;\n element.setConfig(config);\n } catch (err) {\n console.error(tag, err);\n return _createError((err as Error).message, config);\n }\n return element;\n };\n\n if (!cardConfig || typeof cardConfig !== \"object\" || (!isRow && !cardConfig.type))\n return _createError(\"No type defined\", cardConfig);\n let tag = cardConfig.type;\n if (tag && tag.startsWith(\"custom:\")) {\n tag = tag.substr(\"custom:\".length);\n } else if (isRow) {\n if (SPECIAL_TYPES.has(tag)) {\n tag = `hui-${tag}-row`;\n } else {\n if (!cardConfig.entity) {\n return _createError(\"Invalid config given.\", cardConfig);\n }\n \n const domain = cardConfig.entity.split(\".\", 1)[0];\n tag = `hui-${DOMAIN_TO_ELEMENT_TYPE[domain] || \"text\"}-entity-row`;\n }\n } else {\n tag = `hui-${tag}-card`;\n }\n\n if (customElements.get(tag)) return _createThing(tag, cardConfig);\n\n // If element doesn't exist (yet) create an error\n const element = _createError(\n `Custom element doesn't exist: ${cardConfig.type}.`,\n cardConfig\n );\n element.style.display = \"None\";\n const timer = setTimeout(() => {\n element.style.display = \"\";\n }, 2000);\n // Remove error if element is defined later\n customElements.whenDefined(cardConfig.type).then(() => {\n clearTimeout(timer);\n fireEvent(element, \"ll-rebuild\", {}, element);\n });\n\n return element;\n};\n","/**\n * Convert a Duration hh:mm:ss format to seconds\n * @param duration hh:mm:ss formated duration\n * @returns duration in seconds\n */\n export function durationToSeconds(duration: string): number {\n const parts = duration.split(\":\").map(Number);\n return parts[0] * 3600 + parts[1] * 60 + parts[2];\n}\n","/*\n * selectUnit() taken from @formatjs/intl-units 3.8.4.\n *\n */\n\nexport type Unit =\n | 'second'\n | 'minute'\n | 'hour'\n | 'day'\n | 'week'\n | 'month'\n | 'quarter'\n | 'year';\n\nconst MS_PER_SECOND = 1e3;\nconst SECS_PER_MIN = 60;\nconst SECS_PER_HOUR = SECS_PER_MIN * 60;\nconst SECS_PER_DAY = SECS_PER_HOUR * 24;\nconst SECS_PER_WEEK = SECS_PER_DAY * 7;\n\nexport function selectUnit(\n from: Date | number,\n to: Date | number = Date.now(),\n thresholds: Partial<Thresholds> = {}\n): {value: number; unit: Unit} {\n const resolvedThresholds: Thresholds = {\n ...DEFAULT_THRESHOLDS,\n ...(thresholds || {}),\n };\n const secs = (+from - +to) / MS_PER_SECOND;\n if (Math.abs(secs) < resolvedThresholds.second) {\n return {\n value: Math.round(secs),\n unit: 'second',\n };\n }\n const mins = secs / SECS_PER_MIN;\n if (Math.abs(mins) < resolvedThresholds.minute) {\n return {\n value: Math.round(mins),\n unit: 'minute',\n };\n }\n const hours = secs / SECS_PER_HOUR;\n if (Math.abs(hours) < resolvedThresholds.hour) {\n return {\n value: Math.round(hours),\n unit: 'hour',\n };\n }\n\n const days = secs / SECS_PER_DAY;\n if (Math.abs(days) < resolvedThresholds.day) {\n return {\n value: Math.round(days),\n unit: 'day',\n };\n }\n const fromDate = new Date(from);\n const toDate = new Date(to);\n\n const years = fromDate.getFullYear() - toDate.getFullYear();\n if (Math.round(Math.abs(years)) > 0) {\n return {\n value: Math.round(years),\n unit: 'year',\n };\n }\n\n const months = years * 12 + fromDate.getMonth() - toDate.getMonth();\n if (Math.round(Math.abs(months)) > 0) {\n return {\n value: Math.round(months),\n unit: 'month',\n };\n }\n const weeks = secs / SECS_PER_WEEK;\n\n return {\n value: Math.round(weeks),\n unit: 'week',\n };\n}\n\ntype Thresholds = Record<'second' | 'minute' | 'hour' | 'day', number>;\n\nexport const DEFAULT_THRESHOLDS: Thresholds = {\n second: 45, // seconds to minute\n minute: 45, // minutes to hour\n hour: 22, // hour to day\n day: 5, // day to week\n};\n\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/relative_time.ts\n\nimport { FrontendLocaleData } from \"../types\";\nimport { selectUnit } from \"./select_unit\";\n\n const formatRelTimeMem =\n (locale: FrontendLocaleData) =>\n new Intl.RelativeTimeFormat(locale.language, { numeric: \"auto\" });\n/**\n * Calculate a string representing a date object as relative time from now.\n *\n * Example output: 5 minutes ago, in 3 days.\n */\n export const relativeTime = (\n from: Date,\n locale: FrontendLocaleData,\n to?: Date,\n includeTense = true\n): string => {\n const diff = selectUnit(from, to);\n if (includeTense) {\n return formatRelTimeMem(locale).format(diff.value, diff.unit);\n }\n return Intl.NumberFormat(locale.language, {\n style: \"unit\",\n unit: diff.unit,\n unitDisplay: \"long\",\n }).format(Math.abs(diff.value));\n};\n","//REF: https://github.com/home-assistant/frontend/blob/dev/src/common/datetime/seconds_to_duration.ts\n\nconst leftPad = (num: number) => (num < 10 ? `0${num}` : num);\n\nexport function secondsToDuration(d: number) {\n const h = Math.floor(d / 3600);\n const m = Math.floor((d % 3600) / 60);\n const s = Math.floor((d % 3600) % 60);\n\n if (h > 0) {\n return `${h}:${leftPad(m)}:${leftPad(s)}`;\n }\n if (m > 0) {\n return `${m}:${leftPad(s)}`;\n }\n if (s > 0) {\n return \"\" + s;\n }\n return null;\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport { durationToSeconds } from \"../datetime/duration_to_seconds\";\n\nexport function timerTimeRemaining(stateObj: HassEntity) {\n let timeRemaining = durationToSeconds(stateObj.attributes.remaining);\n\n if (stateObj.state === \"active\") {\n const now = new Date().getTime();\n const madeActive = new Date(stateObj.last_changed).getTime();\n timeRemaining = Math.max(timeRemaining - (now - madeActive) / 1000, 0);\n }\n\n return timeRemaining;\n}\n","/**\r\n * Returns a function, that, as long as it continues to be invoked, will not be triggered. It will be called after it stops being called for `wait` ms.\r\n * This can be usefull for ResizeObservers for example.\r\n * @param func The function you want to debounce\r\n * @param wait Period to wait in ms\r\n * @param immediate Triggering on the leading edge instead of the trailing\r\n * @returns Debounced Function\r\n */\r\n// eslint-disable-next-line: ban-types\r\nexport const debounce = <T extends (...args) => unknown>(\r\n func: T,\r\n wait: number,\r\n immediate = false\r\n): T => {\r\n let timeout;\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n return function (...args) {\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const context = this;\r\n const later = () => {\r\n timeout = null;\r\n if (!immediate) {\r\n func.apply(context, args);\r\n }\r\n };\r\n const callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) {\r\n func.apply(context, args);\r\n }\r\n };\r\n};\r\n","const compareArrayBufferViews = (\n a: ArrayBufferView,\n b: ArrayBufferView\n): boolean => {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n const viewA = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n const viewB = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);\n\n for (let index = 0; index < viewA.length; index++) {\n if (viewA[index] !== viewB[index]) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const deepEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n let i: number | [unknown, unknown];\n let length: number;\n if (Array.isArray(a)) {\n const bArray = b as unknown[];\n length = a.length;\n if (length !== bArray.length) {\n return false;\n }\n for (i = length; i-- !== 0; ) {\n if (!deepEqual(a[i], bArray[i])) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (i of a.entries()) {\n if (!b.has(i[0])) {\n return false;\n }\n }\n for (i of a.entries()) {\n if (!deepEqual(i[1], b.get(i[0]))) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n for (i of a.entries()) {\n if (!b.has(i[0])) {\n return false;\n }\n }\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n return compareArrayBufferViews(a, b);\n }\n\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n if (a.valueOf !== Object.prototype.valueOf) {\n return a.valueOf() === b.valueOf();\n }\n if (a.toString !== Object.prototype.toString) {\n return a.toString() === b.toString();\n }\n\n const aRecord = a as Record<string, unknown>;\n const bRecord = b as Record<string, unknown>;\n const keys = Object.keys(aRecord);\n length = keys.length;\n if (length !== Object.keys(bRecord).length) {\n return false;\n }\n for (i = length; i-- !== 0; ) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n\n for (i = length; i-- !== 0; ) {\n const key = keys[i];\n\n if (!deepEqual(aRecord[key], bRecord[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return a !== a && b !== b;\n};\n","/**\n * Return the icon to be used for a domain.\n *\n * Optionally pass in a state to influence the domain icon.\n */\nimport { DEFAULT_DOMAIN_ICON } from \"./const\";\n\nexport const fixedIcons = {\n alert: \"mdi:alert\",\n automation: \"mdi:playlist-play\",\n calendar: \"mdi:calendar\",\n camera: \"mdi:video\",\n climate: \"mdi:thermostat\",\n configurator: \"mdi:settings\",\n conversation: \"mdi:text-to-speech\",\n device_tracker: \"mdi:account\",\n fan: \"mdi:fan\",\n group: \"mdi:google-circles-communities\",\n history_graph: \"mdi:chart-line\",\n homeassistant: \"mdi:home-assistant\",\n homekit: \"mdi:home-automation\",\n image_processing: \"mdi:image-filter-frames\",\n input_boolean: \"mdi:drawing\",\n input_datetime: \"mdi:calendar-clock\",\n input_number: \"mdi:ray-vertex\",\n input_select: \"mdi:format-list-bulleted\",\n input_text: \"mdi:textbox\",\n light: \"mdi:lightbulb\",\n mailbox: \"mdi:mailbox\",\n notify: \"mdi:comment-alert\",\n person: \"mdi:account\",\n plant: \"mdi:flower\",\n proximity: \"mdi:apple-safari\",\n remote: \"mdi:remote\",\n scene: \"mdi:google-pages\",\n script: \"mdi:file-document\",\n sensor: \"mdi:eye\",\n simple_alarm: \"mdi:bell\",\n sun: \"mdi:white-balance-sunny\",\n switch: \"mdi:flash\",\n timer: \"mdi:timer\",\n updater: \"mdi:cloud-upload\",\n vacuum: \"mdi:robot-vacuum\",\n water_heater: \"mdi:thermometer\",\n weblink: \"mdi:open-in-new\"\n};\n\nexport function domainIcon(domain: string, state?: string): string {\n if (domain in fixedIcons) {\n return fixedIcons[domain];\n }\n\n switch (domain) {\n case \"alarm_control_panel\":\n switch (state) {\n case \"armed_home\":\n return \"mdi:bell-plus\";\n case \"armed_night\":\n return \"mdi:bell-sleep\";\n case \"disarmed\":\n return \"mdi:bell-outline\";\n case \"triggered\":\n return \"mdi:bell-ring\";\n default:\n return \"mdi:bell\";\n }\n\n case \"binary_sensor\":\n return state && state === \"off\"\n ? \"mdi:radiobox-blank\"\n : \"mdi:checkbox-marked-circle\";\n\n case \"cover\":\n return state === \"closed\" ? \"mdi:window-closed\" : \"mdi:window-open\";\n\n case \"lock\":\n return state && state === \"unlocked\" ? \"mdi:lock-open\" : \"mdi:lock\";\n\n case \"media_player\":\n return state && state !== \"off\" && state !== \"idle\"\n ? \"mdi:cast-connected\"\n : \"mdi:cast\";\n\n case \"zwave\":\n switch (state) {\n case \"dead\":\n return \"mdi:emoticon-dead\";\n case \"sleeping\":\n return \"mdi:sleep\";\n case \"initializing\":\n return \"mdi:timer-sand\";\n default:\n return \"mdi:z-wave\";\n }\n\n default:\n // tslint:disable-next-line\n console.warn(\n \"Unable to find icon for domain \" + domain + \" (\" + state + \")\"\n );\n return DEFAULT_DOMAIN_ICON;\n }\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\nexport const evaluateFilter = (stateObj: HassEntity, filter: any): boolean => {\n const operator = filter.operator || \"==\";\n const value = filter.value || filter;\n const state = filter.attribute\n ? stateObj.attributes[filter.attribute]\n : stateObj.state;\n\n switch (operator) {\n case \"==\":\n return state === value;\n case \"<=\":\n return state <= value;\n case \"<\":\n return state < value;\n case \">=\":\n return state >= value;\n case \">\":\n return state > value;\n case \"!=\":\n return state !== value;\n case \"regex\": {\n return state.match(value);\n }\n default:\n return false;\n }\n};\n","export const formatTimestamp = (timestamp: string): string => {\n const date = new Date(timestamp);\n\n if (Number.isNaN(date.getTime())) {\n return timestamp;\n }\n\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n\n if (diffSec < 60) {\n return `${diffSec} seconds ago`;\n }\n if (diffMin < 60) {\n return `${diffMin} minutes ago`;\n }\n if (diffHour < 24) {\n return `${diffHour} hours ago`;\n }\n if (diffDay < 7) {\n return `${diffDay} days ago`;\n }\n return date.toLocaleString();\n};\n","import { HuiRootElement } from \"./types\";\n\nexport const getLovelace = () => {\n const root = document\n .querySelector(\"home-assistant\")\n ?.shadowRoot?.querySelector(\"home-assistant-main\")?.shadowRoot;\n\n const resolver =\n root?.querySelector(\"ha-drawer partial-panel-resolver\") ||\n root?.querySelector(\"app-drawer-layout partial-panel-resolver\");\n\n const huiRoot = (resolver?.shadowRoot || resolver)\n ?.querySelector<HuiRootElement>(\"ha-panel-lovelace\")\n ?.shadowRoot?.querySelector<HuiRootElement>(\"hui-root\");\n\n if (huiRoot) {\n const ll = huiRoot.lovelace;\n ll.current_view = huiRoot.___curView;\n return ll;\n }\n\n return null;\n};\n","import { HASSDomEvent, fireEvent } from \"./fire-event\";\n\n/**\n * Broadcast haptic feedback requests\n */\n\n\n// Allowed types are from iOS HIG.\n// https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/feedback/#haptics\n// Implementors on platforms other than iOS should attempt to match the patterns (shown in HIG) as closely as possible.\nexport type HapticType =\n | \"success\"\n | \"warning\"\n | \"failure\"\n | \"light\"\n | \"medium\"\n | \"heavy\"\n | \"selection\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n haptic: HapticType;\n }\n\n interface GlobalEventHandlersEventMap {\n haptic: HASSDomEvent<HapticType>;\n }\n}\n\nexport const forwardHaptic = (hapticType: HapticType) => {\n fireEvent(window, \"haptic\", hapticType);\n};\n","import { fireEvent } from \"./fire-event\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"location-changed\": {\n replace: boolean;\n };\n }\n}\n\nexport const navigate = (\n _node: any,\n path: string,\n replace: boolean = false\n) => {\n if (replace) {\n history.replaceState(null, \"\", path);\n } else {\n history.pushState(null, \"\", path);\n }\n fireEvent(window, \"location-changed\", {\n replace\n });\n};\n","import { HomeAssistant } from \"./types\";\nimport { computeDomain } from \"./compute-domain\";\n\nexport const turnOnOffEntity = (\n hass: HomeAssistant,\n entityId: string,\n turnOn = true\n): Promise<void> => {\n const stateDomain = computeDomain(entityId);\n const serviceDomain = stateDomain === \"group\" ? \"homeassistant\" : stateDomain;\n\n let service;\n switch (stateDomain) {\n case \"lock\":\n service = turnOn ? \"unlock\" : \"lock\";\n break;\n case \"cover\":\n service = turnOn ? \"open_cover\" : \"close_cover\";\n break;\n default:\n service = turnOn ? \"turn_on\" : \"turn_off\";\n }\n\n return hass.callService(serviceDomain, service, { entity_id: entityId });\n};\n\nexport const turnOnEntity = (\n hass: HomeAssistant,\n entityId: string\n): Promise<void> => turnOnOffEntity(hass, entityId, true);\n\nexport const turnOffEntity = (\n hass: HomeAssistant,\n entityId: string\n): Promise<void> => turnOnOffEntity(hass, entityId, false);\n","import { STATES_OFF } from \"./const\";\nimport { turnOnOffEntity } from \"./turn-on-off-entity\";\nimport { HomeAssistant } from \"./types\";\n\nexport const toggleEntity = (\n hass: HomeAssistant,\n entityId: string\n): Promise<void> => {\n const turnOn = STATES_OFF.includes(hass.states[entityId].state);\n return turnOnOffEntity(hass, entityId, turnOn);\n};\n","import { HomeAssistant, ActionConfig, TurnOnActionConfig, TurnOffActionConfig } from \"./types\";\nimport { forwardHaptic } from \"./haptic\";\nimport { fireEvent } from \"./fire-event\";\nimport { navigate } from \"./navigate\";\nimport { toggleEntity } from \"./toggle-entity\";\nimport { turnOnOffEntity } from \"./turn-on-off-entity\";\n\nexport const handleActionConfig = (\n node: HTMLElement,\n hass: HomeAssistant,\n config: {\n entity?: string;\n camera_image?: string;\n hold_action?: ActionConfig;\n tap_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n },\n actionConfig: ActionConfig | undefined\n): void => {\n if (!actionConfig) {\n actionConfig = {\n action: \"more-info\",\n };\n }\n\n if (\n actionConfig.confirmation &&\n (!actionConfig.confirmation.exemptions ||\n !actionConfig.confirmation.exemptions.some(\n (e) => e.user === hass!.user!.id\n ))\n ) {\n forwardHaptic(\"warning\");\n\n if (\n !confirm(\n actionConfig.confirmation.text ||\n `Are you sure you want to ${actionConfig.action}?`\n )\n ) {\n return;\n }\n }\n\n switch (actionConfig.action) {\n case \"more-info\":\n if (config.entity || config.camera_image) {\n fireEvent(node, \"hass-more-info\", {\n entityId: config.entity ? config.entity : config.camera_image!,\n });\n }\n break;\n case \"navigate\":\n if (actionConfig.navigation_path) {\n navigate(node, actionConfig.navigation_path);\n }\n break;\n case \"url\":\n if (actionConfig.url_path) {\n window.open(actionConfig.url_path);\n }\n break;\n case \"toggle\":\n if (config.entity) {\n toggleEntity(hass, config.entity!);\n forwardHaptic(\"success\");\n }\n break;\n case \"turn_on\":\n turnOnOffEntity(\n hass,\n (actionConfig as TurnOnActionConfig).entity || config.entity!,\n true\n );\n forwardHaptic(\"success\");\n break;\n case \"turn_off\":\n turnOnOffEntity(\n hass,\n (actionConfig as TurnOffActionConfig).entity || config.entity!,\n false\n );\n forwardHaptic(\"success\");\n break;\n case \"call-service\": {\n if (!actionConfig.service) {\n forwardHaptic(\"failure\");\n return;\n }\n const [domain, service] = actionConfig.service.split(\".\", 2);\n hass.callService(domain, service, actionConfig.data, actionConfig.target);\n forwardHaptic(\"success\");\n break;\n }\n case \"fire-dom-event\": {\n fireEvent(node, \"ll-custom\", actionConfig);\n }\n }\n};\n\nexport const handleAction = (\n node: HTMLElement,\n hass: HomeAssistant,\n config: {\n entity?: string;\n camera_image?: string;\n hold_action?: ActionConfig;\n tap_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n },\n action: string\n): void => {\n let actionConfig: ActionConfig | undefined;\n\n if (action === \"double_tap\" && config.double_tap_action) {\n actionConfig = config.double_tap_action;\n } else if (action === \"hold\" && config.hold_action) {\n actionConfig = config.hold_action;\n } else if (action === \"tap\" && config.tap_action) {\n actionConfig = config.tap_action;\n }\n\n handleActionConfig(node, hass, config, actionConfig);\n};\n","import { HomeAssistant, ActionConfig } from \"./types\";\nimport { fireEvent } from \"./fire-event\";\nimport { forwardHaptic } from \"./haptic\";\nimport { navigate } from \"./navigate\";\nimport { toggleEntity } from \"./toggle-entity\";\n\nexport const handleClick = (\n node: HTMLElement,\n hass: HomeAssistant,\n config: {\n entity?: string;\n camera_image?: string;\n hold_action?: ActionConfig;\n tap_action?: ActionConfig;\n double_tap_action?: ActionConfig;\n },\n hold: boolean,\n dblClick: boolean\n): void => {\n let actionConfig: ActionConfig | undefined;\n\n if (dblClick && config.double_tap_action) {\n actionConfig = config.double_tap_action;\n } else if (hold && config.hold_action) {\n actionConfig = config.hold_action;\n } else if (!hold && config.tap_action) {\n actionConfig = config.tap_action;\n }\n\n if (!actionConfig) {\n actionConfig = {\n action: \"more-info\"\n };\n }\n\n if (\n actionConfig.confirmation &&\n (!actionConfig.confirmation.exemptions ||\n !actionConfig.confirmation.exemptions.some(\n e => e.user === hass!.user!.id\n ))\n ) {\n if (\n !confirm(\n actionConfig.confirmation.text ||\n `Are you sure you want to ${actionConfig.action}?`\n )\n ) {\n return;\n }\n }\n\n switch (actionConfig.action) {\n case \"more-info\":\n if (actionConfig.entity || config.entity || config.camera_image) {\n fireEvent(node, \"hass-more-info\", {\n entityId: actionConfig.entity\n ? actionConfig.entity\n : config.entity\n ? config.entity\n : config.camera_image\n });\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n }\n break;\n case \"navigate\":\n if (actionConfig.navigation_path) {\n navigate(node, actionConfig.navigation_path);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n }\n break;\n case \"url\":\n actionConfig.url_path && window.open(actionConfig.url_path);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n break;\n case \"toggle\":\n if (config.entity) {\n toggleEntity(hass, config.entity!);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n }\n break;\n case \"call-service\": {\n if (!actionConfig.service) {\n return;\n }\n const [domain, service] = actionConfig.service.split(\".\", 2);\n const serviceData = { ...actionConfig.data };\n if (serviceData.entity_id === \"entity\") {\n serviceData.entity_id = config.entity;\n }\n hass.callService(domain, service, serviceData, actionConfig.target);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n break;\n }\n case \"fire-dom-event\": {\n fireEvent(node, \"ll-custom\", actionConfig);\n if (actionConfig.haptic) forwardHaptic(actionConfig.haptic);\n break;\n }\n }\n};\n","import { ActionConfig } from \"./types\";\n\nexport function hasAction(config?: ActionConfig): boolean {\n return config !== undefined && config.action !== \"none\";\n}\n","import { PropertyValues } from \"lit\";\n\nimport { HomeAssistant } from \"./types\";\n\n// Check if config or Entity changed\nexport function hasConfigOrEntityChanged(\n element: any,\n changedProps: PropertyValues,\n forceUpdate: Boolean,\n): boolean {\n if (changedProps.has('config') || forceUpdate) {\n return true;\n }\n\n if (element.config!.entity) {\n const oldHass = changedProps.get('hass') as HomeAssistant | undefined;\n if (oldHass) {\n return (\n oldHass.states[element.config!.entity]\n !== element.hass!.states[element.config!.entity]\n );\n }\n return true;\n } else {\n return false;\n }\n}","import { ActionConfig } from \"./types\";\n\n// Check if config or Entity changed\nexport function hasDoubleClick(config?: ActionConfig): boolean {\n return config !== undefined && config.action !== \"none\";\n}","/**\n * Scroll to a specific y coordinate.\n *\n * Copied from paper-scroll-header-panel.\n *\n * @method scroll\n * @param {number} top The coordinate to scroll to, along the y-axis.\n * @param {boolean} smooth true if the scroll position should be smoothly adjusted.\n */\nexport function scrollToTarget(element, target) {\n // the scroll event will trigger _updateScrollState directly,\n // However, _updateScrollState relies on the previous `scrollTop` to update the states.\n // Calling _updateScrollState will ensure that the states are synced correctly.\n const top = 0;\n const scroller = target;\n const easingFn = function easeOutQuad(t, b, c, d) {\n /* eslint-disable no-param-reassign, space-infix-ops, no-mixed-operators */\n t /= d;\n return -c * t * (t - 2) + b;\n /* eslint-enable no-param-reassign, space-infix-ops, no-mixed-operators */\n };\n const animationId = Math.random();\n const duration = 200;\n const startTime = Date.now();\n const currentScrollTop = scroller.scrollTop;\n const deltaScrollTop = top - currentScrollTop;\n element._currentAnimationId = animationId;\n (function updateFrame() {\n const now = Date.now();\n const elapsedTime = now - startTime;\n if (elapsedTime > duration) {\n scroller.scrollTop = top;\n } else if (element._currentAnimationId === animationId) {\n scroller.scrollTop = easingFn(\n elapsedTime,\n currentScrollTop,\n deltaScrollTop,\n duration\n );\n requestAnimationFrame(updateFrame.bind(element));\n }\n }.call(element));\n}\n","import { HassEntity } from \"home-assistant-js-websocket\";\n\n/** Return an icon representing a binary sensor state. */\n\nexport const binarySensorIcon = (state?: string, stateObj?: HassEntity) => {\n const is_off = state === \"off\";\n switch (stateObj?.attributes.device_class) {\n case \"battery\":\n return is_off ? \"mdi:battery\" : \"mdi:battery-outline\";\n case \"battery_charging\":\n return is_off ? \"mdi:battery\" : \"mdi:battery-charging\";\n case \"cold\":\n return is_off ? \"mdi:thermometer\" : \"mdi:snowflake\";\n case \"connectivity\":\n return is_off ? \"mdi:server-network-off\" : \"mdi:server-network\";\n case \"door\":\n return is_off ? \"mdi:door-closed\" : \"mdi:door-open\";\n case \"garage_door\":\n return is_off ? \"mdi:garage\" : \"mdi:garage-open\";\n case \"power\":\n return is_off ? \"mdi:power-plug-off\" : \"mdi:power-plug\";\n case \"gas\":\n case \"problem\":\n case \"safety\":\n case \"tamper\":\n return is_off ? \"mdi:check-circle\" : \"mdi:alert-circle\";\n case \"smoke\":\n return is_off ? \"mdi:check-circle\" : \"mdi:smoke\";\n case \"heat\":\n return is_off ? \"mdi:thermometer\" : \"mdi:fire\";\n case \"light\":\n return is_off ? \"mdi:brightness-5\" : \"mdi:brightness-7\";\n case \"lock\":\n return is_off ? \"mdi:lock\" : \"mdi:lock-open\";\n case \"moisture\":\n return is_off ? \"mdi:water-off\" : \"mdi:water\";\n case \"motion\":\n return is_off ? \"mdi:walk\" : \"mdi:run\";\n case \"occupancy\":\n return is_off ? \"mdi:home-outline\" : \"mdi:home\";\n case \"opening\":\n return is_off ? \"mdi:square\" : \"mdi:square-outline\";\n case \"plug\":\n return is_off ? \"mdi:power-plug-off\" : \"mdi:power-plug\";\n case \"presence\":\n return is_off ? \"mdi:home-outline\" : \"mdi:home\";\n case \"running\":\n return is_off ? \"mdi:stop\" : \"mdi:play\";\n case \"sound\":\n return is_off ? \"mdi:music-note-off\" : \"mdi:music-note\";\n case \"update\":\n return is_off ? \"mdi:package\" : \"mdi:package-up\";\n case \"vibration\":\n return is_off ? \"mdi:crop-portrait\" : \"mdi:vibrate\";\n case \"window\":\n return is_off ? \"mdi:window-closed\" : \"mdi:window-open\";\n default:\n return is_off ? \"mdi:radiobox-blank\" : \"mdi:checkbox-marked-circle\";\n }\n};\n","/** Return an icon representing a cover state. */\nimport { HassEntity } from \"home-assistant-js-websocket\";\n\nexport const coverIcon = (state: HassEntity): string => {\n const open = state.state !== \"closed\";\n switch (state.attributes.device_class) {\n case \"garage\":\n switch (state.state) {\n case \"opening\":\n return \"mdi:arrow-up-box\";\n case \"closing\":\n return \"mdi:arrow-down-box\";\n case \"closed\":\n return \"mdi:garage\";\n default:\n return \"mdi:garage-open\";\n }\n case \"gate\":\n switch (state.state) {\n case \"opening\":\n case \"closing\":\n return \"mdi:gate-arrow-right\";\n case \"closed\":\n return \"mdi:gate\";\n default:\n return \"mdi:gate-open\";\n }\n case \"door\":\n return open ? \"mdi:door-open\" : \"mdi:door-closed\";\n case \"damper\":\n return open ? \"mdi:circle\" : \"mdi:circle-slice-8\";\n case \"shutter\":\n switch (state.state) {\n case \"opening\":\n return \"mdi:arrow-up-box\";\n case \"closing\":\n return \"mdi:arrow-down-box\";\n case \"closed\":\n return \"mdi:window-shutter\";\n default:\n return \"mdi:window-shutter-open\";\n }\n case \"curtain\":\n switch (state.state) {\n case \"opening\":\n return \"mdi:arrow-split-vertical\";\n case \"closing\":\n return \"mdi:arrow-collapse-horizontal\";\n case \"closed\":\n return \"mdi:curtains-closed\";\n default:\n return \"mdi:curtains\";\n }\n case \"blind\":\n case \"shade\":\n switch (state.state) {\n case \"opening\":\n return \"mdi:arrow-up-box\";\n case \"closing\":\n return \"mdi:arrow-down-box\";\n case \"closed\":\n return \"mdi:blinds\";\n default:\n return \"mdi:blinds-open\";\n }\n case \"window\":\n switch (state.state) {\n case \"opening\":\n return \"mdi:arrow-up-box\";\n case \"closing\":\n return \"mdi:arrow-down-box\";\n case \"closed\":\n return \"mdi:window-closed\";\n default:\n return \"mdi:window-open\";\n }\n default:\n switch (state.state) {\n case \"opening\":\n return \"mdi:arrow-up-box\";\n case \"closing\":\n return \"mdi:arrow-down-box\";\n case \"closed\":\n return \"mdi:window-closed\";\n default:\n return \"mdi:window-open\";\n }\n }\n};\n","/** Return an icon representing a sensor state. */\nimport { HassEntity } from \"home-assistant-js-websocket\";\nimport { UNIT_C, UNIT_F } from \"./const\";\nimport { domainIcon } from \"./domain_icons\";\n\nconst fixedDeviceClassIcons = {\n humidity: \"mdi:water-percent\",\n illuminance: \"mdi:brightness-5\",\n temperature: \"mdi:thermometer\",\n pressure: \"mdi:gauge\",\n power: \"mdi:flash\",\n signal_strength: \"mdi:wifi\",\n};\n\nexport const sensorIcon = (state: HassEntity) => {\n const dclass = state.attributes.device_class;\n\n if (dclass && dclass in fixedDeviceClassIcons) {\n return fixedDeviceClassIcons[dclass];\n }\n if (dclass === \"battery\") {\n const battery = Number(state.state);\n if (isNaN(battery)) {\n return \"mdi:battery-unknown\";\n }\n const batteryRound = Math.round(battery / 10) * 10;\n if (batteryRound >= 100) {\n return \"mdi:battery\";\n }\n if (batteryRound <= 0) {\n return \"mdi:battery-alert\";\n }\n // Will return one of the following icons: (listed so extractor picks up)\n // mdi:battery-10\n // mdi:battery-20\n // mdi:battery-30\n // mdi:battery-40\n // mdi:battery-50\n // mdi:battery-60\n // mdi:battery-70\n // mdi:battery-80\n // mdi:battery-90\n // We obscure 'hass' in iconname so this name does not get picked up\n return `${\"hass\"}:battery-${batteryRound}`;\n }\n\n const unit = state.attributes.unit_of_measurement;\n if (unit === UNIT_C || unit === UNIT_F) {\n return \"mdi:thermometer\";\n }\n return domainIcon(\"sensor\");\n};\n","/** Return an icon representing an input datetime state. */\nimport { domainIcon } from \"./domain_icons\";\nimport { HassEntity } from \"home-assistant-js-websocket\";\n\nexport const inputDateTimeIcon = (state: HassEntity): string => {\n if (!state.attributes.has_date) {\n return \"mdi:clock\";\n }\n if (!state.attributes.has_time) {\n return \"mdi:calendar\";\n }\n return domainIcon(\"input_datetime\");\n};\n","import { HassEntity } from \"home-assistant-js-websocket\";\nimport { computeDomain } from \"./compute-domain\";\nimport { DEFAULT_DOMAIN_ICON } from \"./const\";\nimport { binarySensorIcon } from \"./binary_sensor_icon\";\nimport { coverIcon } from \"./cover_icon\";\nimport { sensorIcon } from \"./sensor_icon\";\nimport { inputDateTimeIcon } from \"./input_datetime_icon\";\nimport { domainIcon } from \"./domain_icons\";\n\nconst domainIcons = {\n binary_sensor: (stateObj: HassEntity) => binarySensorIcon(stateObj.state, stateObj),\n cover: coverIcon,\n sensor: sensorIcon,\n input_datetime: inputDateTimeIcon,\n};\n\nexport const stateIcon = (state: HassEntity) => {\n if (!state) {\n return DEFAULT_DOMAIN_ICON;\n }\n if (state.attributes.icon) {\n return state.attributes.icon;\n }\n\n const domain = computeDomain(state.entity_id);\n\n if (domain in domainIcons) {\n return domainIcons[domain](state);\n }\n return domainIcon(domain, state.state);\n};\n","import { HomeAssistant } from \"./types\";\nimport { STATES_OFF } from \"./const\";\nimport { computeDomain } from \"./compute-domain\";\n\nexport const turnOnOffEntities = (\n hass: HomeAssistant,\n entityIds: string[],\n turnOn = true\n): void => {\n const domainsToCall = {};\n entityIds.forEach((entityId) => {\n if (STATES_OFF.includes(hass.states[entityId].state) === turnOn) {\n const stateDomain = computeDomain(entityId);\n const serviceDomain = [\"cover\", \"lock\"].includes(stateDomain)\n ? stateDomain\n : \"homeassistant\";\n\n if (!(serviceDomain in domainsToCall)) {\n domainsToCall[serviceDomain] = [];\n }\n domainsToCall[serviceDomain].push(entityId);\n }\n });\n\n Object.keys(domainsToCall).forEach((domain) => {\n let service;\n switch (domain) {\n case \"lock\":\n service = turnOn ? \"unlock\" : \"lock\";\n break;\n case \"cover\":\n service = turnOn ? \"open_cover\" : \"close_cover\";\n break;\n default:\n service = turnOn ? \"turn_on\" : \"turn_off\";\n }\n\n const entities = domainsToCall[domain];\n hass.callService(domain, service, { entity_id: entities });\n });\n};\n"],"names":["NumberFormat","TimeFormat","TimeZone","DateFormat","FirstWeekday"],"mappings":"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"}
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* @param {number} top The coordinate to scroll to, along the y-axis.
|
|
8
8
|
* @param {boolean} smooth true if the scroll position should be smoothly adjusted.
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export declare function scrollToTarget(element: any, target: any): void;
|