diff --git a/src/lib/components/DetachedPage/DetachedPage.svelte b/src/lib/components/DetachedPage/DetachedPage.svelte index 4520689..06bbc54 100644 --- a/src/lib/components/DetachedPage/DetachedPage.svelte +++ b/src/lib/components/DetachedPage/DetachedPage.svelte @@ -28,7 +28,11 @@ } - + diff --git a/src/lib/components/HeroCarousel/HeroBackground.svelte b/src/lib/components/HeroCarousel/HeroBackground.svelte index 2860812..dd96c5a 100644 --- a/src/lib/components/HeroCarousel/HeroBackground.svelte +++ b/src/lib/components/HeroCarousel/HeroBackground.svelte @@ -7,6 +7,7 @@ export let urls: Promise; export let index: number; export let hasFocus = true; + export let hideInterface = false; let visibleIndex = -2; let visibleIndexTimeout: ReturnType; @@ -75,7 +76,11 @@ {/if} -
-
-
+
+
+
diff --git a/src/lib/components/HeroCarousel/HeroCarousel.svelte b/src/lib/components/HeroCarousel/HeroCarousel.svelte index 5a07786..c7a8e10 100644 --- a/src/lib/components/HeroCarousel/HeroCarousel.svelte +++ b/src/lib/components/HeroCarousel/HeroCarousel.svelte @@ -6,12 +6,14 @@ import PageDots from '../HeroShowcase/PageDots.svelte'; import type { Readable, Writable } from 'svelte/store'; import { createEventDispatcher } from 'svelte'; + import classNames from 'classnames'; const dispatch = createEventDispatcher(); export let urls: Promise; - export let index = 0; + export let hideInterface = false; + let length = 0; $: urls.then((urls) => (length = urls.length)); @@ -68,8 +70,12 @@ bind:hasFocusWithin bind:focusIndex > - -
+ +
diff --git a/src/lib/components/MediaManager/FileList.svelte b/src/lib/components/MediaManager/FileList.svelte index 96dd857..cf1d3d7 100644 --- a/src/lib/components/MediaManager/FileList.svelte +++ b/src/lib/components/MediaManager/FileList.svelte @@ -5,13 +5,12 @@ import { formatSize } from '../../utils.js'; import type { FileResource } from '../../apis/combined-types'; import { scrollIntoView } from '../../selectable'; - import Container from '../../../Container.svelte'; export let files: Promise; export let handleSelectFile: (file: FileResource) => void; - +
{#await files} {#each new Array(5) as _, index}
@@ -47,4 +46,4 @@
No local files found
{/each} {/await} - +
diff --git a/src/lib/components/MediaManager/MMModal.svelte b/src/lib/components/MediaManager/MMModal.svelte index 1a7c0e8..ef66122 100644 --- a/src/lib/components/MediaManager/MMModal.svelte +++ b/src/lib/components/MediaManager/MMModal.svelte @@ -16,12 +16,19 @@ }} focusOnMount trapFocus - class={classNames('fixed inset-0 bg-stone-950/80 overflow-auto', { - 'opacity-0': hidden - })} + class={classNames( + 'fixed inset-0 overflow-x-hidden overflow-y-auto', + { + 'opacity-0': hidden + }, + // 'bg-[radial-gradient(169.40%_89.55%_at_94.76%_6.29%,rgba(0,0,0,0.40)_0%,rgba(255,255,255,0.00)_100%)]' + // 'bg-[radial-gradient(150%_50%_at_50%_-25%,_#DFAA2BF0_0%,_#073AFF00_100%),linear-gradient(0deg,_#1A1914FF_0%,_#1A1914FF_0%)]' + 'bg-secondary-900' + )} canFocusEmpty > -
- -
+
+ diff --git a/src/lib/components/MediaManager/ReleaseList.svelte b/src/lib/components/MediaManager/ReleaseList.svelte index 8c312a8..0e1f9c4 100644 --- a/src/lib/components/MediaManager/ReleaseList.svelte +++ b/src/lib/components/MediaManager/ReleaseList.svelte @@ -2,13 +2,12 @@ import { type RadarrRelease } from '../../apis/radarr/radarr-api'; import classNames from 'classnames'; import { useRequest } from '../../stores/data.store'; - import Button from '../Button.svelte'; - import { ChevronRight, DotFilled } from 'radix-icons-svelte'; - import { formatMinutesToTime, formatSize } from '../../utils'; import { derived } from 'svelte/store'; import ButtonGhost from '../Ghosts/ButtonGhost.svelte'; import type { SonarrRelease } from '../../apis/sonarr/sonarr-api'; import Container from '../../../Container.svelte'; + import MMReleaseListRow from '../MediaManagerModal/MMReleaseListRow.svelte'; + import AnimateScale from '../AnimateScale.svelte'; type Release = RadarrRelease | SonarrRelease; @@ -34,7 +33,7 @@ }); - + {#if $isLoading} {#each new Array(5) as _, index}
@@ -42,81 +41,74 @@
{/each} {:else} - {#each (showAll ? $releases : $filteredReleases)?.filter((r) => r.guid && r.indexerId) || [] as release, index} -
-
+ + + +
+ Title
- {#if hasFocus} -
- -
- {:else} -
- {formatSize(release?.size || 0)} -
- {/if} - - - - {/each} - {#if !showAll && $releases?.length} -
- -
- {:else if showAll} -
- -
- {/if} +
+
+ + +
+ Size +
+
+
+ + +
+ Peers +
+
+
+ + +
+ Quality +
+
+
+
+ + {#each $filteredReleases?.filter((r) => r.guid && r.indexerId) || [] as release, index} + + {/each} + +

All Releases

+ + {#each $releases?.filter((r) => r.guid && r.indexerId) || [] as release, index} + + {/each} + {/if} - +
+ +
+ + + + + + + + + diff --git a/src/lib/components/MediaManagerModal/MMMainLayout.svelte b/src/lib/components/MediaManagerModal/MMMainLayout.svelte index 95522a2..3039099 100644 --- a/src/lib/components/MediaManagerModal/MMMainLayout.svelte +++ b/src/lib/components/MediaManagerModal/MMMainLayout.svelte @@ -1,31 +1,78 @@ - -
-
-
- +
+
+
+
+ +
+
+ +
-
- +
+

Downloads

+
- -
-

Releases

+
+

+ Releases +

+

+ Local Files +

+
+ + (activeTab = 'releases')} + class={classNames('transition-all row-start-1 col-start-1 px-6 -mx-6', { + 'opacity-50 -translate-x-full': activeTab !== 'releases' + })} + > -
-
-
-

Local Files

- -
- -
-

Downloads

- -
-
+
+ (activeTab = 'local-files')} + class={classNames('transition-all row-start-1 col-start-1 px-6 -mx-6', { + 'opacity-50 translate-x-full': activeTab !== 'local-files' + })} + > + + + + + + + + + + + + + + + + + + +
diff --git a/src/lib/components/MediaManagerModal/MMReleaseListRow.svelte b/src/lib/components/MediaManagerModal/MMReleaseListRow.svelte new file mode 100644 index 0000000..deef71f --- /dev/null +++ b/src/lib/components/MediaManagerModal/MMReleaseListRow.svelte @@ -0,0 +1,103 @@ + + + + + +
+ +

+ {formatMinutesToTime(release.ageMinutes || 0)} ago +

+

{release.title}

+ + {formatSize(release.size || 0)} + + +
+ {release.seeders} / {release.leechers} +
+ + +
+ {release.quality?.quality?.name} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + diff --git a/src/lib/components/PersonCard/PersonCard.svelte b/src/lib/components/PersonCard/PersonCard.svelte index 7a56736..661bab8 100644 --- a/src/lib/components/PersonCard/PersonCard.svelte +++ b/src/lib/components/PersonCard/PersonCard.svelte @@ -17,7 +17,7 @@ i.UserData?.Played === false) ); - const { send: addSeriesToSonarr, isFetching: addSeriesToSonarrFetching } = useActionRequest( - sonarrApi.addSeriesToSonarr - ); - - let selectedTmdbEpisode: TmdbSeasonEpisode | undefined; + let hideInterface = false; const episodeCards = useRegistrar(); - let scrollTop: number; - $: showEpisodeInfo = false; // scrollTop > 140; + + modalStack.top.subscribe((modal) => { + hideInterface = !!modal; + }); @@ -76,52 +74,22 @@ ?.map((i) => TMDB_IMAGES_ORIGINAL + i.file_path) .slice(0, 5) || [] )} + {hideInterface} >
{#await $tmdbSeries then series} - {#if showEpisodeInfo && selectedTmdbEpisode} - {@const episode = selectedTmdbEpisode} -
= 15 - } - )} - > - {episode.name} -
-
-

