Superpowered to do lists. No signup required.

Compare changes

Choose any two refs to compare.

Changed files
+4 -8
src
+3 -3
src/routes/+layout.svelte
··· 3 import { onMount, type Snippet } from "svelte"; 4 import { page } from "$app/state"; 5 import { goto } from "$app/navigation"; 6 - import { fade, slide } from "svelte/transition"; 7 import toast, { Toaster } from "svelte-french-toast"; 8 import { persisted, pinned_list } from "$lib/stores.svelte"; 9 ··· 16 let theme = persisted<string>("theme", "dark"); 17 let is_menu_open = $state(false); 18 let theme_style = $derived(theme.value === "dark" 19 - ? "text-white absolute top-0 z-[-2] h-screen w-screen bg-[#000000] bg-[radial-gradient(#1e293b_1px,#00091d_1px)] bg-size-[20px_20px]" 20 : "text-black absolute inset-0 -z-10 h-full w-full bg-white bg-[radial-gradient(#e5e7eb_1px,transparent_1px)] bg-size-[16px_16px]" 21 ); 22 ··· 40 <div class="flex flex-col justify-start gap-4 pointer-events-auto"> 41 {#if is_menu_open} 42 <menu 43 - transition:slide|global={{ duration: 250 }} 44 class={`${theme.value === "light" ? "border-black" : "border-[#00091d]"} w-fit border z-50 flex flex-col items-start gap-2 h-fit p-2 rounded-xl bg-white`} 45 > 46 <button
··· 3 import { onMount, type Snippet } from "svelte"; 4 import { page } from "$app/state"; 5 import { goto } from "$app/navigation"; 6 + import { fade } from "svelte/transition"; 7 import toast, { Toaster } from "svelte-french-toast"; 8 import { persisted, pinned_list } from "$lib/stores.svelte"; 9 ··· 16 let theme = persisted<string>("theme", "dark"); 17 let is_menu_open = $state(false); 18 let theme_style = $derived(theme.value === "dark" 19 + ? "text-white absolute top-0 z-[-2] h-screen w-screen bg-[#000000] bg-[radial-gradient(#ffffff33_1px,#00091d_1px)] bg-size-[20px_20px]" 20 : "text-black absolute inset-0 -z-10 h-full w-full bg-white bg-[radial-gradient(#e5e7eb_1px,transparent_1px)] bg-size-[16px_16px]" 21 ); 22 ··· 40 <div class="flex flex-col justify-start gap-4 pointer-events-auto"> 41 {#if is_menu_open} 42 <menu 43 + transition:fade={{ duration: 150 }} 44 class={`${theme.value === "light" ? "border-black" : "border-[#00091d]"} w-fit border z-50 flex flex-col items-start gap-2 h-fit p-2 rounded-xl bg-white`} 45 > 46 <button
+1 -5
src/routes/[id]/+page.svelte
··· 5 import toast from "svelte-french-toast"; 6 import { formatSecondsToDuration, generateId } from "$lib/utils"; 7 import { local_lists, pinned_list, type List, type Task } from "$lib/stores.svelte"; 8 - import { slide } from "svelte/transition"; 9 10 let is_menu_open = $state(false); 11 let list : List | undefined = $state(local_lists.value!.find((l) => l.id === page.params.id)); ··· 131 </div> 132 133 {#if is_menu_open} 134 - <menu 135 - transition:slide|global={{ duration: 250 }} 136 - class="absolute flex flex-col gap-2 w-fit h-fit top-20 p-2 bg-white border border-black rounded-lg text-black! text-lg!" 137 - > 138 {#each user_lists as user_list : List (user_list.id)} 139 <button 140 onclick={() => {
··· 5 import toast from "svelte-french-toast"; 6 import { formatSecondsToDuration, generateId } from "$lib/utils"; 7 import { local_lists, pinned_list, type List, type Task } from "$lib/stores.svelte"; 8 9 let is_menu_open = $state(false); 10 let list : List | undefined = $state(local_lists.value!.find((l) => l.id === page.params.id)); ··· 130 </div> 131 132 {#if is_menu_open} 133 + <menu class="absolute flex flex-col gap-2 w-fit h-fit top-20 p-2 bg-white border border-black rounded-lg text-black! text-lg!"> 134 {#each user_lists as user_list : List (user_list.id)} 135 <button 136 onclick={() => {