mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-26 02:36:37 +00:00
Change map styles to "Voyager" (#13227)
This commit is contained in:
parent
bd50d6a6a3
commit
d41159591c
@ -5,8 +5,7 @@ export type LeafletModuleType = typeof import("leaflet");
|
|||||||
export type LeafletDrawModuleType = typeof import("leaflet-draw");
|
export type LeafletDrawModuleType = typeof import("leaflet-draw");
|
||||||
|
|
||||||
export const setupLeafletMap = async (
|
export const setupLeafletMap = async (
|
||||||
mapElement: HTMLElement,
|
mapElement: HTMLElement
|
||||||
darkMode?: boolean
|
|
||||||
): Promise<[Map, LeafletModuleType, TileLayer]> => {
|
): Promise<[Map, LeafletModuleType, TileLayer]> => {
|
||||||
if (!mapElement.parentNode) {
|
if (!mapElement.parentNode) {
|
||||||
throw new Error("Cannot setup Leaflet map on disconnected element");
|
throw new Error("Cannot setup Leaflet map on disconnected element");
|
||||||
@ -23,7 +22,7 @@ export const setupLeafletMap = async (
|
|||||||
mapElement.parentNode.appendChild(style);
|
mapElement.parentNode.appendChild(style);
|
||||||
map.setView([52.3731339, 4.8903147], 13);
|
map.setView([52.3731339, 4.8903147], 13);
|
||||||
|
|
||||||
const tileLayer = createTileLayer(Leaflet, Boolean(darkMode)).addTo(map);
|
const tileLayer = createTileLayer(Leaflet).addTo(map);
|
||||||
|
|
||||||
return [map, Leaflet, tileLayer];
|
return [map, Leaflet, tileLayer];
|
||||||
};
|
};
|
||||||
@ -31,23 +30,19 @@ export const setupLeafletMap = async (
|
|||||||
export const replaceTileLayer = (
|
export const replaceTileLayer = (
|
||||||
leaflet: LeafletModuleType,
|
leaflet: LeafletModuleType,
|
||||||
map: Map,
|
map: Map,
|
||||||
tileLayer: TileLayer,
|
tileLayer: TileLayer
|
||||||
darkMode: boolean
|
|
||||||
): TileLayer => {
|
): TileLayer => {
|
||||||
map.removeLayer(tileLayer);
|
map.removeLayer(tileLayer);
|
||||||
tileLayer = createTileLayer(leaflet, darkMode);
|
tileLayer = createTileLayer(leaflet);
|
||||||
tileLayer.addTo(map);
|
tileLayer.addTo(map);
|
||||||
return tileLayer;
|
return tileLayer;
|
||||||
};
|
};
|
||||||
|
|
||||||
const createTileLayer = (
|
const createTileLayer = (leaflet: LeafletModuleType): TileLayer =>
|
||||||
leaflet: LeafletModuleType,
|
|
||||||
darkMode: boolean
|
|
||||||
): TileLayer =>
|
|
||||||
leaflet.tileLayer(
|
leaflet.tileLayer(
|
||||||
`https://{s}.basemaps.cartocdn.com/${
|
`https://basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}${
|
||||||
darkMode ? "dark_all" : "light_all"
|
leaflet.Browser.retina ? "@2x.png" : ".png"
|
||||||
}/{z}/{x}/{y}${leaflet.Browser.retina ? "@2x.png" : ".png"}`,
|
}`,
|
||||||
{
|
{
|
||||||
attribution:
|
attribution:
|
||||||
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, © <a href="https://carto.com/attributions">CARTO</a>',
|
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>, © <a href="https://carto.com/attributions">CARTO</a>',
|
||||||
|
@ -6,21 +6,19 @@ import {
|
|||||||
Map,
|
Map,
|
||||||
Marker,
|
Marker,
|
||||||
Polyline,
|
Polyline,
|
||||||
TileLayer,
|
|
||||||
} from "leaflet";
|
} from "leaflet";
|
||||||
import { css, CSSResultGroup, PropertyValues, ReactiveElement } from "lit";
|
import { css, CSSResultGroup, PropertyValues, ReactiveElement } from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
import {
|
import {
|
||||||
LeafletModuleType,
|
LeafletModuleType,
|
||||||
replaceTileLayer,
|
|
||||||
setupLeafletMap,
|
setupLeafletMap,
|
||||||
} from "../../common/dom/setup-leaflet-map";
|
} from "../../common/dom/setup-leaflet-map";
|
||||||
import { computeStateDomain } from "../../common/entity/compute_state_domain";
|
import { computeStateDomain } from "../../common/entity/compute_state_domain";
|
||||||
import { computeStateName } from "../../common/entity/compute_state_name";
|
import { computeStateName } from "../../common/entity/compute_state_name";
|
||||||
import "./ha-entity-marker";
|
import { installResizeObserver } from "../../panels/lovelace/common/install-resize-observer";
|
||||||
import { HomeAssistant } from "../../types";
|
import { HomeAssistant } from "../../types";
|
||||||
import "../ha-icon-button";
|
import "../ha-icon-button";
|
||||||
import { installResizeObserver } from "../../panels/lovelace/common/install-resize-observer";
|
import "./ha-entity-marker";
|
||||||
|
|
||||||
const getEntityId = (entity: string | HaMapEntity): string =>
|
const getEntityId = (entity: string | HaMapEntity): string =>
|
||||||
typeof entity === "string" ? entity : entity.entity_id;
|
typeof entity === "string" ? entity : entity.entity_id;
|
||||||
@ -60,8 +58,6 @@ export class HaMap extends ReactiveElement {
|
|||||||
|
|
||||||
private Leaflet?: LeafletModuleType;
|
private Leaflet?: LeafletModuleType;
|
||||||
|
|
||||||
private _tileLayer?: TileLayer;
|
|
||||||
|
|
||||||
private _resizeObserver?: ResizeObserver;
|
private _resizeObserver?: ResizeObserver;
|
||||||
|
|
||||||
private _mapItems: Array<Marker | Circle> = [];
|
private _mapItems: Array<Marker | Circle> = [];
|
||||||
@ -142,12 +138,6 @@ export class HaMap extends ReactiveElement {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const darkMode = this.darkMode ?? this.hass.themes.darkMode;
|
const darkMode = this.darkMode ?? this.hass.themes.darkMode;
|
||||||
this._tileLayer = replaceTileLayer(
|
|
||||||
this.Leaflet!,
|
|
||||||
this.leafletMap!,
|
|
||||||
this._tileLayer!,
|
|
||||||
darkMode
|
|
||||||
);
|
|
||||||
this.shadowRoot!.getElementById("map")!.classList.toggle("dark", darkMode);
|
this.shadowRoot!.getElementById("map")!.classList.toggle("dark", darkMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,10 +149,7 @@ export class HaMap extends ReactiveElement {
|
|||||||
this.shadowRoot!.append(map);
|
this.shadowRoot!.append(map);
|
||||||
}
|
}
|
||||||
const darkMode = this.darkMode ?? this.hass.themes.darkMode;
|
const darkMode = this.darkMode ?? this.hass.themes.darkMode;
|
||||||
[this.leafletMap, this.Leaflet, this._tileLayer] = await setupLeafletMap(
|
[this.leafletMap, this.Leaflet] = await setupLeafletMap(map);
|
||||||
map,
|
|
||||||
darkMode
|
|
||||||
);
|
|
||||||
this.shadowRoot!.getElementById("map")!.classList.toggle("dark", darkMode);
|
this.shadowRoot!.getElementById("map")!.classList.toggle("dark", darkMode);
|
||||||
this._loaded = true;
|
this._loaded = true;
|
||||||
}
|
}
|
||||||
@ -473,6 +460,13 @@ export class HaMap extends ReactiveElement {
|
|||||||
.dark {
|
.dark {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
.leaflet-tile-pane {
|
||||||
|
filter: var(--map-filter);
|
||||||
|
}
|
||||||
|
.dark .leaflet-bar a {
|
||||||
|
background: var(--card-background-color);
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
.leaflet-marker-draggable {
|
.leaflet-marker-draggable {
|
||||||
cursor: move !important;
|
cursor: move !important;
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ export const darkStyles = {
|
|||||||
"codemirror-qualifier": "#DECB6B",
|
"codemirror-qualifier": "#DECB6B",
|
||||||
"codemirror-type": "#DECB6B",
|
"codemirror-type": "#DECB6B",
|
||||||
"energy-grid-return-color": "#a280db",
|
"energy-grid-return-color": "#a280db",
|
||||||
|
"map-filter": "invert(.9) hue-rotate(170deg) grayscale(.7)",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const derivedStyles = {
|
export const derivedStyles = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user