Shrubbery Commit

This commit is contained in:
zkldi
2021-07-05 03:12:32 +01:00
commit 046ddb5f33
57 changed files with 14292 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
# dependencies
/node_modules
.env
/reference
/_site
/build
/public/media/svg
/src/react-app-env.d.ts
.vscode
+1
View File
@@ -0,0 +1 @@
Any Colour You Like...
+92
View File
@@ -0,0 +1,92 @@
{
"name": "tachi-client",
"version": "0.1.0",
"private": true,
"scripts": {
"start": "react-scripts start -o",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"lint": "eslint src --fix",
"format": "prettier --write \"src/**/*.{js,css,scss,html}\""
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all",
"ie 11"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version",
"last 1 edge version",
"IE 11"
]
},
"dependencies": {
"@date-io/date-fns": "2.6.1",
"@formatjs/intl-pluralrules": "1.3.5",
"@fortawesome/fontawesome-free": "5.13.0",
"@material-ui/core": "4.9.14",
"@material-ui/icons": "4.9.1",
"@material-ui/lab": "4.0.0-alpha.53",
"@material-ui/pickers": "3.2.10",
"@material-ui/styles": "4.9.14",
"@tanem/svg-injector": "8.0.50",
"@types/jest": "26.0.23",
"@types/node": "16.0.0",
"@types/react": "17.0.13",
"@types/react-dom": "17.0.8",
"@types/react-router": "5.1.15",
"@types/react-router-dom": "5.1.7",
"apexcharts": "3.19.2",
"bootstrap": "4.6.0",
"clipboard-copy": "3.1.0",
"clsx": "1.1.0",
"date-fns": "2.8.1",
"downshift": "3.4.2",
"fg-loadcss": "2.1.0",
"lodash": "4.17.15",
"material-ui-popup-state": "1.4.1",
"perfect-scrollbar": "1.5.0",
"react": "16.12.0",
"react-bootstrap": "1.0.1",
"react-bootstrap-table-next": "4.0.2",
"react-bootstrap-table2-paginator": "2.1.2",
"react-datepicker": "2.16.0",
"react-dom": "16.12.0",
"react-draggable": "4.4.2",
"react-inlinesvg": "1.2.0",
"react-intl": "3.6.2",
"react-is": "16.13.1",
"react-perfect-scrollbar": "1.5.8",
"react-portal": "4.2.0",
"react-router": "5.2.0",
"react-router-dom": "5.1.2",
"react-scripts": "3.2.0",
"react-select": "3.1.0",
"react-swipeable-views": "0.13.9",
"react-swipeable-views-utils": "0.14.0",
"react-syntax-highlighter": "12.2.1",
"react-window": "1.8.5",
"socicon": "3.0.5",
"typescript": "4.3.5"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "4.28.1",
"@typescript-eslint/parser": "4.28.1",
"copyfiles": "2.1.1",
"eslint": "7.30.0",
"eslint-config-prettier": "8.3.0",
"eslint-plugin-import": "2.23.4",
"eslint-plugin-prettier": "3.4.0",
"prettier": "1.19.1",
"sass": "1.32.8",
"serve": "11.2.0",
"webpack-cli": "3.3.11",
"webpack-messages": "2.0.4",
"webpack-rtl-plugin": "2.0.0"
}
}
+13643
View File
File diff suppressed because it is too large Load Diff
+60
View File
@@ -0,0 +1,60 @@
body {
margin: 0;
padding: 0;
}
#splash-screen {
position: absolute;
z-index: 1000;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
background-color: #131313;
}
#splash-screen img {
margin-left: calc(100vw - 100%);
margin-bottom: 30px;
}
#splash-screen.hidden {
opacity: 0;
visibility: hidden;
}
.splash-spinner {
animation: rotate 2s cubic-bezier(0.455, 0.03, 0.515, 0.955) infinite;
margin-left: calc(100vw - 100%);
width: 50px;
height: 50px;
}
.splash-spinner .path {
stroke: #e61c6e;
stroke-linecap: round;
animation: dash 1.5s ease-in-out infinite;
}
@keyframes rotate {
100% {
transform: rotate(360deg);
}
}
@keyframes dash {
0% {
stroke-dasharray: 1, 150;
stroke-dashoffset: 0;
}
50% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -35;
}
100% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -124;
}
}
+68
View File
@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Tachi</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<link
rel="icon"
type="image/x-icon"
href="%PUBLIC_URL%/media/logos/favicon.ico"
/>
<link
href="//fonts.googleapis.com/css?family=Poppins:300,400,500,600,700%7CRoboto:300,400,500,600,700"
rel="stylesheet"
/>
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500"
/>
<!-- SPLASH SCREEN-->
<link
rel="stylesheet"
id="layout-styles-anchor"
href="%PUBLIC_URL%/css/splash-screen.css"
/>
<script
crossorigin="anonymous"
src="https://polyfill.io/v3/polyfill.min.js?features=es2017%2Cdefault%2Ces2015%2Ces2016%2CIntl"
></script>
</head>
<body id="kt_body">
<noscript>
You have JavaScript disabled, probably.<br>
I also use a JavaScript blocker!<br>
This site uses React to render its contents.<br>
We don't use JS to track you or try to do anything malicious. You'll have to enable JS in order for this site to work.
</noscript>
<div id="root"></div>
<div id="splash-screen" class="kt-splash-screen">
<img src="%PUBLIC_URL%/media/logos/logo-wordmark.png" width="100px" alt="Kamaitachi" />
<svg class="splash-spinner" viewBox="0 0 50 50">
<circle
class="path"
cx="25"
cy="25"
r="20"
fill="none"
stroke-width="5"
></circle>
</svg>
</div>
<div id="layout-portal"></div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 712 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1080 1080" style="enable-background:new 0 0 1080 1080;" xml:space="preserve">
<style type="text/css">
.st0{fill:#E61C6E;}
.st1{fill:#D1D0D1;}
</style>
<path class="st0" d="M310.57,596.05c1.33,0,93.27,0,93.27,0l76.38-131.46l188.75,0.89l36.42-62.62H424.26L310.57,596.05z"/>
<polygon class="st1" points="768.8,482.62 732.82,546.58 549.48,547.88 501.04,547.88 526.13,581.5 468.36,677.65 374.92,677.65
489.01,481.3 "/>
</svg>

After

Width:  |  Height:  |  Size: 699 B

+5
View File
@@ -0,0 +1,5 @@
{
"public": "_site",
"redirects": [],
"rewrites": []
}
+93
View File
@@ -0,0 +1,93 @@
{
"root": true,
"env": {
"browser": true,
"es6": true
},
"plugins": [
"@typescript-eslint",
"import"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"sourceType": "module",
"ecmaVersion": 2020
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended",
"plugin:import/typescript",
"plugin:import/warnings",
"plugin:import/errors"
],
"rules": {
"prettier/prettier": [
"error",
{
"printWidth": 100,
"tabWidth": 4,
"semi": true,
"singleQuote": false,
"trailingComma": "es5",
"bracketSpacing": true,
"endOfLine": "auto",
"useTabs": true
}
],
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{
"argsIgnorePattern": "logger"
}
],
"import/no-unresolved": "off",
"require-await": "warn",
"no-await-in-loop": "warn",
"no-unused-labels": "error",
"prefer-const": "error",
"no-console": "error",
"eqeqeq": "error",
"no-eval": "error",
"no-var": "error",
"no-new-object": "error",
"quote-props": [
"error",
"as-needed"
],
"no-array-constructor": "error",
"prefer-template": "error",
"prefer-promise-reject-errors": "error",
"no-useless-escape": "error",
"no-loop-func": "error",
"prefer-rest-params": "error",
"default-param-last": "error",
"no-new-func": "error",
"arrow-body-style": "error",
"no-useless-constructor": "error",
"no-duplicate-imports": "error",
"dot-notation": "error",
"space-before-blocks": "error",
"no-prototype-builtins": "off",
"prefer-arrow-callback": "error",
"curly": "error",
"no-template-curly-in-string": "error",
"no-implied-eval": "error",
"yoda": "error",
"no-labels": "error",
"no-useless-concat": "error",
"radix": "error",
"no-octal-escape": "error",
"no-param-reassign": "error",
"no-proto": "error",
"no-return-await": "error",
"no-throw-literal": "error",
"no-unmodified-loop-condition": "error",
"no-unused-expressions": "error",
"no-useless-call": "error",
"no-useless-return": "error",
"require-unicode-regexp": "error"
}
}
+16
View File
@@ -0,0 +1,16 @@
import React, { Suspense } from "react";
import { BrowserRouter } from "react-router-dom";
import { Routes } from "./AppRoutes";
import { LayoutSplashScreen, MaterialThemeProvider } from "../_metronic/layout";
export default function App({ basename }: { basename: string }) {
return (
<Suspense fallback={<LayoutSplashScreen />}>
<BrowserRouter basename={basename}>
<MaterialThemeProvider>
<Routes />
</MaterialThemeProvider>
</BrowserRouter>
</Suspense>
);
}
+23
View File
@@ -0,0 +1,23 @@
import React from "react";
import { Switch, Route } from "react-router-dom";
import { Layout } from "../_metronic/layout";
import BasePage from "./BasePage";
import { ErrorPage } from "./pages/ErrorPage";
/**
* Core Routes for Tachi-Client.
* These are things that involve redirecting to non-dashboard apps.
*/
export function Routes() {
return (
<Switch>
// This should be removed - as it's only for debugging.
<Route path="/error">
<ErrorPage statusCode={404} />
</Route>
<Layout>
<BasePage />
</Layout>
</Switch>
);
}
+17
View File
@@ -0,0 +1,17 @@
import React, { Suspense } from "react";
import { Redirect, Switch, Route } from "react-router-dom";
import { LayoutSplashScreen } from "../_metronic/layout";
import { DashboardPage } from "./pages/DashboardPage";
export default function BasePage() {
return (
<Suspense fallback={<LayoutSplashScreen />}>
<Switch>
<Redirect exact from="/" to="/dashboard" />
<Route path="/dashboard" component={DashboardPage} />
<Redirect to="error" />
</Switch>
</Suspense>
);
}
+5
View File
@@ -0,0 +1,5 @@
import React from "react";
export function DashboardPage() {
return <></>;
}
+47
View File
@@ -0,0 +1,47 @@
import React from "react";
import { toAbsoluteUrl } from "../../_metronic/_helpers";
import { Link } from "react-router-dom";
export function ErrorPage({ statusCode }: { statusCode: number }) {
let message = "An unexpected error has occured. This has been reported!";
switch (statusCode) {
case 400:
message = "The server refused this request.";
break;
case 401:
message = "Looks like you're not authorised. Try logging in.";
break;
case 403:
message = "Looks like you're not allowed to be here.";
break;
case 404:
message = "This page does not exist. If you think it should exist, let us know!";
break;
case 500:
message = "Looks like the server has failed. This has been reported!";
break;
}
return (
<div className="d-flex flex-column flex-root">
<div
className="d-flex flex-row-fluid flex-column bgi-size-cover bgi-position-center bgi-no-repeat p-10 p-sm-30"
style={{
backgroundImage: `url(${toAbsoluteUrl("/media/error/bg1.jpg")})`,
}}
>
<h1
className="font-size-sm-100 font-weight-boldest mt-15"
style={{ fontSize: "150px" }}
>
{statusCode}
</h1>
<p className="font-size-h3 font-weight-light">{message}</p>
<p>
<Link to="/">Go Home.</Link>
</p>
</div>
</div>
);
}
+67
View File
@@ -0,0 +1,67 @@
@import "./_metronic/_assets/sass/style.react.scss";
.example-highlight > pre {
background: none transparent !important;
margin: 0 !important;
padding-top: 0.5rem;
code {
overflow-y: auto;
display: block;
span {
background: none transparent !important;
}
}
}
.json > pre {
background: none #fff !important;
}
.example-code > .json {
background: none #fff !important;
}
.symbol.symbol-45 > svg {
width: 100%;
max-width: 45px;
height: 45px;
}
.react-bootstrap-table {
overflow-x: auto;
}
.react-bootstrap-table {
th {
outline: none;
&.sortable {
.svg-icon-sort {
opacity: 0;
}
&:hover {
cursor: pointer;
.svg-icon-sort {
opacity: 1;
}
}
}
}
.table.table-head-custom thead tr {
.sortable-active {
color: #6993ff !important;
}
}
}
.cursor-default {
cursor: default !important;
}
.display-block {
display: block;
}
+26
View File
@@ -0,0 +1,26 @@
/**
* Create React App entry point. This and `public/index.html` files can not be
* changed or moved.
*/
import React from "react";
import ReactDOM from "react-dom";
import App from "./app/App";
import "./index.scss";
import "./_metronic/_assets/plugins/keenthemes-icons/font/ki.css";
import "socicon/css/socicon.css";
import "@fortawesome/fontawesome-free/css/all.min.css";
import "./_metronic/_assets/plugins/flaticon/flaticon.css";
import "./_metronic/_assets/plugins/flaticon2/flaticon.css";
import "react-datepicker/dist/react-datepicker.css";
import { MetronicSplashScreenProvider, MetronicSubheaderProvider } from "./_metronic/layout";
const { PUBLIC_URL } = process.env;
ReactDOM.render(
<MetronicSubheaderProvider>
<MetronicSplashScreenProvider>
<App basename={PUBLIC_URL} />
</MetronicSplashScreenProvider>
</MetronicSubheaderProvider>,
document.getElementById("root")
);
+3
View File
@@ -0,0 +1,3 @@
export interface JustChildren {
children: JSX.Element[];
}
+41
View File
@@ -0,0 +1,41 @@
{
"compilerOptions": {
"target": "esnext",
"outDir": "./dist/",
"strictNullChecks": true,
"moduleResolution": "node",
"allowJs": true,
"noEmit": true,
"strict": true,
"esModuleInterop": true,
"jsx": "react",
"baseUrl": "src",
"lib": [
"dom.iterable",
"dom",
"ESNext"
],
"module": "esnext",
"removeComments": true,
"alwaysStrict": true,
"allowUnreachableCode": false,
"noImplicitAny": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"forceConsistentCasingInFileNames": true,
"importHelpers": true,
"isolatedModules": true,
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true
},
"include": [
"src"
, "reference/GoogleMaterialExamples", "reference/widgets" ],
"exclude": [
"node_modules"
]
}
+60
View File
@@ -0,0 +1,60 @@
const path = require("path");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const WebpackMessages = require("webpack-messages");
const del = require("del");
const rootPath = path.resolve(__dirname);
const distPath = `${rootPath}/src`;
module.exports = () => [{
mode: "development",
stats: "errors-only",
performance: {
hints: true,
},
entry: {
"sass/style.react": "./src/index.scss",
},
output: {
// main output path in assets folder
path: distPath,
// output path based on the entries' filename
filename: "[name].js",
},
resolve: { extensions: [".scss"], },
plugins: [
new WebpackMessages({
name: "tachi-client",
logger: str => console.log(`>> ${str}`),
}),
new MiniCssExtractPlugin({
filename: "[name].css",
}),
{
apply: compiler => {
compiler.hooks.afterEmit.tap("AfterEmitPlugin", compilation => {
(async () => {
await del.sync(`${distPath}/sass/*.js`, { force: true });
})();
});
},
},
],
module: {
rules: [
{
test: /\.scss$/,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
{
loader: "sass-loader",
options: {
sourceMap: true,
},
},
],
},
],
},
}];