From 2380af1cb41dc35dac6848cbcf0dc3aa417f7e43 Mon Sep 17 00:00:00 2001 From: developomp Date: Sun, 15 Aug 2021 21:24:15 +0900 Subject: [PATCH] initial commit --- .gitignore | 21 + .prettierrc | 5 + .vscode/settings.json | 8 + LICENSE | 19 + README.md | 1 + package.json | 52 + public/index.html | 24 + public/llama-color.png | Bin 0 -> 17112 bytes public/llama.png | Bin 0 -> 20046 bytes public/robots.txt | 2 + src/components/Footer.tsx | 77 + src/components/Navbar.tsx | 51 + src/components/Sidebar.tsx | 40 + src/contexts.ts | 8 + src/index.css | 47 + src/index.tsx | 77 + src/react-app-env.d.ts | 1 + src/setupTests.ts | 1 + src/theming.ts | 65 + src/types/styled-components.d.ts | 8 + tsconfig.json | 26 + yarn.lock | 12375 +++++++++++++++++++++++++++++ 22 files changed, 12908 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 package.json create mode 100644 public/index.html create mode 100644 public/llama-color.png create mode 100644 public/llama.png create mode 100644 public/robots.txt create mode 100644 src/components/Footer.tsx create mode 100644 src/components/Navbar.tsx create mode 100644 src/components/Sidebar.tsx create mode 100644 src/contexts.ts create mode 100644 src/index.css create mode 100644 src/index.tsx create mode 100644 src/react-app-env.d.ts create mode 100644 src/setupTests.ts create mode 100644 src/theming.ts create mode 100644 src/types/styled-components.d.ts create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0c43a1c --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..9a5e038 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "useTabs": true, + "tabWidth": 4 +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a881215 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "editor.formatOnPaste": true, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.insertSpaces": false, + "editor.detectIndentation": false, + "cSpell.words": ["Sider"] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c160e3d --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2021 developomp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5056fa9 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# llama-bot-web-interface diff --git a/package.json b/package.json new file mode 100644 index 0000000..c28265a --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "llama-bot-web-interface", + "version": "1.0.0", + "private": true, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "analyze": "source-map-explorer 'build/static/js/*.js'" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-brands-svg-icons": "^5.15.4", + "@fortawesome/react-fontawesome": "^0.1.15", + "antd": "^4.16.11", + "local-storage-fallback": "^4.1.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "styled-components": "^5.3.0", + "typescript": "^4.1.2" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.11.4", + "@testing-library/react": "^11.1.0", + "@testing-library/user-event": "^12.1.10", + "@types/jest": "^26.0.15", + "@types/node": "^12.0.0", + "@types/react": "^17.0.0", + "@types/react-dom": "^17.0.0", + "@types/styled-components": "^5.1.12", + "react-scripts": "4.0.3", + "source-map-explorer": "^2.5.2" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..07b3433 --- /dev/null +++ b/public/index.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + Llama Bot + + + +
+ + diff --git a/public/llama-color.png b/public/llama-color.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fb9738e9c326fbdbe09759c44bd258a0ed374e GIT binary patch literal 17112 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 literal 0 HcmV?d00001 diff --git a/public/llama.png b/public/llama.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f504850d05d040a11e5505dbdfe00033276772 GIT binary patch literal 20046 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 G5luq? literal 0 HcmV?d00001 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx new file mode 100644 index 0000000..857f8bd --- /dev/null +++ b/src/components/Footer.tsx @@ -0,0 +1,77 @@ +import React from "react" +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" +import { faGithub } from "@fortawesome/free-brands-svg-icons" +import styled from "styled-components" + +import { Layout } from "antd" + +import theming from "../theming" + +const StyledFooter = styled(Layout.Footer)` + text-align: center; + + color: ${(props) => + theming.theme(props.theme.currentTheme, { + light: "black", + dark: "white", + })}; + + background-color: ${(props) => + theming.theme(props.theme.currentTheme, { + light: "white", + dark: "black", + })}; +` + +const StyledFooterContainer = styled.div` + display: flex; + justify-content: space-between; + + padding: 0 1rem 0 1rem; + width: 100%; + text-align: center; + + max-width: ${theming.size.screen_size2}; + + .logo { + color: gray; + } +` + +const GithubLink = styled.a` + font-size: 2rem; + + color: ${(props) => + theming.theme(props.theme.currentTheme, { + light: "lightgrey", + dark: "grey", + })}; + + &:hover { + color: ${(props) => + theming.theme(props.theme.currentTheme, { + light: theming.light.color0, + dark: theming.dark.color0, + })}; + } +` + +export default class Footer extends React.Component { + render() { + return ( + + +
+ Created by developomp +
+ + + +
+
+ ) + } +} diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx new file mode 100644 index 0000000..f96f66e --- /dev/null +++ b/src/components/Navbar.tsx @@ -0,0 +1,51 @@ +import { useContext } from "react" + +import { Col, Layout, Menu, Row } from "antd" +import { HomeOutlined } from "@ant-design/icons" + +import { SidebarCollapsedContext } from "../contexts" + +const { Header } = Layout + +const Navbar = () => { + const { isSidebarCollapsed, setSidebarCollapsed } = useContext( + SidebarCollapsedContext + ) + + return ( +
+ + { + setSidebarCollapsed( + (prevIsCollapsed) => !prevIsCollapsed + ) + }} + > + {isSidebarCollapsed ? ">" : "<"} + + + llama logo + + + + }>Home + Documentation + Status + + + Login Button + +
+ ) +} + +export default Navbar diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx new file mode 100644 index 0000000..9b37b48 --- /dev/null +++ b/src/components/Sidebar.tsx @@ -0,0 +1,40 @@ +import { Layout, Menu } from "antd" +import { + UserOutlined, + VideoCameraOutlined, + UploadOutlined, +} from "@ant-design/icons" + +import { SidebarCollapsedContext } from "../contexts" + +const Sidebar = () => { + return ( + + {({ isSidebarCollapsed }) => ( + + + }> + nav 1 + + }> + nav 2 + + }> + nav 3 + + + + )} + + ) +} + +export default Sidebar diff --git a/src/contexts.ts b/src/contexts.ts new file mode 100644 index 0000000..b952d65 --- /dev/null +++ b/src/contexts.ts @@ -0,0 +1,8 @@ +import { createContext, Dispatch, SetStateAction } from "react" + +const SidebarCollapsedContext = createContext({ + isSidebarCollapsed: false, + setSidebarCollapsed: (() => {}) as Dispatch>, +}) + +export { SidebarCollapsedContext } diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..aa5363b --- /dev/null +++ b/src/index.css @@ -0,0 +1,47 @@ +body { + margin: 0; + font-family: "Noto Sans KR", sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: "Source Code Pro", monospace; +} + +.site-layout-content { + min-height: 280px; + padding: 24px; + background: #fff; +} + +#components-layout-demo-top .logo { + float: left; + width: 120px; + height: 31px; + margin: 16px 24px 16px 0; + background: rgba(255, 255, 255, 0.3); +} + +.ant-row-rtl #components-layout-demo-top .logo { + float: right; + margin: 16px 0 16px 24px; +} + +.trigger { + padding: 0 24px; + font-size: 18px; + line-height: 64px; + cursor: pointer; + transition: color 0.3s; +} + +.trigger:hover { + color: #1890ff; +} + +.logo { + height: 32px; + margin: 16px; + background: rgba(255, 255, 255, 0.3); +} diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..bf67610 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,77 @@ +import React, { useEffect, useState } from "react" +import ReactDOM from "react-dom" + +import { ThemeProvider } from "styled-components" +import storage from "local-storage-fallback" + +import Navbar from "./components/Navbar" +import Sidebar from "./components/Sidebar" +import Footer from "./components/Footer" +import { Layout } from "antd" + +import { SidebarCollapsedContext } from "./contexts" + +import "antd/dist/antd.min.css" +import "./index.css" // must be loaded last + +const App = () => { + const [currentTheme, setCurrentTheme] = useState("light") + const [isSidebarCollapsed, setSidebarCollapsed] = useState(false) + + useEffect(() => { + // save theme when it is changed + storage.setItem("theme", currentTheme) + }, [currentTheme]) + + return ( + <> + + setCurrentTheme(setThemeTo), + }} + > + + + + + + + +
+

Dashboard

+ Content +
+
+
+