Fix colors on bookshelf

This commit is contained in:
Evan Fiordeliso 2025-07-04 22:40:38 -04:00
parent 5c73b8871c
commit 86ffa3753f
3 changed files with 28 additions and 7 deletions

View File

@ -1,6 +1,11 @@
<script lang="ts">
import Self from "./Book.svelte";
import { Color, COLOR_NAMES, type ColorName } from "@utils/color";
import {
Color,
COLOR_NAMES,
isColorName,
type ColorName,
} from "@utils/color";
import BookTiltedDefault from "./designs/tilted/BookTiltedDefault.svelte";
import BookOnDisplay from "./designs/book/BookOnDisplay.svelte";
import BookText from "./BookText.svelte";
@ -45,8 +50,8 @@
}
const color = $derived(
colorRaw in COLOR_NAMES
? Color.fromName(colorRaw as ColorName)
isColorName(colorRaw)
? Color.fromName(colorRaw).darken()
: Color.fromCSSColor(colorRaw),
);
@ -61,7 +66,7 @@
{title}
{subtitle}
{author}
color={colorRaw}
color={color.hex}
{design}
{height}
{width}

View File

@ -1,5 +1,5 @@
<script lang="ts">
import { Color, COLOR_NAMES, type ColorName } from "@utils/color";
import { Color, isColorName, type ColorName } from "@utils/color";
import BookText from "./BookText.svelte";
import BookStackColoredSpine from "./designs/stack/BookStackColoredSpine.svelte";
import BookStackDefault from "./designs/stack/BookStackDefault.svelte";
@ -21,8 +21,8 @@
}: Props = $props();
const color = $derived(
colorRaw in COLOR_NAMES
? Color.fromName(colorRaw as ColorName)
isColorName(colorRaw)
? Color.fromName(colorRaw).darken()
: Color.fromCSSColor(colorRaw),
);
const textColor = $derived(color.contrastColor.hex);

View File

@ -13,6 +13,10 @@ export const COLOR_NAMES = [
"pink",
] as const;
export function isColorName(color: string): color is ColorName {
return COLOR_NAMES.includes(color as ColorName);
}
export type ColorName = (typeof COLOR_NAMES)[number];
export type RGB = [number, number, number];
@ -54,6 +58,18 @@ export class Color {
return new Color(this.r, this.g, this.b, alpha);
}
darken(amount?: number): Color {
return new Color(
...chroma([this.r, this.g, this.b]).darken(amount).rgb()
);
}
lighten(amount?: number): Color {
return new Color(
...chroma([this.r, this.g, this.b]).brighten(amount).rgb()
);
}
static fromName(color: ColorName): Color {
const rawRgb = style
.getPropertyValue(`--color-${color}-rgb`)