From 1006682b0cd4c7d037310af2d259fa4c15399e65 Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Fri, 22 Nov 2024 13:51:58 +0300 Subject: [PATCH 01/94] add swiper --- package.json | 1 + pnpm-lock.yaml | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/package.json b/package.json index e0b7757..56e2461 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "react-to-print": "^2.15.1", "recharts": "^2.12.7", "sonner": "^1.5.0", + "swiper": "^11.1.15", "tailwind-merge": "^2.5.4", "theme-change": "^2.5.0", "vaul": "^0.9.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 991af01..30e4a62 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -161,6 +161,9 @@ importers: sonner: specifier: ^1.5.0 version: 1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + swiper: + specifier: ^11.1.15 + version: 11.1.15 tailwind-merge: specifier: ^2.5.4 version: 2.5.4 @@ -2988,6 +2991,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + swiper@11.1.15: + resolution: {integrity: sha512-IzWeU34WwC7gbhjKsjkImTuCRf+lRbO6cnxMGs88iVNKDwV+xQpBCJxZ4bNH6gSrIbbyVJ1kuGzo3JTtz//CBw==} + engines: {node: '>= 4.7.0'} + tailwind-merge@2.5.4: resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} @@ -5858,6 +5865,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + swiper@11.1.15: {} + tailwind-merge@2.5.4: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.14): From e454435e905f26bc7b183d3e96a334bdeb82f172 Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Fri, 22 Nov 2024 17:49:40 +0300 Subject: [PATCH 02/94] add repositories section --- .../-components/RepositoriesSection.tsx | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 src/routes/-components/RepositoriesSection.tsx diff --git a/src/routes/-components/RepositoriesSection.tsx b/src/routes/-components/RepositoriesSection.tsx new file mode 100644 index 0000000..e4b1f00 --- /dev/null +++ b/src/routes/-components/RepositoriesSection.tsx @@ -0,0 +1,164 @@ +import { Link } from "@tanstack/react-router"; +import { useMemo, useState } from "react"; +import { Swiper, SwiperSlide } from "swiper/react"; + +import "swiper/css"; + +import { cn } from "@/components/lib/utils"; + +export type Project = { + repository: string; + description: string; + languages: string[]; + issuesCount: number; + link: string; +}; + +const ALL_LANGS = "All"; + +type Props = { + projects: Project[]; +}; +export default function RepositoriesSection({ projects }: Props) { + const [selectedLanguage, setSelectedLanguage] = useState(ALL_LANGS); + const [searchTerm, setSearchTerm] = useState(""); + + const filterLanguages = useMemo( + () => [ALL_LANGS, ...new Set(projects.flatMap((p) => p.languages))], + [projects], + ); + + const searchedProjects = useMemo(() => { + if (selectedLanguage === ALL_LANGS && searchTerm.length < 2) { + return projects; + } + + return projects.filter((p) => { + const matchesSearchTerm = + p.repository.toLowerCase().includes(searchTerm.toLowerCase()) || + p.description.toLowerCase().includes(searchTerm.toLowerCase()); + + if (selectedLanguage === ALL_LANGS) { + return matchesSearchTerm; + } + + return matchesSearchTerm && p.languages.includes(selectedLanguage); + }); + }, [projects, searchTerm, selectedLanguage]); + + return ( +
+

+ Access the largest directory of open-source projects +

+

+ Use advanced filters to find a project you love and make your first + commit message. +

