Вот соответствующий фрагмент кода:
Код: Выделить всё
import { onMount } from 'svelte';
import { theme } from '$stores/global';
import type { ThemeColor, ThemeColorMap } from "$type/shared";
type ColorElement = {
[key in ThemeColor]?: HTMLDivElement | undefined;
};
export let colors: ThemeColorMap;
const colorKeys: ThemeColor[] = ['accent', 'info', 'neutral'];
let colorElements: ColorElement = {} as ColorElement; // This will store references to the div elements
function getColors(): ThemeColorMap {
if (typeof window === 'undefined') {
return {};
}
let newColors: ThemeColorMap = {};
Object.entries(colorElements).forEach(([key, element]) => {
if (element) {
newColors[key as ThemeColor] = getComputedStyle(element).backgroundColor;
}
});
return newColors;
}
onMount(() => {
colors = getColors();
});
theme.subscribe(() => {
colors = getColors();
});
{#each colorKeys as key}
{/each}
Хотя это работает, это выглядит немного хаотично, особенно со скрытыми элементами. Есть ли более прямой или эффективный способ доступа к текущим цветам темы DaisyUI в Svelte, особенно для использования с chroma-js?
Любые предложения будут оценены!
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-svelte