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

View File

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

View File

@ -13,6 +13,10 @@ export const COLOR_NAMES = [
"pink", "pink",
] as const; ] 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 ColorName = (typeof COLOR_NAMES)[number];
export type RGB = [number, number, number]; export type RGB = [number, number, number];
@ -54,6 +58,18 @@ export class Color {
return new Color(this.r, this.g, this.b, alpha); 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 { static fromName(color: ColorName): Color {
const rawRgb = style const rawRgb = style
.getPropertyValue(`--color-${color}-rgb`) .getPropertyValue(`--color-${color}-rgb`)