site v2
This commit is contained in:
parent
381be36b6c
commit
8628895632
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1 @@
|
||||||
|
nodeLinker: node-modules
|
|
@ -6,6 +6,7 @@
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-router-dom": "6.10.0",
|
"react-router-dom": "6.10.0",
|
||||||
|
"react-type-animation": "^3.0.1",
|
||||||
"typescript": "5.0.4"
|
"typescript": "5.0.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
$containerWidth: 980px;
|
||||||
|
$accentColor: #d8858d;
|
||||||
|
|
||||||
|
$greenColor: #00FF7F;
|
||||||
|
$greenLighter: lighten($greenColor, 10%);
|
||||||
|
$greenDarker: darken($greenColor, 10%);
|
||||||
|
|
||||||
|
$redColor: #FA8072;
|
||||||
|
$redLighter: lighten($redColor, 10%);
|
||||||
|
$redDarker: darken($redColor, 10%);
|
||||||
|
|
||||||
|
$purpleColor: #DDA0DD;
|
||||||
|
$purpleLighter: lighten($purpleColor, 10%);
|
||||||
|
$purpleDarker: darken($purpleColor, 10%);
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--navbar-height: 32px;
|
||||||
|
--container-witdh: #{$containerWidth};
|
||||||
|
--accent-color: #{$accentColor};
|
||||||
|
|
||||||
|
--green-color: #{$greenColor};
|
||||||
|
--green-darker-color: #{$greenDarker};
|
||||||
|
--green-lighter-color: #{$greenLighter};
|
||||||
|
|
||||||
|
--red-color: #{$redColor};
|
||||||
|
--red-darker-color: #{$redDarker};
|
||||||
|
--red-lighter-color: #{$redLighter};
|
||||||
|
|
||||||
|
--purple-color: #{$purpleColor};
|
||||||
|
--purple-darker-color: #{$purpleDarker};
|
||||||
|
--purple-lighter-color: #{$purpleLighter};
|
||||||
|
}
|
|
@ -1,20 +1,15 @@
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
|
||||||
|
@import url('https://files.nix13.pw/d/storage/ui-components/gradients.css');
|
||||||
|
@import url('https://files.nix13.pw/d/storage/ui-components/buttons.css');
|
||||||
|
@import "../../Constants";
|
||||||
|
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
|
||||||
//--sidebar-width: 200px;
|
|
||||||
--navbar-height: 32px;
|
|
||||||
--container-witdh: 980px;
|
|
||||||
--accent-color: #d8858d;
|
|
||||||
}
|
|
||||||
|
|
||||||
html, body, #root, .App {
|
html, body, #root, .App {
|
||||||
min-height: 100%;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,17 +18,26 @@ body {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root{
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
.App {
|
.App {
|
||||||
|
background: #222;
|
||||||
|
margin: var(--navbar-height) 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
margin: 0 auto;
|
||||||
background: url(https://sun9-north.userapi.com/sun9-85/s/v1/ig2/zjIxUc-QQvBkikqfGSAKKX9SnKkOpWS1DBjjFpCAeLB8k4kh08CTCBN1DdRD8uX9f0TQa1856yEiE-YhloQjYoSp.jpg?size=2560x1457&quality=95&type=album) center/cover no-repeat
|
|
||||||
}
|
@media screen and (min-width: calc(#{$containerWidth} + 1px)) {
|
||||||
.Content {
|
|
||||||
min-height: 100%;
|
|
||||||
width: var(--container-witdh);
|
width: var(--container-witdh);
|
||||||
box-sizing: border-box;
|
}
|
||||||
background-color: #000000a0
|
@media screen and (max-width: #{$containerWidth}) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
|
@ -44,3 +48,19 @@ a {
|
||||||
color: #ddd;
|
color: #ddd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.Button--Outline {
|
||||||
|
--color: #fff;
|
||||||
|
--hover-color: #ddd;
|
||||||
|
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--color);
|
||||||
|
border: 1px solid var(--color);
|
||||||
|
padding: 4px 6px;
|
||||||
|
border-radius: 4px;
|
||||||
|
text-shadow: 0 0 20px;
|
||||||
|
&:hover {
|
||||||
|
color: var(--hover-color);
|
||||||
|
border-color: var(--hover-color);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,19 +1,18 @@
|
||||||
import {FC} from "react";
|
import {FC} from "react";
|
||||||
import { Route, Routes } from "react-router";
|
|
||||||
import Main from "../../pages/Main/Main";
|
import Main from "../../pages/Main/Main";
|
||||||
import Projects from "../../pages/Projects/Projects";
|
import Projects from "../../pages/Projects/Projects";
|
||||||
import './App.scss';
|
import './App.scss';
|
||||||
import Navbar from "../Navbar/Navbar";
|
import Navbar from "../Navbar/Navbar";
|
||||||
|
import GenshinDownloads from "../../pages/GenshinDownloads/GenshinDownloads";
|
||||||
|
|
||||||
const App: FC = () => (
|
const App: FC = () => (
|
||||||
<div className="App">
|
<div className="App">
|
||||||
<Navbar/>
|
<Navbar/>
|
||||||
|
|
||||||
<div className="Content">
|
<div className="Container">
|
||||||
<Routes>
|
<Main/>
|
||||||
<Route path="/" element={<Main/>}/>
|
<Projects/>
|
||||||
<Route path="/projects" element={<Projects/>}/>
|
<GenshinDownloads/>
|
||||||
</Routes>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import {Link} from "react-router-dom";
|
|
||||||
import './Navbas.scss';
|
import './Navbas.scss';
|
||||||
|
|
||||||
const Navbar = () => (
|
const Navbar = () => (
|
||||||
<div className="Navbar">
|
<div className="Navbar">
|
||||||
<Link to='/'>Main</Link>
|
<div className="Navbar__Container">
|
||||||
<Link to='/projects'>Projects</Link>
|
<a href="#Main" className='Navbar__Container_Link'>Основное</a>
|
||||||
|
<a href="#Projects" className='Navbar__Container_Link'>Проекты</a>
|
||||||
|
<a href="#GenshinDownloads" className='Navbar__Container_Link'>Genshin</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,32 @@
|
||||||
|
@import "../../Constants";
|
||||||
|
|
||||||
.Navbar {
|
.Navbar {
|
||||||
//height: var(--navbar-height)
|
position: fixed;
|
||||||
height: 32px;
|
top: 0;
|
||||||
|
height: var(--navbar-height);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: #222;
|
background-color: #222;
|
||||||
|
|
||||||
|
&__Container {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
@media screen and (min-width: calc(#{$containerWidth} + 1px)) {
|
||||||
|
width: var(--container-witdh);
|
||||||
|
}
|
||||||
|
@media screen and (max-width: #{$containerWidth}) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&_Link {
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
|
&:not(:last-child) {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,47 +0,0 @@
|
||||||
.Sidebar
|
|
||||||
width: var(--sidebar-width)
|
|
||||||
box-sizing: border-box
|
|
||||||
height: 100%
|
|
||||||
background-color: #222
|
|
||||||
|
|
||||||
&__MainInfo
|
|
||||||
padding: 8px
|
|
||||||
display: flex
|
|
||||||
flex-direction: column
|
|
||||||
align-items: center
|
|
||||||
|
|
||||||
&_Avatar
|
|
||||||
width: 96px
|
|
||||||
border-radius: 50%
|
|
||||||
margin-bottom: 8px
|
|
||||||
|
|
||||||
&_Name
|
|
||||||
font-weight: 900
|
|
||||||
font-size: 24px
|
|
||||||
|
|
||||||
&__SocialLinks
|
|
||||||
margin-top: 64px
|
|
||||||
|
|
||||||
&__Links
|
|
||||||
margin-top: 16px
|
|
||||||
|
|
||||||
&__Links, &__SocialLinks
|
|
||||||
display: flex
|
|
||||||
flex-direction: column
|
|
||||||
align-items: center
|
|
||||||
|
|
||||||
&_Link
|
|
||||||
font-size: 16px
|
|
||||||
background-color: #d8858d
|
|
||||||
padding: 2px 8px
|
|
||||||
margin: 2px 0
|
|
||||||
width: 100%
|
|
||||||
box-sizing: border-box
|
|
||||||
|
|
||||||
&:hover
|
|
||||||
background-color: #e2817a
|
|
||||||
color: white
|
|
||||||
|
|
||||||
& > .fa-light, & > .fa-brands
|
|
||||||
margin-right: 4px
|
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
import React from "react";
|
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import './Sidebar.sass';
|
|
||||||
|
|
||||||
class Sidebar extends React.Component {
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div className="Sidebar">
|
|
||||||
<div className="Sidebar__MainInfo">
|
|
||||||
<img className="Sidebar__MainInfo_Avatar" src="https://avatars.githubusercontent.com/u/13962582?v=4" alt="" />
|
|
||||||
<div className="Sidebar__MainInfo_Name">
|
|
||||||
Nix13
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="Sidebar__Links">
|
|
||||||
<Link className="Sidebar__Links_Link" to='/'>
|
|
||||||
<i className="fa-light fa-house"/>
|
|
||||||
Главная
|
|
||||||
</Link>
|
|
||||||
<Link className="Sidebar__Links_Link" to='/projects'>
|
|
||||||
<i className="fa-light fa-bars"/>
|
|
||||||
Проекты
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="Sidebar__SocialLinks">
|
|
||||||
<a className="Sidebar__SocialLinks_Link" href='https://t.me/DarkShinigani' target='_blank' rel='noopener noreferrer'>
|
|
||||||
<i className="fa-brands fa-telegram"/>
|
|
||||||
Телеграм
|
|
||||||
</a>
|
|
||||||
<a className="Sidebar__SocialLinks_Link" href='https://vk.com/scur0nek0' target='_blank' rel='noopener noreferrer'>
|
|
||||||
<i className="fa-brands fa-vk"/>
|
|
||||||
ВК
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a className="Sidebar__SocialLinks_Link" href='https://github.com/Nix1304' target='_blank' rel='noopener noreferrer'>
|
|
||||||
<i className="fa-brands fa-github"/>
|
|
||||||
GitHub
|
|
||||||
</a>
|
|
||||||
<a className="Sidebar__SocialLinks_Link" href='https://git.nix13.pw/' target='_blank' rel='noopener noreferrer'>
|
|
||||||
<i className="fa-brands fa-git"/>
|
|
||||||
Git
|
|
||||||
</a>
|
|
||||||
<a className="Sidebar__SocialLinks_Link" href='https://mvn.nix13.pw/' target='_blank' rel='noopener noreferrer'>
|
|
||||||
<i className="fa-brands fa-readme"></i>
|
|
||||||
Maven
|
|
||||||
</a>
|
|
||||||
<a className="Sidebar__SocialLinks_Link" href='https://files.nix13.pw/' target='_blank' rel='noopener noreferrer'>
|
|
||||||
<i className="fa-light fa-files"/>
|
|
||||||
Files
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Sidebar;
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
@import "../../Constants";
|
||||||
|
|
||||||
|
.GenshinDownloads {
|
||||||
|
padding-top: var(--navbar-height);
|
||||||
|
|
||||||
|
&__Item {
|
||||||
|
&_Title {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&_Links {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
&_Link {
|
||||||
|
font-size: 20px;
|
||||||
|
margin: 0 8px 8px;
|
||||||
|
--color: var(--green-color);
|
||||||
|
--hover-color: var(--green-darker-color);
|
||||||
|
|
||||||
|
&--Outdated {
|
||||||
|
--color: var(--red-color);
|
||||||
|
--hover-color: var(--red-darker-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
&--Beta {
|
||||||
|
--color: var(--purple-color);
|
||||||
|
--hover-color: var(--purple-darker-color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__Actual, &__Outdated, &__Beta {
|
||||||
|
text-align: center;
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__Actual {
|
||||||
|
color: var(--green-lighter-color);
|
||||||
|
border-color: var(--green-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__Beta {
|
||||||
|
color: var(--purple-lighter-color);
|
||||||
|
border-color: var(--purple-color);
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&--NotCollapsed {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__Outdated {
|
||||||
|
color: var(--red-lighter-color);
|
||||||
|
border-color: var(--red-color);
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&--NotCollapsed {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
import {useEffect, useState} from "react";
|
||||||
|
import './GenshinDownloads.scss';
|
||||||
|
import Loading from "../../ui/Loading/Loading";
|
||||||
|
import * as url from "url";
|
||||||
|
|
||||||
|
const GenshinDownloads = () => {
|
||||||
|
const [genshinDL, setGenshinDL] = useState<GenshinDLType[]>([]);
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [outdatedCollapse, setOutdatedCollapse] = useState(true);
|
||||||
|
const [betaCollapse, setBetaCollapse] = useState(true);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// const url = 'https://baka.nix13.pw/genshin';
|
||||||
|
const url = 'http://localhost:8099/genshin'
|
||||||
|
fetch(url)
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(r => setGenshinDL(r.genshin))
|
||||||
|
.then(_ => setLoading(false));
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if(loading || !genshinDL) return <Loading/>;
|
||||||
|
return (
|
||||||
|
<div className={'GenshinDownloads'} id='GenshinDownloads'>
|
||||||
|
<h1 className={'GenshinDownloads__Actual'}>Актуальная версия</h1>
|
||||||
|
{genshinDL.filter(dl => !dl.outdated && !dl.beta).map(dl => (
|
||||||
|
<div className={'GenshinDownloads__Item'} key={dl.name}>
|
||||||
|
<h2 className={'GenshinDownloads__Item_Title'}>{dl.name}</h2>
|
||||||
|
|
||||||
|
<div className="GenshinDownloads__Item_Links">
|
||||||
|
{dl.links.map(link => (
|
||||||
|
<a
|
||||||
|
href={link.url}
|
||||||
|
key={link.name}
|
||||||
|
className={'Button--Outline GenshinDownloads__Item_Links_Link'}
|
||||||
|
>
|
||||||
|
{link.name}
|
||||||
|
</a>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
|
||||||
|
<h1 className={`GenshinDownloads__Outdated ${outdatedCollapse && 'GenshinDownloads__Outdated--NotCollapsed'}`} onClick={() => setOutdatedCollapse(!outdatedCollapse)}>Устаревшие версии</h1>
|
||||||
|
{!outdatedCollapse && genshinDL.filter(dl => dl.outdated && !dl.beta).map(dl => (
|
||||||
|
<div className={'GenshinDownloads__Item'} key={dl.name}>
|
||||||
|
<h2 className={'GenshinDownloads__Item_Title'}>{dl.name}</h2>
|
||||||
|
<div className="GenshinDownloads__Item_Links">
|
||||||
|
{dl.links.map(link => (
|
||||||
|
<a
|
||||||
|
href={link.url}
|
||||||
|
key={link.name}
|
||||||
|
className={'Button--Outline GenshinDownloads__Item_Links_Link GenshinDownloads__Item_Links_Link--Outdated'}
|
||||||
|
>
|
||||||
|
{link.name}
|
||||||
|
</a>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
|
||||||
|
<h1 className={`GenshinDownloads__Beta ${betaCollapse && 'GenshinDownloads__Beta--NotCollapsed'}`} onClick={() => setBetaCollapse(!betaCollapse)}>Бета версии</h1>
|
||||||
|
{!betaCollapse && genshinDL.filter(dl => dl.beta).map(dl => (
|
||||||
|
<div className={'GenshinDownloads__Item'} key={dl.name}>
|
||||||
|
<h2 className={'GenshinDownloads__Item_Title'}>{dl.name}</h2>
|
||||||
|
<div className="GenshinDownloads__Item_Links">
|
||||||
|
{dl.links.map(link => (
|
||||||
|
<a
|
||||||
|
href={link.url}
|
||||||
|
key={link.name}
|
||||||
|
className={'Button--Outline GenshinDownloads__Item_Links_Link GenshinDownloads__Item_Links_Link--Beta'}
|
||||||
|
>
|
||||||
|
{link.name}
|
||||||
|
</a>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GenshinDownloads;
|
|
@ -1,22 +0,0 @@
|
||||||
.Main
|
|
||||||
padding: 16px
|
|
||||||
width: 100%
|
|
||||||
height: 100%
|
|
||||||
box-sizing: border-box
|
|
||||||
display: flex
|
|
||||||
|
|
||||||
.DiscordStatus
|
|
||||||
border: 3px solid var(--accent-color)
|
|
||||||
border-radius: 10px
|
|
||||||
|
|
||||||
.GitHub-Row
|
|
||||||
display: flex
|
|
||||||
flex-direction: row
|
|
||||||
justify-content: space-between
|
|
||||||
|
|
||||||
&__Element
|
|
||||||
border: 3px solid var(--accent-color)
|
|
||||||
border-radius: 10px
|
|
||||||
box-sizing: border-box
|
|
||||||
height: fit-content
|
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
@import "../../Constants";
|
||||||
|
|
||||||
|
.Main {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100vh - var(--navbar-height));
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
&__Center {
|
||||||
|
height: calc(100% - var(--navbar-height));
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&_Name {
|
||||||
|
color: var(--accent-color);
|
||||||
|
font-size: 4rem;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
&_SubName {
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__Links {
|
||||||
|
height: 32px;
|
||||||
|
font-size: 20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
&_Link {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
& > :first-child {
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:last-child) {
|
||||||
|
margin-right: 4px;
|
||||||
|
padding-right: 4px;
|
||||||
|
border-right: 1px solid white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,20 +1,59 @@
|
||||||
|
import './Main.scss';
|
||||||
|
import { TypeAnimation } from 'react-type-animation';
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import './Main.sass';
|
|
||||||
|
|
||||||
class Main extends React.Component {
|
const Main = () => {
|
||||||
render() {
|
|
||||||
return (
|
return (
|
||||||
<div className="Main">
|
<div className="Main" id='Main'>
|
||||||
<img className="DiscordStatus" src="https://lanyard.cnrad.dev/api/259377757669031937?theme=dark&bg=222222&idleMessage=Probably%20died..." alt="" />
|
<div className="Main__Center">
|
||||||
|
<div className="Main__Center_Name">Nix13</div>
|
||||||
<img src="https://github-readme-streak-stats.herokuapp.com?user=Nix1304&theme=dark&background=222222&ring=d8858d&fire=d8858d&stroke=d8858d&currStreakLabel=d8858d&hide_border=true" alt="" className="GitHub-Row__Element"/>
|
<TypeAnimation
|
||||||
|
sequence={[
|
||||||
<img src="https://github-readme-stats.vercel.app/api?username=Nix1304&show_icons=true&hide=&count_private=true&title_color=64748b&text_color=64748b&icon_color=d8858d&bg_color=222222&hide_border=true&show_icons=true" alt="" className="GitHub-Row__Element"/>
|
'Golang fullstack',
|
||||||
|
1000,
|
||||||
<img src="https://github-readme-stats.vercel.app/api/top-langs/?username=Nix1304&langs_count=5&title_color=64748b&text_color=64748b&icon_color=d8858d&bg_color=222222&hide_border=true" alt="" className="GitHub-Row__Element"/>
|
'Python fullstack',
|
||||||
|
1000
|
||||||
|
]}
|
||||||
|
repeat={Infinity}
|
||||||
|
className={'Main__Center_SubName'}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
|
||||||
}
|
<div className="Main__Links">
|
||||||
|
<a className="Main__Links_Link" href='https://t.me/DarkShinigani' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<i className="fa-brands fa-telegram"/>
|
||||||
|
<span>Телеграм</span>
|
||||||
|
</a>
|
||||||
|
<a className="Main__Links_Link" href='https://vk.com/scur0nek0' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<i className="fa-brands fa-vk"/>
|
||||||
|
ВК
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a className="Main__Links_Link" href='https://github.com/Nix1304' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<i className="fa-brands fa-github"/>
|
||||||
|
GitHub
|
||||||
|
</a>
|
||||||
|
<a className="Main__Links_Link" href='https://git.nix13.pw/' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<i className="fa-brands fa-git"/>
|
||||||
|
Git
|
||||||
|
</a>
|
||||||
|
<a className="Main__Links_Link" href='https://mvn.nix13.pw/' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<i className="fa-brands fa-readme"></i>
|
||||||
|
Maven
|
||||||
|
</a>
|
||||||
|
<a className="Main__Links_Link" href='https://files.nix13.pw/' target='_blank' rel='noopener noreferrer'>
|
||||||
|
<i className="fa-light fa-files"/>
|
||||||
|
Files
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/*<div className="Buttons">*/}
|
||||||
|
{/* <button className="Button_Outline--Glow">Aboba</button>*/}
|
||||||
|
{/* <button className="Button_Outline--Glow">Aboba</button>*/}
|
||||||
|
{/* <button className="Button_Outline--Glow">Aboba</button>*/}
|
||||||
|
{/*</div>*/}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Main;
|
export default Main;
|
|
@ -1,12 +0,0 @@
|
||||||
.Projects
|
|
||||||
padding: 16px
|
|
||||||
width: 100%
|
|
||||||
height: 100%
|
|
||||||
box-sizing: border-box
|
|
||||||
|
|
||||||
&__List
|
|
||||||
display: flex
|
|
||||||
margin-top: 8px
|
|
||||||
|
|
||||||
&_Column
|
|
||||||
width: 33%
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
.Projects {
|
||||||
|
padding-top: var(--navbar-height);
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
&__List {
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,67 +1,50 @@
|
||||||
import React from "react";
|
import React, {useEffect, useState} from "react";
|
||||||
import ProjectCard from "../../ui/ProjectCard/ProjectCard";
|
import ProjectCard from "../../ui/ProjectCard/ProjectCard";
|
||||||
import './Projects.sass';
|
import './Projects.scss';
|
||||||
|
|
||||||
class Projects extends React.Component {
|
type ProjectsState = {
|
||||||
render() {
|
done: ProjectType[]
|
||||||
return (<>
|
dropped: ProjectType[]
|
||||||
<div className="Projects">
|
|
||||||
<h2>Завершенные и в разработке</h2>
|
|
||||||
|
|
||||||
<div className="Projects__List">
|
|
||||||
<div className="Projects__List_Column">
|
|
||||||
<ProjectCard
|
|
||||||
title="@kurumi: game bot" status="release"
|
|
||||||
links={[{name: 'VK Group', url: 'https://vk.com/kb_gb', type: 'vk'}]}
|
|
||||||
>
|
|
||||||
Игровой бот для вашей беседы
|
|
||||||
</ProjectCard>
|
|
||||||
|
|
||||||
<ProjectCard
|
|
||||||
title="@yae miko: admin bot" status="development"
|
|
||||||
links={[{name: 'VK Group', url: 'https://vk.com/ym_ab', type: 'vk'},
|
|
||||||
{name: 'VK App', url: 'https://vk.com/app8227711', type: 'vk'}]}
|
|
||||||
stack={['python']}
|
|
||||||
>
|
|
||||||
Админ-бот для вашей беседы
|
|
||||||
</ProjectCard>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="Projects__List_Column">
|
|
||||||
<ProjectCard
|
|
||||||
title="Genshin Private Server" status="release"
|
|
||||||
links={[{name: 'Web', url: 'https://gi.nix13.pw', type: 'web'}]}
|
|
||||||
stack={['java']}
|
|
||||||
>
|
|
||||||
</ProjectCard>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="Projects__List_Column">
|
|
||||||
<ProjectCard
|
|
||||||
title="Ignis Samurai" status="release"
|
|
||||||
links={[{name: 'GitHub', url: 'https://github.com/Nix1304/Ignis-Samurai', type: 'github'}]}
|
|
||||||
stack={['python']}
|
|
||||||
>
|
|
||||||
</ProjectCard>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<h2>Замороженные и брошенные</h2>
|
|
||||||
|
|
||||||
<div className="Projects__List">
|
|
||||||
<div className="Projects__List_Column">
|
|
||||||
<ProjectCard
|
|
||||||
title="Unmei" status="frozen"
|
|
||||||
links={[{name: 'GitHub', url: 'https://github.com/unmei-site', type: 'github'}]}
|
|
||||||
stack={['react', 'sass', 'go']}
|
|
||||||
>
|
|
||||||
</ProjectCard>
|
|
||||||
</div>
|
|
||||||
<div className="Projects__List_Column"></div>
|
|
||||||
<div className="Projects__List_Column"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Projects = () => {
|
||||||
|
const [projects, setProjects] = useState<ProjectsState>({done: [], dropped: []});
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
fetch('https://baka.nix13.pw/projects')
|
||||||
|
.then(r => r.json())
|
||||||
|
.then(r => setProjects(r.projects))
|
||||||
|
.then(_ => setLoading(false));
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if(loading) return <div>Грузится, бля...</div>
|
||||||
|
return (
|
||||||
|
<div className="Projects" id='Projects'>
|
||||||
|
<h2>Завершенные и в разработке</h2>
|
||||||
|
<div className="Projects__List">
|
||||||
|
{projects.done.map(project => (
|
||||||
|
<ProjectCard
|
||||||
|
key={project.name}
|
||||||
|
title={project.name} status={project.status}
|
||||||
|
links={project.links}
|
||||||
|
>{project.desc}</ProjectCard>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Замороженные и брошенные</h2>
|
||||||
|
<div className="Projects__List">
|
||||||
|
{projects.dropped.map(project => (
|
||||||
|
<ProjectCard
|
||||||
|
key={project.name}
|
||||||
|
title={project.name} status={project.status}
|
||||||
|
links={project.links}
|
||||||
|
>{project.desc}</ProjectCard>
|
||||||
|
))}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Projects;
|
export default Projects;
|
|
@ -1,4 +1,5 @@
|
||||||
type ProjectStatus = 'development' | 'release' | 'frozen' | 'dropped';
|
// Projects types
|
||||||
|
type ProjectStatus = 'development' | 'release' | 'freeze' | 'dropped';
|
||||||
type ProjectStack = 'css' | 'html' | 'js' | 'ts' | 'sass' | 'java' | 'kotlin' | 'python' | 'go' | 'react' | 'gulp';
|
type ProjectStack = 'css' | 'html' | 'js' | 'ts' | 'sass' | 'java' | 'kotlin' | 'python' | 'go' | 'react' | 'gulp';
|
||||||
type ProjectLink = 'github' | 'git' | 'vk' | 'web';
|
type ProjectLink = 'github' | 'git' | 'vk' | 'web';
|
||||||
|
|
||||||
|
@ -7,3 +8,24 @@ type ProjectLinkType = {
|
||||||
url: string
|
url: string
|
||||||
type: ProjectLink
|
type: ProjectLink
|
||||||
}
|
}
|
||||||
|
type ProjectType = {
|
||||||
|
name: string
|
||||||
|
desc: string
|
||||||
|
stack: ProjectStack[]
|
||||||
|
status: ProjectStatus
|
||||||
|
links: ProjectLinkType[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Genshin types
|
||||||
|
type GenshinLinkType = {
|
||||||
|
name: string
|
||||||
|
url: string
|
||||||
|
}
|
||||||
|
|
||||||
|
type GenshinDLType = {
|
||||||
|
name: string
|
||||||
|
outdated: boolean
|
||||||
|
beta: boolean
|
||||||
|
secured: boolean
|
||||||
|
links: GenshinLinkType[]
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
const Loading = () => (
|
||||||
|
<div>Грузится бля!</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default Loading;
|
|
@ -10,7 +10,7 @@
|
||||||
&__Release
|
&__Release
|
||||||
background-color: #ab1bff
|
background-color: #ab1bff
|
||||||
|
|
||||||
&__Frozen
|
&__Freeze
|
||||||
background-color: #19b3a6
|
background-color: #19b3a6
|
||||||
|
|
||||||
&__Dropped
|
&__Dropped
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import React from "react";
|
|
||||||
import { capitalize } from "../../utils";
|
import { capitalize } from "../../utils";
|
||||||
import './ProjectStatusBadge.sass';
|
import './ProjectStatusBadge.sass';
|
||||||
|
|
||||||
|
@ -8,7 +7,7 @@ type Props = {
|
||||||
const localized = {
|
const localized = {
|
||||||
development: 'В разработке',
|
development: 'В разработке',
|
||||||
release: 'Готово',
|
release: 'Готово',
|
||||||
frozen: 'Заморожено',
|
freeze: 'Заморожено',
|
||||||
dropped: 'Брошено'
|
dropped: 'Брошено'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import './ProjectCard.sass';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
title: string
|
title: string
|
||||||
status?: 'development' | 'release' | 'frozen' | 'dropped'
|
status?: 'development' | 'release' | 'freeze' | 'dropped'
|
||||||
links?: ProjectLinkType[]
|
links?: ProjectLinkType[]
|
||||||
stack?: ProjectStack[]
|
stack?: ProjectStack[]
|
||||||
children?: React.ReactNode
|
children?: React.ReactNode
|
||||||
|
|
Loading…
Reference in New Issue