From cfcde1dc5c94538009f7e24dd85f528f21a9fcf0 Mon Sep 17 00:00:00 2001 From: Evan Fiordeliso Date: Sat, 5 Jul 2025 00:05:50 -0400 Subject: [PATCH] Add random colors and designs to bookshelf --- src/types.ts | 8 + .../code-blocks/BookshelfCodeBlockView.svelte | 139 +++++++++++++----- src/ui/components/bookshelf/Book.svelte | 9 +- .../bookshelf/BookStackElement.svelte | 9 +- src/ui/components/bookshelf/bookshelf.scss | 3 + .../designs/book/BookColoredSpine.svelte | 19 ++- .../bookshelf/designs/book/BookDefault.svelte | 20 ++- .../designs/book/BookDualTopBands.svelte | 24 ++- .../designs/book/BookSplitBands.svelte | 24 ++- .../stack/BookStackColoredSpine.svelte | 20 ++- .../designs/stack/BookStackDefault.svelte | 18 ++- .../stack/BookStackDualTopBands.svelte | 24 ++- .../designs/stack/BookStackSplitBands.svelte | 24 ++- src/ui/components/charts/BookAndPages.svelte | 2 - src/ui/stores/metadata.svelte.ts | 32 ++-- src/utils/rand.ts | 7 + 16 files changed, 270 insertions(+), 112 deletions(-) create mode 100644 src/utils/rand.ts diff --git a/src/types.ts b/src/types.ts index 193297f..27dc91a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,3 +1,5 @@ +import type { IN_PROGRESS_STATE, READ_STATE, TO_BE_READ_STATE } from "./const"; + export interface Author { name: string; description: string; @@ -21,3 +23,9 @@ export interface Book { isbn: string; isbn13: string; } + +export type ToBeReadState = typeof TO_BE_READ_STATE; +export type InProgressState = typeof IN_PROGRESS_STATE; +export type ReadState = typeof READ_STATE; + +export type ReadingState = ToBeReadState | InProgressState | ReadState; diff --git a/src/ui/code-blocks/BookshelfCodeBlockView.svelte b/src/ui/code-blocks/BookshelfCodeBlockView.svelte index 3ea4490..b6a982d 100644 --- a/src/ui/code-blocks/BookshelfCodeBlockView.svelte +++ b/src/ui/code-blocks/BookshelfCodeBlockView.svelte @@ -1,131 +1,194 @@ + - + - - - + + - + diff --git a/src/ui/components/bookshelf/Book.svelte b/src/ui/components/bookshelf/Book.svelte index 4331643..cb0cacf 100644 --- a/src/ui/components/bookshelf/Book.svelte +++ b/src/ui/components/bookshelf/Book.svelte @@ -56,7 +56,6 @@ ); const verifiedWidth = $derived(widthCheck(width)); - const textColor = $derived(color.contrastColor.hex); {#if orientation} @@ -85,19 +84,19 @@ {/if} {:else if design === "split-bands"} - + {:else if design === "dual-top-bands"} - + {:else if design === "colored-spine"} - + {:else} - + {/if} diff --git a/src/ui/components/bookshelf/BookStackElement.svelte b/src/ui/components/bookshelf/BookStackElement.svelte index d1bba1e..3bdcad6 100644 --- a/src/ui/components/bookshelf/BookStackElement.svelte +++ b/src/ui/components/bookshelf/BookStackElement.svelte @@ -25,24 +25,23 @@ ? Color.fromName(colorRaw).darken() : Color.fromCSSColor(colorRaw), ); - const textColor = $derived(color.contrastColor.hex);
  • {#if design === "split-bands"} - + {:else if design === "dual-top-bands"} - + {:else if design === "colored-spine"} - + {:else} - + {/if} diff --git a/src/ui/components/bookshelf/bookshelf.scss b/src/ui/components/bookshelf/bookshelf.scss index 27ed3a1..97553cc 100644 --- a/src/ui/components/bookshelf/bookshelf.scss +++ b/src/ui/components/bookshelf/bookshelf.scss @@ -19,6 +19,7 @@ $bookEdge: 2px; display: inline-flex; flex-flow: column nowrap; list-style: none; + margin: 0; padding: 0; .bookshelf__bookStack-outOfStock { @@ -40,6 +41,8 @@ $bookEdge: 2px; .bookshelf__bookstack-elem { margin-inline-start: 0; + margin: 0; + padding: 0; .bookshelf__book-wrapper { width: 100%; diff --git a/src/ui/components/bookshelf/designs/book/BookColoredSpine.svelte b/src/ui/components/bookshelf/designs/book/BookColoredSpine.svelte index cf339e6..c8c7b80 100644 --- a/src/ui/components/bookshelf/designs/book/BookColoredSpine.svelte +++ b/src/ui/components/bookshelf/designs/book/BookColoredSpine.svelte @@ -1,19 +1,28 @@
    div { background: var(--book-color); - border-left: 2px solid color-mix(in srgb, var(--book-color), white 4%); - border-right: 2px solid color-mix(in srgb, var(--book-color), black 4%); + border-left: 2px solid var(--book-border-left-color); + border-right: 2px solid var(--book-border-right-color); &:before { content: " "; display: block; - background: color-mix(in srgb, var(--book-color), black 14%); + background: var(--book-background-color); height: 100%; width: calc(var(--book-width)); border-radius: 4px; diff --git a/src/ui/components/bookshelf/designs/book/BookDefault.svelte b/src/ui/components/bookshelf/designs/book/BookDefault.svelte index cb329f0..83ccc83 100644 --- a/src/ui/components/bookshelf/designs/book/BookDefault.svelte +++ b/src/ui/components/bookshelf/designs/book/BookDefault.svelte @@ -1,19 +1,27 @@
    div { background: var(--book-color); - border-left: 2px solid color-mix(in srgb, var(--book-color), white 4%); - border-right: 2px solid color-mix(in srgb, var(--book-color), black 4%); + border-left: 2px solid var(--book-border-left-color); + border-right: 2px solid var(--book-border-right-color); :global(.bookshelf__book-content) { height: calc(var(--book-width)); diff --git a/src/ui/components/bookshelf/designs/book/BookDualTopBands.svelte b/src/ui/components/bookshelf/designs/book/BookDualTopBands.svelte index 5fef2ee..5da2c7a 100644 --- a/src/ui/components/bookshelf/designs/book/BookDualTopBands.svelte +++ b/src/ui/components/bookshelf/designs/book/BookDualTopBands.svelte @@ -1,19 +1,29 @@
    div { background: var(--book-color); - border-left: 2px solid color-mix(in srgb, var(--book-color), white 4%); - border-right: 2px solid color-mix(in srgb, var(--book-color), black 4%); + border-left: 2px solid var(--book-border-left-color); + border-right: 2px solid var(--book-border-right-color); &:after { content: ""; display: block; - background: color-mix(in srgb, var(--book-color), black 14%); + background: var(--book-band-color); height: 20px; width: calc(100% + 4px); @@ -42,7 +52,7 @@ &:before { content: ""; display: block; - background: color-mix(in srgb, var(--book-color), black 14%); + background: var(--book-band-color); height: 20px; width: calc(100% + 4px); diff --git a/src/ui/components/bookshelf/designs/book/BookSplitBands.svelte b/src/ui/components/bookshelf/designs/book/BookSplitBands.svelte index 5fef2ee..5da2c7a 100644 --- a/src/ui/components/bookshelf/designs/book/BookSplitBands.svelte +++ b/src/ui/components/bookshelf/designs/book/BookSplitBands.svelte @@ -1,19 +1,29 @@
    div { background: var(--book-color); - border-left: 2px solid color-mix(in srgb, var(--book-color), white 4%); - border-right: 2px solid color-mix(in srgb, var(--book-color), black 4%); + border-left: 2px solid var(--book-border-left-color); + border-right: 2px solid var(--book-border-right-color); &:after { content: ""; display: block; - background: color-mix(in srgb, var(--book-color), black 14%); + background: var(--book-band-color); height: 20px; width: calc(100% + 4px); @@ -42,7 +52,7 @@ &:before { content: ""; display: block; - background: color-mix(in srgb, var(--book-color), black 14%); + background: var(--book-band-color); height: 20px; width: calc(100% + 4px); diff --git a/src/ui/components/bookshelf/designs/stack/BookStackColoredSpine.svelte b/src/ui/components/bookshelf/designs/stack/BookStackColoredSpine.svelte index 920d50f..9e567fd 100644 --- a/src/ui/components/bookshelf/designs/stack/BookStackColoredSpine.svelte +++ b/src/ui/components/bookshelf/designs/stack/BookStackColoredSpine.svelte @@ -1,18 +1,26 @@
    {@render children?.()} @@ -21,13 +29,13 @@ diff --git a/src/ui/components/bookshelf/designs/stack/BookStackDualTopBands.svelte b/src/ui/components/bookshelf/designs/stack/BookStackDualTopBands.svelte index c7437f0..8b54671 100644 --- a/src/ui/components/bookshelf/designs/stack/BookStackDualTopBands.svelte +++ b/src/ui/components/bookshelf/designs/stack/BookStackDualTopBands.svelte @@ -1,18 +1,28 @@
    {@render children?.()} @@ -21,13 +31,13 @@