Skip to content

Commit

Permalink
Add highlight to selected episode, add user avatar
Browse files Browse the repository at this point in the history
  • Loading branch information
sinnedpenguin committed Nov 11, 2023
1 parent 082bfdc commit 62bff2a
Show file tree
Hide file tree
Showing 25 changed files with 452 additions and 29 deletions.
23 changes: 13 additions & 10 deletions src/lib/components/details/seasons.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<script lang="ts">
import type { TV } from "$lib/types/tv";
import type { TV } from "$lib/types/tv";
import { episode } from "$lib/stores/episode";
import { Button } from "../ui/button";
import { selectedEpisode } from "$lib/stores/selectedEpisode";
import { Button } from "../ui/button";
export let data: {
details?: TV;
Expand All @@ -14,21 +15,23 @@
const selectEpisode = (id: number) => {
episode.setEpisode(id);
selectedEpisode.setSelectedEpisode(id);
};
$: selectedEpisodeId = $selectedEpisode;
</script>

{#if watchData}
<div class="container grid items-center">
<div class="flex space-x-1 overflow-x-auto">
{#each watchData.seasons as season (season.season)}
<Button
variant="outline"
class="whitespace-nowrap hover:text-white"
on:click={() => selectedSeason = season.season}
>
S{season.season}
</Button>
variant="outline"
class="whitespace-nowrap hover:text-white {selectedSeason === season.season ? 'text-primary' : ''}"
on:click={() => selectedSeason = season.season}
>
S{season.season}
</Button>
{/each}
</div>
</div>
Expand All @@ -38,8 +41,8 @@
<div class="my-8">
<div class="grid grid-cols-1 gap-2">
{#each season.episodes as episode (season.season + '-' + episode.episode)}
<a href={`/${mode === 'watch' ? 'watch' : 'tv'}/watch/${details?.id}`} on:click={() => selectEpisode(episode.id)}>
<div class="flex items-start space-x-4 hover:bg-secondary rounded p-2">
<a href={`/${mode === 'watch' ? 'watch' : 'tv'}/watch/${details?.id}`} on:click={() => selectEpisode(episode.id)}>
<div class={`flex items-start space-x-4 rounded p-2 ${selectedEpisodeId === episode.id ? 'bg-secondary' : 'hover:bg-secondary'}`}>
{#if episode.img && episode.img.mobile}
<img class="w-36 h-20 object-cover sm:w-64 sm:h-36" src={episode.img.mobile} alt={episode.title}/>
{:else}
Expand Down
9 changes: 5 additions & 4 deletions src/lib/components/main-nav.svelte
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<script>
import Search from "./search.svelte";
import Button from "./ui/button/button.svelte";
import { User } from "lucide-svelte";
import { page } from '$app/stores';
import Avatar from "./user/avatar.svelte";
const navItems = [
{ href: '/home', label: 'Home' },
{ href: '/movie', label: 'Movies' },
Expand All @@ -17,10 +17,11 @@
<nav class="hidden items-center space-x-2 md:flex">
{#each navItems as item (item.href)}
<a href={item.href}>
<Button variant="ghost">
<Button variant="ghost" class="p-3">
<span class={current === item.href && current !== '/' ? 'text-primary' : ''}>{item.label}</span>
</Button>
</a>
{/each}
<Search />
</nav>
<Avatar />
</nav>
10 changes: 0 additions & 10 deletions src/lib/components/site-footer.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,5 @@
STREAMit! does not store any files on our server; we only link to the media hosted on 3rd-party services.
</p>
</span>
<span class="block text-center text-sm text-muted-foreground mt-4">
Logo by:
<a
target="_blank"
href="https://www.instagram.com/odd_kids_club"
class="hover:underline" rel="noreferrer"
>
oddmoon
</a>
</span>
</div>
</footer>
12 changes: 12 additions & 0 deletions src/lib/components/site-header.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@
<div class="container flex h-16 items-center space-x-4 sm:justify-between sm:space-x-4">
<a href="/home">
<nav class="flex items-center">
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class=" h-6 w-6 text-primary mx-2"
>
<polygon points="5 3 19 12 5 21 5 3"></polygon>
</svg>
<span class="font-bold sm:inline text-primary">STREAM<span class="text-white">it!</span></span>
</nav>
</a>
Expand Down
19 changes: 19 additions & 0 deletions src/lib/components/ui/avatar/avatar-fallback.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<script lang="ts">
import { Avatar as AvatarPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
type $$Props = AvatarPrimitive.FallbackProps;
let className: $$Props["class"] = undefined;
export { className as class };
</script>

<AvatarPrimitive.Fallback
class={cn(
"flex h-full w-full items-center justify-center rounded-full bg-muted",
className
)}
{...$$restProps}
>
<slot />
</AvatarPrimitive.Fallback>
18 changes: 18 additions & 0 deletions src/lib/components/ui/avatar/avatar-image.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<script lang="ts">
import { Avatar as AvatarPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
type $$Props = AvatarPrimitive.ImageProps;
let className: $$Props["class"] = undefined;
export let src: $$Props["src"] = undefined;
export let alt: $$Props["alt"] = undefined;
export { className as class };
</script>

<AvatarPrimitive.Image
{src}
{alt}
class={cn("aspect-square h-full w-full", className)}
{...$$restProps}
/>
21 changes: 21 additions & 0 deletions src/lib/components/ui/avatar/avatar.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<script lang="ts">
import { Avatar as AvatarPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
type $$Props = AvatarPrimitive.Props;
let className: $$Props["class"] = undefined;
export let delayMs: $$Props["delayMs"] = undefined;
export { className as class };
</script>

<AvatarPrimitive.Root
{delayMs}
class={cn(
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
className
)}
{...$$restProps}
>
<slot />
</AvatarPrimitive.Root>
13 changes: 13 additions & 0 deletions src/lib/components/ui/avatar/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import Root from "./avatar.svelte";
import Image from "./avatar-image.svelte";
import Fallback from "./avatar-fallback.svelte";

export {
Root,
Image,
Fallback,
//
Root as Avatar,
Image as AvatarImage,
Fallback as AvatarFallback
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
import { Check } from "lucide-svelte";
type $$Props = DropdownMenuPrimitive.CheckboxItemProps;
type $$Events = DropdownMenuPrimitive.CheckboxItemEvents;
let className: $$Props["class"] = undefined;
export let checked: $$Props["checked"] = undefined;
export { className as class };
</script>

<DropdownMenuPrimitive.CheckboxItem
bind:checked
class={cn(
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
className
)}
{...$$restProps}
on:click
on:keydown
on:focusin
on:focusout
on:pointerdown
on:pointerleave
on:pointermove
>
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
<DropdownMenuPrimitive.CheckboxIndicator>
<Check class="h-4 w-4" />
</DropdownMenuPrimitive.CheckboxIndicator>
</span>
<slot />
</DropdownMenuPrimitive.CheckboxItem>
25 changes: 25 additions & 0 deletions src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
import { cn, flyAndScale } from "$lib/utils";
type $$Props = DropdownMenuPrimitive.ContentProps;
type $$Events = DropdownMenuPrimitive.ContentEvents;
let className: $$Props["class"] = undefined;
export let transition: $$Props["transition"] = flyAndScale;
export let transitionConfig: $$Props["transitionConfig"] = undefined;
export { className as class };
</script>

<DropdownMenuPrimitive.Content
{transition}
{transitionConfig}
class={cn(
"z-50 min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-md focus:outline-none",
className
)}
{...$$restProps}
on:keydown
>
<slot />
</DropdownMenuPrimitive.Content>
31 changes: 31 additions & 0 deletions src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
type $$Props = DropdownMenuPrimitive.ItemProps & {
inset?: boolean;
};
type $$Events = DropdownMenuPrimitive.ItemEvents;
let className: $$Props["class"] = undefined;
export let inset: $$Props["inset"] = undefined;
export { className as class };
</script>

<DropdownMenuPrimitive.Item
class={cn(
"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
inset && "pl-8",
className
)}
{...$$restProps}
on:click
on:keydown
on:focusin
on:focusout
on:pointerdown
on:pointerleave
on:pointermove
>
<slot />
</DropdownMenuPrimitive.Item>
19 changes: 19 additions & 0 deletions src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
type $$Props = DropdownMenuPrimitive.LabelProps & {
inset?: boolean;
};
let className: $$Props["class"] = undefined;
export let inset: $$Props["inset"] = undefined;
export { className as class };
</script>

<DropdownMenuPrimitive.Label
class={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)}
{...$$restProps}
>
<slot />
</DropdownMenuPrimitive.Label>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
type $$Props = DropdownMenuPrimitive.RadioGroupProps;
export let value: $$Props["value"] = undefined;
</script>

<DropdownMenuPrimitive.RadioGroup {...$$restProps} bind:value>
<slot />
</DropdownMenuPrimitive.RadioGroup>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
import { Circle } from "lucide-svelte";
type $$Props = DropdownMenuPrimitive.RadioItemProps;
type $$Events = DropdownMenuPrimitive.RadioItemEvents;
let className: $$Props["class"] = undefined;
export let value: $$Props["value"];
export { className as class };
</script>

<DropdownMenuPrimitive.RadioItem
class={cn(
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
className
)}
{value}
{...$$restProps}
on:click
on:keydown
on:focusin
on:focusout
on:pointerdown
on:pointerleave
on:pointermove
>
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
<DropdownMenuPrimitive.RadioIndicator>
<Circle class="h-2 w-2 fill-current" />
</DropdownMenuPrimitive.RadioIndicator>
</span>
<slot />
</DropdownMenuPrimitive.RadioItem>
14 changes: 14 additions & 0 deletions src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
import { cn } from "$lib/utils";
type $$Props = DropdownMenuPrimitive.SeparatorProps;
let className: $$Props["class"] = undefined;
export { className as class };
</script>

<DropdownMenuPrimitive.Separator
class={cn("-mx-1 my-1 h-px bg-muted", className)}
{...$$restProps}
/>
16 changes: 16 additions & 0 deletions src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<script lang="ts">
import { cn } from "$lib/utils";
import type { HTMLAttributes } from "svelte/elements";
type $$Props = HTMLAttributes<HTMLSpanElement>;
let className: $$Props["class"] = undefined;
export { className as class };
</script>

<span
class={cn("ml-auto text-xs tracking-widest opacity-60", className)}
{...$$restProps}
>
<slot />
</span>
Loading

0 comments on commit 62bff2a

Please sign in to comment.