- {episode.runtime} Minutes -

- - -

- {episode.vote_average?.toFixed(1)} TMDB -

-
-
- {episode.overview} -
- {:else if series} + {#if series}
= 15 + 'text-3xl sm:text-4xl 2xl:text-5xl': series.name?.length || 0 >= 15 } )} > - {series?.name} + {series.name}
- - - {#await $tmdbSeries then series} - -
Show Cast
- {#each series?.aggregate_credits?.cast?.slice(0, 15) || [] as credit} - - {/each} -
- {/await} - {#await $recommendations then recommendations} - -
Recommendations
- {#each recommendations || [] as recommendation} - - {/each} -
- {/await} -
- {#await $tmdbSeries then series} - -

More Information

-
-
-
-

Created By

- {#each series?.created_by || [] as creator} -
{creator.name}
- {/each} -
-
-

Network

-
{series?.networks?.[0]?.name}
-
-
-
-
-

Language

-
{series?.spoken_languages?.[0]?.name}
-
-
-

Last Air Date

-
{series?.last_air_date}
-
-
-
+
+ + + {#await $tmdbSeries then series} + +
Show Cast
+ {#each series?.aggregate_credits?.cast?.slice(0, 15) || [] as credit} + + {/each} +
+ {/await} + {#await $recommendations then recommendations} + +
Recommendations
+ {#each recommendations || [] as recommendation} + + {/each} +
+ {/await}
- {/await} + {#await $tmdbSeries then series} + +

More Information

+
+
+
+

Created By

+ {#each series?.created_by || [] as creator} +
{creator.name}
+ {/each} +
+
+

Network

+
{series?.networks?.[0]?.name}
+
+
+
+
+

Language

+
{series?.spoken_languages?.[0]?.name}
+
+
+

Last Air Date

+
{series?.last_air_date}
+
+
+
+
+ {/await} +
diff --git a/tailwind.config.js b/tailwind.config.js index b12278c..3a3b5e4 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -20,30 +20,30 @@ export default { 'highlight-foreground': '#f6c304', 'highlight-background': '#161517', primary: { - 50: '#FDF8EC', - 100: '#FBEED5', - 200: '#F7DEAB', - 300: '#F3CD81', - 400: '#EFBC57', - 500: '#EBAB2E', - 600: '#CD8F14', - 700: '#9A6B0F', - 800: '#66480A', - 900: '#332405', - 950: '#1C1403' + 50: 'hsl(40, 80%, 95%)', //''#fcf9ea', + 100: 'hsl(40, 80%, 90%)', //''#faefc7', + 200: 'hsl(40, 80%, 80%)', //''#f6dc92', + 300: 'hsl(40, 80%, 70%)', //''#f0c254', + 400: 'hsl(40, 80%, 65%)', //''#ebab2e', + 500: 'hsl(40, 80%, 55%)', //'#da9018', + 600: 'hsl(40, 80%, 24%)', //'#bc6e12', + 700: 'hsl(40, 80%, 18%)', //'#964e12', + 800: 'hsl(40, 80%, 12%)', //'#7d3f16', + 900: 'hsl(40, 80%, 7%)', //'#6a3419', + 950: 'hsl(40, 80%, 4%)' //'#3e1a0a' }, secondary: { - 50: '#E6EAEA', - 100: '#CCD6D6', - 200: '#99ADAD', - 300: '#698282', - 400: '#3E4C4C', - 500: '#0a0807', - 600: '#101414', - 700: '#211a17', - 800: '#171310', - 900: '#0a0807', - 950: '#020303' + 50: 'hsl(40, 12%, 95%)', + 100: 'hsl(40, 12%, 90%)', + 200: 'hsl(40, 12%, 80%)', + 300: 'hsl(40, 12%, 70%)', + 400: 'hsl(40, 12%, 65%)', + 500: 'hsl(40, 12%, 55%)', // #0a0807 + 600: 'hsl(40, 8%, 30%)', + 700: 'hsl(40, 8%, 20%)', + 800: 'hsl(40, 8%, 12%)', //'#1a1814', //'#171310', + 900: 'hsl(40, 8%, 7%)', //'#14130f', + 950: 'hsl(40, 8%, 4%)' //'#020303' } }, keyframes: {