"use client"; import { SidebarTrigger } from "@/components/ui/sidebar"; import { createContext, Dispatch, MouseEventHandler, ReactNode, SetStateAction, useContext, useEffect, useState } from "react"; import { useLiveQuery } from "dexie-react-hooks"; import { addProject, db, deleteProject } from "@/lib/db"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { ALargeSmallIcon, ArrowDownAZIcon, ArrowDownIcon, ArrowUpAZIcon, ArrowUpIcon, CalendarArrowDownIcon, CalendarArrowUpIcon, CalendarIcon, ClockArrowDownIcon, ClockArrowUpIcon, ClockIcon, CopyIcon, EditIcon, EllipsisIcon, Grid2X2, Grid2X2CheckIcon, Grid2x2X, Grid2X2XIcon, Grid2x2XIcon, InfoIcon, ListCheckIcon, PencilIcon, PlusIcon, TrashIcon } from "lucide-react"; import { Toggle } from "@/components/ui/toggle"; import Search from "@/components/search"; import { useIsMobile } from "@/hooks/use-mobile"; import { AspectRatio } from "@/components/ui/aspect-ratio"; import { Card } from "@/components/ui/card"; import Project from "@/types/Project"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { z } from "zod"; import { useForm, UseFormReturn } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Textarea } from "@/components/ui/textarea"; import { generateUUID } from "@/lib/uuid"; import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog"; import { useDebounce } from "use-debounce"; import { Checkbox } from "@/components/ui/checkbox"; import { cn } from "@/lib/utils"; import { Tooltip, TooltipContent } from "@/components/ui/tooltip"; import { TooltipTrigger } from "@radix-ui/react-tooltip"; import { Sheet, SheetClose, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet"; import { Separator } from "@/components/ui/separator"; import StaticSidebarTrigger from "@/components/static-sidebar-trigger"; import SidebarTriggerAdjustable from "@/components/sidebar-trigger-adjustable"; import ScrollFadingTitle from "@/components/scroll-fading-title"; import { fa } from "zod/v4/locales"; import AscendingCard from "@/components/ascending-card"; type SortingType = "byCreationDate" | "byEditDate" | "byTitle"; const defaultSortingType: SortingType = "byCreationDate"; const sortProjects = (a: Project, b: Project, sortingType: SortingType) => { switch (sortingType) { case "byCreationDate": return b.creationDate - a.creationDate; case "byEditDate": return b.editDate - a.editDate; case "byTitle": return a.title.localeCompare(b.title); } }; const sortingTypeToString = (sortingType: SortingType) => { switch (sortingType) { case "byCreationDate": return "By Creation Date"; case "byEditDate": return "By Edit Date"; case "byTitle": return "By Title"; } }; const SortingTypeIcon = ({ sortingType }: { sortingType: SortingType }) => { switch (sortingType) { case "byCreationDate": return ; case "byEditDate": return ; case "byTitle": return ; } }; const SortingTypeMenuItem = ({ sortingType, currentSortingType, setSortingType }: { sortingType: SortingType, currentSortingType: SortingType setSortingType: Dispatch>, }) => ( setSortingType(sortingType)}> {sortingTypeToString(sortingType)} ); interface SelectContextData { selecting: boolean; setSelecting: Dispatch>; selectedProjects: string[]; setSelectedProjects: Dispatch>; }; const SelectContext = createContext(null); const useSelectContext = (): SelectContextData => { const context = useContext(SelectContext); if (!context) throw new Error("SelectContext is not provided"); return context; }; const ProjectInfoFormSchema = z.object({ title: z.string().nonempty("Title cannot be empty"), description: z.string().or(z.literal("")) }); const ProjectInfoForm = ({ form }: { form: UseFormReturn> }) => ( <> ( Title )} /> ( Description