This commit is contained in:
Daniil
2026-04-04 14:51:40 +03:00
parent 10a1d28f77
commit 0523ef3d72
191 changed files with 12065 additions and 2658 deletions
+5
View File
@@ -0,0 +1,5 @@
import { StaticLoader } from "@shared/ui/Loader"
export default function ProtectedLoading() {
return <StaticLoader block />
}
+29
View File
@@ -0,0 +1,29 @@
import { Skeleton } from "@shared/ui/Skeleton"
export default function ProfileLoading() {
return (
<div
style={{
display: "flex",
justifyContent: "center",
padding: "32px 16px",
}}
>
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
gap: "24px",
width: "100%",
maxWidth: "640px",
}}
>
<Skeleton width="120px" height="120px" borderRadius="50%" />
<Skeleton width="100%" height="200px" borderRadius="10px" />
<Skeleton width="100%" height="160px" borderRadius="10px" />
<Skeleton width="100%" height="140px" borderRadius="10px" />
</div>
</div>
)
}
@@ -1,11 +1,11 @@
import { JSX } from "react"
import { ProjectWorkspacePage } from "@pages/ProjectWorkspacePage"
import { ProjectWizardPage } from "@pages/ProjectWizardPage"
export default function Projects(): JSX.Element {
return (
<main>
<ProjectWorkspacePage />
<ProjectWizardPage />
</main>
)
}
+18
View File
@@ -0,0 +1,18 @@
import { ProjectCardSkeleton } from "@shared/ui/Skeleton"
export default function ProjectsLoading() {
return (
<div
style={{
padding: "28px 24px 40px",
display: "grid",
gridTemplateColumns: "repeat(auto-fill, minmax(320px, 1fr))",
gap: "20px",
}}
>
{Array.from({ length: 6 }).map((_, i) => (
<ProjectCardSkeleton key={i} />
))}
</div>
)
}
+8 -5
View File
@@ -1,7 +1,7 @@
import type { Metadata } from "next"
import type { ReactNode } from "react"
import { Open_Sans } from "next/font/google"
import { Manrope } from "next/font/google"
import "@shared/styles/global.scss"
@@ -12,10 +12,11 @@ export const metadata: Metadata = {
description: "Standalone Next.js app using FSD structure",
}
const open_sans = Open_Sans({
const manrope = Manrope({
subsets: ["latin", "cyrillic"],
preload: true,
display: "swap",
variable: "--font-open-sans",
variable: "--font-manrope",
})
export default function RootLayout({
@@ -24,7 +25,7 @@ export default function RootLayout({
children: ReactNode
}>) {
return (
<html lang="ru" className={open_sans.variable} suppressHydrationWarning>
<html lang="ru" className={manrope.variable} suppressHydrationWarning>
<head>
<script
dangerouslySetInnerHTML={{
@@ -33,7 +34,9 @@ export default function RootLayout({
/>
</head>
<body>
<AppProviders>{children}</AppProviders>
<div id="app-root">
<AppProviders>{children}</AppProviders>
</div>
</body>
</html>
)
+10 -2
View File
@@ -1,6 +1,7 @@
"use client"
import { usePathname } from "next/navigation"
import { motion } from "framer-motion"
import { Header } from "@widgets/Header"
@@ -12,7 +13,7 @@ export default function EssentialTemplate({
children: React.ReactNode
}) {
const pathname = usePathname()
const isAuthPage = AUTH_ROUTES.includes(pathname)
const isAuthPage = AUTH_ROUTES.includes(pathname ?? "")
if (isAuthPage) {
return <>{children}</>
@@ -21,7 +22,14 @@ export default function EssentialTemplate({
return (
<div>
<Header />
{children}
<motion.div
key={pathname}
initial={{ opacity: 0, y: 8 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.25, ease: [0.16, 1, 0.3, 1] }}
>
{children}
</motion.div>
</div>
)
}
+5 -1
View File
@@ -1,9 +1,13 @@
import { Suspense } from "react"
import { UnderMaintenancePage } from "@pages/UnderMaintenancePage"
export default function UnderMaintenance() {
return (
<main>
<UnderMaintenancePage />
<Suspense>
<UnderMaintenancePage />
</Suspense>
</main>
)
}