mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-05 19:24:39 +00:00
81 lines
2.0 KiB
TypeScript
81 lines
2.0 KiB
TypeScript
import type { Tooltip } from "layerchart";
|
|
import {
|
|
getContext,
|
|
setContext,
|
|
type Component,
|
|
type ComponentProps,
|
|
type Snippet,
|
|
} from "svelte";
|
|
|
|
export const THEMES = { light: "", dark: ".dark" } as const;
|
|
|
|
export type ChartConfig = {
|
|
[k in string]: {
|
|
label?: string;
|
|
icon?: Component;
|
|
} & (
|
|
| { color?: string; theme?: never }
|
|
| { color?: never; theme: Record<keyof typeof THEMES, string> }
|
|
);
|
|
};
|
|
|
|
export type ExtractSnippetParams<T> = T extends Snippet<[infer P]> ? P : never;
|
|
|
|
export type TooltipPayload = ExtractSnippetParams<
|
|
ComponentProps<typeof Tooltip.Root>["children"]
|
|
>["payload"][number];
|
|
|
|
export function getPayloadConfigFromPayload(
|
|
config: ChartConfig,
|
|
payload: TooltipPayload,
|
|
key: string,
|
|
) {
|
|
if (typeof payload !== "object" || payload === null) return undefined;
|
|
|
|
const payloadPayload =
|
|
"payload" in payload &&
|
|
typeof payload.payload === "object" &&
|
|
payload.payload !== null
|
|
? payload.payload
|
|
: undefined;
|
|
|
|
let configLabelKey: string = key;
|
|
|
|
if (payload.key === key) {
|
|
configLabelKey = payload.key;
|
|
} else if (payload.name === key) {
|
|
configLabelKey = payload.name;
|
|
} else if (
|
|
key in payload &&
|
|
typeof payload[key as keyof typeof payload] === "string"
|
|
) {
|
|
configLabelKey = payload[key as keyof typeof payload] as string;
|
|
} else if (
|
|
payloadPayload !== undefined &&
|
|
key in payloadPayload &&
|
|
typeof payloadPayload[key as keyof typeof payloadPayload] === "string"
|
|
) {
|
|
configLabelKey = payloadPayload[
|
|
key as keyof typeof payloadPayload
|
|
] as string;
|
|
}
|
|
|
|
return configLabelKey in config
|
|
? config[configLabelKey]
|
|
: config[key as keyof typeof config];
|
|
}
|
|
|
|
type ChartContextValue = {
|
|
config: ChartConfig;
|
|
};
|
|
|
|
const chartContextKey = Symbol("chart-context");
|
|
|
|
export function setChartContext(value: ChartContextValue) {
|
|
return setContext(chartContextKey, value);
|
|
}
|
|
|
|
export function useChart() {
|
|
return getContext<ChartContextValue>(chartContextKey);
|
|
}
|