diff options
| author | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2026-03-19 16:03:55 +0200 |
|---|---|---|
| committer | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2026-03-19 16:03:55 +0200 |
| commit | cdc736b4823a3dda97f2b49c04b8ef7321e7a254 (patch) | |
| tree | 7834c10be8864477343f95b034ab1d2c357aa0a7 /src/components | |
| parent | 293df20781b8f0ae6fcbabb1a33b3d1752e494c8 (diff) | |
add settings page
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/footer/Footer.tsx | 116 | ||||
| -rw-r--r-- | src/components/header/Header.tsx | 8 | ||||
| -rw-r--r-- | src/components/settings/ProfilePage.tsx | 84 | ||||
| -rw-r--r-- | src/components/settings/SecurityPage.tsx | 60 | ||||
| -rw-r--r-- | src/components/settings/SettingsMenu.tsx | 43 | ||||
| -rw-r--r-- | src/components/ui/button.tsx | 5 | ||||
| -rw-r--r-- | src/components/ui/index.ts | 1 | ||||
| -rw-r--r-- | src/components/ui/input.tsx | 5 |
8 files changed, 260 insertions, 62 deletions
diff --git a/src/components/footer/Footer.tsx b/src/components/footer/Footer.tsx index 63dde1e..7262ddc 100644 --- a/src/components/footer/Footer.tsx +++ b/src/components/footer/Footer.tsx @@ -10,68 +10,70 @@ import ArtberryIcon from '@icons/artberry.svg'; export function Footer() { return ( - <footer className="flex w-full justify-between py-[50px]"> - <div className="flex flex-col justify-between w-[259px] h-[192px]"> - <div className="text-right"> - <div className="flex items-center gap-2.5 w-full"> - <Logo /> - <ArtberryIcon /> + <div className="w-full bg-dark-indigo"> + <footer className="mx-auto w-full xl:max-w-[1200px] 2xl:max-w-[1500px] flex justify-between py-[50px]"> + <div className="flex flex-col justify-between w-[259px] h-[192px]"> + <div className="text-right"> + <div className="flex items-center gap-2.5 w-full"> + <Logo /> + <ArtberryIcon /> + </div> + <span className="font-medium">Лучшее — здесь.</span> + </div> + <div className="flex flex-col gap-1.25"> + <span className="underline text-sm"> + Terms and Conditions · Privacy Policy + </span> + <span className="text-xs"> + © {new Date().getFullYear()} artberry.xyz + </span> </div> - <span className="font-medium">Лучшее — здесь.</span> - </div> - <div className="flex flex-col gap-1.25"> - <span className="underline text-sm"> - Terms and Conditions · Privacy Policy - </span> - <span className="text-xs"> - © {new Date().getFullYear()} artberry.xyz - </span> </div> - </div> - <div className="flex justify-between gap-48.75"> - <div className="flex-row flex gap-25 h-32.5 w-88.5"> - <div className=" leading-5.5 h-29.5 flex flex-col gap-2.5 w-41.25"> - <Link - href="/upload" - className="flex gap-1.25 flex-row items-center" - > - <Download className="w-4.75 h-4.75" /> - <span className="">Загрузить контент</span> - </Link> - <Link className="flex gap-1.25" href="/faq"> - <Faq /> - <span>FAQ</span> - </Link> - <Link - className="flex gap-1.25 flex-row items-center" - href="/premium" - > - <Premium /> - <span>Премиум</span> - </Link> - <Link - className="flex gap-1.25 flex-row items-center" - target="_blank" - href="https://discord.gg/pJ66ZFpQQK" - > - <DiscordFooter /> + <div className="flex justify-between gap-48.75"> + <div className="flex-row flex gap-25 h-32.5 w-88.5"> + <div className=" leading-5.5 h-29.5 flex flex-col gap-2.5 w-41.25"> + <Link + href="/upload" + className="flex gap-1.25 flex-row items-center" + > + <Download className="w-4.75 h-4.75" /> + <span className="">Загрузить контент</span> + </Link> + <Link className="flex gap-1.25" href="/faq"> + <Faq /> + <span>FAQ</span> + </Link> + <Link + className="flex gap-1.25 flex-row items-center" + href="/premium" + > + <Premium /> + <span>Премиум</span> + </Link> + <Link + className="flex gap-1.25 flex-row items-center" + target="_blank" + href="https://discord.gg/pJ66ZFpQQK" + > + <DiscordFooter /> - <span>Сообщество</span> - </Link> + <span>Сообщество</span> + </Link> + </div> + <div className=" flex flex-col leading-5.5 gap-1.25"> + <span>Теги</span> + <span>Персонажи</span> + <span>Категории</span> + <span>Коллекции</span> + <span>Рандом</span> + </div> </div> - <div className=" flex flex-col leading-5.5 gap-1.25"> - <span>Теги</span> - <span>Персонажи</span> - <span>Категории</span> - <span>Коллекции</span> - <span>Рандом</span> + <div className="w-42.5 h-4.75 bg-violet gap-1.25 flex flex-row items-center items-center justify-center w-37.5 h-10.5 px-7.5 py-2.5 rounded-[20px]"> + <span>English</span> + <English /> </div> </div> - <div className="w-42.5 h-4.75 bg-violet gap-1.25 flex flex-row items-center items-center justify-center w-37.5 h-10.5 px-7.5 py-2.5 rounded-[20px]"> - <span>English</span> - <English /> - </div> - </div> - </footer> + </footer> + </div> ); } diff --git a/src/components/header/Header.tsx b/src/components/header/Header.tsx index b096bdb..dd15bd4 100644 --- a/src/components/header/Header.tsx +++ b/src/components/header/Header.tsx @@ -2,9 +2,11 @@ import { NavBar, SubNav } from '.'; export function Header() { return ( - <div className="flex flex-col w-full"> - <NavBar /> - <SubNav /> + <div className="w-full"> + <div className="mx-auto w-full xl:max-w-[1200px] 2xl:max-w-[1500px] flex flex-col"> + <NavBar /> + <SubNav /> + </div> </div> ); } diff --git a/src/components/settings/ProfilePage.tsx b/src/components/settings/ProfilePage.tsx new file mode 100644 index 0000000..60ff41f --- /dev/null +++ b/src/components/settings/ProfilePage.tsx @@ -0,0 +1,84 @@ +import { InputField } from '@/components/ui/inputfield'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui'; +import { Separator } from '@/components/ui'; + +const gradients = [ + 'linear-gradient(89.91deg, #8784C9 0%, #464199 99.92%)', + 'linear-gradient(284.32deg, #FFAFBD 20.33%, #DAE2F8 79.67%)', + 'linear-gradient(267.9deg, #473B7B 0%, #30D2BE 100%)', + 'linear-gradient(88.87deg, #C33764 0%, #1D2671 100%)', + 'linear-gradient(267.9deg, #134E5E 0%, #71B280 100%)', + 'linear-gradient(87.9deg, #423AA2 0%, #100626 100%)', + 'linear-gradient(87.9deg, #EDF3F6 0%, #D9EAF4 100%)', + 'linear-gradient(284.32deg, #212121 20.33%, #454545 79.67%)', + 'linear-gradient(88.87deg, #610000 0%, #190A05 100%)', + 'linear-gradient(87.9deg, #FFC500 0%, #C21500 100%)', + 'linear-gradient(270deg, #6A11CB 0%, #69A1FF 100%)', + 'linear-gradient(267.9deg, #182848 0%, #4B6CB7 100%)', +]; + +export default function ProfilePage() { + return ( + <div className="flex flex-col flex-start gap-[20px] w-[900px] h-[804px]"> + <div className="flex flex-col flex-start gap-[10px] w-[310px] h-[123px]"> + <p className="font-medium gap-[10px] ml-[20px]">НИКНЕЙМ</p> + <InputField placeholder="Введите никнейм" /> + <Button className="w-[105px]">Сменить</Button> + </div> + <Separator className="bg-violet/50 h-[1px]" /> + <div className="flex flex-col flex-start gap-[10px] w-[600px] h-[284px]"> + <p className="font-medium text-light-violet gap-[10px] ml-[20px]"> + ОБО МНЕ + </p> + <div className="flex flex-row flex-end p-[20px] w-[600px] h-[120px] border-solid border-[1px] rounded-[20px]"> + <Input placeholder="Введите описание о себе" /> + <p className="font-regular flex flex-row justify-center items-end ml-[10px] text-light-violet"> + 250 + </p> + </div> + <Button className="w-[105px]">Сменить</Button> + </div> + <Separator className="bg-violet/50 h-[1px]" /> + <div className="flex flex-col flex-start gap-[10px] w-[219px] h-[74px]"> + <p className="font-medium text-light-violet ml-[20px]"> + АВАТАР + </p> + <div className="flex flex-row gap-[10px]"> + <Button className="w-[105px]">Сменить</Button> + <Button variant={'danger'}>Удалить</Button> + </div> + </div> + <Separator className="bg-violet/50 h-[1px]" /> + <div className="flex flex-col flex-start gap-[10px] w-[219px] h-[169px]"> + <p className="font-medium text-light-violet ml-[20px]"> + ТЕМА БАННЕРА + </p> + + <div className="flex flex-row flex-wrap items-center content-start gap-[5px] w-[265px] h-[85px]"> + {gradients.map((gradient, index) => ( + <div + key={index} + style={{ background: gradient }} + className="w-[40px] h-[40px] rounded-full cursor-pointer" + /> + ))} + </div> + <div className="flex flex-row gap-[10px]"> + <Button className="w-[105px]">Сменить</Button> + <Button variant={'danger'}>Удалить</Button> + </div> + </div> + <Separator className="bg-violet/50 h-[1px]" /> + <div className="flex flex-col flex-start gap-[10px] w-[219px] h-[74px]"> + <p className="font-medium text-light-violet ml-[20px]"> + БАННЕР + </p> + <div className="flex flex-row gap-[10px]"> + <Button className="w-[105px]">Сменить</Button> + <Button variant={'danger'}>Удалить</Button> + </div> + </div> + </div> + ); +} diff --git a/src/components/settings/SecurityPage.tsx b/src/components/settings/SecurityPage.tsx new file mode 100644 index 0000000..9d158dd --- /dev/null +++ b/src/components/settings/SecurityPage.tsx @@ -0,0 +1,60 @@ +import { InputField } from '@/components/ui/inputfield'; +import { Button } from '@/components/ui'; +import { Separator } from '@/components/ui'; +export default function SecurityPage() { + return ( + <> + <div className="flex flex-col flex-start gap-[40px] w-[900px] h-[575px]"> + <div className="flex flex-col gap-[20px] w-[900px] h-[493px]"> + <div className="flex flex-col flex-start gap-[20px] w-[310px] h-[241px]"> + <p className="text-light-violet font-medium"> + ЗАДАТЬ ПАРОЛЬ + </p> + <div className="flex flex-col flex-start gap-[10px] w-[310px] h-[137px]"> + <InputField + placeholder="Почта аккаунта" + type="password" + name="password" + /> + <InputField + isPassword + placeholder="Введите пароль" + type="password" + name="password" + /> + <InputField + isPassword + placeholder="Повторите пароль" + type="password" + name="password" + /> + </div> + <Button>Сменить</Button> + </div> + <Separator className="bg-violet/30 h-[1px]" /> + <div className="flex flex-col flex-start gap-[20px] w-[310px] h-[192px]"> + <p className="text-light-violet font-medium"> + СМЕНА ПОЧТЫ + </p> + <div className="flex flex-col flex-start gap-[10px] w-[310px] h-[137px]"> + <InputField + placeholder="Почта аккаунта" + type="password" + name="password" + /> + <InputField + isPassword + placeholder="Введите пароль" + type="password" + name="password" + /> + </div> + <Button>Сменить</Button> + </div> + <Separator className="bg-violet/30 h-[1px]" /> + <Button className="w-[310px]">Выйти из аккаунта</Button> + </div> + </div> + </> + ); +} diff --git a/src/components/settings/SettingsMenu.tsx b/src/components/settings/SettingsMenu.tsx new file mode 100644 index 0000000..e5e1cf5 --- /dev/null +++ b/src/components/settings/SettingsMenu.tsx @@ -0,0 +1,43 @@ +'use client'; + +import { Button } from '@/components/ui'; + +export default function SettingsMenu({ + tab, + setTab, +}: { + tab: string; + setTab: (tab: string) => void; +}) { + return ( + <div className="flex flex-col gap-2.5"> + <Button + variant={tab === 'profile' ? 'menuActive' : 'menu'} + onClick={() => setTab('profile')} + > + ПРОФИЛЬ + </Button> + + <Button + variant={tab === 'subscriptions' ? 'menuActive' : 'menu'} + onClick={() => setTab('subscriptions')} + > + ПОДПИСКИ + </Button> + + <Button + variant={tab === 'security' ? 'menuActive' : 'menu'} + onClick={() => setTab('security')} + > + БЕЗОПАСНОСТЬ + </Button> + + <Button + variant={tab === 'privacy' ? 'menuActive' : 'menu'} + onClick={() => setTab('privacy')} + > + ПРИВАТНОСТЬ + </Button> + </div> + ); +} diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 65c1e84..fd25d3c 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -14,7 +14,10 @@ const buttonVariants = cva( ghost: '', link: 'hover:text-light-violet', icon: 'bg-violet hover:bg-light-violet rounded-[10px] cursor-pointer', - menu: 'w-[350px] hover:bg-light-violet active:bg-violet active:border-violet rounded-4xl border-2 border-light-violet justify-start', + menu: 'w-[350px] h-[42px] hover:bg-light-violet active:bg-violet active:border-violet rounded-4xl border-2 border-light-violet justify-start', + menuActive: + 'w-[350px] h-[42px] bg-violet border-violet rounded-4xl justify-start', + danger: 'bg-violet-darker rounded-4xl hover:bg-light-violet', }, size: { sm: 'py-1.75 px-3.75', diff --git a/src/components/ui/index.ts b/src/components/ui/index.ts index 4d2a1a0..400f155 100644 --- a/src/components/ui/index.ts +++ b/src/components/ui/index.ts @@ -1,2 +1,3 @@ export * from './input'; export * from './button'; +export * from './separator'; diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx index 7dd5b62..f645f98 100644 --- a/src/components/ui/input.tsx +++ b/src/components/ui/input.tsx @@ -12,7 +12,10 @@ export function Input({ className, isPassword, ...props }: any) { <input {...props} type={isPassword ? (show ? 'text' : 'password') : props.type} - className={cn('w-full outline-none', className)} + className={cn( + 'w-full outline-none placeholder-light-violet', + className, + )} /> {isPassword && ( <span |
