web/admin: fix color-scheme for charts and flow diagram
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
c864f4e312
commit
20c1f15dc0
|
@ -5,6 +5,7 @@ import { DoughnutController, LineController, BarController } from "chart.js";
|
|||
import { ArcElement, BarElement } from "chart.js";
|
||||
import { TimeScale, LinearScale } from "chart.js";
|
||||
import "chartjs-adapter-moment";
|
||||
import { FONT_COLOUR_DARK_MODE, FONT_COLOUR_LIGHT_MODE } from "../../pages/flows/FlowDiagram";
|
||||
|
||||
Chart.register(Legend, Tooltip);
|
||||
Chart.register(LineController, BarController, DoughnutController);
|
||||
|
@ -21,6 +22,8 @@ export abstract class AKChart<T> extends LitElement {
|
|||
@property()
|
||||
centerText?: string;
|
||||
|
||||
fontColour = FONT_COLOUR_LIGHT_MODE;
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [css`
|
||||
.container {
|
||||
|
@ -40,6 +43,17 @@ export abstract class AKChart<T> extends LitElement {
|
|||
this.chart.resize();
|
||||
}
|
||||
});
|
||||
const matcher = window.matchMedia("(prefers-color-scheme: light)");
|
||||
const handler = (ev?: MediaQueryListEvent) => {
|
||||
if (ev?.matches || matcher.matches) {
|
||||
this.fontColour = FONT_COLOUR_LIGHT_MODE;
|
||||
} else {
|
||||
this.fontColour = FONT_COLOUR_DARK_MODE;
|
||||
}
|
||||
this.chart?.update();
|
||||
};
|
||||
matcher.addEventListener("change", handler);
|
||||
handler();
|
||||
}
|
||||
|
||||
getChartType(): string {
|
||||
|
@ -59,6 +73,7 @@ export abstract class AKChart<T> extends LitElement {
|
|||
const fontSize = (height / 114).toFixed(2);
|
||||
chart.ctx.font = fontSize + "em RedHatText, Overpass, overpass, helvetica, arial, sans-serif";
|
||||
chart.ctx.textBaseline = "middle";
|
||||
chart.ctx.fillStyle = this.fontColour;
|
||||
|
||||
const textX = Math.round((width - chart.ctx.measureText(this.centerText).width) / 2);
|
||||
const textY = height / 2;
|
||||
|
|
|
@ -44,15 +44,19 @@ export class FlowDiagram extends LitElement {
|
|||
if (!this._flowSlug) return;
|
||||
this.flowSlug = this._flowSlug;
|
||||
});
|
||||
window.matchMedia("(prefers-color-scheme: light)").addEventListener("change", (ev) => {
|
||||
if (ev.matches) {
|
||||
const matcher = window.matchMedia("(prefers-color-scheme: light)");
|
||||
const handler = (ev?: MediaQueryListEvent) => {
|
||||
if (ev?.matches || matcher.matches) {
|
||||
this.fontColour = FONT_COLOUR_LIGHT_MODE;
|
||||
this.fill = FILL_LIGHT_MODE;
|
||||
} else {
|
||||
this.fontColour = FONT_COLOUR_DARK_MODE;
|
||||
this.fill = FILL_DARK_MODE;
|
||||
}
|
||||
});
|
||||
this.requestUpdate();
|
||||
};
|
||||
matcher.addEventListener("change", handler);
|
||||
handler();
|
||||
}
|
||||
|
||||
render(): TemplateResult {
|
||||
|
|
Reference in a new issue