Compare commits
No commits in common. "48028193cc69487f131d10631f48d66c2bc66d25" and "c138fc68d0d78f6cab2eb36467635af6d6fd44c6" have entirely different histories.
48028193cc
...
c138fc68d0
27 changed files with 5439 additions and 453 deletions
|
@ -3,6 +3,8 @@ const { merge } = require('webpack-merge')
|
||||||
const path = require( 'path' );
|
const path = require( 'path' );
|
||||||
|
|
||||||
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
|
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
|
||||||
|
const ReactRefreshTypeScript = require('react-refresh-typescript');
|
||||||
|
|
||||||
|
|
||||||
const common = require('./webpack.common.js')
|
const common = require('./webpack.common.js')
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ const common = require('./webpack.common.js')
|
||||||
|
|
||||||
module.exports = merge(common, {
|
module.exports = merge(common, {
|
||||||
mode: 'production',
|
mode: 'production',
|
||||||
devtool: 'source-map',
|
devtool: false,
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [
|
||||||
{
|
{
|
||||||
|
@ -35,5 +35,4 @@ module.exports = merge(common, {
|
||||||
maxEntrypointSize: 512000,
|
maxEntrypointSize: 512000,
|
||||||
maxAssetSize: 512000,
|
maxAssetSize: 512000,
|
||||||
},
|
},
|
||||||
plugins: [new MiniCssExtractPlugin()]
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -2,22 +2,28 @@
|
||||||
"name": "@chatbridge/client",
|
"name": "@chatbridge/client",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": "https://git.jon-e.net/jonny/chatbridge",
|
|
||||||
"author": "sneakers-the-rat <j@nny.fyi>",
|
|
||||||
"license": "AGPL-3.0",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.11.1",
|
"@emotion/react": "^11.11.1",
|
||||||
"@emotion/styled": "^11.11.0",
|
"@emotion/styled": "^11.11.0",
|
||||||
|
"@mui/base": "^5.0.0-beta.8",
|
||||||
"@mui/icons-material": "^5.14.1",
|
"@mui/icons-material": "^5.14.1",
|
||||||
"@mui/material": "^5.14.2",
|
"@mui/material": "^5.14.2",
|
||||||
|
"@types/node": "^16.18.39",
|
||||||
|
"@types/react": "^18.2.16",
|
||||||
|
"@types/react-dom": "^18.2.7",
|
||||||
|
"file-loader": "^6.2.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
|
"react-scripts": "5.0.1",
|
||||||
"sass": "^1.64.1",
|
"sass": "^1.64.1",
|
||||||
"typescript": "^4.9.5"
|
"typescript": "^4.9.5",
|
||||||
|
"web-vitals": "^2.1.4"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "NODE_ENV=development webpack serve -c ./config/webpack.dev.js --mode development",
|
"start": "NODE_ENV=development webpack serve -c ./config/webpack.dev.js --mode development",
|
||||||
"build": "NODE_ENV=production webpack --config ./config/webpack.prod.js"
|
"build": "NODE_ENV=production webpack --config ./config/webpack.prod.js",
|
||||||
|
"test": "react-scripts test",
|
||||||
|
"eject": "react-scripts eject"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": [
|
"extends": [
|
||||||
|
@ -27,15 +33,10 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
|
||||||
"@types/node": "^16.18.39",
|
|
||||||
"@types/react": "^18.2.16",
|
|
||||||
"@types/react-dom": "^18.2.7",
|
|
||||||
"css-loader": "^6.8.1",
|
"css-loader": "^6.8.1",
|
||||||
"css-minimizer-webpack-plugin": "^5.0.1",
|
|
||||||
"file-loader": "^6.2.0",
|
|
||||||
"html-webpack-plugin": "^5.5.3",
|
"html-webpack-plugin": "^5.5.3",
|
||||||
"mini-css-extract-plugin": "^2.7.6",
|
|
||||||
"react-refresh": "^0.14.0",
|
"react-refresh": "^0.14.0",
|
||||||
|
"react-refresh-typescript": "^2.0.9",
|
||||||
"sass-loader": "^13.3.2",
|
"sass-loader": "^13.3.2",
|
||||||
"style-loader": "^3.3.3",
|
"style-loader": "^3.3.3",
|
||||||
"ts-loader": "^9.4.4",
|
"ts-loader": "^9.4.4",
|
||||||
|
|
|
@ -2,16 +2,42 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
|
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="Web site created using create-react-app"
|
content="Web site created using create-react-app"
|
||||||
/>
|
/>
|
||||||
|
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||||
|
<!--
|
||||||
|
manifest.json provides metadata used when your web app is installed on a
|
||||||
|
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||||
|
-->
|
||||||
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||||
|
<!--
|
||||||
|
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`.
|
||||||
|
-->
|
||||||
<title>ChatBridge</title>
|
<title>ChatBridge</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
<!--
|
||||||
|
This HTML file is a template.
|
||||||
|
If you open it directly in the browser, you will see an empty page.
|
||||||
|
|
||||||
|
You can add webfonts, meta tags, or analytics to this file.
|
||||||
|
The build step will place the bundled scripts into the <body> tag.
|
||||||
|
|
||||||
|
To begin the development, run `npm start` or `yarn start`.
|
||||||
|
To create a production bundle, use `npm run build` or `yarn build`.
|
||||||
|
-->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,8 +1,25 @@
|
||||||
{
|
{
|
||||||
"short_name": "ChatBridge",
|
"short_name": "React App",
|
||||||
"name": "ChatBridge: Bridge ur chatz",
|
"name": "Create React App Sample",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "favicon.ico",
|
||||||
|
"sizes": "64x64 32x32 24x24 16x16",
|
||||||
|
"type": "image/x-icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "logo192.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "logo512.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
}
|
||||||
|
],
|
||||||
"start_url": ".",
|
"start_url": ".",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"theme_color": "#FFFFFF",
|
"theme_color": "#000000",
|
||||||
"background_color": "#1C1B22"
|
"background_color": "#ffffff"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import logo from './logo.svg';
|
||||||
import { createTheme, ThemeProvider } from '@mui/material/styles';
|
import { createTheme, ThemeProvider } from '@mui/material/styles';
|
||||||
import { yellow } from "@mui/material/colors";
|
import { yellow} from "@mui/material/colors";
|
||||||
|
import './sass/index.scss';
|
||||||
|
|
||||||
const theme = createTheme({
|
const theme = createTheme({
|
||||||
palette:{
|
palette:{
|
||||||
|
@ -27,4 +28,4 @@ function App() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default App;
|
export default App;
|
|
@ -1,4 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import {useState, useEffect} from "react";
|
||||||
|
|
||||||
import Table from '@mui/material/Table';
|
import Table from '@mui/material/Table';
|
||||||
import TableBody from '@mui/material/TableBody';
|
import TableBody from '@mui/material/TableBody';
|
||||||
|
@ -6,6 +7,7 @@ import TableCell from '@mui/material/TableCell';
|
||||||
import TableRow from "@mui/material/TableRow";
|
import TableRow from "@mui/material/TableRow";
|
||||||
import TableContainer from '@mui/material/TableContainer';
|
import TableContainer from '@mui/material/TableContainer';
|
||||||
import TableHead from '@mui/material/TableHead';
|
import TableHead from '@mui/material/TableHead';
|
||||||
|
import Typography from "@mui/material/Typography";
|
||||||
|
|
||||||
|
|
||||||
import GroupRow from "./groupRow";
|
import GroupRow from "./groupRow";
|
||||||
|
@ -43,4 +45,4 @@ export default function GroupPanel({
|
||||||
</TableContainer>
|
</TableContainer>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
import TableCell from '@mui/material/TableCell';
|
import TableCell from '@mui/material/TableCell';
|
||||||
|
import TableContainer from '@mui/material/TableContainer';
|
||||||
|
import TableHead from '@mui/material/TableHead';
|
||||||
import TableRow from '@mui/material/TableRow';
|
import TableRow from '@mui/material/TableRow';
|
||||||
import DeleteForeverIcon from '@mui/icons-material/DeleteForever';
|
import DeleteForeverIcon from '@mui/icons-material/DeleteForever';
|
||||||
import IconButton from "@mui/material/IconButton"
|
import IconButton from "@mui/material/IconButton"
|
||||||
|
@ -44,4 +46,4 @@ export default function GroupRow(
|
||||||
</TableRow>
|
</TableRow>
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,9 @@
|
||||||
import {useState} from "react";
|
import Grid from "@mui/material/Grid";
|
||||||
|
|
||||||
import TextField from "@mui/material/TextField";
|
import TextField from "@mui/material/TextField";
|
||||||
import Button from "@mui/material/Button";
|
import Button from "@mui/material/Button";
|
||||||
|
|
||||||
import {setBridgeLabel} from "../../api/bridge";
|
import {setBridgeLabel} from "../../api/bridge";
|
||||||
|
import {useState} from "react";
|
||||||
|
|
||||||
|
|
||||||
export const JoinBridge = ({
|
export const JoinBridge = ({
|
||||||
|
|
|
@ -1,17 +1,15 @@
|
||||||
import {useEffect, useState} from "react";
|
|
||||||
|
|
||||||
import FormControl from "@mui/material/FormControl";
|
import FormControl from "@mui/material/FormControl";
|
||||||
import InputLabel from "@mui/material/InputLabel";
|
import InputLabel from "@mui/material/InputLabel";
|
||||||
import Select from "@mui/material/Select";
|
import Select from "@mui/material/Select";
|
||||||
import MenuItem from "@mui/material/MenuItem";
|
import MenuItem from "@mui/material/MenuItem";
|
||||||
import Button from "@mui/material/Button";
|
import Button from "@mui/material/Button";
|
||||||
|
|
||||||
import {stepCompleteType} from "./joinForm";
|
import {stepCompleteType} from "./joinForm";
|
||||||
import {getSlackChannels, joinSlackChannel} from "../../api/slack";
|
|
||||||
import {getDiscordChannels} from "../../api/discord";
|
|
||||||
|
|
||||||
|
import {getSlackChannels, joinSlackChannel} from "../../api/slack";
|
||||||
|
import {useEffect, useState} from "react";
|
||||||
import {channelsType} from "../../types/channel";
|
import {channelsType} from "../../types/channel";
|
||||||
import {bridgeType} from "../../types/bridge";
|
import {bridgeType} from "../../types/bridge";
|
||||||
|
import {getDiscordChannels} from "../../api/discord";
|
||||||
|
|
||||||
|
|
||||||
export interface JoinChannelProps {
|
export interface JoinChannelProps {
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
import {useState, useEffect} from "react";
|
|
||||||
|
|
||||||
import Button from '@mui/material/Button';
|
|
||||||
|
|
||||||
|
import {Group} from "../../types/group";
|
||||||
import {JoinStep} from './joinStep';
|
import {JoinStep} from './joinStep';
|
||||||
import {JoinLogin} from "./joinLogin";
|
import {JoinLogin} from "./joinLogin";
|
||||||
|
import {useState, useEffect} from "react";
|
||||||
|
import Button from '@mui/material/Button';
|
||||||
|
import {createChannel} from "../../api/channel";
|
||||||
import {JoinBridge} from "./joinBridge";
|
import {JoinBridge} from "./joinBridge";
|
||||||
import JoinChannel from "./joinChannel";
|
import JoinChannel from "./joinChannel";
|
||||||
import {createChannel} from "../../api/channel";
|
|
||||||
import {Group} from "../../types/group";
|
|
||||||
import {bridgeType} from "../../types/bridge";
|
import {bridgeType} from "../../types/bridge";
|
||||||
|
|
||||||
export interface JoinFormProps {
|
export interface JoinFormProps {
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
import React, {useState} from 'react';
|
import React, {useState} from 'react';
|
||||||
|
|
||||||
|
import {Group} from '../../types/group'
|
||||||
|
import {groupInvite} from '../../api/groups'
|
||||||
import TextField from "@mui/material/TextField";
|
import TextField from "@mui/material/TextField";
|
||||||
import Button from "@mui/material/Button";
|
import Button from "@mui/material/Button";
|
||||||
|
|
||||||
import {groupInvite} from '../../api/groups'
|
|
||||||
import {Group} from '../../types/group'
|
|
||||||
|
|
||||||
|
|
||||||
export interface JoinGroupProps {
|
export interface JoinGroupProps {
|
||||||
group: Group;
|
group: Group;
|
||||||
setGroup: React.Dispatch<React.SetStateAction<Group>>
|
setGroup: React.Dispatch<React.SetStateAction<Group>>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*
|
/*
|
||||||
Select which platform you're joining from!
|
Select which platform you're joining from!
|
||||||
*/
|
*/
|
||||||
import React, {useEffect, useState} from 'react';
|
|
||||||
|
|
||||||
|
import React, {useEffect, useState} from 'react';
|
||||||
import InputLabel from '@mui/material/InputLabel';
|
import InputLabel from '@mui/material/InputLabel';
|
||||||
import MenuItem from '@mui/material/MenuItem';
|
import MenuItem from '@mui/material/MenuItem';
|
||||||
import FormControl from '@mui/material/FormControl';
|
import FormControl from '@mui/material/FormControl';
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
import Accordion from '@mui/material/Accordion';
|
import Accordion from '@mui/material/Accordion';
|
||||||
import AccordionDetails from '@mui/material/AccordionDetails';
|
import AccordionDetails from '@mui/material/AccordionDetails';
|
||||||
import AccordionSummary from '@mui/material/AccordionSummary';
|
import AccordionSummary from '@mui/material/AccordionSummary';
|
||||||
|
@ -7,6 +6,7 @@ import Typography from '@mui/material/Typography';
|
||||||
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
||||||
import RadioButtonUncheckedIcon from '@mui/icons-material/RadioButtonUnchecked';
|
import RadioButtonUncheckedIcon from '@mui/icons-material/RadioButtonUnchecked';
|
||||||
import TaskAltIcon from '@mui/icons-material/TaskAlt';
|
import TaskAltIcon from '@mui/icons-material/TaskAlt';
|
||||||
|
import {useState} from "react";
|
||||||
|
|
||||||
export interface JoinStepProps {
|
export interface JoinStepProps {
|
||||||
children: any;
|
children: any;
|
||||||
|
@ -57,4 +57,4 @@ export function JoinStep(
|
||||||
</Accordion>
|
</Accordion>
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
import Tab from '@mui/material/Tab';
|
import Tab from '@mui/material/Tab';
|
||||||
|
import TabsList from '@mui/base/TabsList';
|
||||||
import Tabs from '@mui/material/Tabs';
|
import Tabs from '@mui/material/Tabs';
|
||||||
import Box from "@mui/material/Box";
|
import Box from "@mui/material/Box";
|
||||||
import { styled } from '@mui/material/styles';
|
import { styled } from '@mui/material/styles';
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {useState, useEffect} from "react";
|
import {useState, useEffect} from "react";
|
||||||
|
import TextField from '@mui/material/TextField';
|
||||||
|
import Button from '@mui/material/Button';
|
||||||
|
|
||||||
import {JoinForm} from "../join/joinForm";
|
import {JoinForm} from "../join/joinForm";
|
||||||
import {JoinGroup} from '../join/joinGroup';
|
import {JoinGroup} from '../join/joinGroup';
|
||||||
|
|
||||||
import {Group} from "../../types/group";
|
import {Group} from "../../types/group";
|
||||||
|
import {groupInvite} from "../../api/groups";
|
||||||
|
|
||||||
export default function JoinPanel(){
|
export default function JoinPanel(){
|
||||||
const [group, setGroup] = useState<Group>(undefined);
|
const [group, setGroup] = useState<Group>(undefined);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {useState, useEffect} from "react";
|
import {useState, useEffect} from "react";
|
||||||
|
|
||||||
import TextField from '@mui/material/TextField';
|
import TextField from '@mui/material/TextField';
|
||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
|
|
||||||
|
@ -143,4 +142,4 @@ export default function ManagePanel(){
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -1,9 +1,7 @@
|
||||||
import {useEffect, useRef, useState} from "react";
|
import {useEffect, useRef, useState} from "react";
|
||||||
|
|
||||||
import Button from "@mui/material/Button";
|
|
||||||
|
|
||||||
import {getDiscordInstallURL} from "../../api/discord";
|
import {getDiscordInstallURL} from "../../api/discord";
|
||||||
import {getBridgeByStateToken} from "../../api/bridge";
|
import {getBridgeByStateToken} from "../../api/bridge";
|
||||||
|
import Button from "@mui/material/Button";
|
||||||
|
|
||||||
|
|
||||||
export const DiscordLogin = ({
|
export const DiscordLogin = ({
|
||||||
|
@ -55,4 +53,4 @@ export const DiscordLogin = ({
|
||||||
{installLink === undefined ? 'Waiting for Install Link...' : 'Add to Discord'}
|
{installLink === undefined ? 'Waiting for Install Link...' : 'Add to Discord'}
|
||||||
</Button>
|
</Button>
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
import React, {useEffect, useRef, useState} from 'react'
|
import React, {useEffect, useRef, useState} from 'react'
|
||||||
|
|
||||||
import Button from "@mui/material/Button";
|
import Button from "@mui/material/Button";
|
||||||
|
|
||||||
import {getSlackInstallURL} from "../../api/slack";
|
import {getSlackInstallURL} from "../../api/slack";
|
||||||
import {getBridgeByStateToken} from "../../api/bridge";
|
import {getBridgeByStateToken} from "../../api/bridge";
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import Typography from '@mui/material/Typography';
|
||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
|
|
||||||
export default function TabPanel(props) {
|
export default function TabPanel(props) {
|
||||||
|
@ -26,4 +27,4 @@ TabPanel.propTypes = {
|
||||||
children: PropTypes.node,
|
children: PropTypes.node,
|
||||||
index: PropTypes.number.isRequired,
|
index: PropTypes.number.isRequired,
|
||||||
value: PropTypes.number.isRequired,
|
value: PropTypes.number.isRequired,
|
||||||
};
|
};
|
|
@ -1,8 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom/client';
|
import ReactDOM from 'react-dom/client';
|
||||||
import App from './App';
|
|
||||||
|
|
||||||
import './sass/index.scss';
|
import './sass/index.scss';
|
||||||
|
import App from './App';
|
||||||
|
|
||||||
const root = ReactDOM.createRoot(
|
const root = ReactDOM.createRoot(
|
||||||
document.getElementById('root') as HTMLElement
|
document.getElementById('root') as HTMLElement
|
||||||
|
|
38
client/styles/App.css
Normal file
38
client/styles/App.css
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
.App {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.App-logo {
|
||||||
|
height: 40vmin;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: no-preference) {
|
||||||
|
.App-logo {
|
||||||
|
animation: App-logo-spin infinite 20s linear;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.App-header {
|
||||||
|
background-color: #282c34;
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: calc(10px + 2vmin);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.App-link {
|
||||||
|
color: #61dafb;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes App-logo-spin {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
13
client/styles/index.css
Normal file
13
client/styles/index.css
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
||||||
|
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
||||||
|
sans-serif;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
||||||
|
monospace;
|
||||||
|
}
|
|
@ -8,10 +8,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start:client": "npm run start --prefix client",
|
"start:client": "npm run start --prefix client",
|
||||||
"start:server": "npm run start --prefix server",
|
"start:server": "npm run start --prefix server",
|
||||||
"start": "concurrently -k -n \"CLIENT,SERVER\" -c \"bgBlue.bold,bgRed.bold\" \"npm run start:client\" \"npm run start:server\"",
|
"start": "concurrently -k -n \"CLIENT,SERVER\" -c \"bgBlue.bold,bgRed.bold\" \"npm run start:client\" \"npm run start:server\""
|
||||||
"build:client": "npm run build --prefix client",
|
|
||||||
"build:server": "npm run build --prefix server",
|
|
||||||
"build": "npm run build:client; npm run build:server"
|
|
||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -3,14 +3,16 @@
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "bridging a bunch of chats together",
|
"description": "bridging a bunch of chats together",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"repository": "https://git.jon-e.net/jonny/chatbridge",
|
"repository": "https://git.jon-e.net/jonny/ucla-chat",
|
||||||
"author": "sneakers-the-rat <j@nny.fyi>",
|
"author": "sneakers-the-rat <JLSaunders987@gmail.com>",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "NODE_ENV=development ts-node-dev --respawn --transpile-only --exit-child src/app.ts",
|
"start": "NODE_ENV=development ts-node-dev --respawn --transpile-only --exit-child src/app.ts",
|
||||||
"build": "../node_modules/.bin/tsc -p .",
|
"build": "../node_modules/.bin/tsc -p .",
|
||||||
"typeorm": "../node_modules/.bin/typeorm-ts-node-commonjs",
|
"typeorm": "../node_modules/.bin/typeorm-ts-node-commonjs",
|
||||||
|
"migrate": "rm -rf build && yarn build && yarn ../node_modules/.bin/typeorm migration:generate ./src/migrations/added-user-entity -d ./src/utils/data-source.ts",
|
||||||
|
"db:push": "rm -rf build && yarn build && yarn ../node_modules/.bin/typeorm migration:run -d src/utils/data-source.ts",
|
||||||
"importData": "npx ts-node-dev --transpile-only --exit-child src/data/seeder.ts",
|
"importData": "npx ts-node-dev --transpile-only --exit-child src/data/seeder.ts",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
|
@ -27,6 +29,8 @@
|
||||||
"jsonwebtoken": "^9.0.1",
|
"jsonwebtoken": "^9.0.1",
|
||||||
"pg": "^8.11.1",
|
"pg": "^8.11.1",
|
||||||
"pm2": "^5.3.0",
|
"pm2": "^5.3.0",
|
||||||
|
"pug": "^3.0.2",
|
||||||
|
"redis": "^4.6.7",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"slugify": "^1.6.6",
|
"slugify": "^1.6.6",
|
||||||
"typeorm": "^0.3.17",
|
"typeorm": "^0.3.17",
|
||||||
|
@ -41,6 +45,7 @@
|
||||||
"@types/cors": "^2.8.13",
|
"@types/cors": "^2.8.13",
|
||||||
"@types/express": "^4.17.17",
|
"@types/express": "^4.17.17",
|
||||||
"@types/jest": "^29.5.3",
|
"@types/jest": "^29.5.3",
|
||||||
|
"@types/jsonwebtoken": "^9.0.2",
|
||||||
"@types/node": "^20.4.2",
|
"@types/node": "^20.4.2",
|
||||||
"@types/pug": "^2.0.6",
|
"@types/pug": "^2.0.6",
|
||||||
"@types/winston": "^2.4.4",
|
"@types/winston": "^2.4.4",
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
"strictPropertyInitialization": false,
|
"strictPropertyInitialization": false,
|
||||||
"strictNullChecks": false,
|
"strictNullChecks": false,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"outDir": "./dist",
|
"outDir": "./build",
|
||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue