diff options
| author | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2025-12-30 13:46:39 +0200 |
|---|---|---|
| committer | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2025-12-30 13:46:39 +0200 |
| commit | c3dcb9c827df6d80ad1b0b1a7c6155561527b39d (patch) | |
| tree | 76d8b9e706f9e8fcf7acc157a633905ff16c6b74 /src/app | |
init
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/favicon.ico | bin | 0 -> 25931 bytes | |||
| -rw-r--r-- | src/app/globals.css | 106 | ||||
| -rw-r--r-- | src/app/layout.tsx | 36 | ||||
| -rw-r--r-- | src/app/page.tsx | 5 | ||||
| -rw-r--r-- | src/app/upload/page.tsx | 38 |
5 files changed, 185 insertions, 0 deletions
diff --git a/src/app/favicon.ico b/src/app/favicon.ico Binary files differnew file mode 100644 index 0000000..718d6fe --- /dev/null +++ b/src/app/favicon.ico diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..51cd92c --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,106 @@ +@import 'tailwindcss'; +@import 'tw-animate-css'; + +@custom-variant dark (&:is(.dark *)); + +:root { + --background: #05040a; + --foreground: #ffffff; + + --violet: #464199; + --light-violet: #8784c9; + --dark-indigo: #0d0c1c; + --red: #e64c4f; + + --radius: 0.625rem; + --card: oklch(1 0 0); + --card-foreground: oklch(0.13 0.028 261.692); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.13 0.028 261.692); + --primary: oklch(0.21 0.034 264.665); + --primary-foreground: oklch(0.985 0.002 247.839); + --secondary: oklch(0.967 0.003 264.542); + --secondary-foreground: oklch(0.21 0.034 264.665); + --muted: oklch(0.967 0.003 264.542); + --muted-foreground: oklch(0.551 0.027 264.364); + --accent: oklch(0.967 0.003 264.542); + --accent-foreground: oklch(0.21 0.034 264.665); + --destructive: oklch(0.577 0.245 27.325); + --input: oklch(0.928 0.006 264.531); + --ring: oklch(0.707 0.022 261.325); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0.002 247.839); + --sidebar-foreground: oklch(0.13 0.028 261.692); + --sidebar-primary: oklch(0.21 0.034 264.665); + --sidebar-primary-foreground: oklch(0.985 0.002 247.839); + --sidebar-accent: oklch(0.967 0.003 264.542); + --sidebar-accent-foreground: oklch(0.21 0.034 264.665); + --sidebar-border: oklch(0.928 0.006 264.531); + --sidebar-ring: oklch(0.707 0.022 261.325); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-violet: var(--violet); + --color-light-violet: var(--light-violet); + --color-dark-indigo: var(--dark-indigo); + --color-red: var(--red); + + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --radius-2xl: calc(var(--radius) + 8px); + --radius-3xl: calc(var(--radius) + 12px); + --radius-4xl: calc(var(--radius) + 16px); +} + +@layer base { + * { + @apply border-violet outline-ring/50; + } + html { + @apply scroll-smooth; + } + body { + @apply bg-background text-foreground; + } + button:not(:disabled), + [role='button']:not(:disabled) { + cursor: pointer; + } +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..194dca2 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,36 @@ +import type { Metadata } from 'next'; +import { Nunito } from 'next/font/google'; +import './globals.css'; +import { Header } from '../components/header'; +import { GlobalContextProvider } from '../lib/contexts'; +import { Footer } from '../components/footer'; + +const nunito = Nunito(); + +export const metadata: Metadata = { + title: 'Artberry', + description: 'Happy gooning!', + icons: '/icons/logo.svg', +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + <html lang="en"> + <body className={`${nunito.className} antialiased px-37.5`}> + <div className="max-w-375 min-h-dvh flex flex-col mx-auto"> + <GlobalContextProvider> + <Header /> + <main className="mt-[50px] mb-[80px] grow"> + {children} + </main> + <Footer /> + </GlobalContextProvider> + </div> + </body> + </html> + ); +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 0000000..b073f26 --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,5 @@ +import Image from 'next/image'; + +export default function Home() { + return null; +} diff --git a/src/app/upload/page.tsx b/src/app/upload/page.tsx new file mode 100644 index 0000000..d0f096f --- /dev/null +++ b/src/app/upload/page.tsx @@ -0,0 +1,38 @@ +'use client'; + +import { Button } from '@/components/ui'; +import { + UploadMenu, + FileDropzone, + TagsInput, + SourceInput, +} from '@/components/upload'; +import { PUBLISH_DISCLAIMER } from '@/lib/consts'; + +export default function Upload() { + return ( + <div className="flex justify-between w-full"> + <UploadMenu /> + <form + className="flex flex-col grow max-w-[900px] gap-5" + onSubmit={(e) => { + console.log('SUBMIT'); + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + const data: any = Object.fromEntries(formData.entries()); + + console.log(data.files); + }} + > + <FileDropzone /> + <TagsInput /> + <SourceInput /> + <span className="text-center text-sm"> + {PUBLISH_DISCLAIMER} + </span> + <Button>Опубликовать</Button> + </form> + </div> + ); +} |