+ +
+
+
+ + + + + { + const value = e.target.value.trim(); + if (value !== searchTerm) { + setSearchTerm(value); + } + }} + /> +
+ +
+ + {filterLanguages.map((lang) => ( + + + + ))} + +
+ +
+ {searchedProjects.map((project) => ( +
+ + + + +
+ + {project.issuesCount} Issues + +
+
+

+ {project.repository} +

+

{project.description}

+

+ Lang: {project.languages.join(", ")} +

+
+ + + Learn more + +
+ ))} +
+
+
+
+ ); +} From de80692a2b40b5227aac72455ef0d19cda269260 Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Fri, 22 Nov 2024 17:50:30 +0300 Subject: [PATCH 03/94] add projects data --- src/data/projects.ts | 62 +++++++++++++++++++++++++++++ src/routes/-components/HomePage.tsx | 4 ++ 2 files changed, 66 insertions(+) create mode 100644 src/data/projects.ts diff --git a/src/data/projects.ts b/src/data/projects.ts new file mode 100644 index 0000000..6b46152 --- /dev/null +++ b/src/data/projects.ts @@ -0,0 +1,62 @@ +import { Project } from "@/routes/-components/RepositoriesSection"; + +export const projects: Project[] = [ + { + repository: "openai/chatgpt", + description: + "An AI-powered assistant that helps with complex queries and tasks.", + languages: ["TypeScript", "Python"], + link: "https://openai.com/", + }, + { + repository: "vercel/next.js", + description: + "A React-based framework for server-side rendering and static site generation.", + languages: ["JavaScript", "TypeScript"], + link: "https://nextjs.org/", + }, + { + repository: "facebook/react", + description: + "A library for building user interfaces with a component-based approach.", + languages: ["JavaScript", "Flow"], + link: "https://reactjs.org/", + }, + { + repository: "nestjs/nest", + description: + "A progressive Node.js framework for building efficient, reliable, and scalable server-side applications.", + languages: ["TypeScript", "JavaScript"], + link: "https://nestjs.com/", + }, + { + repository: "microsoft/playwright", + description: "End-to-end testing framework for web applications.", + languages: ["JavaScript", "TypeScript"], + link: "https://playwright.dev/", + }, + + { + repository: "tailwindlabs/tailwindcss", + description: + "A utility-first CSS framework for creating custom designs directly in HTML.", + languages: ["CSS", "JavaScript"], + link: "https://tailwindcss.com/", + }, + { + repository: "prisma/prisma", + description: "A modern database toolkit for TypeScript and Node.js.", + languages: ["TypeScript", "Rust"], + link: "https://www.prisma.io/", + }, + { + repository: "remix-run/remix", + description: + "A full-stack web framework for building modern websites with React.", + languages: ["JavaScript", "TypeScript"], + link: "https://remix.run/", + }, +].map((p) => ({ + ...p, + issuesCount: Math.floor(Math.random() * (40 - 10 + 1)) + 10, // Between 10 and 40 +})); diff --git a/src/routes/-components/HomePage.tsx b/src/routes/-components/HomePage.tsx index 852b979..a0ed1d7 100644 --- a/src/routes/-components/HomePage.tsx +++ b/src/routes/-components/HomePage.tsx @@ -1,5 +1,8 @@ import { LandingPageNavbar } from "@/components/navigation/LandingPageNavbar"; import { Link } from "@tanstack/react-router"; +import RepositoriesSection from "./RepositoriesSection"; + +import { projects } from "@/data/projects"; export function HomePage() { return ( @@ -12,6 +15,7 @@ export function HomePage() {

Go to Dashboard + ); } From 0b98af7a6ce42ab269c8b17f941b044f3f94dfd3 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Tue, 26 Nov 2024 09:44:51 +0300 Subject: [PATCH 04/94] fix:modify the dashboard sidebar to match designs --- .../flip-clock/DigitalFlipClock.tsx | 163 ------------------ src/lib/tanstack/router/TSRBreadCrumbs.tsx | 2 +- .../-components/DashboardUserDropdown.tsx | 92 ++++++++++ .../DashboardLayoutActions.tsx | 19 ++ .../DashboardLayoutHeader.tsx | 37 ++++ .../DashboardLayoutSearchbar.tsx | 18 ++ .../DashboardpostProjectButton.tsx | 11 ++ .../dashoboard-sidebar/DashboardLayout.tsx | 38 ++-- .../DashboardSidebarActions.tsx | 17 ++ .../DashboardSidebarHeader.tsx | 22 ++- .../DashboardSidebarLinks.tsx | 28 +-- .../DashboardSidebaruser.tsx | 93 +--------- 12 files changed, 250 insertions(+), 290 deletions(-) delete mode 100644 src/components/flip-clock/DigitalFlipClock.tsx create mode 100644 src/routes/dashboard/-components/DashboardUserDropdown.tsx create mode 100644 src/routes/dashboard/-components/dashboard-layout/DashboardLayoutActions.tsx create mode 100644 src/routes/dashboard/-components/dashboard-layout/DashboardLayoutHeader.tsx create mode 100644 src/routes/dashboard/-components/dashboard-layout/DashboardLayoutSearchbar.tsx create mode 100644 src/routes/dashboard/-components/dashboard-layout/DashboardpostProjectButton.tsx create mode 100644 src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarActions.tsx diff --git a/src/components/flip-clock/DigitalFlipClock.tsx b/src/components/flip-clock/DigitalFlipClock.tsx deleted file mode 100644 index 8503ca6..0000000 --- a/src/components/flip-clock/DigitalFlipClock.tsx +++ /dev/null @@ -1,163 +0,0 @@ -import React from "react"; - -// function component -function AnimatedCard({ - animation, - digit, -}: { - animation: "fold" | "unfold"; - digit: number; -}){ - return ( -
- {`${digit}`} -
- ); -}; - -// function component -function StaticCard({ position, digit }: { position: "upperCard"|"lowerCard"; digit: number }){ - return ( -
- {`${digit}`} -
- ); -}; - -// function component -function FlipUnitContainer({ digit, shuffle, unit }:{digit:number;shuffle:boolean;unit:string}){ - // assign digit values - let currentDigit = digit; - let previousDigit = digit - 1; - - // to prevent a negative value - if (unit !== "hours") { - previousDigit = previousDigit === -1 ? 59 : previousDigit; - } else { - previousDigit = previousDigit === -1 ? 23 : previousDigit; - } - - // add zero - if (currentDigit < 10) { - // @ts-expect-error : number is being converted into a string to append the 0 - currentDigit = `0${currentDigit}`; - } - if (previousDigit < 10) { - // @ts-expect-error : number is being converted into a string to append the 0 - previousDigit = `0${previousDigit}`; - } - - // shuffle digits - const digit1 = shuffle ? previousDigit : currentDigit; - const digit2 = !shuffle ? previousDigit : currentDigit; - - // shuffle animations - const animation1 = shuffle ? "fold" : "unfold"; - const animation2 = !shuffle ? "fold" : "unfold"; - - return ( -
- - - - -
- ); -}; - - -class MyClock { - time: Date; - ampm:"AM"|"PM" - hours: number; - minutes: number; - seconds: number; - - constructor() { - this.time = new Date(); - const currentHour = this.time.getHours(); - this.hours = currentHour > 12 ? currentHour - 12 : currentHour; - this.minutes = this.time.getMinutes(); - this.seconds = this.time.getSeconds(); - this.ampm = currentHour > 12 ? "PM" : "AM"; - this.updateTime(); - } - - updateTime() { - this.time = new Date(); - const currentHour = this.time.getHours(); - this.ampm = currentHour > 12 ? "PM" : "AM"; - this.hours = currentHour > 12 ? currentHour - 12 : currentHour; - this.minutes = this.time.getMinutes(); - this.seconds = this.time.getSeconds(); - } -} - - - -// class component -export function FlipClock(){ - const clock = new MyClock(); - const [hours, setHours] = React.useState(clock.hours); - const [hoursShuffle, setHoursShuffle] = React.useState(true); - const [minutes, setMinutes] = React.useState(clock.minutes); - const [minutesShuffle, setMinutesShuffle] = React.useState(true); - const [seconds, setSeconds] = React.useState(clock.seconds); - const [secondsShuffle, setSecondsShuffle] = React.useState(true); - const[ampm,setAMPM]=React.useState(clock.ampm) - const [ampmShuffle, setAMPMShuffle] = React.useState(true); - - React.useEffect(() => { - const timerID = setInterval(() => { - clock.updateTime(); - if(clock.ampm!==ampm){ - setHours(clock.hours); - setHoursShuffle(true); - } - if(clock.ampm!==ampm){ - setMinutes(clock.minutes); - setMinutesShuffle(true); - } - if(clock.seconds!==seconds){ - setSeconds(clock.seconds); - setSecondsShuffle(true); - } - if(clock.ampm!==ampm){ - setAMPM(clock.ampm); - setAMPMShuffle(true); - } - }, 50); - return () => clearInterval(timerID); - }, []); -// console.log({hours, minutes, seconds}); - return ( -
- - - - -
- ); -}; - diff --git a/src/lib/tanstack/router/TSRBreadCrumbs.tsx b/src/lib/tanstack/router/TSRBreadCrumbs.tsx index 3aa4306..0937101 100644 --- a/src/lib/tanstack/router/TSRBreadCrumbs.tsx +++ b/src/lib/tanstack/router/TSRBreadCrumbs.tsx @@ -22,7 +22,7 @@ export function TSRBreadCrumbs({}: TSRBreadCrumbsProps) { const { breadcrumb_routes } = useTSRBreadCrumbs(); if (breadcrumb_routes.length < 2) return null; return ( -
+
{breadcrumb_routes.map((crumb) => { diff --git a/src/routes/dashboard/-components/DashboardUserDropdown.tsx b/src/routes/dashboard/-components/DashboardUserDropdown.tsx new file mode 100644 index 0000000..0f8f55d --- /dev/null +++ b/src/routes/dashboard/-components/DashboardUserDropdown.tsx @@ -0,0 +1,92 @@ +import { BadgeCheck, Bell, ChevronsUpDown } from "lucide-react"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { MutationButton } from "@/lib/tanstack/query/MutationButton"; +import { useSidebar } from "@/components/ui/sidebar"; +import { useViewer } from "@/lib/tanstack/query/use-viewer"; + +interface DashboardUserDropdownProps { + compact?: boolean; +} + +export function DashboardUserDropdown({compact}: DashboardUserDropdownProps) { +const { isMobile } = useSidebar(); + const { userQuery, logoutMutation } = useViewer(); + const user = userQuery?.data?.record; + if(!user){ + return null + } + return ( + + +
+ + + + {user.username.slice(0, 2)} + + +
+
+ {user.username} + {user.email} +
+ +
+
+
+ + +
+ + + CN + +
+ {user.username} + {user.email} +
+
+
+ + + + + + + Account + + + + + Notifications + + + + + logoutMutation.mutate()} + label="Logout" + mutation={logoutMutation} + /> + +
+
+ ); +} diff --git a/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutActions.tsx b/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutActions.tsx new file mode 100644 index 0000000..a0ecc88 --- /dev/null +++ b/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutActions.tsx @@ -0,0 +1,19 @@ + +import { BellIcon,Settings, UserPlus } from "lucide-react"; + +interface DashboardLayoutActionsProps { + +} + +export function DashboardLayoutActions({}:DashboardLayoutActionsProps){ +return ( +
+ +
+ + + +
+
+); +} diff --git a/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutHeader.tsx b/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutHeader.tsx new file mode 100644 index 0000000..12814fa --- /dev/null +++ b/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutHeader.tsx @@ -0,0 +1,37 @@ +import { Link } from "@tanstack/react-router"; +import { DashboardLayoutSearchbar } from "./DashboardLayoutSearchbar"; +import { DashboardLayoutActions } from "./DashboardLayoutActions"; +import { DashboardUserDropdown } from "../DashboardUserDropdown"; +import { DashboardpostProjectButton } from "./DashboardpostProjectButton"; + +interface DashboardLayoutHeaderProps {} + +export function DashboardLayoutHeader({}: DashboardLayoutHeaderProps) { + return ( +
+
+ + logo + + +
+ +
+ + +
+
+
+ + logo + + +
+
+ + +
+
+
+ ); +} diff --git a/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutSearchbar.tsx b/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutSearchbar.tsx new file mode 100644 index 0000000..9886ff8 --- /dev/null +++ b/src/routes/dashboard/-components/dashboard-layout/DashboardLayoutSearchbar.tsx @@ -0,0 +1,18 @@ +import { Input } from "@/components/ui/input"; +import { Search } from "lucide-react"; + +interface DashboardLayoutSearchbarProps {} + +export function DashboardLayoutSearchbar({}: DashboardLayoutSearchbarProps) { + return ( +
+
+ + +
+
+ ); +} diff --git a/src/routes/dashboard/-components/dashboard-layout/DashboardpostProjectButton.tsx b/src/routes/dashboard/-components/dashboard-layout/DashboardpostProjectButton.tsx new file mode 100644 index 0000000..c590290 --- /dev/null +++ b/src/routes/dashboard/-components/dashboard-layout/DashboardpostProjectButton.tsx @@ -0,0 +1,11 @@ +import { Button } from "@/components/ui/button"; +import { Plus } from "lucide-react"; +interface DashboardpostProjectButtonProps {} + +export function DashboardpostProjectButton({}: DashboardpostProjectButtonProps) { + return ( + + ); +} diff --git a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx index 119e4ed..648a2b6 100644 --- a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx +++ b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx @@ -14,9 +14,10 @@ import { Separator } from "@/components/ui/separator"; import { Outlet } from "@tanstack/react-router"; import { DashboardSidebarHeader } from "./DashboardSidebarHeader"; import { DashboardSidebarLinks } from "./DashboardSidebarLinks"; -import { DashboardSidebaruser } from "./DashboardSidebaruser"; import { TSRBreadCrumbs } from "@/lib/tanstack/router/TSRBreadCrumbs"; import { DashboardTheme } from "./DashboardTheme"; +import { DashboardLayoutHeader } from "../dashboard-layout/DashboardLayoutHeader"; +import { DashboardSidebarActions } from "./DashboardSidebarActions"; interface DashboardLayoutProps { sidebar_props: React.ComponentProps; @@ -25,22 +26,10 @@ interface DashboardLayoutProps { export function DashboardLayout({ sidebar_props }: DashboardLayoutProps) { return ( - - - - - - - - - {/* */} - - - - - -
+
+
+
@@ -48,9 +37,24 @@ export function DashboardLayout({ sidebar_props }: DashboardLayoutProps) {
{/* main content */} -
+
+ + + + + + + + + {/* */} + + + + +
+
); diff --git a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarActions.tsx b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarActions.tsx new file mode 100644 index 0000000..9655672 --- /dev/null +++ b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarActions.tsx @@ -0,0 +1,17 @@ +import { useSidebar } from "@/components/ui/sidebar"; +import { DashboardLayoutActions } from "../dashboard-layout/DashboardLayoutActions"; +import { DashboardSidebaruser } from "./DashboardSidebaruser"; + +interface DashboardSidebarActionsProps { + +} + +export function DashboardSidebarActions({}:DashboardSidebarActionsProps){ +const {state,isMobile} = useSidebar(); +return ( +
+{(state==="expanded" && isMobile)&& } + +
+); +} diff --git a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx index ecd8336..05208b2 100644 --- a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx +++ b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx @@ -4,13 +4,18 @@ import { Link, useLocation } from "@tanstack/react-router"; interface DashboardSidebarHeaderProps {} export function DashboardSidebarHeader({}: DashboardSidebarHeaderProps) { - const { state,setOpenMobile } = useSidebar(); + const { state,setOpenMobile,isMobile } = useSidebar(); const { pathname } = useLocation(); return ( -
{setOpenMobile(false)}}> - - logo - +
{ + setOpenMobile(false); + }} + > +{isMobile && + logo + } - - {state === "expanded" && ( -

Dashboard

+ + {(state === "expanded" || isMobile) && ( +

Dashboard

)}
diff --git a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx index b13eb90..4571453 100644 --- a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx +++ b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx @@ -23,8 +23,8 @@ export function DashboardSidebarLinks({}: DashboardSidebarLinksProps) { const { pathname } = useLocation(); return ( - House keeping - + Dashboard + {dashboard_routes.map((item) => { return ( @@ -37,13 +37,15 @@ export function DashboardSidebarLinks({}: DashboardSidebarLinksProps) { > - + { if (isMobile) { @@ -55,15 +57,21 @@ export function DashboardSidebarLinks({}: DashboardSidebarLinksProps) { - {state === "expanded" && ( - {item.name} + {/* {isMobile&&{item.name}} */} + {(state === "expanded" || isMobile) && ( + {item.name} )} {item.href === "/dashboard/os-projects" && } {item.href === "/dashboard/teams" && } - {item.name} + + {item.name} + diff --git a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx index c8b74c7..00f362f 100644 --- a/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx +++ b/src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx @@ -1,103 +1,16 @@ "use client"; -import { - BadgeCheck, - Bell, - ChevronsUpDown, -} from "lucide-react"; - -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuGroup, - DropdownMenuItem, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu"; import { SidebarMenu, - SidebarMenuButton, SidebarMenuItem, - useSidebar, } from "@/components/ui/sidebar"; -import { useViewer } from "@/lib/tanstack/query/use-viewer"; -import { MutationButton } from "@/lib/tanstack/query/MutationButton"; + +import { DashboardUserDropdown } from "../DashboardUserDropdown"; export function DashboardSidebaruser() { - const { isMobile } = useSidebar(); - const { userQuery, logoutMutation } = useViewer(); - const user = userQuery?.data?.record; - if(!user){ - return null - } return ( - - - - - - - {user.username.slice(0, 2)} - - -
- {user.username} - {user.email} -
- -
-
- - -
- - - CN - -
- - {user.username} - - {user.email} -
-
-
- - - - - - - Account - - - - - Notifications - - - - - logoutMutation.mutate()} - label="Logout" - mutation={logoutMutation} - /> - -
-
+
); From 79dac9adb1889177b163cfa0df5c5b3c5fa81231 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Tue, 26 Nov 2024 10:20:06 +0300 Subject: [PATCH 05/94] add: script for generationg pages boilerplate --- package.json | 2 + src/scripts/scafold-pages/base-templates.ts | 137 +++++++++++++++ src/scripts/scafold-pages/form-templates.ts | 165 ++++++++++++++++++ .../scafold-pages/one-page-template.ts | 84 +++++++++ .../scafold-pages/query-options-tempaltes.ts | 49 ++++++ src/scripts/scafold-pages/script.ts | 150 ++++++++++++++++ 6 files changed, 587 insertions(+) create mode 100644 src/scripts/scafold-pages/base-templates.ts create mode 100644 src/scripts/scafold-pages/form-templates.ts create mode 100644 src/scripts/scafold-pages/one-page-template.ts create mode 100644 src/scripts/scafold-pages/query-options-tempaltes.ts create mode 100644 src/scripts/scafold-pages/script.ts diff --git a/package.json b/package.json index e0b7757..94cf1fb 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "tsc -b && vite build", "lint": "eslint . --fix", "format": "prettier --write --ignore-unknown src", + "page": "tsx src/scripts/scafold-pages/script.ts", "preview": "vite preview" }, "dependencies": { @@ -87,6 +88,7 @@ "prettier-plugin-tailwindcss": "^0.6.5", "tailwindcss": "^3.4.14", "tailwindcss-animate": "^1.0.7", + "tsx": "^4.19.2", "typescript": "~5.6.2", "typescript-eslint": "^8.10.0", "vite": "^5.4.9", diff --git a/src/scripts/scafold-pages/base-templates.ts b/src/scripts/scafold-pages/base-templates.ts new file mode 100644 index 0000000..06d4886 --- /dev/null +++ b/src/scripts/scafold-pages/base-templates.ts @@ -0,0 +1,137 @@ +// const pagename = name.split("/").pop(); +// const capitalized = pagename.charAt(0).toUpperCase() + pagename.slice(1); +export function rootPageTemplate(pagename:string,path:string) { +// const pagename = name.split("/").pop(); +// const capitalized = page.charAt(0).toUpperCase() + page.slice(1); +const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); +return ` +import { createFileRoute } from "@tanstack/react-router"; +import { z } from "zod"; +import { ${capitalpagename}Page } from "@/routes/${path}/-components/${capitalpagename}Page"; + +const searchparams = z.object({ + sq: z.string().optional(), +}); + +export const Route = createFileRoute("/${path}/")({ + validateSearch: (search) => searchparams.parse(search), + component:${capitalpagename}Page +}); + +`; +} + +// /-components/${capitalpagename}Page +export function rootPageComponentTemplate(pagename: string, path: string) { +const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); +return ` +import { SearchBox } from "@/components/search/SearchBox"; +import { CardsListSuspenseFallback } from "@/components/wrappers/GenericDataCardsListSuspenseFallback"; +import { ListPageHeader } from "@/components/wrappers/ListPageHeader"; +import { Suspense } from "react"; +import { usePageSearchQuery } from "@/hooks/use-page-searchquery"; +import { Create${capitalpagename}Form } from "./form/create"; +import { ${capitalpagename}List } from "./list/${capitalpagename}List"; + +interface ${capitalpagename}PageProps { +} + +export function ${capitalpagename}Page({}: ${capitalpagename}PageProps) { + const { debouncedValue, isDebouncing, keyword, setKeyword } = + usePageSearchQuery("/${path}"); + return ( +
+ } + searchBox={ + + } + /> + +
+ }> + <${capitalpagename}List keyword={keyword} /> + +
+
+ ); +} +`; +} + + +// /-components/${capitalpagename}List +export function rootPageListComponentsTemplate(pagename: string, path: string) { +const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); +return ` +import { ItemNotFound } from "@/components/wrappers/ItemNotFound"; +import { PBReturnedUseQueryError } from "@/lib/pb/components/PBReturnedUseQueryError"; +import { useSuspenseQuery } from "@tanstack/react-query"; +import { Link } from "@tanstack/react-router"; +import { Update${capitalpagename}form } from "@/routes/${path}/-components/form/update"; +import { ${pagename}ListQueryOptions } from "@/routes/${path}/-query-options/${pagename}-query-option"; + +interface ${capitalpagename}ListProps { + keyword?: string; +} + +export function ${capitalpagename}List({ keyword = "" }: ${capitalpagename}ListProps) { + const query = useSuspenseQuery(${pagename}ListQueryOptions({ keyword })); + const data = query.data; + const error = query.error; + + if (error) { + return ( +
+ +
+ ); + } + if (!data || data.items.length === 0) { + return ( +
+ +
+ ); + } + return ( +
+
    + {data.items.map((item) => { + return ( +
  • +
    + {item.id} + + see details + +
    + +
  • + ); + })} +
+
+ ); +} + + +` +} + + diff --git a/src/scripts/scafold-pages/form-templates.ts b/src/scripts/scafold-pages/form-templates.ts new file mode 100644 index 0000000..e4f1c95 --- /dev/null +++ b/src/scripts/scafold-pages/form-templates.ts @@ -0,0 +1,165 @@ +// /-components/form/create +export function rootPageCreateFormComponentsTemplate( + pagename: string, + path: string, +) { + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + return ` + +import { useState } from "react"; +import { DiaDrawer } from "@/components/wrappers/DiaDrawer"; +import { Plus } from "lucide-react"; +import { makeHotToast } from "@/components/toasters"; +import { Base${capitalpagename}Form } from "./base"; +import { useMutation } from "@tanstack/react-query"; + +export function Create${capitalpagename}Form() { + const [open, setOpen] = useState(false); + + const mutation = useMutation({ + mutationFn: (value: {}) => { + return new Promise<{}>((resolve, reject) => { + setTimeout(() => { + resolve(value); + }, 2000); + }); + }, + onSuccess: () => { + makeHotToast({ + title: "${capitalpagename} added", + description: "${capitalpagename} has been added successfully", + variant: "success", + }); + setOpen(false); + }, + onError(error) { + makeHotToast({ + title: "Something went wrong", + description: error.message, + variant: "error", + }); + }, + meta: { + invalidates: ["${pagename}"], + }, + }); + return ( + + + Add new + + } + > +
+ +
+
+ ); +} + + + `; +} +// /-components/form/update +export function rootPageUpdateFormComponentsTemplate( + pagename: string, + path: string, +) { + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + return ` + +import { useState } from "react"; +import { DiaDrawer } from "@/components/wrappers/DiaDrawer"; +import { Edit } from "lucide-react"; +import { makeHotToast } from "@/components/toasters"; +import { Base${capitalpagename}Form } from "./base"; +import { useMutation } from "@tanstack/react-query"; + +interface Update${capitalpagename}formInterface { + item: Record & { id: string }; +} +export function Update${capitalpagename}form({ item }: Update${capitalpagename}formInterface) { + const [open, setOpen] = useState(false); + const mutation = useMutation({ + mutationFn: (value: {}) => { + return new Promise<{}>((resolve) => { + setTimeout(() => { + resolve(value); + }, 2000); + }); + }, + onSuccess: () => { + makeHotToast({ + title: "${capitalpagename} added", + description: "${capitalpagename} has been added successfully", + variant: "success", + }); + setOpen(false); + }, + onError(error) { + makeHotToast({ + title: "Something went wrong", + description: error.message, + variant: "error", + }); + }, + meta: { + invalidates: ["${pagename}"], + }, + }); + return ( + } + > +
+ +
+
+ ); +} + + + `; +} +// /-components/form/base +export function rootPageBaseFormComponentsTemplate( + pagename: string, + path: string, +) { + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + return ` + +import { UseMutationResult } from "@tanstack/react-query"; + +interface Base${capitalpagename}FormProps> { + mutation: UseMutationResult< + any, + Error, + T, + unknown + >; + row: T; + afterSave?: () => void; +} +export function Base${capitalpagename}Form>( + {}: Base${capitalpagename}FormProps, +) { + return ( +
+

Base${capitalpagename}Form

+
+ ); +} + + `; +} diff --git a/src/scripts/scafold-pages/one-page-template.ts b/src/scripts/scafold-pages/one-page-template.ts new file mode 100644 index 0000000..87271a3 --- /dev/null +++ b/src/scripts/scafold-pages/one-page-template.ts @@ -0,0 +1,84 @@ +// /$${pagename}/index.tsx +export function rootOnePageTemplate( + pagename: string, + path: string, +) { + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + return ` +import { createFileRoute } from '@tanstack/react-router' +import { One${capitalpagename}Page } from '@/routes/${path}/-components/one${pagename}/One${capitalpagename}Page' + +export const Route = createFileRoute('/${path}/$${pagename}/')({ + component: One${capitalpagename}Page +}) + + `; +} +// /-components/one${capitalpagename}/one${capitalpagename}Page +export function rootOnePageComponentsTemplate( + pagename: string, + path: string, +) { + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + return ` +import { Suspense } from "react"; +import { One${capitalpagename}Details } from "./One${capitalpagename}Details"; + +interface One${capitalpagename}PageProps { +} + +export function One${capitalpagename}Page({}: One${capitalpagename}PageProps) { + return ( +
+ +
Loading
+
+ } + > + + +
+ ); +} + + `; +} +// /-components/one${capitalpagename}/one${capitalpagename}Details +export function rootOnePageDetailsComponentsTemplate( + pagename: string, + path: string, +) { + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + return ` +import { useSuspenseQuery } from "@tanstack/react-query"; +import { useParams } from "@tanstack/react-router"; +import { one${capitalpagename}QueryOptions } from "@/routes/${path}/-query-options/${pagename}-query-option"; +import { PBReturnedUseQueryError } from "@/lib/pb/components/PBReturnedUseQueryError"; + +interface One${capitalpagename}DetailsProps { +} + +export function One${capitalpagename}Details({}: One${capitalpagename}DetailsProps) { + const { ${pagename} } = useParams({ from: "/${path}/$${pagename}/" }); + const query = useSuspenseQuery(one${capitalpagename}QueryOptions({ ${pagename} })); + const data = query.data; + const error = query.error; + + if (error) { + return ( +
+ +
+ ); + } + return ( +
+ {JSON.stringify(data, null, 2)} +
+ ); +} + + `; +} diff --git a/src/scripts/scafold-pages/query-options-tempaltes.ts b/src/scripts/scafold-pages/query-options-tempaltes.ts new file mode 100644 index 0000000..c9be527 --- /dev/null +++ b/src/scripts/scafold-pages/query-options-tempaltes.ts @@ -0,0 +1,49 @@ +// /-components/query-options/#{pagename}-query-option + +export function rootPageQeuryOptionsTemplate( + pagename: string +) { + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + return ` +import { queryOptions } from "@tanstack/react-query"; + + +interface ${pagename}QueryOptionPropss { + keyword: string; +} +export function ${pagename}ListQueryOptions({ keyword }: ${pagename}QueryOptionPropss) { + return queryOptions({ + queryKey: ["${pagename}_list", keyword], + queryFn: () => { + return new Promise<{ + items: Array & { id: string }>; + }>((res, rej) => { + setTimeout(() => { + res({ + items: [{ id: "id_1" }, { id: "id_2" }, { id: "id_3" }], + }); + }, 1000); + }); + }, + }); +} +interface one${capitalpagename}QueryOptionPropss { + ${pagename}: string; +} +export function one${capitalpagename}QueryOptions({ ${pagename} }: one${capitalpagename}QueryOptionPropss) { + return queryOptions({ + queryKey: ["one_${pagename}", ${pagename}], + queryFn: () => { + return new Promise<{ id: string }>((res, rej) => { + setTimeout(() => { + res({ + id: ${pagename}, + }); + }, 1000); + }); + }, + }); +} + `; + +} diff --git a/src/scripts/scafold-pages/script.ts b/src/scripts/scafold-pages/script.ts new file mode 100644 index 0000000..e0ba876 --- /dev/null +++ b/src/scripts/scafold-pages/script.ts @@ -0,0 +1,150 @@ +import { resolve } from "node:path"; +import { rootPageComponentTemplate, rootPageListComponentsTemplate, rootPageTemplate } from "./base-templates" +import { rootPageBaseFormComponentsTemplate, rootPageCreateFormComponentsTemplate, rootPageUpdateFormComponentsTemplate } from "./form-templates" +import { rootOnePageComponentsTemplate, rootOnePageDetailsComponentsTemplate, rootOnePageTemplate } from "./one-page-template"; +import { rootPageQeuryOptionsTemplate } from "./query-options-tempaltes" +import { writeFile, access, mkdir } from "node:fs/promises" + + + +async function scaffoldPage(pagename: string, path: string) { + const roootDirpath = `./src/routes${ path}` + // const roootDirpath = resolve("./src/routes",path) + await mkdir(roootDirpath, { recursive: true }).catch((err) => { + if (err instanceof Error) { + if (err.message.includes("EEXIST")) { + }else{ + throw err + } + } + + }) + const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); + let rootPath = path.trim() + if (rootPath.length == 0) { + throw new Error("Path cannot be empty") + } + if (rootPath.endsWith("/")) { + rootPath = rootPath.slice(0, rootPath.length - 1) + } + if (rootPath.startsWith("./")) { + rootPath = rootPath.slice(2) + } + if (rootPath.startsWith("/")) { + rootPath = rootPath.slice(1) + } + + const indexPage = { + path: `${rootPath}/index.tsx`, + component: rootPageTemplate(pagename, rootPath), + }; + const indexPageComponent = { + path: `${rootPath}/-components/${capitalpagename}Page.tsx`, + component: rootPageComponentTemplate(pagename, rootPath), + }; + const indexPageListComponent = { + path: `${rootPath}/-components/list/${capitalpagename}List.tsx`, + component: rootPageListComponentsTemplate(pagename, rootPath), + }; + + const baseForm = { + path: `${rootPath}/-components/form/base.tsx`, + component: rootPageBaseFormComponentsTemplate(pagename, rootPath), + }; + const createForm = { + path: `${rootPath}/-components/form/create.tsx`, + component: rootPageCreateFormComponentsTemplate(pagename, rootPath), + }; + const updateForm = { + path: `${rootPath}/-components/form/update.tsx`, + component: rootPageUpdateFormComponentsTemplate(pagename, rootPath), + }; + + // const listComponent = { + // path: `${rootPath}/-components/${capitalpagename}List.tsx`, + // component: rootPageListComponentsTemplate(pagename, rootPath), + // }; + const onePageComponent = { + path: `${rootPath}/$${pagename}/index.tsx`, + component: rootOnePageTemplate(pagename, rootPath), + } + const onepageComponent = { + path: `${rootPath}/-components/one${pagename}/One${capitalpagename}Page.tsx`, + component: rootOnePageComponentsTemplate(pagename, rootPath), + }; + const onepageDetailsComponent = { + path: `${rootPath}/-components/one${pagename}/One${capitalpagename}Details.tsx`, + component: rootOnePageDetailsComponentsTemplate(pagename, rootPath), + } + const queryOptions = { + path: `${rootPath}/-query-options/${pagename}-query-option.ts`, + component: rootPageQeuryOptionsTemplate(pagename, rootPath), + }; + + const allPaths = [ + indexPage, + indexPageComponent, + baseForm, + createForm, + updateForm, + indexPageListComponent, + onePageComponent, + onepageComponent, + onepageDetailsComponent, + queryOptions + ] + + const allComponentPaths = allPaths.map((path) => { + return ensurePathExistsOrCreate(path.path, path.component) + }) + await Promise.all(allComponentPaths) + +} + +async function ensurePathExistsOrCreate(path: string, component: string) { +const component_path = resolve("./src/routes",path) + try { + await access(component_path) + } catch (err: unknown) { + if (err instanceof Error) { + if (err.message.includes("no such file or directory")) { + await writeFile(component_path, component) + .catch(async(err) => { + if(err.code === "ENOENT"){ + const directryPath = component_path.split("/").slice(0,-1).join("/") + await mkdir(directryPath, { recursive: true }) + await writeFile(component_path, component) + } + }) + } + } + } +} + +function main() { + const components_path = process.argv[2] + + if (!components_path) { + throw new Error("No page path provided. try /dashboard/new") + } + const pagename = components_path.split("/").pop() + if (!pagename) { + throw new Error("No page name provided. try /dashboard/new") + } + // console.log(`============= Creating page ========== `,process.argv) + // console.log(`============= Creating page ${pagename} at ${components_path} ========== `) + return scaffoldPage(pagename,components_path) + +} + +main() +.catch((err) => { + // console.log(" ===bad things happend ===", err.message) +}) + +// async function uwu(){ +// console.log("uwu") +// await mkdir("./slime") +// await writeFile("./slime/uwu.txt","uwu") +// } +// uwu() From 8f8ecec9f89704d12e1acc0e2ea335c8fc7b8381 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Tue, 26 Nov 2024 10:41:42 +0300 Subject: [PATCH 06/94] feat: added docs for the boilerplate script --- src/scripts/scafold-pages/USAGE.md | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/scripts/scafold-pages/USAGE.md diff --git a/src/scripts/scafold-pages/USAGE.md b/src/scripts/scafold-pages/USAGE.md new file mode 100644 index 0000000..19994e1 --- /dev/null +++ b/src/scripts/scafold-pages/USAGE.md @@ -0,0 +1,34 @@ +The script relies on the `tsx` pacakge to execute your typescript files directly + +```sh +pnpm install -D tsx +``` +it has a corresponding script in the `package.json` for convenience + +```json + "scripts": { + // "dev": "vite", + // "build": "tsc -b && vite build", + // "lint": "eslint . --fix", + // "format": "prettier --write --ignore-unknown src", + "page": "tsx src/scripts/scafold-pages/script.ts", + // "preview": "vite preview" + }, +``` + +```sh + pnpm run page dashboard/users +``` + +theis will scaffold the users page inside `src/routes/dashboard/users` + +and create +- index.tsx : root page for the users page (typically a list of users) +- `$user` : dynamic route to dispaly single user +- `/-components` : housing all the conponents for this page + + - `/form`:components for the user create and update forms + - `/list` : components that wraps the list of users in a `suspense` boundary and adds a searchbar using the `sq` search parameter to store the state ensuring the data will be the same if the page is refreshed , loaded from booksmarks/history or url sent from another device + - `/oneuser` : components for the single user page `/dashboard/users/$${id}` + - UserPage.tsx : Component fro the `index.tsx` +- `-query-options` : housing all the react query options for this page From e0dfa9e3a45ddcabbdd08c5d7fe6e3e9a6aa43c9 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Tue, 26 Nov 2024 13:07:11 +0300 Subject: [PATCH 07/94] docs: add boilerplate documentation for project setup and best practices --- BOILERPLATE.md | 161 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 BOILERPLATE.md diff --git a/BOILERPLATE.md b/BOILERPLATE.md new file mode 100644 index 0000000..73a604a --- /dev/null +++ b/BOILERPLATE.md @@ -0,0 +1,161 @@ +The project is using + +### [tanstack router](https://tanstack.com/query/latest) +The router which offers a declarative way to navigate between different routes in a React application. +picked for +- highly configurable file based routing +- auto generated typescript types +- auto code splitting +- nice serach params handling +- possible to upgrade to [tanstack start](https://tanstack.com/start/latest) should `SSR` + `SEO` requiremnents arise + + +### [tanstack query (react query)](https://tanstack.com/query/latest) +Data fetching and caching library +picked for being the most popular way to handle aysn state in react with caching and preloading capabilities + +best practices include + +- declaring the `queryOptions` outside of the `useQuery` hook for easy reusability + +```tsx +import { queryOptions } from "@tanstack/react-query"; +interface usersQueryOptionPropss { + keyword: string; +} +export function usersListQueryOptions({ keyword }: usersQueryOptionPropss) { + return queryOptions({ + queryKey: ["users_list", keyword], + queryFn: () => { + return new Promise<{ + items: Array & { id: string }>; + }>((res, rej) => { + setTimeout(() => { + res({ + items: [{ id: "id_1" }, { id: "id_2" }, { id: "id_3" }], + }); + }, 1000); + }); + }, + }); +} +``` +- using the `useSuspenseQuery` over the `useQuery` hook + > suspense is the new way tohnadle data fetching in react that enebles [render while you fetch](https://www.epicreact.dev/render-as-you-fetch) + +- Invalidate queries on mutation + , + +The query client setup includes a way to pass in a meta object to the mutation which will contain an array of keys to invalidate +```tsx +// main.tsx +export const queryClient = new QueryClient({ + mutationCache: new MutationCache({ + onSuccess: async (_, __, ___, mutation) => { + if (Array.isArray(mutation.meta?.invalidates)) { + // biome-ignore lint/complexity/noForEach: + mutation.meta?.invalidates.forEach((key) => { + return queryClient.invalidateQueries({ + queryKey: [key.trim()], + }); + }); + } + }, + }), + defaultOptions: { + queries: { + staleTime: 1000 * 10, + refetchOnWindowFocus: false, + refetchOnReconnect: false, + }, + }, +}); +// usage +useMutation({ + mutationFn: async (value: {}) => { + return new Promise<{}>((resolve, reject) => { + setTimeout(() => { + resolve(value); + }, 2000); + }); + }, + onSuccess: () => { + makeHotToast({ + title: "User added", + description: "User has been added successfully", + variant: "success", + }); + }, + meta: { + // this will mark any query with the key "users as stale + invalidates: ["users"], + }, +}) +``` +- add any values that your query depends on into the query key +```tsx +function userListQueryOptions({ keyword, first_name,last_name }: usersQueryOptionPropss) { + queryClient({ + queryKey: ["users_list", keyword, first_name, last_name], + queryFn: () => { + return new Promise<{ + items: Array & { id: string }>; + }>((res, rej) => { + setTimeout(() => { + res({ + items: [{ id: "id_1",first_name,last_name }, { id: "id_2".first_name,last_name }, { id: "id_3" }], + }); + }, 1000); + }); + }, + }); +``` +- the tanstack query eslint plugin will catch most of these common issues + +### [tailwind css](https://tailwindcss.com/) + [daisyui](https://daisyui.com/) +For styling daisyui is a bootstrap like tailwind classes that can help make your taiiwnd cleaner. +it also comes with nice theme tokens , which are the prefered way of adding background/text colors + +```json + daisyui: { + themes: [ + { + light: { + "color-scheme": "light", + primary: "#1eb854", + "primary-focus": "#188c40", + "primary-content": "#241f31", + secondary: "#20d55f", + "secondary-focus": "#18aa4b", + "secondary-content": "#000000", + accent: "#d99330", + .... + },}... +``` +```tsx +
+ + primary button + +
Default background
+
Lighter background
+
Lightest background
+<

The default text color

+This will be primary text +
+``` + +### [shadcn](https://ui.shadcn.com/) + +A set of accessible components built on [radix ui](https://www.radix-ui.com/primitives) with tailwind styles. + +### [zod](https://zod.dev/) + schema validation that helps in confirming the shape of data returned matches the expectations (local storage , search params...) + + + +### [react-hook-form](https://www.react-hook-form.com/) +Form management + +### [vitest](https://vitest.dev/) + [playwright](https://playwright.dev/) +unit testing + E2E From fe55d0c7bfd20cbedf1961b61d793b4d38de8dbe Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Wed, 27 Nov 2024 16:50:05 +0300 Subject: [PATCH 08/94] centralize svg icons --- src/components/wrappers/custom-icons.tsx | 1244 ++++++++++++----- .../-components/RepositoriesSection.tsx | 35 +- 2 files changed, 916 insertions(+), 363 deletions(-) diff --git a/src/components/wrappers/custom-icons.tsx b/src/components/wrappers/custom-icons.tsx index db6731e..699d740 100644 --- a/src/components/wrappers/custom-icons.tsx +++ b/src/components/wrappers/custom-icons.tsx @@ -1,333 +1,915 @@ export const CustomIcons = { - syt: (props: React.ComponentProps<"svg">) => ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ) -} + syt: (props: React.ComponentProps<"svg">) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ), + search: (props: React.ComponentProps<"svg">) => ( + + + + ), + ossIcon: (props: React.ComponentProps<"svg">) => ( + + + + ), +}; diff --git a/src/routes/-components/RepositoriesSection.tsx b/src/routes/-components/RepositoriesSection.tsx index e4b1f00..7fc64fe 100644 --- a/src/routes/-components/RepositoriesSection.tsx +++ b/src/routes/-components/RepositoriesSection.tsx @@ -5,6 +5,7 @@ import { Swiper, SwiperSlide } from "swiper/react"; import "swiper/css"; import { cn } from "@/components/lib/utils"; +import { CustomIcons } from "@/components/wrappers/custom-icons"; export type Project = { repository: string; @@ -59,21 +60,7 @@ export default function RepositoriesSection({ projects }: Props) {
- - - - +
- {searchedProjects.map((project) => ( -
- - - - +
{project.issuesCount} Issues From 7e2381ef20b347ad5a794f832b926ed5272d2a9a Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Wed, 27 Nov 2024 16:51:46 +0300 Subject: [PATCH 09/94] fix: width issue --- src/routes/-components/HomePage.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/routes/-components/HomePage.tsx b/src/routes/-components/HomePage.tsx index a0ed1d7..59f6bec 100644 --- a/src/routes/-components/HomePage.tsx +++ b/src/routes/-components/HomePage.tsx @@ -6,14 +6,16 @@ import { projects } from "@/data/projects"; export function HomePage() { return ( -
- -
+
+ +
{/* landing page goes here */} -

+

Landing page goes here

- Go to Dashboard + + Go to Dashboard +
From 899a46fb05512a18f2bbadbb6dc1db40a74d088f Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Wed, 27 Nov 2024 17:12:27 +0300 Subject: [PATCH 10/94] fix: list keys --- src/routes/-components/RepositoriesSection.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/routes/-components/RepositoriesSection.tsx b/src/routes/-components/RepositoriesSection.tsx index 7fc64fe..0b73c19 100644 --- a/src/routes/-components/RepositoriesSection.tsx +++ b/src/routes/-components/RepositoriesSection.tsx @@ -103,6 +103,11 @@ export default function RepositoriesSection({ projects }: Props) {
+ {searchedProjects.map((project, index) => ( +
From f76e588c63f9795b8be0f9b757f16ad2caddbdc3 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 10:21:11 +0300 Subject: [PATCH 11/94] progress --- public/landing-page/community.svg | 213 ++++++++++++++++++ public/landing-page/gamification.svg | 179 +++++++++++++++ public/landing-page/teams.svg | 159 +++++++++++++ public/landing-page/tech.svg | 71 ++++++ src/routes/-components/HomePage.tsx | 2 + .../tools-section/ToolsSection.tsx | 39 ++++ .../tools-section/ToolsSections.tsx | 31 +++ tailwind.config.js | 42 ++-- 8 files changed, 715 insertions(+), 21 deletions(-) create mode 100644 public/landing-page/community.svg create mode 100644 public/landing-page/gamification.svg create mode 100644 public/landing-page/teams.svg create mode 100644 public/landing-page/tech.svg create mode 100644 src/routes/-components/tools-section/ToolsSection.tsx create mode 100644 src/routes/-components/tools-section/ToolsSections.tsx diff --git a/public/landing-page/community.svg b/public/landing-page/community.svg new file mode 100644 index 0000000..11216e3 --- /dev/null +++ b/public/landing-page/community.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/landing-page/gamification.svg b/public/landing-page/gamification.svg new file mode 100644 index 0000000..edb7e9e --- /dev/null +++ b/public/landing-page/gamification.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/landing-page/teams.svg b/public/landing-page/teams.svg new file mode 100644 index 0000000..07e0736 --- /dev/null +++ b/public/landing-page/teams.svg @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/landing-page/tech.svg b/public/landing-page/tech.svg new file mode 100644 index 0000000..00b9f98 --- /dev/null +++ b/public/landing-page/tech.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/routes/-components/HomePage.tsx b/src/routes/-components/HomePage.tsx index 852b979..9389c08 100644 --- a/src/routes/-components/HomePage.tsx +++ b/src/routes/-components/HomePage.tsx @@ -1,5 +1,6 @@ import { LandingPageNavbar } from "@/components/navigation/LandingPageNavbar"; import { Link } from "@tanstack/react-router"; +import { ToolsSection } from "./tools-section/ToolsSection"; export function HomePage() { return ( @@ -12,6 +13,7 @@ export function HomePage() {

Go to Dashboard
+
); } diff --git a/src/routes/-components/tools-section/ToolsSection.tsx b/src/routes/-components/tools-section/ToolsSection.tsx new file mode 100644 index 0000000..50a6e51 --- /dev/null +++ b/src/routes/-components/tools-section/ToolsSection.tsx @@ -0,0 +1,39 @@ +interface ToolsSectionProps {} + +export function ToolsSection({}: ToolsSectionProps) { + return ( +
+
+

+ Get more than just pushing commits +

+

+ The more the merrier. Colabs allows you to create teams, participate + in challenges and collect cool badges. +

+
+ +
+
+ {/* gamification+ */} +
+ +
+ {/* community */} +
+ +
+
+
+
+ {/* technologies */} +
+ +
+
+ +
+
+
+ ); +} diff --git a/src/routes/-components/tools-section/ToolsSections.tsx b/src/routes/-components/tools-section/ToolsSections.tsx new file mode 100644 index 0000000..b88daa5 --- /dev/null +++ b/src/routes/-components/tools-section/ToolsSections.tsx @@ -0,0 +1,31 @@ +interface ToolsSectionGamificationProps { + +} + +export function ToolsSectionGamification({}:ToolsSectionGamificationProps){ +return ( +
+

Gamification

+

+ Code hard and play hard. There\'s levels to this game and not everyone get + to be called the GOAT. +

+
+); +} + +export function ToolsSectionCommunity(){ + return ( +
+ {/*
+

Community

+

+ Connect with the largest community of developers and designers + building amazing product. +

+ +
*/} + +
+ ); +} diff --git a/tailwind.config.js b/tailwind.config.js index d9a45be..80e8be9 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -53,19 +53,19 @@ export default { error: "#ff5861", info: "#00b5ff", warning: "#ffbe00", - "--animation-btn": ".25s", - "--animation-input": ".2s", - "--border-btn": "1px", - "--btn-focus-scale": ".95", - "--rounded-badge": "1.9rem", - "--rounded-box": "1rem", - "--rounded-btn": ".5rem", - "--tab-border": "1px", - "--tab-radius": ".5rem", + // "--animation-btn": ".25s", + // "--animation-input": ".2s", + // "--border-btn": "1px", + // "--btn-focus-scale": ".95", + // "--rounded-badge": "1.9rem", + // "--rounded-box": "1rem", + // "--rounded-btn": ".5rem", + // "--tab-border": "1px", + // "--tab-radius": ".5rem", }, dark: { "color-scheme": "dark", - primary: "#1eb854", + primary: "#2D8067", "primary-content": "#000000", secondary: "#1db88e", "secondary-content": "#000c07", @@ -73,23 +73,23 @@ export default { "accent-content": "#000c0b", neutral: "#19362d", "neutral-content": "#cdd3d1", - "base-100": "#171212", + "base-100": "#16181D", "base-200": "#140f0f", "base-300": "#110c0d", - "base-content": "#cbc9c9", + "base-content": "#B3B8B7", success: "#00a96e", error: "#852e32", info: "#00b5ff", warning: "#ffbe00", - "--animation-btn": ".25s", - "--animation-input": ".2s", - "--border-btn": "1px", - "--btn-focus-scale": ".95", - "--rounded-badge": "1.9rem", - "--rounded-box": "1rem", - "--rounded-btn": ".5rem", - "--tab-border": "1px", - "--tab-radius": ".5rem", + // "--animation-btn": ".25s", + // "--animation-input": ".2s", + // "--border-btn": "1px", + // "--btn-focus-scale": ".95", + // "--rounded-badge": "1.9rem", + // "--rounded-box": "1rem", + // "--rounded-btn": ".5rem", + // "--tab-border": "1px", + // "--tab-radius": ".5rem", }, }, ], From fb8459b9ce08af3dba612880146658c0a306eac2 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 10:34:43 +0300 Subject: [PATCH 12/94] refactor: remove unused CSS and component files for cleaner codebase --- src/App.css | 42 --------------------------- src/App.tsx | 35 ---------------------- src/index.css | 72 ---------------------------------------------- tailwind.config.js | 52 +++++++-------------------------- 4 files changed, 10 insertions(+), 191 deletions(-) delete mode 100644 src/App.css delete mode 100644 src/App.tsx delete mode 100644 src/index.css diff --git a/src/App.css b/src/App.css deleted file mode 100644 index b9d355d..0000000 --- a/src/App.css +++ /dev/null @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/src/App.tsx b/src/App.tsx deleted file mode 100644 index 3d7ded3..0000000 --- a/src/App.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' - -function App() { - const [count, setCount] = useState(0) - - return ( - <> - -

Vite + React

-
- -

- Edit src/App.tsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- - ) -} - -export default App diff --git a/src/index.css b/src/index.css deleted file mode 100644 index e7d4bb2..0000000 --- a/src/index.css +++ /dev/null @@ -1,72 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/tailwind.config.js b/tailwind.config.js index d9a45be..e8e4863 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -31,39 +31,7 @@ export default { daisyui: { themes: [ { - light: { - "color-scheme": "light", - primary: "#1eb854", - "primary-focus": "#188c40", - "primary-content": "#241f31", - secondary: "#20d55f", - "secondary-focus": "#18aa4b", - "secondary-content": "#000000", - accent: "#d99330", - "accent-focus": "#b57721", - "accent-content": "#000000", - neutral: "#deddda", - "neutral-focus": "#c0bfbc", - "neutral-content": "#000000", - "base-100": "#ffffff", - "base-200": "#cfebe3", - "base-300": "#83b395", - "base-content": "#000000", - success: "#00a96e", - error: "#ff5861", - info: "#00b5ff", - warning: "#ffbe00", - "--animation-btn": ".25s", - "--animation-input": ".2s", - "--border-btn": "1px", - "--btn-focus-scale": ".95", - "--rounded-badge": "1.9rem", - "--rounded-box": "1rem", - "--rounded-btn": ".5rem", - "--tab-border": "1px", - "--tab-radius": ".5rem", - }, - dark: { + collabs: { "color-scheme": "dark", primary: "#1eb854", "primary-content": "#000000", @@ -81,15 +49,15 @@ export default { error: "#852e32", info: "#00b5ff", warning: "#ffbe00", - "--animation-btn": ".25s", - "--animation-input": ".2s", - "--border-btn": "1px", - "--btn-focus-scale": ".95", - "--rounded-badge": "1.9rem", - "--rounded-box": "1rem", - "--rounded-btn": ".5rem", - "--tab-border": "1px", - "--tab-radius": ".5rem", + // "--animation-btn": ".25s", + // "--animation-input": ".2s", + // "--border-btn": "1px", + // "--btn-focus-scale": ".95", + // "--rounded-badge": "1.9rem", + // "--rounded-box": "1rem", + // "--rounded-btn": ".5rem", + // "--tab-border": "1px", + // "--tab-radius": ".5rem", }, }, ], From af574084f8a6291dde8c0c0c223ab29dbe1024b6 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 10:50:12 +0300 Subject: [PATCH 13/94] cleanup tsc errors --- Syt.js | 333 ----------- package.json | 8 +- pnpm-lock.yaml | 526 ++---------------- src/scripts/scafold-pages/form-templates.ts | 9 +- .../scafold-pages/one-page-template.ts | 3 +- src/scripts/scafold-pages/script.ts | 24 +- tsconfig.app.tsbuildinfo | 2 +- vite.config.ts | 17 +- 8 files changed, 66 insertions(+), 856 deletions(-) delete mode 100644 Syt.js diff --git a/Syt.js b/Syt.js deleted file mode 100644 index 867e22d..0000000 --- a/Syt.js +++ /dev/null @@ -1,333 +0,0 @@ -import React from 'react' - -export default function Syt() { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ) -} diff --git a/package.json b/package.json index 94cf1fb..5a8ab3c 100644 --- a/package.json +++ b/package.json @@ -41,18 +41,14 @@ "@radix-ui/react-toggle-group": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.2", "@tanem/react-nprogress": "^5.0.51", - "@tanstack/react-form": "^0.33.0", "@tanstack/react-query": "^5.59.19", "@tanstack/react-router": "^1.79.0", "@tanstack/router-devtools": "^1.58.3", - "@tanstack/zod-form-adapter": "^0.33.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "1.0.0", "date-fns": "^3.0.0", "lucide-react": "^0.454.0", - "next-themes": "^0.3.0", - "pocketbase": "^0.21.5", "react": "^18.3.1", "react-day-picker": "8.10.1", "react-dom": "^18.3.1", @@ -60,9 +56,7 @@ "react-hot-toast": "^2.4.1", "react-resizable-panels": "^2.1.3", "react-responsive-pagination": "^2.8.0", - "react-to-print": "^2.15.1", "recharts": "^2.12.7", - "sonner": "^1.5.0", "tailwind-merge": "^2.5.4", "theme-change": "^2.5.0", "vaul": "^0.9.4", @@ -73,6 +67,7 @@ "@tanstack/react-query-devtools": "^5.59.19", "@tanstack/router-devtools": "^1.79.0", "@tanstack/router-plugin": "^1.79.0", + "@types/node": "^22.10.1", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.1", "@vitejs/plugin-react": "^4.3.3", @@ -86,6 +81,7 @@ "postcss": "^8.4.47", "prettier": "^3.3.2", "prettier-plugin-tailwindcss": "^0.6.5", + "rollup-plugin-analyzer": "^4.0.0", "tailwindcss": "^3.4.14", "tailwindcss-animate": "^1.0.7", "tsx": "^4.19.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 991af01..4f2f476 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -95,9 +95,6 @@ importers: '@tanem/react-nprogress': specifier: ^5.0.51 version: 5.0.52(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-form': - specifier: ^0.33.0 - version: 0.33.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@tanstack/react-query': specifier: ^5.59.19 version: 5.59.19(react@18.3.1) @@ -107,9 +104,6 @@ importers: '@tanstack/router-devtools': specifier: ^1.58.3 version: 1.79.0(@tanstack/react-router@1.79.0(@tanstack/router-generator@1.79.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/zod-form-adapter': - specifier: ^0.33.0 - version: 0.33.0(zod@3.23.8) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -125,12 +119,6 @@ importers: lucide-react: specifier: ^0.454.0 version: 0.454.0(react@18.3.1) - next-themes: - specifier: ^0.3.0 - version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - pocketbase: - specifier: ^0.21.5 - version: 0.21.5 react: specifier: ^18.3.1 version: 18.3.1 @@ -152,15 +140,9 @@ importers: react-responsive-pagination: specifier: ^2.8.0 version: 2.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-to-print: - specifier: ^2.15.1 - version: 2.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: specifier: ^2.12.7 version: 2.13.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - sonner: - specifier: ^1.5.0 - version: 1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.5.4 version: 2.5.4 @@ -182,7 +164,10 @@ importers: version: 5.59.19(@tanstack/react-query@5.59.19(react@18.3.1))(react@18.3.1) '@tanstack/router-plugin': specifier: ^1.79.0 - version: 1.79.0(vite@5.4.10) + version: 1.79.0(vite@5.4.10(@types/node@22.10.1)) + '@types/node': + specifier: ^22.10.1 + version: 22.10.1 '@types/react': specifier: ^18.3.11 version: 18.3.12 @@ -191,7 +176,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.3.3(vite@5.4.10) + version: 4.3.3(vite@5.4.10(@types/node@22.10.1)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.47) @@ -222,12 +207,18 @@ importers: prettier-plugin-tailwindcss: specifier: ^0.6.5 version: 0.6.8(prettier@3.3.3) + rollup-plugin-analyzer: + specifier: ^4.0.0 + version: 4.0.0 tailwindcss: specifier: ^3.4.14 version: 3.4.14 tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.14) + tsx: + specifier: ^4.19.2 + version: 4.19.2 typescript: specifier: ~5.6.2 version: 5.6.3 @@ -236,10 +227,10 @@ importers: version: 8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) vite: specifier: ^5.4.9 - version: 5.4.10 + version: 5.4.10(@types/node@22.10.1) vite-tsconfig-paths: specifier: ^5.1.0 - version: 5.1.0(typescript@5.6.3)(vite@5.4.10) + version: 5.1.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.10.1)) packages: @@ -1523,44 +1514,6 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@remix-run/node@2.13.1': - resolution: {integrity: sha512-2ly7bENj2n2FNBdEN60ZEbNCs5dAOex/QJoo6EZ8RNFfUQxVKAZkMwfQ4ETV2SLWDgkRLj3Jo5n/dx7O2ZGhGw==} - engines: {node: '>=18.0.0'} - peerDependencies: - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - - '@remix-run/router@1.20.0': - resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} - engines: {node: '>=14.0.0'} - - '@remix-run/server-runtime@2.13.1': - resolution: {integrity: sha512-2DfBPRcHKVzE4bCNsNkKB50BhCCKF73x+jiS836OyxSIAL+x0tguV2AEjmGXefEXc5AGGzoxkus0AUUEYa29Vg==} - engines: {node: '>=18.0.0'} - peerDependencies: - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - - '@remix-run/web-blob@3.1.0': - resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==} - - '@remix-run/web-fetch@4.4.2': - resolution: {integrity: sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==} - engines: {node: ^10.17 || >=12.3} - - '@remix-run/web-file@3.1.0': - resolution: {integrity: sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==} - - '@remix-run/web-form-data@3.1.0': - resolution: {integrity: sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==} - - '@remix-run/web-stream@1.1.0': - resolution: {integrity: sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==} - '@rollup/rollup-android-arm-eabi@4.24.3': resolution: {integrity: sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==} cpu: [arm] @@ -1657,9 +1610,6 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@tanstack/form-core@0.33.0': - resolution: {integrity: sha512-ouu1JVwLZgfPkIdIq3TWIZs++KpLOo8Bx4tXYOc/1KwA9qUQ0Iv/+Y6GfiC4wMcUzGCtLKOww84eZ8Qdge3ZmQ==} - '@tanstack/history@1.61.1': resolution: {integrity: sha512-2CqERleeqO3hkhJmyJm37tiL3LYgeOpmo8szqdjgtnnG0z7ZpvzkZz6HkfOr9Ca/ha7mhAiouSvLYuLkM37AMg==} engines: {node: '>=12'} @@ -1670,15 +1620,6 @@ packages: '@tanstack/query-devtools@5.59.19': resolution: {integrity: sha512-Gw+3zsADpqiYgx/6MMr9bP1+x2LR8vOuGjo5Un/89qwwP3z7WAHPWFagLFDYkLq68NX7ekUpW/EOYlUMugMXGA==} - '@tanstack/react-form@0.33.0': - resolution: {integrity: sha512-+292gWfP67uAu3zYeIQAQYEk6T7IvQUiuKwanCyATROG92FsxQrYeJdqDk4Bkh0MB8uy13CilrdxZOoEMdEKSQ==} - peerDependencies: - '@tanstack/start': ^1.43.13 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@tanstack/start': - optional: true - '@tanstack/react-query-devtools@5.59.19': resolution: {integrity: sha512-mYFWTHLtJr2HdyYPZPzzvQ2ksCsSL6L04fCtusPFD3waskXrtmvWvyuDIGeEGdVAYS0Urwxw/0sYvcTVQZH+zQ==} peerDependencies: @@ -1741,11 +1682,6 @@ packages: resolution: {integrity: sha512-soW+gE9QTmMaqXM17r7y1p8NiQVIIECjdTaYla8BKL5Flj030m3KuxEQoiG1XgjtA0O7ayznFz2YvPcXIy3qDg==} engines: {node: '>=12'} - '@tanstack/zod-form-adapter@0.33.0': - resolution: {integrity: sha512-vttDPKRb647UdOR3qUSN8bscj8wZibdYE6DR1eUbTmGdDT4OiwA1rDKOEpzmLQSsDbY1vLDAAfANQ1nApHoUFw==} - peerDependencies: - zod: ^3.x - '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1758,9 +1694,6 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -1794,6 +1727,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@22.10.1': + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} @@ -1866,16 +1802,6 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@web3-storage/multipart-parser@1.0.0': - resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} - - '@zxing/text-encoding@0.9.0': - resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1929,10 +1855,6 @@ packages: peerDependencies: postcss: ^8.1.0 - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - babel-dead-code-elimination@1.0.6: resolution: {integrity: sha512-JxFi9qyRJpN0LjEbbjbN8g0ux71Qppn9R8Qe3k6QzHg2CaKsbUQtbn307LQGiDLGjV6JCtEFqfxzVig9MyDCHQ==} @@ -1958,13 +1880,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2018,14 +1933,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2093,10 +2000,6 @@ packages: resolution: {integrity: sha512-hA27cdBasdwd4/iEjn+aidoCrRroDuo3G5W9NDKaVCJI437Mm/3eSL/2u7MkZ0pt8a+TrYF3aT2pFVemTS3how==} engines: {node: '>=16.9.0'} - data-uri-to-buffer@3.0.1: - resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} - engines: {node: '>= 6'} - date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} @@ -2112,16 +2015,9 @@ packages: decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} - decode-formdata@0.8.0: - resolution: {integrity: sha512-iUzDgnWsw5ToSkFY7VPFA5Gfph6ROoOxOB7Ybna4miUSzLZ4KaSJk6IAB2AdW6+C9vCVWhjjNA4gjT6wF3eZHQ==} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -2150,14 +2046,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -2229,10 +2117,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -2278,9 +2162,6 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} @@ -2300,10 +2181,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -2343,9 +2220,6 @@ packages: peerDependencies: csstype: ^3.0.10 - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -2353,21 +2227,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2387,9 +2246,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} @@ -2397,18 +2253,10 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} @@ -2421,10 +2269,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2433,10 +2277,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2535,10 +2375,6 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2553,12 +2389,6 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next-themes@0.3.0: - resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} - peerDependencies: - react: ^16.8 || ^17 || ^18 - react-dom: ^16.8 || ^17 || ^18 - node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -2627,13 +2457,6 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - pocketbase@0.21.5: - resolution: {integrity: sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog==} - - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -2841,12 +2664,6 @@ packages: '@types/react': optional: true - react-to-print@2.15.1: - resolution: {integrity: sha512-1foogIFbCpzAVxydkhBiDfMiFYhIMphiagDOfcG4X/EcQ+fBPqJ0rby9Wv/emzY1YLkIQy/rEgOrWQT+rBKhjw==} - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -2892,6 +2709,10 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rollup-plugin-analyzer@4.0.0: + resolution: {integrity: sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==} + engines: {node: '>=8.0.0'} + rollup@4.24.3: resolution: {integrity: sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2912,13 +2733,6 @@ packages: engines: {node: '>=10'} hasBin: true - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2931,30 +2745,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sonner@1.7.0: - resolution: {integrity: sha512-W6dH7m5MujEPyug3lpI2l3TC3Pp1+LTgK0Efg+IHDrBbtEjyCmCHHo6yfNBOsf1tFZ6zf+jceWwB38baC8yO9g==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - stream-slice@0.1.2: - resolution: {integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3051,9 +2845,6 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-stream@2.4.0: - resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -3072,9 +2863,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici@6.20.1: - resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} - engines: {node: '>=18.17'} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} unplugin@1.15.0: resolution: {integrity: sha512-jTPIs63W+DUEDW207ztbaoO7cQ4p5aVaB823LSlxpsFEU3Mykwxf3ZGC/wzxFJeZlASZYgVrWeo7LgOrqJZ8RA==} @@ -3122,9 +2912,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - vaul@0.9.9: resolution: {integrity: sha512-7afKg48srluhZwIkaU+lgGtFCUsYBSGOl8vcc8N/M3YQlZFlynHD15AE+pwrYdc826o7nrIND4lL9Y6b9WWZZQ==} peerDependencies: @@ -3173,20 +2960,9 @@ packages: terser: optional: true - web-encoding@1.1.5: - resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4431,60 +4207,6 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@remix-run/node@2.13.1(typescript@5.6.3)': - dependencies: - '@remix-run/server-runtime': 2.13.1(typescript@5.6.3) - '@remix-run/web-fetch': 4.4.2 - '@web3-storage/multipart-parser': 1.0.0 - cookie-signature: 1.2.2 - source-map-support: 0.5.21 - stream-slice: 0.1.2 - undici: 6.20.1 - optionalDependencies: - typescript: 5.6.3 - - '@remix-run/router@1.20.0': {} - - '@remix-run/server-runtime@2.13.1(typescript@5.6.3)': - dependencies: - '@remix-run/router': 1.20.0 - '@types/cookie': 0.6.0 - '@web3-storage/multipart-parser': 1.0.0 - cookie: 0.6.0 - set-cookie-parser: 2.7.1 - source-map: 0.7.4 - turbo-stream: 2.4.0 - optionalDependencies: - typescript: 5.6.3 - - '@remix-run/web-blob@3.1.0': - dependencies: - '@remix-run/web-stream': 1.1.0 - web-encoding: 1.1.5 - - '@remix-run/web-fetch@4.4.2': - dependencies: - '@remix-run/web-blob': 3.1.0 - '@remix-run/web-file': 3.1.0 - '@remix-run/web-form-data': 3.1.0 - '@remix-run/web-stream': 1.1.0 - '@web3-storage/multipart-parser': 1.0.0 - abort-controller: 3.0.0 - data-uri-to-buffer: 3.0.1 - mrmime: 1.0.1 - - '@remix-run/web-file@3.1.0': - dependencies: - '@remix-run/web-blob': 3.1.0 - - '@remix-run/web-form-data@3.1.0': - dependencies: - web-encoding: 1.1.5 - - '@remix-run/web-stream@1.1.0': - dependencies: - web-streams-polyfill: 3.3.3 - '@rollup/rollup-android-arm-eabi@4.24.3': optional: true @@ -4546,27 +4268,12 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/form-core@0.33.0': - dependencies: - '@tanstack/store': 0.5.5 - '@tanstack/history@1.61.1': {} '@tanstack/query-core@5.59.17': {} '@tanstack/query-devtools@5.59.19': {} - '@tanstack/react-form@0.33.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': - dependencies: - '@remix-run/node': 2.13.1(typescript@5.6.3) - '@tanstack/form-core': 0.33.0 - '@tanstack/react-store': 0.5.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - decode-formdata: 0.8.0 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - typescript - '@tanstack/react-query-devtools@5.59.19(@tanstack/react-query@5.59.19(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/query-devtools': 5.59.19 @@ -4613,7 +4320,7 @@ snapshots: tsx: 4.19.2 zod: 3.23.8 - '@tanstack/router-plugin@1.79.0(vite@5.4.10)': + '@tanstack/router-plugin@1.79.0(vite@5.4.10(@types/node@22.10.1))': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.2 @@ -4634,7 +4341,7 @@ snapshots: unplugin: 1.15.0 zod: 3.23.8 optionalDependencies: - vite: 5.4.10 + vite: 5.4.10(@types/node@22.10.1) transitivePeerDependencies: - supports-color - webpack-sources @@ -4643,11 +4350,6 @@ snapshots: '@tanstack/virtual-file-routes@1.64.0': {} - '@tanstack/zod-form-adapter@0.33.0(zod@3.23.8)': - dependencies: - '@tanstack/form-core': 0.33.0 - zod: 3.23.8 - '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.1 @@ -4669,8 +4371,6 @@ snapshots: dependencies: '@babel/types': 7.26.0 - '@types/cookie@0.6.0': {} - '@types/d3-array@3.2.1': {} '@types/d3-color@3.1.3': {} @@ -4699,6 +4399,10 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/node@22.10.1': + dependencies: + undici-types: 6.20.0 + '@types/prop-types@15.7.13': {} '@types/react-dom@18.3.1': @@ -4791,26 +4495,17 @@ snapshots: '@typescript-eslint/types': 8.12.2 eslint-visitor-keys: 3.4.3 - '@vitejs/plugin-react@4.3.3(vite@5.4.10)': + '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.10.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.10 + vite: 5.4.10(@types/node@22.10.1) transitivePeerDependencies: - supports-color - '@web3-storage/multipart-parser@1.0.0': {} - - '@zxing/text-encoding@0.9.0': - optional: true - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -4859,10 +4554,6 @@ snapshots: postcss: 8.4.47 postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - babel-dead-code-elimination@1.0.6: dependencies: '@babel/core': 7.26.0 @@ -4896,16 +4587,6 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - buffer-from@1.1.2: {} - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -4959,10 +4640,6 @@ snapshots: convert-source-map@2.0.0: {} - cookie-signature@1.2.2: {} - - cookie@0.6.0: {} - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -5027,8 +4704,6 @@ snapshots: transitivePeerDependencies: - postcss - data-uri-to-buffer@3.0.1: {} - date-fns@3.6.0: {} debug@4.3.7: @@ -5037,16 +4712,8 @@ snapshots: decimal.js-light@2.5.1: {} - decode-formdata@0.8.0: {} - deep-is@0.1.4: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - detect-node-es@1.1.0: {} didyoumean@1.2.2: {} @@ -5068,12 +4735,6 @@ snapshots: emoji-regex@9.2.2: {} - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -5208,8 +4869,6 @@ snapshots: esutils@2.0.3: {} - event-target-shim@5.0.1: {} - eventemitter3@4.0.7: {} fast-deep-equal@3.1.3: {} @@ -5254,10 +4913,6 @@ snapshots: flatted@3.3.1: {} - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 @@ -5272,14 +4927,6 @@ snapshots: gensync@1.0.0-beta.2: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - get-nonce@1.0.1: {} get-tsconfig@4.8.1: @@ -5315,26 +4962,10 @@ snapshots: dependencies: csstype: 3.1.3 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - graphemer@1.4.0: {} has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -5352,25 +4983,16 @@ snapshots: imurmurhash@0.1.4: {} - inherits@2.0.4: {} - internmap@2.0.3: {} invariant@2.2.4: dependencies: loose-envify: 1.4.0 - is-arguments@1.1.1: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-callable@1.2.7: {} - is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -5379,20 +5001,12 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-number@7.0.0: {} - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 - isexe@2.0.0: {} jackspeak@3.4.3: @@ -5473,8 +5087,6 @@ snapshots: minipass@7.1.2: {} - mrmime@1.0.1: {} - ms@2.1.3: {} mz@2.7.0: @@ -5487,11 +5099,6 @@ snapshots: natural-compare@1.4.0: {} - next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - node-releases@2.0.18: {} normalize-path@3.0.0: {} @@ -5544,10 +5151,6 @@ snapshots: pirates@4.0.6: {} - pocketbase@0.21.5: {} - - possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.47): dependencies: postcss: 8.4.47 @@ -5690,11 +5293,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 - react-to-print@2.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.0 @@ -5747,6 +5345,8 @@ snapshots: reusify@1.0.4: {} + rollup-plugin-analyzer@4.0.0: {} + rollup@4.24.3: dependencies: '@types/estree': 1.0.6 @@ -5783,17 +5383,6 @@ snapshots: semver@7.6.3: {} - set-cookie-parser@2.7.1: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -5802,24 +5391,8 @@ snapshots: signal-exit@4.1.0: {} - sonner@1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - source-map-js@1.2.1: {} - source-map-support@0.5.21: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.7.4: {} - - stream-slice@0.1.2: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -5930,8 +5503,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - turbo-stream@2.4.0: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -5949,7 +5520,7 @@ snapshots: typescript@5.6.3: {} - undici@6.20.1: {} + undici-types@6.20.0: {} unplugin@1.15.0: dependencies: @@ -5987,14 +5558,6 @@ snapshots: util-deprecate@1.0.2: {} - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 - vaul@0.9.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -6021,43 +5584,28 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-tsconfig-paths@5.1.0(typescript@5.6.3)(vite@5.4.10): + vite-tsconfig-paths@5.1.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.10.1)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.6.3) optionalDependencies: - vite: 5.4.10 + vite: 5.4.10(@types/node@22.10.1) transitivePeerDependencies: - supports-color - typescript - vite@5.4.10: + vite@5.4.10(@types/node@22.10.1): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.3 optionalDependencies: + '@types/node': 22.10.1 fsevents: 2.3.3 - web-encoding@1.1.5: - dependencies: - util: 0.12.5 - optionalDependencies: - '@zxing/text-encoding': 0.9.0 - - web-streams-polyfill@3.3.3: {} - webpack-virtual-modules@0.6.2: {} - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 diff --git a/src/scripts/scafold-pages/form-templates.ts b/src/scripts/scafold-pages/form-templates.ts index e4f1c95..cfdd567 100644 --- a/src/scripts/scafold-pages/form-templates.ts +++ b/src/scripts/scafold-pages/form-templates.ts @@ -1,7 +1,6 @@ // /-components/form/create export function rootPageCreateFormComponentsTemplate( - pagename: string, - path: string, + pagename: string ) { const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); return ` @@ -68,8 +67,7 @@ export function Create${capitalpagename}Form() { } // /-components/form/update export function rootPageUpdateFormComponentsTemplate( - pagename: string, - path: string, + pagename: string ) { const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); return ` @@ -133,8 +131,7 @@ export function Update${capitalpagename}form({ item }: Update${capitalpagename}f } // /-components/form/base export function rootPageBaseFormComponentsTemplate( - pagename: string, - path: string, + pagename: string ) { const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); return ` diff --git a/src/scripts/scafold-pages/one-page-template.ts b/src/scripts/scafold-pages/one-page-template.ts index 87271a3..0623d01 100644 --- a/src/scripts/scafold-pages/one-page-template.ts +++ b/src/scripts/scafold-pages/one-page-template.ts @@ -16,8 +16,7 @@ export const Route = createFileRoute('/${path}/$${pagename}/')({ } // /-components/one${capitalpagename}/one${capitalpagename}Page export function rootOnePageComponentsTemplate( - pagename: string, - path: string, + pagename: string ) { const capitalpagename = pagename.charAt(0).toUpperCase() + pagename.slice(1); return ` diff --git a/src/scripts/scafold-pages/script.ts b/src/scripts/scafold-pages/script.ts index e0ba876..4c3bff4 100644 --- a/src/scripts/scafold-pages/script.ts +++ b/src/scripts/scafold-pages/script.ts @@ -49,15 +49,15 @@ async function scaffoldPage(pagename: string, path: string) { const baseForm = { path: `${rootPath}/-components/form/base.tsx`, - component: rootPageBaseFormComponentsTemplate(pagename, rootPath), + component: rootPageBaseFormComponentsTemplate(pagename), }; const createForm = { - path: `${rootPath}/-components/form/create.tsx`, - component: rootPageCreateFormComponentsTemplate(pagename, rootPath), + path: `}/-components/form/create.tsx`, + component: rootPageCreateFormComponentsTemplate(pagename), }; const updateForm = { - path: `${rootPath}/-components/form/update.tsx`, - component: rootPageUpdateFormComponentsTemplate(pagename, rootPath), + path: `}/-components/form/update.tsx`, + component: rootPageUpdateFormComponentsTemplate(pagename), }; // const listComponent = { @@ -70,7 +70,7 @@ async function scaffoldPage(pagename: string, path: string) { } const onepageComponent = { path: `${rootPath}/-components/one${pagename}/One${capitalpagename}Page.tsx`, - component: rootOnePageComponentsTemplate(pagename, rootPath), + component: rootOnePageComponentsTemplate(pagename), }; const onepageDetailsComponent = { path: `${rootPath}/-components/one${pagename}/One${capitalpagename}Details.tsx`, @@ -78,7 +78,7 @@ async function scaffoldPage(pagename: string, path: string) { } const queryOptions = { path: `${rootPath}/-query-options/${pagename}-query-option.ts`, - component: rootPageQeuryOptionsTemplate(pagename, rootPath), + component: rootPageQeuryOptionsTemplate(pagename), }; const allPaths = [ @@ -131,20 +131,12 @@ function main() { if (!pagename) { throw new Error("No page name provided. try /dashboard/new") } - // console.log(`============= Creating page ========== `,process.argv) - // console.log(`============= Creating page ${pagename} at ${components_path} ========== `) return scaffoldPage(pagename,components_path) } main() .catch((err) => { - // console.log(" ===bad things happend ===", err.message) + console.log(" === something went wrong scaffolding ===", err.message) }) -// async function uwu(){ -// console.log("uwu") -// await mkdir("./slime") -// await writeFile("./slime/uwu.txt","uwu") -// } -// uwu() diff --git a/tsconfig.app.tsbuildinfo b/tsconfig.app.tsbuildinfo index 47d0636..b9ac09f 100644 --- a/tsconfig.app.tsbuildinfo +++ b/tsconfig.app.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/App.tsx","./src/main.tsx","./src/routeTree.gen.ts","./src/vite-env.d.ts","./src/components/toasters.tsx","./src/components/flip-clock/DigitalFlipClock.tsx","./src/components/lib/shadcn-tailwind-config.ts","./src/components/lib/utils.ts","./src/components/loaders/GenericDataCardsListSuspenseFallback.tsx","./src/components/navigation/CurrentUser.tsx","./src/components/navigation/DashboardNavigationMenu.tsx","./src/components/navigation/LandingPageNavbar.tsx","./src/components/navigation/NavbarRoutes.tsx","./src/components/navigation/ThemeToggle.tsx","./src/components/navigation/routes.tsx","./src/components/navigation/tailwind-indicator.tsx","./src/components/navigation/nprogress/Nprogress.tsx","./src/components/navigation/nprogress/parts.tsx","./src/components/pagination/ReactresponsivePagination.tsx","./src/components/search/SearchBox.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/aspect-ratio.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/chart.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/context-menu.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/menubar.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/resizable.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/components/wrappers/DiaDrawer.tsx","./src/components/wrappers/ErrorOutput.tsx","./src/components/wrappers/ErrorWrapper.tsx","./src/components/wrappers/GenericTable.tsx","./src/components/wrappers/ItemNotFound.tsx","./src/components/wrappers/ListPageHeader.tsx","./src/components/wrappers/OptionalTextFields.tsx","./src/components/wrappers/TimeCompponent.tsx","./src/components/wrappers/custom-icons.tsx","./src/hooks/date.ts","./src/hooks/use-debouncer.ts","./src/hooks/use-media-query.ts","./src/hooks/use-mobile.tsx","./src/hooks/use-storage.tsx","./src/lib/tanstack/types.ts","./src/lib/tanstack/query/MutationButton.tsx","./src/lib/tanstack/query/use-viewer.tsx","./src/lib/tanstack/router/RouterNotFoundComponent.tsx","./src/lib/tanstack/router/RouterPendingComponent.tsx","./src/lib/tanstack/router/TSRBreadCrumbs.tsx","./src/lib/tanstack/router/routerErrorComponent.tsx","./src/lib/tanstack/router/use-theme.ts","./src/lib/tanstack/router/use-tsr-breadcrumbs.ts","./src/routes/__root.tsx","./src/routes/index.tsx","./src/routes/-components/HomePage.tsx","./src/routes/-components/RootComponent.tsx","./src/routes/auth/index.tsx","./src/routes/auth/signup.tsx","./src/routes/dashboard/index.tsx","./src/routes/dashboard/projects.tsx","./src/routes/dashboard/settings.tsx","./src/routes/dashboard/-components/DashboardPage.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardTheme.tsx","./src/routes/profile/index.tsx","./src/utils/concaterrors.ts","./src/utils/object.ts","./src/utils/string.ts"],"version":"5.6.3"} \ No newline at end of file +{"root":["./src/main.tsx","./src/routeTree.gen.ts","./src/vite-env.d.ts","./src/components/toasters.tsx","./src/components/lib/shadcn-tailwind-config.ts","./src/components/lib/utils.ts","./src/components/loaders/GenericDataCardsListSuspenseFallback.tsx","./src/components/navigation/CurrentUser.tsx","./src/components/navigation/DashboardNavigationMenu.tsx","./src/components/navigation/LandingPageNavbar.tsx","./src/components/navigation/NavbarRoutes.tsx","./src/components/navigation/ThemeToggle.tsx","./src/components/navigation/routes.tsx","./src/components/navigation/tailwind-indicator.tsx","./src/components/navigation/nprogress/Nprogress.tsx","./src/components/navigation/nprogress/parts.tsx","./src/components/pagination/ReactresponsivePagination.tsx","./src/components/search/SearchBox.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/aspect-ratio.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/chart.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/context-menu.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/menubar.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/resizable.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/components/wrappers/DiaDrawer.tsx","./src/components/wrappers/ErrorOutput.tsx","./src/components/wrappers/ErrorWrapper.tsx","./src/components/wrappers/GenericTable.tsx","./src/components/wrappers/ItemNotFound.tsx","./src/components/wrappers/ListPageHeader.tsx","./src/components/wrappers/OptionalTextFields.tsx","./src/components/wrappers/TimeCompponent.tsx","./src/components/wrappers/custom-icons.tsx","./src/hooks/date.ts","./src/hooks/use-debouncer.ts","./src/hooks/use-media-query.ts","./src/hooks/use-mobile.tsx","./src/hooks/use-storage.tsx","./src/lib/tanstack/types.ts","./src/lib/tanstack/query/MutationButton.tsx","./src/lib/tanstack/query/use-viewer.tsx","./src/lib/tanstack/router/RouterNotFoundComponent.tsx","./src/lib/tanstack/router/RouterPendingComponent.tsx","./src/lib/tanstack/router/TSRBreadCrumbs.tsx","./src/lib/tanstack/router/routerErrorComponent.tsx","./src/lib/tanstack/router/use-theme.ts","./src/lib/tanstack/router/use-tsr-breadcrumbs.ts","./src/routes/__root.tsx","./src/routes/index.tsx","./src/routes/-components/HomePage.tsx","./src/routes/-components/RootComponent.tsx","./src/routes/auth/index.tsx","./src/routes/auth/signup.tsx","./src/routes/dashboard/index.tsx","./src/routes/dashboard/layout.tsx","./src/routes/dashboard/-components/DashboardPage.tsx","./src/routes/dashboard/-components/DashboardUserDropdown.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutActions.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutHeader.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutSearchbar.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardpostProjectButton.tsx","./src/routes/dashboard/-components/dashboard-page/DashBoardPage.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarActions.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardTheme.tsx","./src/routes/dashboard/challenges/index.tsx","./src/routes/dashboard/hackathons/index.tsx","./src/routes/dashboard/inbox/index.tsx","./src/routes/dashboard/leaderboards/index.tsx","./src/routes/dashboard/members/index.tsx","./src/routes/dashboard/os-projects/index.tsx","./src/routes/dashboard/projects/index.tsx","./src/routes/dashboard/teams/index.tsx","./src/routes/profile/index.tsx","./src/scripts/scafold-pages/base-templates.ts","./src/scripts/scafold-pages/form-templates.ts","./src/scripts/scafold-pages/one-page-template.ts","./src/scripts/scafold-pages/query-options-tempaltes.ts","./src/scripts/scafold-pages/script.ts","./src/utils/concaterrors.ts","./src/utils/object.ts","./src/utils/string.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 8388ff6..95a2484 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,11 +2,22 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import { TanStackRouterVite } from '@tanstack/router-plugin/vite' import tsconfigPaths from "vite-tsconfig-paths"; +import analyze from "rollup-plugin-analyzer"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [TanStackRouterVite({ - routeToken: "layout" // <-- Add this line - }), react(), tsconfigPaths()], + plugins: [ + TanStackRouterVite({ + routeToken: "layout", // <-- Add this line + }), + react(), + tsconfigPaths(), + analyze({ + // highlight the modules with size > 40kb + filter(moduleObject) { + return moduleObject.size > 40000; + }, + }), + ], server: { port: 3000, host: true, From 6da3b67fed1fabf18255354e0eaf014022792a81 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 10:54:46 +0300 Subject: [PATCH 14/94] enable tanstack router auto codesplitting --- vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/vite.config.ts b/vite.config.ts index 95a2484..a6a0a17 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -8,6 +8,7 @@ export default defineConfig({ plugins: [ TanStackRouterVite({ routeToken: "layout", // <-- Add this line + autoCodeSplitting:true }), react(), tsconfigPaths(), From f34b7400af2fba6f72f8e3f0a076ed6ac7d8b39b Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 11:04:11 +0300 Subject: [PATCH 15/94] lazy load router devtools to keep it out of the final build --- src/routes/-components/RootComponent.tsx | 2 +- src/routes/-components/RouterDevttols.tsx | 13 +++++++++++++ tsconfig.app.tsbuildinfo | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 src/routes/-components/RouterDevttols.tsx diff --git a/src/routes/-components/RootComponent.tsx b/src/routes/-components/RootComponent.tsx index d45aa6f..b66c1bb 100644 --- a/src/routes/-components/RootComponent.tsx +++ b/src/routes/-components/RootComponent.tsx @@ -1,8 +1,8 @@ import { TailwindIndicator } from "@/components/navigation/tailwind-indicator"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { Outlet } from "@tanstack/react-router"; -import { TanStackRouterDevtools } from "@tanstack/router-devtools"; import { Toaster } from "react-hot-toast"; +import { TanStackRouterDevtools } from "./RouterDevttols"; export function RootComponent() { return ( diff --git a/src/routes/-components/RouterDevttols.tsx b/src/routes/-components/RouterDevttols.tsx new file mode 100644 index 0000000..dc415c2 --- /dev/null +++ b/src/routes/-components/RouterDevttols.tsx @@ -0,0 +1,13 @@ +import React from "react"; + +export const TanStackRouterDevtools = + process.env.NODE_ENV === "production" + ? () => null // Render nothing in production + : React.lazy(() => + // Lazy load in development + import("@tanstack/router-devtools").then((res) => ({ + default: res.TanStackRouterDevtools, + // For Embedded Mode + // default: res.TanStackRouterDevtoolsPanel + })), + ); diff --git a/tsconfig.app.tsbuildinfo b/tsconfig.app.tsbuildinfo index b9ac09f..e2c5b73 100644 --- a/tsconfig.app.tsbuildinfo +++ b/tsconfig.app.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/main.tsx","./src/routeTree.gen.ts","./src/vite-env.d.ts","./src/components/toasters.tsx","./src/components/lib/shadcn-tailwind-config.ts","./src/components/lib/utils.ts","./src/components/loaders/GenericDataCardsListSuspenseFallback.tsx","./src/components/navigation/CurrentUser.tsx","./src/components/navigation/DashboardNavigationMenu.tsx","./src/components/navigation/LandingPageNavbar.tsx","./src/components/navigation/NavbarRoutes.tsx","./src/components/navigation/ThemeToggle.tsx","./src/components/navigation/routes.tsx","./src/components/navigation/tailwind-indicator.tsx","./src/components/navigation/nprogress/Nprogress.tsx","./src/components/navigation/nprogress/parts.tsx","./src/components/pagination/ReactresponsivePagination.tsx","./src/components/search/SearchBox.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/aspect-ratio.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/chart.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/context-menu.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/menubar.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/resizable.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/components/wrappers/DiaDrawer.tsx","./src/components/wrappers/ErrorOutput.tsx","./src/components/wrappers/ErrorWrapper.tsx","./src/components/wrappers/GenericTable.tsx","./src/components/wrappers/ItemNotFound.tsx","./src/components/wrappers/ListPageHeader.tsx","./src/components/wrappers/OptionalTextFields.tsx","./src/components/wrappers/TimeCompponent.tsx","./src/components/wrappers/custom-icons.tsx","./src/hooks/date.ts","./src/hooks/use-debouncer.ts","./src/hooks/use-media-query.ts","./src/hooks/use-mobile.tsx","./src/hooks/use-storage.tsx","./src/lib/tanstack/types.ts","./src/lib/tanstack/query/MutationButton.tsx","./src/lib/tanstack/query/use-viewer.tsx","./src/lib/tanstack/router/RouterNotFoundComponent.tsx","./src/lib/tanstack/router/RouterPendingComponent.tsx","./src/lib/tanstack/router/TSRBreadCrumbs.tsx","./src/lib/tanstack/router/routerErrorComponent.tsx","./src/lib/tanstack/router/use-theme.ts","./src/lib/tanstack/router/use-tsr-breadcrumbs.ts","./src/routes/__root.tsx","./src/routes/index.tsx","./src/routes/-components/HomePage.tsx","./src/routes/-components/RootComponent.tsx","./src/routes/auth/index.tsx","./src/routes/auth/signup.tsx","./src/routes/dashboard/index.tsx","./src/routes/dashboard/layout.tsx","./src/routes/dashboard/-components/DashboardPage.tsx","./src/routes/dashboard/-components/DashboardUserDropdown.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutActions.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutHeader.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutSearchbar.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardpostProjectButton.tsx","./src/routes/dashboard/-components/dashboard-page/DashBoardPage.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarActions.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardTheme.tsx","./src/routes/dashboard/challenges/index.tsx","./src/routes/dashboard/hackathons/index.tsx","./src/routes/dashboard/inbox/index.tsx","./src/routes/dashboard/leaderboards/index.tsx","./src/routes/dashboard/members/index.tsx","./src/routes/dashboard/os-projects/index.tsx","./src/routes/dashboard/projects/index.tsx","./src/routes/dashboard/teams/index.tsx","./src/routes/profile/index.tsx","./src/scripts/scafold-pages/base-templates.ts","./src/scripts/scafold-pages/form-templates.ts","./src/scripts/scafold-pages/one-page-template.ts","./src/scripts/scafold-pages/query-options-tempaltes.ts","./src/scripts/scafold-pages/script.ts","./src/utils/concaterrors.ts","./src/utils/object.ts","./src/utils/string.ts"],"version":"5.6.3"} \ No newline at end of file +{"root":["./src/main.tsx","./src/routeTree.gen.ts","./src/vite-env.d.ts","./src/components/toasters.tsx","./src/components/lib/shadcn-tailwind-config.ts","./src/components/lib/utils.ts","./src/components/loaders/GenericDataCardsListSuspenseFallback.tsx","./src/components/navigation/CurrentUser.tsx","./src/components/navigation/DashboardNavigationMenu.tsx","./src/components/navigation/LandingPageNavbar.tsx","./src/components/navigation/NavbarRoutes.tsx","./src/components/navigation/ThemeToggle.tsx","./src/components/navigation/routes.tsx","./src/components/navigation/tailwind-indicator.tsx","./src/components/navigation/nprogress/Nprogress.tsx","./src/components/navigation/nprogress/parts.tsx","./src/components/pagination/ReactresponsivePagination.tsx","./src/components/search/SearchBox.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/aspect-ratio.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/chart.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/context-menu.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/menubar.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/resizable.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/components/wrappers/DiaDrawer.tsx","./src/components/wrappers/ErrorOutput.tsx","./src/components/wrappers/ErrorWrapper.tsx","./src/components/wrappers/GenericTable.tsx","./src/components/wrappers/ItemNotFound.tsx","./src/components/wrappers/ListPageHeader.tsx","./src/components/wrappers/OptionalTextFields.tsx","./src/components/wrappers/TimeCompponent.tsx","./src/components/wrappers/custom-icons.tsx","./src/hooks/date.ts","./src/hooks/use-debouncer.ts","./src/hooks/use-media-query.ts","./src/hooks/use-mobile.tsx","./src/hooks/use-storage.tsx","./src/lib/tanstack/types.ts","./src/lib/tanstack/query/MutationButton.tsx","./src/lib/tanstack/query/use-viewer.tsx","./src/lib/tanstack/router/RouterNotFoundComponent.tsx","./src/lib/tanstack/router/RouterPendingComponent.tsx","./src/lib/tanstack/router/TSRBreadCrumbs.tsx","./src/lib/tanstack/router/routerErrorComponent.tsx","./src/lib/tanstack/router/use-theme.ts","./src/lib/tanstack/router/use-tsr-breadcrumbs.ts","./src/routes/__root.tsx","./src/routes/index.tsx","./src/routes/-components/HomePage.tsx","./src/routes/-components/RootComponent.tsx","./src/routes/-components/RouterDevttols.tsx","./src/routes/auth/index.tsx","./src/routes/auth/signup.tsx","./src/routes/dashboard/index.tsx","./src/routes/dashboard/layout.tsx","./src/routes/dashboard/-components/DashboardPage.tsx","./src/routes/dashboard/-components/DashboardUserDropdown.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutActions.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutHeader.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardLayoutSearchbar.tsx","./src/routes/dashboard/-components/dashboard-layout/DashboardpostProjectButton.tsx","./src/routes/dashboard/-components/dashboard-page/DashBoardPage.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardLayout.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarActions.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarHeader.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebarLinks.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardSidebaruser.tsx","./src/routes/dashboard/-components/dashoboard-sidebar/DashboardTheme.tsx","./src/routes/dashboard/challenges/index.tsx","./src/routes/dashboard/hackathons/index.tsx","./src/routes/dashboard/inbox/index.tsx","./src/routes/dashboard/leaderboards/index.tsx","./src/routes/dashboard/members/index.tsx","./src/routes/dashboard/os-projects/index.tsx","./src/routes/dashboard/projects/index.tsx","./src/routes/dashboard/teams/index.tsx","./src/routes/profile/index.tsx","./src/scripts/scafold-pages/base-templates.ts","./src/scripts/scafold-pages/form-templates.ts","./src/scripts/scafold-pages/one-page-template.ts","./src/scripts/scafold-pages/query-options-tempaltes.ts","./src/scripts/scafold-pages/script.ts","./src/utils/concaterrors.ts","./src/utils/object.ts","./src/utils/string.ts"],"version":"5.6.3"} \ No newline at end of file From 617839a6d3552af4fa199ea2d71f3d015f0acef6 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 11:07:16 +0300 Subject: [PATCH 16/94] ignore tsconfig.node.tsbuildinfo --- tsconfig.node.tsbuildinfo | 1 - 1 file changed, 1 deletion(-) delete mode 100644 tsconfig.node.tsbuildinfo diff --git a/tsconfig.node.tsbuildinfo b/tsconfig.node.tsbuildinfo deleted file mode 100644 index 75ea001..0000000 --- a/tsconfig.node.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["./vite.config.ts"],"version":"5.6.3"} \ No newline at end of file From b070015643b4b9ea36b9e4c329e95c08d3e1adc1 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 11:07:46 +0300 Subject: [PATCH 17/94] update gitignore to remove tsconfig.node.tsbuildinfo --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a547bf3..07c7b5e 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ dist-ssr *.njsproj *.sln *.sw? +tsconfig.node.tsbuildinfo From 7f2f5dd05de0f255a0e3f0eda700753636fdd400 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 11:15:12 +0300 Subject: [PATCH 18/94] document the css view transions --- src/main.tsx | 2 ++ src/routes/__root.tsx | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.tsx b/src/main.tsx index 6970fa9..b724419 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -59,6 +59,8 @@ declare module "@tanstack/react-router" { function App() { useEffect(() => { + // other view transition styles include "angled", "wipe", "slides", "flip", "vertical" + // currently doesn't work in firefox document.documentElement.dataset.style = "vertical"; themeChange(false); }, []); diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 981e3c1..53a30a9 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -4,8 +4,8 @@ import "@/view-transition/wipe-transition.css"; import "@/view-transition/slides-transition.css"; import "@/view-transition/flip-transition.css"; import "@/view-transition/vertical-transition.css"; -import "./styles.css"; import "../components/pagination/pagination.css"; +import "./styles.css"; import { QueryClient } from "@tanstack/react-query"; import { RootComponent } from "./-components/RootComponent"; import { z } from "zod"; From f4a15751a42efa2accf99ae15e95d75f858a9754 Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Thu, 28 Nov 2024 16:05:04 +0300 Subject: [PATCH 19/94] add colors to config --- .../-components/RepositoriesSection.tsx | 67 ++++++++----------- tailwind.config.js | 21 ++++++ 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/src/routes/-components/RepositoriesSection.tsx b/src/routes/-components/RepositoriesSection.tsx index 0b73c19..b8ce159 100644 --- a/src/routes/-components/RepositoriesSection.tsx +++ b/src/routes/-components/RepositoriesSection.tsx @@ -1,8 +1,5 @@ import { Link } from "@tanstack/react-router"; import { useMemo, useState } from "react"; -import { Swiper, SwiperSlide } from "swiper/react"; - -import "swiper/css"; import { cn } from "@/components/lib/utils"; import { CustomIcons } from "@/components/wrappers/custom-icons"; @@ -18,7 +15,7 @@ export type Project = { const ALL_LANGS = "All"; type Props = { - projects: Project[]; + projects: Project[]; // get 6 projects }; export default function RepositoriesSection({ projects }: Props) { const [selectedLanguage, setSelectedLanguage] = useState(ALL_LANGS); @@ -48,22 +45,22 @@ export default function RepositoriesSection({ projects }: Props) { }, [projects, searchTerm, selectedLanguage]); return ( -
-

+
+

Access the largest directory of open-source projects

-

+

Use advanced filters to find a project you love and make your first commit message.

-
+
-
+
{ const value = e.target.value.trim(); @@ -75,58 +72,52 @@ export default function RepositoriesSection({ projects }: Props) {
- +
{filterLanguages.map((lang) => ( - - - + ))} - +
{searchedProjects.map((project, index) => (
- + {project.issuesCount} Issues
-

+

{project.repository}

{project.description}

-

+

Lang: {project.languages.join(", ")}

Learn more diff --git a/tailwind.config.js b/tailwind.config.js index e8e4863..0aeaa31 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -9,6 +9,27 @@ export default { "ff-poppins": ["Poppins", "sans-serif"], }, colors: { + brand: { + 1: "#383C3A", + gray: { + 1: "#C6C6C6", + 2: "#989A9A", + 3: "#8C9E99", + 4: "#413535", + 5: "#DED6D6", + 6: "#B4B1B1", + 7: "#635D5D", + 8: "#B3B8B7", + 9: "#f3faf8", + }, + green: { + 1: "#14A97C", + 2: "#02FBB0", + 3: "#19FDC7", + 4: "#144E40", + 5: "#294740", + }, + }, sidebar: { DEFAULT: "oklch(var(--sidebar-background))", foreground: "oklch(var(--sidebar-foreground))", From c1e8d3b815bf29a8c61064d60b461d56ff3aff82 Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Thu, 28 Nov 2024 16:05:20 +0300 Subject: [PATCH 20/94] trim projects to 6 --- src/data/projects.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/data/projects.ts b/src/data/projects.ts index 6b46152..db71e34 100644 --- a/src/data/projects.ts +++ b/src/data/projects.ts @@ -1,13 +1,6 @@ import { Project } from "@/routes/-components/RepositoriesSection"; export const projects: Project[] = [ - { - repository: "openai/chatgpt", - description: - "An AI-powered assistant that helps with complex queries and tasks.", - languages: ["TypeScript", "Python"], - link: "https://openai.com/", - }, { repository: "vercel/next.js", description: @@ -36,13 +29,6 @@ export const projects: Project[] = [ link: "https://playwright.dev/", }, - { - repository: "tailwindlabs/tailwindcss", - description: - "A utility-first CSS framework for creating custom designs directly in HTML.", - languages: ["CSS", "JavaScript"], - link: "https://tailwindcss.com/", - }, { repository: "prisma/prisma", description: "A modern database toolkit for TypeScript and Node.js.", From f2cc7295f717279125c10b3e3ae9f96d912d2556 Mon Sep 17 00:00:00 2001 From: Franklin Shera Date: Thu, 28 Nov 2024 16:15:19 +0300 Subject: [PATCH 21/94] use native sroll --- src/routes/-components/RepositoriesSection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/-components/RepositoriesSection.tsx b/src/routes/-components/RepositoriesSection.tsx index b8ce159..eb21cdb 100644 --- a/src/routes/-components/RepositoriesSection.tsx +++ b/src/routes/-components/RepositoriesSection.tsx @@ -72,7 +72,7 @@ export default function RepositoriesSection({ projects }: Props) {
-
+
{filterLanguages.map((lang) => (
+
); diff --git a/src/routes/-components/RootComponent.tsx b/src/routes/-components/RootComponent.tsx index b66c1bb..bd61585 100644 --- a/src/routes/-components/RootComponent.tsx +++ b/src/routes/-components/RootComponent.tsx @@ -6,7 +6,7 @@ import { TanStackRouterDevtools } from "./RouterDevttols"; export function RootComponent() { return ( -
+
diff --git a/src/routes/-components/tools-section/ToolsSection.tsx b/src/routes/-components/tools-section/ToolsSection.tsx index 50a6e51..1bd2564 100644 --- a/src/routes/-components/tools-section/ToolsSection.tsx +++ b/src/routes/-components/tools-section/ToolsSection.tsx @@ -3,11 +3,11 @@ interface ToolsSectionProps {} export function ToolsSection({}: ToolsSectionProps) { return (
-
-

+
+

Get more than just pushing commits

-

+

The more the merrier. Colabs allows you to create teams, participate in challenges and collect cool badges.

diff --git a/tailwind.config.js b/tailwind.config.js index c2f8711..dcfd048 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,5 @@ /** @type {import('tailwindcss').Config} */ +import { Description } from "@radix-ui/react-dialog"; import shadcnTailwindPlugin from "./src/components/lib/shadcn-tailwind-config"; export default { darkMode: ["class"], @@ -20,7 +21,7 @@ export default { 6: "#B4B1B1", 7: "#635D5D", 8: "#B3B8B7", - 9: "#f3faf8", + 9: "#f3faf8", //#B3B8B7CC }, green: { 1: "#14A97C", @@ -63,7 +64,6 @@ export default { neutral: "#19362d", "neutral-content": "#cdd3d1", "base-100": "#16181D", - "base-200": "#140f0f", "base-300": "#110c0d", "base-content": "#B3B8B7", success: "#00a96e", From a44ca9935f008945966388db8057233baca667f5 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 18:15:06 +0300 Subject: [PATCH 25/94] fix image paths --- src/routes/-components/tools-section/ToolsSection.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes/-components/tools-section/ToolsSection.tsx b/src/routes/-components/tools-section/ToolsSection.tsx index 1bd2564..c7dd862 100644 --- a/src/routes/-components/tools-section/ToolsSection.tsx +++ b/src/routes/-components/tools-section/ToolsSection.tsx @@ -17,21 +17,21 @@ export function ToolsSection({}: ToolsSectionProps) {
{/* gamification+ */}
- +
{/* community */}
- +
{/* technologies */}
- +
- +

From 8b4fbb9a10bcbb90deeb46ebca5f742dec2c31e8 Mon Sep 17 00:00:00 2001 From: tigawanna Date: Thu, 28 Nov 2024 18:55:57 +0300 Subject: [PATCH 26/94] Update background styles in LandingPageNavbar and RootComponent for improved aesthetics --- src/components/navigation/LandingPageNavbar.tsx | 2 +- src/routes/-components/RootComponent.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/navigation/LandingPageNavbar.tsx b/src/components/navigation/LandingPageNavbar.tsx index 534bbe6..7235a75 100644 --- a/src/components/navigation/LandingPageNavbar.tsx +++ b/src/components/navigation/LandingPageNavbar.tsx @@ -7,7 +7,7 @@ export function LandingPageNavbar({}: LandingPageNavbarProps) { const isLoading = useRouterState({ select: (s) => s.status === "pending" }); return ( -
+