Update frontend and fix more bugs
Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar> Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
This commit is contained in:
parent
0a04060527
commit
9928a20677
|
@ -71,3 +71,5 @@ cython_debug/
|
||||||
*_data
|
*_data
|
||||||
data/
|
data/
|
||||||
test.py
|
test.py
|
||||||
|
.next
|
||||||
|
node_modules
|
|
@ -13,9 +13,14 @@ router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.post("")
|
@router.post("")
|
||||||
def create(aux: Document):
|
def create(aux: Document, user: tuple = Depends(get_current_user)):
|
||||||
mongo.create_document(json.loads(json.dumps(aux.__dict__)))
|
doc_id = mongo.create_document({
|
||||||
return JSONResponse(content={"detail": "Document created"}, status_code=201)
|
"name": aux.name,
|
||||||
|
"owner": user[0],
|
||||||
|
"data": aux.data if aux.data is not None else ""
|
||||||
|
})
|
||||||
|
postgres.give_access_doc(user[0], doc_id, 1)
|
||||||
|
return JSONResponse(content={"detail": "Document created", "id": doc_id}, status_code=201)
|
||||||
|
|
||||||
|
|
||||||
@router.get("")
|
@router.get("")
|
||||||
|
@ -42,6 +47,11 @@ def edit_data(aux: DocumentUpdate, id: str):
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{id}/access")
|
@router.get("/{id}/access")
|
||||||
|
def get_doc_access(id: str):
|
||||||
|
return postgres.access_to_doc(id)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/{id}/access/me")
|
||||||
def get_access(id: str, user: tuple = Depends(get_current_user)):
|
def get_access(id: str, user: tuple = Depends(get_current_user)):
|
||||||
return postgres.has_access_doc(user[0], id)
|
return postgres.has_access_doc(user[0], id)
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,7 @@ from pydantic.types import Optional
|
||||||
|
|
||||||
class Document(BaseModel):
|
class Document(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
access: list
|
data: Optional[str]
|
||||||
data: str
|
|
||||||
owner: str
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentUpdate(BaseModel):
|
class DocumentUpdate(BaseModel):
|
||||||
|
|
|
@ -26,7 +26,13 @@ def search(index, query, user_id):
|
||||||
hits = []
|
hits = []
|
||||||
for hit in resp["hits"]["hits"]:
|
for hit in resp["hits"]["hits"]:
|
||||||
hits.append(
|
hits.append(
|
||||||
str(hit["highlight"]) + " ---- " + "%(name)s: %(data)s" % hit["_source"]
|
# str(hit["highlight"]) + " ---- " + "%(name)s: %(data)s" % hit["_source"]
|
||||||
|
# str(hit["highlight"]) + " ---- " + "%(name)s: %(data)s" % hit["_source"]
|
||||||
|
{
|
||||||
|
"id": hit['_id'],
|
||||||
|
"name": hit['_source']["name"],
|
||||||
|
"highlight": str(hit["highlight"]["data"])
|
||||||
|
}
|
||||||
)
|
)
|
||||||
print(hit['_id'], hit['_source'])
|
print(hit['_id'], hit['_source'])
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ def create_document(document):
|
||||||
doc = document.copy()
|
doc = document.copy()
|
||||||
docs_coll.insert_one(document)
|
docs_coll.insert_one(document)
|
||||||
elastic.add_document("test-index", document["_id"], doc)
|
elastic.add_document("test-index", document["_id"], doc)
|
||||||
|
return ObjectId(document["_id"]).__str__()
|
||||||
|
|
||||||
|
|
||||||
def get_document_by_id(id):
|
def get_document_by_id(id):
|
||||||
|
|
|
@ -101,6 +101,19 @@ def has_access(user_id, id, destination):
|
||||||
return list(cur.fetchall())
|
return list(cur.fetchall())
|
||||||
|
|
||||||
|
|
||||||
|
def access_to_doc(id):
|
||||||
|
conn = get_connection()
|
||||||
|
cur = conn.cursor()
|
||||||
|
cur.execute(
|
||||||
|
sql.SQL(
|
||||||
|
"SELECT user_id, username, access_type FROM doc_access JOIN users ON user_id = users.id WHERE doc_id = {id}"
|
||||||
|
).format(
|
||||||
|
id=sql.Literal(id),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return list(cur.fetchall())
|
||||||
|
|
||||||
|
|
||||||
def is_public(doc_id):
|
def is_public(doc_id):
|
||||||
conn = get_connection()
|
conn = get_connection()
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit fbe106a1878ccefb909a994cb16507bbf2a2d6ac
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
/.pnp
|
||||||
|
.pnp.js
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# next.js
|
||||||
|
/.next/
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
*.pem
|
||||||
|
|
||||||
|
# debug
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
.pnpm-debug.log*
|
||||||
|
|
||||||
|
# local env files
|
||||||
|
.env*.local
|
||||||
|
|
||||||
|
# vercel
|
||||||
|
.vercel
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
/// <reference types="next" />
|
||||||
|
/// <reference types="next/image-types/global" />
|
||||||
|
|
||||||
|
// NOTE: This file should not be edited
|
||||||
|
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"name": "nextjs-tailwindcss-typescript-starter",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "next dev",
|
||||||
|
"build": "next build",
|
||||||
|
"start": "next start"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"classnames": "^2.3.1",
|
||||||
|
"next": "12.1.0",
|
||||||
|
"react": "17.0.2",
|
||||||
|
"react-dom": "17.0.2",
|
||||||
|
"socket.io": "^4.5.1",
|
||||||
|
"socket.io-client": "^4.5.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^17.0.21",
|
||||||
|
"@types/react": "^17.0.39",
|
||||||
|
"autoprefixer": "^10.4.2",
|
||||||
|
"postcss": "^8.4.7",
|
||||||
|
"postcss-import": "^14.0.2",
|
||||||
|
"tailwindcss": "^3.0.23",
|
||||||
|
"typescript": "^4.6.2"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
'tailwindcss',
|
||||||
|
'autoprefixer',
|
||||||
|
]
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
|
@ -0,0 +1,128 @@
|
||||||
|
import io from "socket.io-client";
|
||||||
|
import { useState, useEffect } from "react";
|
||||||
|
|
||||||
|
let socket;
|
||||||
|
|
||||||
|
export default function Document() {
|
||||||
|
const [username, setUsername] = useState("");
|
||||||
|
const [chosenUsername, setChosenUsername] = useState("");
|
||||||
|
const [text, setText] = useState("");
|
||||||
|
const [token, setToken] = useState("");
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
socketInitializer();
|
||||||
|
}, [chosenUsername]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const data = new URLSearchParams();
|
||||||
|
data.append("username", "user")
|
||||||
|
data.append("password", "passtest")
|
||||||
|
|
||||||
|
const fetchData = async (data) => {
|
||||||
|
const res = await fetch("http://localhost:8000/api/token", { method: 'POST', body: data})
|
||||||
|
const json = await res.json();
|
||||||
|
setToken(() => json["access_token"])
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData(data)
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (token) {
|
||||||
|
const fetchData = async () => {
|
||||||
|
const res = await fetch("http://localhost:8000/api/documents/63866c991b4175934db26981", {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const json = await res.json();
|
||||||
|
setText(() => json["data"])
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
}, [token])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
fetch("http://localhost:8000/api/documents/63866c991b4175934db26981", {
|
||||||
|
method: 'PUT',
|
||||||
|
body: `{"data": "${text}"}`,
|
||||||
|
headers: {
|
||||||
|
'Content-type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
return () => clearInterval(interval);
|
||||||
|
}, [token, text])
|
||||||
|
|
||||||
|
const socketInitializer = async () => {
|
||||||
|
await fetch("/api/socket");
|
||||||
|
|
||||||
|
socket = io();
|
||||||
|
|
||||||
|
socket.emit('create', chosenUsername);
|
||||||
|
console.log(chosenUsername)
|
||||||
|
|
||||||
|
socket.on("newIncomingText", (text) => {
|
||||||
|
setText(() => text);
|
||||||
|
console.log('text' + text);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const sendText = async () => {
|
||||||
|
socket.emit("createdText", text, chosenUsername);
|
||||||
|
setText(() => text);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleKey = () => {
|
||||||
|
if (text) {
|
||||||
|
sendText();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex items-center p-4 mx-auto min-h-screen justify-center bg-purple-500">
|
||||||
|
<main className="gap-4 flex flex-col items-center justify-center w-full h-full">
|
||||||
|
{!chosenUsername ? (
|
||||||
|
<>
|
||||||
|
<h3 className="font-bold text-white text-xl">
|
||||||
|
doc_id?
|
||||||
|
</h3>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Identity..."
|
||||||
|
value={username}
|
||||||
|
className="p-3 rounded-md outline-none"
|
||||||
|
onChange={(e) => setUsername(e.target.value)}
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
setChosenUsername(username);
|
||||||
|
}}
|
||||||
|
className="bg-white rounded-md px-4 py-2 text-xl"
|
||||||
|
>
|
||||||
|
Go!
|
||||||
|
</button>
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
<p className="font-bold text-white text-xl">
|
||||||
|
Your username: {username}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<textarea
|
||||||
|
placeholder="Type..."
|
||||||
|
onKeyUp={handleKey}
|
||||||
|
value={text}
|
||||||
|
onChange={(e) => setText(e.target.value)}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
import React from "react";
|
||||||
|
import Sidebar from "./Sidebar";
|
||||||
|
|
||||||
|
const Layout = ({ children }) => {
|
||||||
|
return (
|
||||||
|
<div className="h-screen flex flex-row justify-start">
|
||||||
|
<Sidebar />
|
||||||
|
<div
|
||||||
|
className="bg-primary flex-1 p-4 text-white justify-center align-center h-full">
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Layout;
|
|
@ -0,0 +1,195 @@
|
||||||
|
import classNames from "classnames";
|
||||||
|
import Link from "next/link";
|
||||||
|
import { useRouter } from "next/router";
|
||||||
|
import React, {useState, useMemo, useEffect} from "react";
|
||||||
|
import {
|
||||||
|
ArticleIcon,
|
||||||
|
CollapsIcon,
|
||||||
|
LogoIcon,
|
||||||
|
LogoutIcon,
|
||||||
|
SearchIcon,
|
||||||
|
HomeIcon,
|
||||||
|
CreateIcon
|
||||||
|
} from "./icons";
|
||||||
|
|
||||||
|
const Sidebar = () => {
|
||||||
|
const [toggleCollapse, setToggleCollapse] = useState(false);
|
||||||
|
const [isCollapsible, setIsCollapsible] = useState(false);
|
||||||
|
const [menuItems, setMenuItems] = useState([
|
||||||
|
{ id: 1, label: "Home", icon: HomeIcon, link: "/" },
|
||||||
|
{ id: 2, label: "Search", icon: SearchIcon, link: "/search" },
|
||||||
|
{ id: 3, label: "Create document", icon: CreateIcon, link: "/create-document" }
|
||||||
|
]);
|
||||||
|
const [token, setToken] = useState("");
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setToken(() => localStorage.getItem("token"))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (token) {
|
||||||
|
const fetchData = async () => {
|
||||||
|
const res = await fetch("http://localhost:8000/api/documents", {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let json = await res.json();
|
||||||
|
let list = [
|
||||||
|
{ id: 1, label: "Home", icon: HomeIcon, link: "/" },
|
||||||
|
{ id: 2, label: "Search", icon: SearchIcon, link: "/search" },
|
||||||
|
{ id: 3, label: "Create document", icon: CreateIcon, link: "/create-document" }
|
||||||
|
]
|
||||||
|
json.forEach((doc) => {
|
||||||
|
list.push({
|
||||||
|
id: doc["id"],
|
||||||
|
label: doc["name"],
|
||||||
|
icon: ArticleIcon,
|
||||||
|
link: `/documents/${doc["id"]}`
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
setMenuItems(() => list)
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
}, [token])
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const activeMenu = useMemo(
|
||||||
|
() => menuItems.find((menu) => {
|
||||||
|
if (!router.query.id || router.query.id === 'undefined') {
|
||||||
|
return menu.link === router.pathname
|
||||||
|
} else if (!(menu.id === 1 || menu.id === 2 || menu.id === 3)) {
|
||||||
|
return menu.id.toString() === router.query.id
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}),
|
||||||
|
[menuItems, router.query.id, router.pathname]
|
||||||
|
);
|
||||||
|
|
||||||
|
const wrapperClasses = classNames(
|
||||||
|
"h-screen px-4 pt-8 pb-4 bg-light flex justify-between flex-col",
|
||||||
|
{
|
||||||
|
["w-80"]: !toggleCollapse,
|
||||||
|
["w-20"]: toggleCollapse,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const collapseIconClasses = classNames(
|
||||||
|
"p-4 rounded bg-light-lighter absolute right-0",
|
||||||
|
{
|
||||||
|
"rotate-180": toggleCollapse,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const getNavItemClasses = (menu) => {
|
||||||
|
return classNames(
|
||||||
|
"flex items-center cursor-pointer hover:bg-light-lighter rounded w-full overflow-hidden whitespace-nowrap",
|
||||||
|
{
|
||||||
|
["bg-light-lighter"]: activeMenu.id === menu.id,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const onMouseOver = () => {
|
||||||
|
setIsCollapsible(!isCollapsible);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSidebarToggle = () => {
|
||||||
|
setToggleCollapse(!toggleCollapse);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSubmit = async (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
const res = await fetch("http://localhost:8000/api/token", {
|
||||||
|
method: "DELETE",
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
localStorage.removeItem("token")
|
||||||
|
router.push("/")
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={wrapperClasses}
|
||||||
|
onMouseEnter={onMouseOver}
|
||||||
|
onMouseLeave={onMouseOver}
|
||||||
|
style={{ transition: "width 300ms cubic-bezier(0.2, 0, 0, 1) 0s" }}
|
||||||
|
>
|
||||||
|
<div className="flex flex-col">
|
||||||
|
<div className="flex items-center justify-between relative">
|
||||||
|
<div className="flex items-center pl-1 gap-4">
|
||||||
|
<LogoIcon />
|
||||||
|
<span
|
||||||
|
className={classNames("mt-2 text-lg font-medium text-text", {
|
||||||
|
hidden: toggleCollapse,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
BSition
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{isCollapsible && (
|
||||||
|
<button
|
||||||
|
className={collapseIconClasses}
|
||||||
|
onClick={handleSidebarToggle}
|
||||||
|
>
|
||||||
|
<CollapsIcon />
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-col items-start mt-24">
|
||||||
|
{menuItems.map(({ icon: Icon, ...menu }) => {
|
||||||
|
const classes = getNavItemClasses(menu);
|
||||||
|
return (
|
||||||
|
<div className={classes} key={menu.id}>
|
||||||
|
<Link href={menu.link}>
|
||||||
|
<a className="flex py-4 px-3 items-center w-full h-full">
|
||||||
|
<div style={{ width: "2.5rem" }}>
|
||||||
|
<Icon />
|
||||||
|
</div>
|
||||||
|
{!toggleCollapse && (
|
||||||
|
<span
|
||||||
|
className={classNames(
|
||||||
|
"text-md font-medium text-text-light"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{menu.label}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</a>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className={`${getNavItemClasses({})} px-3 py-4`}>
|
||||||
|
<div style={{ width: "2.5rem" }}>
|
||||||
|
<LogoutIcon />
|
||||||
|
</div>
|
||||||
|
{!toggleCollapse && (
|
||||||
|
<form onSubmit={handleSubmit}>
|
||||||
|
<button name="Logout" value="logout">
|
||||||
|
<span className={classNames("text-md font-medium text-text-light")}>
|
||||||
|
Logout
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Sidebar;
|
|
@ -0,0 +1,22 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function ArticleIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M19 5v14H5V5h14zm0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
<path d="M14 17H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z" fill={fill} />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ArticleIcon;
|
|
@ -0,0 +1,24 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function CollapsIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={16}
|
||||||
|
height={15}
|
||||||
|
fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M8.901 1.768L7.134 0 0 7.134l7.134 7.133L8.9 12.5 3.535 7.134l5.366-5.367z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M13.384 0L6.25 7.134l7.134 7.133L15.15 12.5 9.785 7.134l5.366-5.367L13.384 0z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default CollapsIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function CreateIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default CreateIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function DeleteIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M7 4a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v2h4a1 1 0 1 1 0 2h-1.069l-.867 12.142A2 2 0 0 1 17.069 22H6.93a2 2 0 0 1-1.995-1.858L4.07 8H3a1 1 0 0 1 0-2h4V4zm2 2h6V4H9v2zM6.074 8l.857 12H17.07l.857-12H6.074z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DeleteIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function HomeIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M3 13h1v7c0 1.103.897 2 2 2h12c1.103 0 2-.897 2-2v-7h1a1.001 1.001 0 00.707-1.707l-9-9a1 1 0 00-1.414 0l-9 9A1 1 0 003 13zm7 7v-5h4v5h-4zm2-15.586l6 6V15l.001 5H16v-5c0-1.103-.897-2-2-2h-4c-1.103 0-2 .897-2 2v5H6v-9.586l6-6z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HomeIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function LockIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="-2.5 -2.5 21.5 21.5"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M8 1a2 2 0 0 1 2 2v4H6V3a2 2 0 0 1 2-2zm3 6V3a3 3 0 0 0-6 0v4a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LockIcon;
|
|
@ -0,0 +1,41 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function Logo({ fill = "#3B81F6", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="40.000000pt" height="40.000000pt" viewBox="0 0 500.000000 500.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
|
||||||
|
<g transform="translate(0.000000,500.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#000000" stroke="none">
|
||||||
|
<path d="M3020 4444 c-138 -12 -603 -47 -855 -64 -159 -11 -371 -27 -470 -35
|
||||||
|
-99 -8 -283 -21 -410 -30 -500 -33 -538 -40 -595 -98 -71 -71 -65 49 -65
|
||||||
|
-1387 l0 -1295 42 -80 c24 -44 85 -134 136 -200 51 -66 182 -235 291 -375 223
|
||||||
|
-288 253 -315 357 -330 35 -5 96 -7 134 -4 39 2 295 18 570 34 748 45 1638 98
|
||||||
|
1833 110 258 16 330 45 379 155 17 38 18 115 21 1400 2 748 0 1385 -3 1415 -6
|
||||||
|
50 -12 60 -58 105 -29 28 -84 71 -122 98 -39 26 -95 65 -125 86 -356 253 -618
|
||||||
|
431 -673 460 -68 35 -70 36 -205 37 -76 1 -157 0 -182 -2z m318 -237 c32 -13
|
||||||
|
143 -85 250 -162 106 -77 206 -148 222 -158 27 -17 48 -52 37 -63 -2 -2 -157
|
||||||
|
-13 -343 -24 -339 -19 -558 -32 -1504 -91 -278 -17 -529 -29 -558 -26 -29 3
|
||||||
|
-72 16 -96 30 -78 44 -396 299 -396 318 0 35 40 48 185 59 77 6 196 15 265 20
|
||||||
|
69 6 251 19 405 30 398 27 940 67 1145 84 218 18 312 14 388 -17z m744 -658
|
||||||
|
c9 -5 24 -28 32 -51 15 -39 16 -158 14 -1233 -3 -1116 -4 -1192 -21 -1222 -23
|
||||||
|
-44 -62 -62 -144 -68 -81 -7 -822 -50 -1108 -65 -110 -6 -342 -19 -515 -30
|
||||||
|
-820 -50 -853 -50 -900 -5 -17 16 -35 45 -41 65 -6 23 -9 431 -7 1217 3 1181
|
||||||
|
3 1182 24 1210 11 15 32 33 46 40 13 7 108 17 214 23 104 6 374 22 599 35 226
|
||||||
|
14 457 27 515 30 58 3 290 17 515 31 757 46 734 45 777 23z"/>
|
||||||
|
<path d="M1950 3121 l0 -140 88 -3 87 -3 3 -766 c2 -759 2 -766 -18 -792 -23
|
||||||
|
-30 -74 -47 -137 -47 l-43 0 0 -130 0 -130 503 0 c622 0 729 11 901 94 204 99
|
||||||
|
310 264 323 503 15 278 -97 443 -376 550 -22 8 -19 11 42 51 151 98 227 240
|
||||||
|
227 422 -1 270 -146 439 -434 502 -83 18 -139 21 -628 25 l-538 5 0 -141z
|
||||||
|
m1030 -185 c63 -24 116 -62 142 -105 20 -31 23 -49 23 -141 0 -98 -2 -109 -30
|
||||||
|
-160 -65 -119 -182 -159 -467 -160 l-128 0 0 296 0 296 208 -4 c161 -4 217 -9
|
||||||
|
252 -22z m-7 -861 c165 -35 250 -124 272 -285 8 -56 -10 -161 -35 -211 -28
|
||||||
|
-54 -102 -114 -173 -140 -56 -20 -85 -23 -289 -27 l-228 -4 0 341 0 341 193 0
|
||||||
|
c128 0 215 -5 260 -15z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Logo;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function LogoutIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={16}
|
||||||
|
height={19}
|
||||||
|
fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M8 19c4.411 0 8-3.589 8-8 0-3.35-2.072-6.22-5-7.41v2.222A6 6 0 0114 11c0 3.31-2.691 6-6 6s-6-2.69-6-6a5.999 5.999 0 013-5.188V3.59C2.072 4.78 0 7.65 0 11c0 4.411 3.589 8 8 8z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
<path d="M7 0h2v10H7V0z" fill={fill} />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LogoutIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function ManageIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="-2.5 -2.5 21.5 21.5"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M.102 2.223A3.004 3.004 0 0 0 3.78 5.897l6.341 6.252A3.003 3.003 0 0 0 13 16a3 3 0 1 0-.851-5.878L5.897 3.781A3.004 3.004 0 0 0 2.223.1l2.141 2.142L4 4l-1.757.364L.102 2.223zm13.37 9.019.528.026.287.445.445.287.026.529L15 13l-.242.471-.026.529-.445.287-.287.445-.529.026L13 15l-.471-.242-.529-.026-.287-.445-.445-.287-.026-.529L11 13l.242-.471.026-.529.445-.287.287-.445.529-.026L13 11l.471.242z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ManageIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function OptionsIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="-2.5 -2.5 21.5 21.5"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default OptionsIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function PublicIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M221.6,173.3A102.9,102.9,0,0,0,232,128,104.2,104.2,0,0,0,154.8,27.5h-.5A103.8,103.8,0,0,0,60.4,49l-1.3,1.2A103.9,103.9,0,0,0,128,232h2.4A104.3,104.3,0,0,0,221,174.6h0ZM216,128a89.3,89.3,0,0,1-5.5,30.7l-46.4-28.5a16,16,0,0,0-6.3-2.3l-22.8-3a16.1,16.1,0,0,0-15.3,6.8h-8.6l-3.8-7.9a16.2,16.2,0,0,0-11-8.7l-6.6-1.4,2.5-5.9a8.1,8.1,0,0,1,7.4-4.9h16.1a16.1,16.1,0,0,0,7.7-2l12.2-6.8a16.1,16.1,0,0,0,3-2.1l26.9-24.4A15.7,15.7,0,0,0,170,50.7,88,88,0,0,1,216,128ZM40,128a87.1,87.1,0,0,1,9.5-39.7l10.4,27.9a16.1,16.1,0,0,0,11.6,10l5.5,1.2h.1l12,2.6a7.8,7.8,0,0,1,5.5,4.3l2.1,4.4a16.1,16.1,0,0,0,14.4,9h1.2l-7.7,17.2a15.9,15.9,0,0,0,2.8,17.4l16.1,17.4a8.3,8.3,0,0,1,2,6.9l-1.8,9.3A88.1,88.1,0,0,1,40,128Z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PublicIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function SearchIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="-2 -2 22 22"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SearchIcon;
|
|
@ -0,0 +1,21 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function ShareIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="-2.5 -2.5 21.5 21.5"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M11 2.5a2.5 2.5 0 1 1 .603 1.628l-6.718 3.12a2.499 2.499 0 0 1 0 1.504l6.718 3.12a2.5 2.5 0 1 1-.488.876l-6.718-3.12a2.5 2.5 0 1 1 0-3.256l6.718-3.12A2.5 2.5 0 0 1 11 2.5z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ShareIcon;
|
|
@ -0,0 +1,24 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function UsersIcon({ stroke = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M12 4.354a4 4 0 110 5.292V4.354zM15 21H3v-1a6 6 0 1112 0v1zm0 0h6v-1a6 6 0 00-9-5.197L15 21zM13 7a4 4 0 11-8 0 4 4 0 018 0v0z"
|
||||||
|
stroke={stroke}
|
||||||
|
strokeWidth={2}
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default UsersIcon;
|
|
@ -0,0 +1,22 @@
|
||||||
|
import * as React from "react";
|
||||||
|
|
||||||
|
function VideosIcon({ fill = "#6C7281", ...rest }) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
<path d="M4 8H2v12a2 2 0 002 2h12v-2H4V8z" fill={fill} />
|
||||||
|
<path
|
||||||
|
d="M20 2H8a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2V4a2 2 0 00-2-2zm-9 12V6l7 4-7 4z"
|
||||||
|
fill={fill}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default VideosIcon;
|
|
@ -0,0 +1,16 @@
|
||||||
|
export { default as ArticleIcon } from "./ArticleIcon";
|
||||||
|
export { default as HomeIcon } from "./HomeIcon";
|
||||||
|
export { default as UsersIcon } from "./UsersIcon";
|
||||||
|
export { default as VideosIcon } from "./VideosIcon";
|
||||||
|
export { default as CollapsIcon } from "./CollapsIcon";
|
||||||
|
export { default as LogoIcon } from "./Logo";
|
||||||
|
export { default as LogoutIcon } from "./LogoutIcon";
|
||||||
|
export { default as SearchIcon } from "./SearchIcon";
|
||||||
|
export { default as ShareIcon } from "./ShareIcon";
|
||||||
|
export { default as LockIcon } from "./LockIcon";
|
||||||
|
export { default as PublicIcon } from "./PublicIcon";
|
||||||
|
export { default as DeleteIcon } from "./DeleteIcon";
|
||||||
|
export { default as OptionsIcon } from "./OptionsIcon";
|
||||||
|
export { default as ManageIcon } from "./ManageIcon";
|
||||||
|
export { default as CreateIcon } from "./CreateIcon";
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
import Head from 'next/head'
|
||||||
|
import {AppProps} from 'next/app'
|
||||||
|
import '../styles/index.css'
|
||||||
|
|
||||||
|
function MyApp({Component, pageProps}: AppProps) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Head>
|
||||||
|
<title>BSition</title>
|
||||||
|
<meta name="viewport" content="initial-scale=1.0, width=device-width"/>
|
||||||
|
</Head>
|
||||||
|
<Component {...pageProps} />
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MyApp
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { Server } from "socket.io";
|
||||||
|
import messageHandler from "../../utils/sockets/messageHandler";
|
||||||
|
|
||||||
|
export default function SocketHandler(req, res) {
|
||||||
|
if (res.socket.server.io) {
|
||||||
|
console.log("Already set up");
|
||||||
|
res.end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const io = new Server(res.socket.server);
|
||||||
|
res.socket.server.io = io;
|
||||||
|
|
||||||
|
const onConnection = (socket) => {
|
||||||
|
messageHandler(io, socket);
|
||||||
|
};
|
||||||
|
|
||||||
|
io.on("connection", onConnection);
|
||||||
|
|
||||||
|
console.log("Setting up socket");
|
||||||
|
res.end();
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
import React, {useEffect, useState} from "react";
|
||||||
|
import {useRouter} from "next/router";
|
||||||
|
import Layout from "../components/Layout";
|
||||||
|
import Link from "next/link";
|
||||||
|
import classNames from "classnames";
|
||||||
|
|
||||||
|
export default function CreateDocument() {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const [token, setToken] = useState("");
|
||||||
|
const [user, setUser] = useState("");
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setToken(() => localStorage.getItem("token"))
|
||||||
|
setUser(() => localStorage.getItem("user"))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const handleSubmit = async (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
let data = {
|
||||||
|
name: event.target.name.value,
|
||||||
|
}
|
||||||
|
|
||||||
|
const JSONdata = JSON.stringify(data)
|
||||||
|
|
||||||
|
const res = await fetch("http://localhost:8000/api/documents", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
},
|
||||||
|
body: JSONdata
|
||||||
|
})
|
||||||
|
let json = await res.json();
|
||||||
|
router.push(`/documents/${json["id"]}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<div className="flex items-center justify-center w-full h-full">
|
||||||
|
<form onSubmit={handleSubmit} className="flex items-center justify-center align-center w-full h-full login-form" style={{flexDirection: "column"}}>
|
||||||
|
<div>
|
||||||
|
<input type="text" id="name" name="name" required placeholder="name"
|
||||||
|
style={{border: "1px solid grey", color: "black", padding: "2px 4px"}}/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" className="rounded bg-pink-600 rounded" style={{border: "1px solid grey", padding: "4px"}}>Create</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,134 @@
|
||||||
|
import io from "socket.io-client";
|
||||||
|
import { useState, useEffect } from "react";
|
||||||
|
import { useRouter } from "next/router";
|
||||||
|
import Layout from "../../components/Layout";
|
||||||
|
import {
|
||||||
|
OptionsIcon,
|
||||||
|
DeleteIcon,
|
||||||
|
LockIcon,
|
||||||
|
PublicIcon,
|
||||||
|
ShareIcon,
|
||||||
|
ManageIcon
|
||||||
|
} from "../../components/icons";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
let socket;
|
||||||
|
|
||||||
|
export default function Document() {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const [text, setText] = useState("");
|
||||||
|
const [token, setToken] = useState("");
|
||||||
|
const [title, setTitle] = useState("");
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
socketInitializer();
|
||||||
|
}, [router.query.id]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setToken(() => localStorage.getItem("token"))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (token && router.query.id) {
|
||||||
|
const fetchData = async () => {
|
||||||
|
const res = await fetch(`http://localhost:8000/api/documents/${router.query.id}`, {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const json = await res.json();
|
||||||
|
setText(() => json["data"])
|
||||||
|
setTitle(() => json["name"])
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
}, [token, router.query.id])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (token && router.query.id) {
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
fetch(`http://localhost:8000/api/documents/${router.query.id}`, {
|
||||||
|
method: 'PUT',
|
||||||
|
body: `{"data": "${text}"}`,
|
||||||
|
headers: {
|
||||||
|
'Content-type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
return () => clearInterval(interval);
|
||||||
|
}
|
||||||
|
}, [token, text, router.query.id])
|
||||||
|
|
||||||
|
const socketInitializer = async () => {
|
||||||
|
await fetch("/api/socket");
|
||||||
|
|
||||||
|
socket = io();
|
||||||
|
|
||||||
|
socket.emit('create', router.query.id);
|
||||||
|
|
||||||
|
socket.on("newIncomingText", (text) => {
|
||||||
|
setText(() => text);
|
||||||
|
console.log('text' + text);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const sendText = async () => {
|
||||||
|
socket.emit("createdText", text, router.query.id);
|
||||||
|
setText(() => text);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleKey = () => {
|
||||||
|
if (text) {
|
||||||
|
sendText();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let access = router.query.id + "/access"
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<div style={{height: "50px", justifyContent: "space-between"}}
|
||||||
|
className="align-center flex">
|
||||||
|
<span className="docTitle">
|
||||||
|
{title}
|
||||||
|
</span>
|
||||||
|
<div className="dropdown">
|
||||||
|
<OptionsIcon onClick={(e) => {
|
||||||
|
document.getElementById("myDropdown").classList.toggle("show");
|
||||||
|
|
||||||
|
window.onclick = function(event) {
|
||||||
|
if (!event.target.matches('.dropbtn')) {
|
||||||
|
var dropdowns = document.getElementsByClassName("dropdown-content");
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < dropdowns.length; i++) {
|
||||||
|
var openDropdown = dropdowns[i];
|
||||||
|
if (openDropdown.classList.contains('show')) {
|
||||||
|
openDropdown.classList.remove('show');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}}} className="dropbtn"></OptionsIcon>
|
||||||
|
<div id="myDropdown" className="dropdown-content">
|
||||||
|
<Link href={access}>
|
||||||
|
<div className="flex flex-row items-center justify-start align-center menu-opt"><ManageIcon/><span>Manage access</span></div>
|
||||||
|
</Link>
|
||||||
|
<a href="#"><div className="flex flex-row items-center justify-start align-center menu-opt"><ShareIcon/><span>Share</span></div></a>
|
||||||
|
<a href="#"><div className="flex flex-row items-center justify-start align-center menu-opt"><LockIcon/><span>Public/private</span></div></a>
|
||||||
|
<a href="#"><div className="flex flex-row items-center justify-start align-center menu-opt"><DeleteIcon/><span>Delete document</span></div></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<textarea
|
||||||
|
className="document_area"
|
||||||
|
placeholder="Type..."
|
||||||
|
onKeyUp={handleKey}
|
||||||
|
value={text}
|
||||||
|
onChange={(e) => setText(e.target.value)}
|
||||||
|
/>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,133 @@
|
||||||
|
import React, { useState, useEffect } from "react";
|
||||||
|
import { useRouter } from "next/router";
|
||||||
|
import Layout from "../../../components/Layout";
|
||||||
|
import {
|
||||||
|
OptionsIcon,
|
||||||
|
DeleteIcon,
|
||||||
|
LockIcon,
|
||||||
|
PublicIcon,
|
||||||
|
ShareIcon,
|
||||||
|
ManageIcon
|
||||||
|
} from "../../../components/icons";
|
||||||
|
import Link from "next/link";
|
||||||
|
import classNames from "classnames";
|
||||||
|
|
||||||
|
let socket;
|
||||||
|
|
||||||
|
export default function Document() {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const [text, setText] = useState("");
|
||||||
|
const [token, setToken] = useState("");
|
||||||
|
const [users, setUsers] = useState([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setToken(() => localStorage.getItem("token"))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (token && router.query.id) {
|
||||||
|
const fetchData = async () => {
|
||||||
|
const res = await fetch(`http://localhost:8000/api/documents/${router.query.id}/access`, {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const json = await res.json();
|
||||||
|
console.log(json)
|
||||||
|
let list = []
|
||||||
|
json.forEach((user) => {
|
||||||
|
list.push({
|
||||||
|
id: user[0],
|
||||||
|
username: user[1],
|
||||||
|
access: user[2]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
setUsers(() => list)
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
}, [token, router.query.id])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (token && router.query.id) {
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
fetch(`http://localhost:8000/api/documents/${router.query.id}`, {
|
||||||
|
method: 'PUT',
|
||||||
|
body: `{"data": "${text}"}`,
|
||||||
|
headers: {
|
||||||
|
'Content-type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, 500);
|
||||||
|
|
||||||
|
return () => clearInterval(interval);
|
||||||
|
}
|
||||||
|
}, [token, text, router.query.id])
|
||||||
|
|
||||||
|
const handleSubmit = async (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
let data = {
|
||||||
|
name: event.target.name.value,
|
||||||
|
}
|
||||||
|
|
||||||
|
const JSONdata = JSON.stringify(data)
|
||||||
|
|
||||||
|
const res = await fetch("http://localhost:8000/api/documents", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
},
|
||||||
|
body: JSONdata
|
||||||
|
})
|
||||||
|
let json = await res.json();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<div style={{height: "50px", justifyContent: "space-between"}}
|
||||||
|
className="align-center flex">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Username</th>
|
||||||
|
<th>Access</th>
|
||||||
|
</tr>
|
||||||
|
{users.map(({ icon: Icon, ...user }) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<tr style={{color: "black"}}>
|
||||||
|
<td>{user.username}</td>
|
||||||
|
<td>
|
||||||
|
<select style={{padding: "4px"}} value={user.access} onChange={handleSubmit}>
|
||||||
|
<option value={1} label="Full-access"></option>
|
||||||
|
<option value={2} label="Edit"></option>
|
||||||
|
<option value={3} label="Read-only"></option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<div className="flex items-center justify-center w-full h-full">
|
||||||
|
{/*<form onSubmit={handleSubmit} className="flex items-center justify-center align-center w-full h-full login-form" style={{flexDirection: "column"}}>*/}
|
||||||
|
<div>
|
||||||
|
<input type="text" id="name" name="name" required placeholder="name"
|
||||||
|
style={{border: "1px solid grey", color: "black", padding: "2px 4px"}}/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" className="rounded bg-pink-600 rounded" style={{border: "1px solid grey", padding: "4px"}}>Create</button>
|
||||||
|
{/*</form>*/}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
import Layout from "../components/Layout";
|
||||||
|
import {useRouter} from "next/router";
|
||||||
|
import {useEffect, useState} from "react";
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
const router = useRouter();
|
||||||
|
const [isLoading, setIsLoading] = useState(true);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const token = localStorage.getItem("token");
|
||||||
|
if (router.pathname !== "/login" && (!token || token === "undefined")) {
|
||||||
|
router.push("/login");
|
||||||
|
} else {
|
||||||
|
setIsLoading(false)
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (isLoading) {
|
||||||
|
return <></>
|
||||||
|
}
|
||||||
|
|
||||||
|
return <Layout>
|
||||||
|
<div className="flex flex-col justify-center h-full w-full align-center items-center">
|
||||||
|
<div style={{width: "fit-content"}}>
|
||||||
|
<h1 style={{fontSize: "xxx-large"}}>BSition</h1>
|
||||||
|
<h3 style={{margin: "0"}}>Created by:</h3>
|
||||||
|
<h2 style={{margin: "0"}}>Bottler</h2>
|
||||||
|
<ul style={{margin: "0"}}>
|
||||||
|
<li>Barmasch, Juan Martín</li>
|
||||||
|
<li>Bellver, Ezequiel</li>
|
||||||
|
<li>Lo Coco, Santiago</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Layout>;
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import {useRouter} from "next/router";
|
||||||
|
import {Input} from "postcss";
|
||||||
|
|
||||||
|
export default function Login() {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const handleSubmit = async (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
let formData = new FormData();
|
||||||
|
formData.append("username", event.target.username.value)
|
||||||
|
formData.append("password", event.target.password.value)
|
||||||
|
|
||||||
|
const res = await fetch("http://localhost:8000/api/token", {method: 'POST', body: formData})
|
||||||
|
const json = await res.json();
|
||||||
|
|
||||||
|
if (res.status == 202) {
|
||||||
|
localStorage.setItem("token", json["access_token"])
|
||||||
|
const res = await fetch("http://localhost:8000/api/users/me", {
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${json["access_token"]}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const aux = await res.json();
|
||||||
|
|
||||||
|
if (res.status == 200) {
|
||||||
|
console.log(aux)
|
||||||
|
localStorage.setItem("user", aux[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
router.push("/")
|
||||||
|
} else {
|
||||||
|
alert('Fail')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex items-center justify-center w-full h-full" style={{marginTop: "30%"}}>
|
||||||
|
<form onSubmit={handleSubmit} className="flex items-center justify-center align-center w-full h-full login-form" style={{flexDirection: "column"}}>
|
||||||
|
<div>
|
||||||
|
<input type="text" id="username" name="username" required placeholder="username"
|
||||||
|
style={{border: "1px solid grey", color: "black", padding: "2px 4px"}}/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="password" id="password" name="password" required placeholder="password"
|
||||||
|
style={{border: "1px solid grey", color: "black", padding: "2px 4px"}}/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" className="rounded bg-pink-600 rounded" style={{border: "1px solid grey", padding: "4px"}}>Log in</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
import React, {useEffect, useState} from "react";
|
||||||
|
import {useRouter} from "next/router";
|
||||||
|
import Layout from "../components/Layout";
|
||||||
|
import Link from "next/link";
|
||||||
|
import classNames from "classnames";
|
||||||
|
|
||||||
|
export default function Search() {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const [token, setToken] = useState("");
|
||||||
|
const [search, setSearch] = useState("");
|
||||||
|
const [menuItems, setMenuItems] = useState([{id: 1, label: "", link: "/"}]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setToken(() => localStorage.getItem("token"))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const handleSubmit = async (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
const res = await fetch("http://localhost:8000/api/documents?" + new URLSearchParams(
|
||||||
|
{query: "*" + event.target.search.value + "*"}
|
||||||
|
), {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let json = await res.json();
|
||||||
|
let list = []
|
||||||
|
json.forEach((doc) => {
|
||||||
|
let highlight = doc["highlight"].replaceAll('\'', '').replaceAll('[', '').replaceAll(']', '')
|
||||||
|
let initial = highlight.indexOf('<em>')
|
||||||
|
let end = highlight.indexOf('</em>')
|
||||||
|
let first_str, second_str
|
||||||
|
if (highlight.length < end + 15) {
|
||||||
|
second_str = highlight.substring(end, highlight.length)
|
||||||
|
} else {
|
||||||
|
second_str = highlight.substring(end, end + 15)
|
||||||
|
}
|
||||||
|
if (initial - 10 < 0) {
|
||||||
|
first_str = highlight.substring(0, initial)
|
||||||
|
} else {
|
||||||
|
first_str = highlight.substring(0, initial - 10)
|
||||||
|
}
|
||||||
|
highlight = highlight.substring(initial + 4, end)
|
||||||
|
list.push({
|
||||||
|
id: doc["id"],
|
||||||
|
label: doc["name"],
|
||||||
|
first: first_str.replace('<em>', ''),
|
||||||
|
bold: highlight,
|
||||||
|
second: second_str.replace('</em>', ''),
|
||||||
|
link: `/documents/${doc["id"]}`
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
setMenuItems(() => list)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout>
|
||||||
|
<form onSubmit={handleSubmit}>
|
||||||
|
<input type="text" id="search" name="search" required style={{color: "black", padding: "2px 4px"}}/>
|
||||||
|
|
||||||
|
<button type="submit">Search</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{menuItems && (
|
||||||
|
<div className="flex flex-col items-start mt-24">
|
||||||
|
{menuItems.map(({...menu}) => {
|
||||||
|
return (
|
||||||
|
<div key={menu.id}>
|
||||||
|
<span>
|
||||||
|
|
||||||
|
<Link href={menu.link}>
|
||||||
|
<a className="flex py-4 px-3 items-center w-full h-full">
|
||||||
|
<div style={{width: "2.5rem"}}>
|
||||||
|
</div>
|
||||||
|
<span
|
||||||
|
className={classNames(
|
||||||
|
"text-md font-medium text-text-light"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{menu.label}
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</Link>
|
||||||
|
<p>{menu.first}<b>{menu.bold}</b>{menu.second}</p>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
</Layout>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
.container {
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
min-height: 100vh;
|
||||||
|
padding: 4rem 0;
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
padding: 2rem 0;
|
||||||
|
border-top: 1px solid #eaeaea;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title a {
|
||||||
|
color: #0070f3;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title a:hover,
|
||||||
|
.title a:focus,
|
||||||
|
.title a:active {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1.15;
|
||||||
|
font-size: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title,
|
||||||
|
.description {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
margin: 4rem 0;
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code {
|
||||||
|
background: #fafafa;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 0.75rem;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
|
||||||
|
Bitstream Vera Sans Mono, Courier New, monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
max-width: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
margin: 1rem;
|
||||||
|
padding: 1.5rem;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
border: 1px solid #eaeaea;
|
||||||
|
border-radius: 10px;
|
||||||
|
transition: color 0.15s ease, border-color 0.15s ease;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card:hover,
|
||||||
|
.card:focus,
|
||||||
|
.card:active {
|
||||||
|
color: #0070f3;
|
||||||
|
border-color: #0070f3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card h2 {
|
||||||
|
margin: 0 0 1rem 0;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card p {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
height: 1em;
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.grid {
|
||||||
|
width: 100%;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
@import 'tailwindcss/base';
|
||||||
|
@import 'tailwindcss/components';
|
||||||
|
@import 'tailwindcss/utilities';
|
||||||
|
|
||||||
|
/* Your own custom component styles */
|
||||||
|
|
||||||
|
.document_area {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 50px);
|
||||||
|
/*margin: 40px;*/
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
resize: none;
|
||||||
|
color: black;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.docTitle {
|
||||||
|
color: black;
|
||||||
|
font-size: large;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.dropbtn {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 100%;
|
||||||
|
padding: 3px;
|
||||||
|
border: none;
|
||||||
|
stroke: #404040;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropbtn:hover, .dropbtn:focus {
|
||||||
|
border-radius: 100%;
|
||||||
|
background-color: #419de8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown {
|
||||||
|
float: right;
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-content {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
background-color: white;
|
||||||
|
min-width: 220px;
|
||||||
|
overflow: auto;
|
||||||
|
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||||
|
right: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-content a {
|
||||||
|
color: black;
|
||||||
|
padding: 12px 16px;
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown a:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
.show {display: block;}
|
||||||
|
|
||||||
|
|
||||||
|
svg {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-form div {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-opt span {
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
all: revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
all: revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
all: revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
all: revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
all: revert;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
all: revert
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
export default (io, socket) => {
|
||||||
|
const createdText = (text, room) => {
|
||||||
|
console.log(room);
|
||||||
|
console.log(text);
|
||||||
|
socket.to(room).emit("newIncomingText", text);
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.on('create', function(room) {
|
||||||
|
socket.join(room);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on("createdText", createdText);
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
const defaultTheme = require('tailwindcss/defaultConfig');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
content: [
|
||||||
|
'./src/components/**/*.{ts,tsx,js,jsx}',
|
||||||
|
'./src/pages/**/*.{ts,tsx,js,jsx}',
|
||||||
|
'./src/pages/login.tsx'
|
||||||
|
],
|
||||||
|
theme: {
|
||||||
|
...defaultTheme,
|
||||||
|
colors: {
|
||||||
|
...defaultTheme.colors,
|
||||||
|
primary: "#71aaff",
|
||||||
|
white: '#ffffff',
|
||||||
|
text: {
|
||||||
|
DEFAULT: "#1F2937",
|
||||||
|
light: "#6C7281",
|
||||||
|
},
|
||||||
|
light: {
|
||||||
|
DEFAULT: "#FAFBFC",
|
||||||
|
lighter: "#F3F4F6",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
variants: {},
|
||||||
|
plugins: [],
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es5",
|
||||||
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"esnext"
|
||||||
|
],
|
||||||
|
"allowJs": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"strict": false,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"module": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"jsx": "preserve",
|
||||||
|
"incremental": true
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
],
|
||||||
|
"include": [
|
||||||
|
"next-env.d.ts",
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,964 @@
|
||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@babel/code-frame@^7.0.0":
|
||||||
|
"integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz"
|
||||||
|
"version" "7.12.11"
|
||||||
|
dependencies:
|
||||||
|
"@babel/highlight" "^7.10.4"
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.15.7":
|
||||||
|
"integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz"
|
||||||
|
"version" "7.15.7"
|
||||||
|
|
||||||
|
"@babel/highlight@^7.10.4":
|
||||||
|
"integrity" "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz"
|
||||||
|
"version" "7.16.0"
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.15.7"
|
||||||
|
"chalk" "^2.0.0"
|
||||||
|
"js-tokens" "^4.0.0"
|
||||||
|
|
||||||
|
"@next/env@12.1.0":
|
||||||
|
"integrity" "sha512-nrIgY6t17FQ9xxwH3jj0a6EOiQ/WDHUos35Hghtr+SWN/ntHIQ7UpuvSi0vaLzZVHQWaDupKI+liO5vANcDeTQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@next/env/-/env-12.1.0.tgz"
|
||||||
|
"version" "12.1.0"
|
||||||
|
|
||||||
|
"@next/swc-linux-x64-gnu@12.1.0":
|
||||||
|
"integrity" "sha512-OKO4R/digvrVuweSw/uBM4nSdyzsBV5EwkUeeG4KVpkIZEe64ZwRpnFB65bC6hGwxIBnTv5NMSnJ+0K/WmG78A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.0.tgz"
|
||||||
|
"version" "12.1.0"
|
||||||
|
|
||||||
|
"@next/swc-linux-x64-musl@12.1.0":
|
||||||
|
"integrity" "sha512-JohhgAHZvOD3rQY7tlp7NlmvtvYHBYgY0x5ZCecUT6eCCcl9lv6iV3nfu82ErkxNk1H893fqH0FUpznZ/H3pSw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.0.tgz"
|
||||||
|
"version" "12.1.0"
|
||||||
|
|
||||||
|
"@nodelib/fs.scandir@2.1.5":
|
||||||
|
"integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
|
||||||
|
"version" "2.1.5"
|
||||||
|
dependencies:
|
||||||
|
"@nodelib/fs.stat" "2.0.5"
|
||||||
|
"run-parallel" "^1.1.9"
|
||||||
|
|
||||||
|
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
|
||||||
|
"integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
||||||
|
"version" "2.0.5"
|
||||||
|
|
||||||
|
"@nodelib/fs.walk@^1.2.3":
|
||||||
|
"integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
|
||||||
|
"version" "1.2.8"
|
||||||
|
dependencies:
|
||||||
|
"@nodelib/fs.scandir" "2.1.5"
|
||||||
|
"fastq" "^1.6.0"
|
||||||
|
|
||||||
|
"@socket.io/component-emitter@~3.1.0":
|
||||||
|
"integrity" "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz"
|
||||||
|
"version" "3.1.0"
|
||||||
|
|
||||||
|
"@types/cookie@^0.4.1":
|
||||||
|
"integrity" "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz"
|
||||||
|
"version" "0.4.1"
|
||||||
|
|
||||||
|
"@types/cors@^2.8.12":
|
||||||
|
"integrity" "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz"
|
||||||
|
"version" "2.8.13"
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/node@*", "@types/node@^17.0.21", "@types/node@>=10.0.0":
|
||||||
|
"integrity" "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz"
|
||||||
|
"version" "17.0.21"
|
||||||
|
|
||||||
|
"@types/parse-json@^4.0.0":
|
||||||
|
"integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz"
|
||||||
|
"version" "4.0.0"
|
||||||
|
|
||||||
|
"@types/prop-types@*":
|
||||||
|
"integrity" "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz"
|
||||||
|
"version" "15.7.3"
|
||||||
|
|
||||||
|
"@types/react@^17.0.39":
|
||||||
|
"integrity" "sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@types/react/-/react-17.0.39.tgz"
|
||||||
|
"version" "17.0.39"
|
||||||
|
dependencies:
|
||||||
|
"@types/prop-types" "*"
|
||||||
|
"@types/scheduler" "*"
|
||||||
|
"csstype" "^3.0.2"
|
||||||
|
|
||||||
|
"@types/scheduler@*":
|
||||||
|
"integrity" "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz"
|
||||||
|
"version" "0.16.1"
|
||||||
|
|
||||||
|
"accepts@~1.3.4":
|
||||||
|
"integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
|
||||||
|
"version" "1.3.8"
|
||||||
|
dependencies:
|
||||||
|
"mime-types" "~2.1.34"
|
||||||
|
"negotiator" "0.6.3"
|
||||||
|
|
||||||
|
"acorn-node@^1.6.1":
|
||||||
|
"integrity" "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz"
|
||||||
|
"version" "1.8.2"
|
||||||
|
dependencies:
|
||||||
|
"acorn" "^7.0.0"
|
||||||
|
"acorn-walk" "^7.0.0"
|
||||||
|
"xtend" "^4.0.2"
|
||||||
|
|
||||||
|
"acorn-walk@^7.0.0":
|
||||||
|
"integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz"
|
||||||
|
"version" "7.2.0"
|
||||||
|
|
||||||
|
"acorn@^7.0.0":
|
||||||
|
"integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
|
||||||
|
"version" "7.4.1"
|
||||||
|
|
||||||
|
"ansi-styles@^3.2.1":
|
||||||
|
"integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
|
||||||
|
"version" "3.2.1"
|
||||||
|
dependencies:
|
||||||
|
"color-convert" "^1.9.0"
|
||||||
|
|
||||||
|
"ansi-styles@^4.1.0":
|
||||||
|
"integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
|
||||||
|
"version" "4.3.0"
|
||||||
|
dependencies:
|
||||||
|
"color-convert" "^2.0.1"
|
||||||
|
|
||||||
|
"anymatch@~3.1.2":
|
||||||
|
"integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz"
|
||||||
|
"version" "3.1.2"
|
||||||
|
dependencies:
|
||||||
|
"normalize-path" "^3.0.0"
|
||||||
|
"picomatch" "^2.0.4"
|
||||||
|
|
||||||
|
"arg@^5.0.1":
|
||||||
|
"integrity" "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz"
|
||||||
|
"version" "5.0.1"
|
||||||
|
|
||||||
|
"autoprefixer@^10.0.2", "autoprefixer@^10.4.2":
|
||||||
|
"integrity" "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz"
|
||||||
|
"version" "10.4.2"
|
||||||
|
dependencies:
|
||||||
|
"browserslist" "^4.19.1"
|
||||||
|
"caniuse-lite" "^1.0.30001297"
|
||||||
|
"fraction.js" "^4.1.2"
|
||||||
|
"normalize-range" "^0.1.2"
|
||||||
|
"picocolors" "^1.0.0"
|
||||||
|
"postcss-value-parser" "^4.2.0"
|
||||||
|
|
||||||
|
"base64id@~2.0.0", "base64id@2.0.0":
|
||||||
|
"integrity" "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
|
||||||
|
"resolved" "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz"
|
||||||
|
"version" "2.0.0"
|
||||||
|
|
||||||
|
"binary-extensions@^2.0.0":
|
||||||
|
"integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
|
||||||
|
"version" "2.2.0"
|
||||||
|
|
||||||
|
"braces@^3.0.1", "braces@~3.0.2":
|
||||||
|
"integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
|
||||||
|
"version" "3.0.2"
|
||||||
|
dependencies:
|
||||||
|
"fill-range" "^7.0.1"
|
||||||
|
|
||||||
|
"browserslist@^4.19.1":
|
||||||
|
"integrity" "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz"
|
||||||
|
"version" "4.19.3"
|
||||||
|
dependencies:
|
||||||
|
"caniuse-lite" "^1.0.30001312"
|
||||||
|
"electron-to-chromium" "^1.4.71"
|
||||||
|
"escalade" "^3.1.1"
|
||||||
|
"node-releases" "^2.0.2"
|
||||||
|
"picocolors" "^1.0.0"
|
||||||
|
|
||||||
|
"callsites@^3.0.0":
|
||||||
|
"integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
|
||||||
|
"version" "3.1.0"
|
||||||
|
|
||||||
|
"camelcase-css@^2.0.1":
|
||||||
|
"integrity" "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
|
||||||
|
"version" "2.0.1"
|
||||||
|
|
||||||
|
"caniuse-lite@^1.0.30001283", "caniuse-lite@^1.0.30001297", "caniuse-lite@^1.0.30001312":
|
||||||
|
"integrity" "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz"
|
||||||
|
"version" "1.0.30001312"
|
||||||
|
|
||||||
|
"chalk@^2.0.0":
|
||||||
|
"integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
|
||||||
|
"version" "2.4.2"
|
||||||
|
dependencies:
|
||||||
|
"ansi-styles" "^3.2.1"
|
||||||
|
"escape-string-regexp" "^1.0.5"
|
||||||
|
"supports-color" "^5.3.0"
|
||||||
|
|
||||||
|
"chalk@^4.1.2":
|
||||||
|
"integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
|
||||||
|
"version" "4.1.2"
|
||||||
|
dependencies:
|
||||||
|
"ansi-styles" "^4.1.0"
|
||||||
|
"supports-color" "^7.1.0"
|
||||||
|
|
||||||
|
"chokidar@^3.5.3":
|
||||||
|
"integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
|
||||||
|
"version" "3.5.3"
|
||||||
|
dependencies:
|
||||||
|
"anymatch" "~3.1.2"
|
||||||
|
"braces" "~3.0.2"
|
||||||
|
"glob-parent" "~5.1.2"
|
||||||
|
"is-binary-path" "~2.1.0"
|
||||||
|
"is-glob" "~4.0.1"
|
||||||
|
"normalize-path" "~3.0.0"
|
||||||
|
"readdirp" "~3.6.0"
|
||||||
|
optionalDependencies:
|
||||||
|
"fsevents" "~2.3.2"
|
||||||
|
|
||||||
|
"classnames@^2.3.1":
|
||||||
|
"integrity" "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz"
|
||||||
|
"version" "2.3.2"
|
||||||
|
|
||||||
|
"color-convert@^1.9.0":
|
||||||
|
"integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
|
||||||
|
"version" "1.9.3"
|
||||||
|
dependencies:
|
||||||
|
"color-name" "1.1.3"
|
||||||
|
|
||||||
|
"color-convert@^2.0.1":
|
||||||
|
"integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
|
||||||
|
"version" "2.0.1"
|
||||||
|
dependencies:
|
||||||
|
"color-name" "~1.1.4"
|
||||||
|
|
||||||
|
"color-name@^1.1.4", "color-name@~1.1.4":
|
||||||
|
"integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||||
|
"version" "1.1.4"
|
||||||
|
|
||||||
|
"color-name@1.1.3":
|
||||||
|
"integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
||||||
|
"resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
|
||||||
|
"version" "1.1.3"
|
||||||
|
|
||||||
|
"cookie@~0.4.1":
|
||||||
|
"integrity" "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz"
|
||||||
|
"version" "0.4.2"
|
||||||
|
|
||||||
|
"cors@~2.8.5":
|
||||||
|
"integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz"
|
||||||
|
"version" "2.8.5"
|
||||||
|
dependencies:
|
||||||
|
"object-assign" "^4"
|
||||||
|
"vary" "^1"
|
||||||
|
|
||||||
|
"cosmiconfig@^7.0.1":
|
||||||
|
"integrity" "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz"
|
||||||
|
"version" "7.0.1"
|
||||||
|
dependencies:
|
||||||
|
"@types/parse-json" "^4.0.0"
|
||||||
|
"import-fresh" "^3.2.1"
|
||||||
|
"parse-json" "^5.0.0"
|
||||||
|
"path-type" "^4.0.0"
|
||||||
|
"yaml" "^1.10.0"
|
||||||
|
|
||||||
|
"cssesc@^3.0.0":
|
||||||
|
"integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
|
||||||
|
"version" "3.0.0"
|
||||||
|
|
||||||
|
"csstype@^3.0.2":
|
||||||
|
"integrity" "sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/csstype/-/csstype-3.0.5.tgz"
|
||||||
|
"version" "3.0.5"
|
||||||
|
|
||||||
|
"debug@~4.3.1", "debug@~4.3.2":
|
||||||
|
"integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
|
||||||
|
"version" "4.3.4"
|
||||||
|
dependencies:
|
||||||
|
"ms" "2.1.2"
|
||||||
|
|
||||||
|
"defined@^1.0.0":
|
||||||
|
"integrity" "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
|
||||||
|
"resolved" "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz"
|
||||||
|
"version" "1.0.0"
|
||||||
|
|
||||||
|
"detective@^5.2.0":
|
||||||
|
"integrity" "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz"
|
||||||
|
"version" "5.2.0"
|
||||||
|
dependencies:
|
||||||
|
"acorn-node" "^1.6.1"
|
||||||
|
"defined" "^1.0.0"
|
||||||
|
"minimist" "^1.1.1"
|
||||||
|
|
||||||
|
"didyoumean@^1.2.2":
|
||||||
|
"integrity" "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz"
|
||||||
|
"version" "1.2.2"
|
||||||
|
|
||||||
|
"dlv@^1.1.3":
|
||||||
|
"integrity" "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz"
|
||||||
|
"version" "1.1.3"
|
||||||
|
|
||||||
|
"electron-to-chromium@^1.4.71":
|
||||||
|
"integrity" "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q=="
|
||||||
|
"resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz"
|
||||||
|
"version" "1.4.75"
|
||||||
|
|
||||||
|
"engine.io-client@~6.2.3":
|
||||||
|
"integrity" "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz"
|
||||||
|
"version" "6.2.3"
|
||||||
|
dependencies:
|
||||||
|
"@socket.io/component-emitter" "~3.1.0"
|
||||||
|
"debug" "~4.3.1"
|
||||||
|
"engine.io-parser" "~5.0.3"
|
||||||
|
"ws" "~8.2.3"
|
||||||
|
"xmlhttprequest-ssl" "~2.0.0"
|
||||||
|
|
||||||
|
"engine.io-parser@~5.0.3":
|
||||||
|
"integrity" "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz"
|
||||||
|
"version" "5.0.4"
|
||||||
|
|
||||||
|
"engine.io@~6.2.1":
|
||||||
|
"integrity" "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz"
|
||||||
|
"version" "6.2.1"
|
||||||
|
dependencies:
|
||||||
|
"@types/cookie" "^0.4.1"
|
||||||
|
"@types/cors" "^2.8.12"
|
||||||
|
"@types/node" ">=10.0.0"
|
||||||
|
"accepts" "~1.3.4"
|
||||||
|
"base64id" "2.0.0"
|
||||||
|
"cookie" "~0.4.1"
|
||||||
|
"cors" "~2.8.5"
|
||||||
|
"debug" "~4.3.1"
|
||||||
|
"engine.io-parser" "~5.0.3"
|
||||||
|
"ws" "~8.2.3"
|
||||||
|
|
||||||
|
"error-ex@^1.3.1":
|
||||||
|
"integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
|
||||||
|
"version" "1.3.2"
|
||||||
|
dependencies:
|
||||||
|
"is-arrayish" "^0.2.1"
|
||||||
|
|
||||||
|
"escalade@^3.1.1":
|
||||||
|
"integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
|
||||||
|
"version" "3.1.1"
|
||||||
|
|
||||||
|
"escape-string-regexp@^1.0.5":
|
||||||
|
"integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||||
|
"resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
|
||||||
|
"version" "1.0.5"
|
||||||
|
|
||||||
|
"fast-glob@^3.2.11":
|
||||||
|
"integrity" "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew=="
|
||||||
|
"resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz"
|
||||||
|
"version" "3.2.11"
|
||||||
|
dependencies:
|
||||||
|
"@nodelib/fs.stat" "^2.0.2"
|
||||||
|
"@nodelib/fs.walk" "^1.2.3"
|
||||||
|
"glob-parent" "^5.1.2"
|
||||||
|
"merge2" "^1.3.0"
|
||||||
|
"micromatch" "^4.0.4"
|
||||||
|
|
||||||
|
"fastq@^1.6.0":
|
||||||
|
"integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz"
|
||||||
|
"version" "1.13.0"
|
||||||
|
dependencies:
|
||||||
|
"reusify" "^1.0.4"
|
||||||
|
|
||||||
|
"fill-range@^7.0.1":
|
||||||
|
"integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
|
||||||
|
"version" "7.0.1"
|
||||||
|
dependencies:
|
||||||
|
"to-regex-range" "^5.0.1"
|
||||||
|
|
||||||
|
"fraction.js@^4.1.2":
|
||||||
|
"integrity" "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz"
|
||||||
|
"version" "4.1.3"
|
||||||
|
|
||||||
|
"function-bind@^1.1.1":
|
||||||
|
"integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
|
||||||
|
"version" "1.1.1"
|
||||||
|
|
||||||
|
"glob-parent@^5.1.2", "glob-parent@~5.1.2":
|
||||||
|
"integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
|
||||||
|
"resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||||
|
"version" "5.1.2"
|
||||||
|
dependencies:
|
||||||
|
"is-glob" "^4.0.1"
|
||||||
|
|
||||||
|
"glob-parent@^6.0.2":
|
||||||
|
"integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
|
||||||
|
"version" "6.0.2"
|
||||||
|
dependencies:
|
||||||
|
"is-glob" "^4.0.3"
|
||||||
|
|
||||||
|
"has-flag@^3.0.0":
|
||||||
|
"integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
|
||||||
|
"resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
|
||||||
|
"version" "3.0.0"
|
||||||
|
|
||||||
|
"has-flag@^4.0.0":
|
||||||
|
"integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
|
||||||
|
"version" "4.0.0"
|
||||||
|
|
||||||
|
"has@^1.0.3":
|
||||||
|
"integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
|
||||||
|
"version" "1.0.3"
|
||||||
|
dependencies:
|
||||||
|
"function-bind" "^1.1.1"
|
||||||
|
|
||||||
|
"import-cwd@^3.0.0":
|
||||||
|
"integrity" "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz"
|
||||||
|
"version" "3.0.0"
|
||||||
|
dependencies:
|
||||||
|
"import-from" "^3.0.0"
|
||||||
|
|
||||||
|
"import-fresh@^3.2.1":
|
||||||
|
"integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
|
||||||
|
"version" "3.3.0"
|
||||||
|
dependencies:
|
||||||
|
"parent-module" "^1.0.0"
|
||||||
|
"resolve-from" "^4.0.0"
|
||||||
|
|
||||||
|
"import-from@^3.0.0":
|
||||||
|
"integrity" "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz"
|
||||||
|
"version" "3.0.0"
|
||||||
|
dependencies:
|
||||||
|
"resolve-from" "^5.0.0"
|
||||||
|
|
||||||
|
"is-arrayish@^0.2.1":
|
||||||
|
"integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
|
||||||
|
"resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
|
||||||
|
"version" "0.2.1"
|
||||||
|
|
||||||
|
"is-binary-path@~2.1.0":
|
||||||
|
"integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
|
||||||
|
"version" "2.1.0"
|
||||||
|
dependencies:
|
||||||
|
"binary-extensions" "^2.0.0"
|
||||||
|
|
||||||
|
"is-core-module@^2.8.1":
|
||||||
|
"integrity" "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz"
|
||||||
|
"version" "2.8.1"
|
||||||
|
dependencies:
|
||||||
|
"has" "^1.0.3"
|
||||||
|
|
||||||
|
"is-extglob@^2.1.1":
|
||||||
|
"integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
|
||||||
|
"resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
|
||||||
|
"version" "2.1.1"
|
||||||
|
|
||||||
|
"is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1":
|
||||||
|
"integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
|
||||||
|
"version" "4.0.3"
|
||||||
|
dependencies:
|
||||||
|
"is-extglob" "^2.1.1"
|
||||||
|
|
||||||
|
"is-number@^7.0.0":
|
||||||
|
"integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
|
||||||
|
"resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
|
||||||
|
"version" "7.0.0"
|
||||||
|
|
||||||
|
"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0":
|
||||||
|
"integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
|
||||||
|
"version" "4.0.0"
|
||||||
|
|
||||||
|
"json-parse-even-better-errors@^2.3.0":
|
||||||
|
"integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
|
||||||
|
"resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
|
||||||
|
"version" "2.3.1"
|
||||||
|
|
||||||
|
"lilconfig@^2.0.3":
|
||||||
|
"integrity" "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz"
|
||||||
|
"version" "2.0.3"
|
||||||
|
|
||||||
|
"lines-and-columns@^1.1.6":
|
||||||
|
"integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
|
||||||
|
"resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz"
|
||||||
|
"version" "1.1.6"
|
||||||
|
|
||||||
|
"loose-envify@^1.1.0":
|
||||||
|
"integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="
|
||||||
|
"resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
|
||||||
|
"version" "1.4.0"
|
||||||
|
dependencies:
|
||||||
|
"js-tokens" "^3.0.0 || ^4.0.0"
|
||||||
|
|
||||||
|
"merge2@^1.3.0":
|
||||||
|
"integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
|
||||||
|
"version" "1.4.1"
|
||||||
|
|
||||||
|
"micromatch@^4.0.4":
|
||||||
|
"integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz"
|
||||||
|
"version" "4.0.4"
|
||||||
|
dependencies:
|
||||||
|
"braces" "^3.0.1"
|
||||||
|
"picomatch" "^2.2.3"
|
||||||
|
|
||||||
|
"mime-db@1.52.0":
|
||||||
|
"integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
|
||||||
|
"version" "1.52.0"
|
||||||
|
|
||||||
|
"mime-types@~2.1.34":
|
||||||
|
"integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
|
||||||
|
"version" "2.1.35"
|
||||||
|
dependencies:
|
||||||
|
"mime-db" "1.52.0"
|
||||||
|
|
||||||
|
"minimist@^1.1.1":
|
||||||
|
"integrity" "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz"
|
||||||
|
"version" "1.2.7"
|
||||||
|
|
||||||
|
"ms@2.1.2":
|
||||||
|
"integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
"resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
|
||||||
|
"version" "2.1.2"
|
||||||
|
|
||||||
|
"nanoid@^3.1.30", "nanoid@^3.3.1":
|
||||||
|
"integrity" "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz"
|
||||||
|
"version" "3.3.1"
|
||||||
|
|
||||||
|
"negotiator@0.6.3":
|
||||||
|
"integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
|
||||||
|
"version" "0.6.3"
|
||||||
|
|
||||||
|
"next@12.1.0":
|
||||||
|
"integrity" "sha512-s885kWvnIlxsUFHq9UGyIyLiuD0G3BUC/xrH0CEnH5lHEWkwQcHOORgbDF0hbrW9vr/7am4ETfX4A7M6DjrE7Q=="
|
||||||
|
"resolved" "https://registry.npmjs.org/next/-/next-12.1.0.tgz"
|
||||||
|
"version" "12.1.0"
|
||||||
|
dependencies:
|
||||||
|
"@next/env" "12.1.0"
|
||||||
|
"caniuse-lite" "^1.0.30001283"
|
||||||
|
"postcss" "8.4.5"
|
||||||
|
"styled-jsx" "5.0.0"
|
||||||
|
"use-subscription" "1.5.1"
|
||||||
|
optionalDependencies:
|
||||||
|
"@next/swc-android-arm64" "12.1.0"
|
||||||
|
"@next/swc-darwin-arm64" "12.1.0"
|
||||||
|
"@next/swc-darwin-x64" "12.1.0"
|
||||||
|
"@next/swc-linux-arm-gnueabihf" "12.1.0"
|
||||||
|
"@next/swc-linux-arm64-gnu" "12.1.0"
|
||||||
|
"@next/swc-linux-arm64-musl" "12.1.0"
|
||||||
|
"@next/swc-linux-x64-gnu" "12.1.0"
|
||||||
|
"@next/swc-linux-x64-musl" "12.1.0"
|
||||||
|
"@next/swc-win32-arm64-msvc" "12.1.0"
|
||||||
|
"@next/swc-win32-ia32-msvc" "12.1.0"
|
||||||
|
"@next/swc-win32-x64-msvc" "12.1.0"
|
||||||
|
|
||||||
|
"node-releases@^2.0.2":
|
||||||
|
"integrity" "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz"
|
||||||
|
"version" "2.0.2"
|
||||||
|
|
||||||
|
"normalize-path@^3.0.0", "normalize-path@~3.0.0":
|
||||||
|
"integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
|
||||||
|
"version" "3.0.0"
|
||||||
|
|
||||||
|
"normalize-range@^0.1.2":
|
||||||
|
"integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
|
||||||
|
"resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"
|
||||||
|
"version" "0.1.2"
|
||||||
|
|
||||||
|
"object-assign@^4", "object-assign@^4.1.1":
|
||||||
|
"integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||||
|
"resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
|
||||||
|
"version" "4.1.1"
|
||||||
|
|
||||||
|
"object-hash@^2.2.0":
|
||||||
|
"integrity" "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz"
|
||||||
|
"version" "2.2.0"
|
||||||
|
|
||||||
|
"parent-module@^1.0.0":
|
||||||
|
"integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
|
||||||
|
"version" "1.0.1"
|
||||||
|
dependencies:
|
||||||
|
"callsites" "^3.0.0"
|
||||||
|
|
||||||
|
"parse-json@^5.0.0":
|
||||||
|
"integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
|
||||||
|
"version" "5.2.0"
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.0.0"
|
||||||
|
"error-ex" "^1.3.1"
|
||||||
|
"json-parse-even-better-errors" "^2.3.0"
|
||||||
|
"lines-and-columns" "^1.1.6"
|
||||||
|
|
||||||
|
"path-parse@^1.0.7":
|
||||||
|
"integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
|
||||||
|
"version" "1.0.7"
|
||||||
|
|
||||||
|
"path-type@^4.0.0":
|
||||||
|
"integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
|
||||||
|
"version" "4.0.0"
|
||||||
|
|
||||||
|
"picocolors@^1.0.0":
|
||||||
|
"integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
|
||||||
|
"version" "1.0.0"
|
||||||
|
|
||||||
|
"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3":
|
||||||
|
"integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
|
||||||
|
"version" "2.3.1"
|
||||||
|
|
||||||
|
"pify@^2.3.0":
|
||||||
|
"integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
|
||||||
|
"resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"
|
||||||
|
"version" "2.3.0"
|
||||||
|
|
||||||
|
"postcss-import@^14.0.2":
|
||||||
|
"integrity" "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz"
|
||||||
|
"version" "14.0.2"
|
||||||
|
dependencies:
|
||||||
|
"postcss-value-parser" "^4.0.0"
|
||||||
|
"read-cache" "^1.0.0"
|
||||||
|
"resolve" "^1.1.7"
|
||||||
|
|
||||||
|
"postcss-js@^4.0.0":
|
||||||
|
"integrity" "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz"
|
||||||
|
"version" "4.0.0"
|
||||||
|
dependencies:
|
||||||
|
"camelcase-css" "^2.0.1"
|
||||||
|
|
||||||
|
"postcss-load-config@^3.1.0":
|
||||||
|
"integrity" "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz"
|
||||||
|
"version" "3.1.0"
|
||||||
|
dependencies:
|
||||||
|
"import-cwd" "^3.0.0"
|
||||||
|
"lilconfig" "^2.0.3"
|
||||||
|
"yaml" "^1.10.2"
|
||||||
|
|
||||||
|
"postcss-nested@5.0.6":
|
||||||
|
"integrity" "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz"
|
||||||
|
"version" "5.0.6"
|
||||||
|
dependencies:
|
||||||
|
"postcss-selector-parser" "^6.0.6"
|
||||||
|
|
||||||
|
"postcss-selector-parser@^6.0.6", "postcss-selector-parser@^6.0.9":
|
||||||
|
"integrity" "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz"
|
||||||
|
"version" "6.0.9"
|
||||||
|
dependencies:
|
||||||
|
"cssesc" "^3.0.0"
|
||||||
|
"util-deprecate" "^1.0.2"
|
||||||
|
|
||||||
|
"postcss-value-parser@^4.0.0", "postcss-value-parser@^4.2.0":
|
||||||
|
"integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
|
||||||
|
"version" "4.2.0"
|
||||||
|
|
||||||
|
"postcss@^8.0.0", "postcss@^8.1.0", "postcss@^8.2.14", "postcss@^8.3.3", "postcss@^8.4.6", "postcss@^8.4.7":
|
||||||
|
"integrity" "sha512-L9Ye3r6hkkCeOETQX6iOaWZgjp3LL6Lpqm6EtgbKrgqGGteRMNb9vzBfRL96YOSu8o7x3MfIH9Mo5cPJFGrW6A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.7.tgz"
|
||||||
|
"version" "8.4.7"
|
||||||
|
dependencies:
|
||||||
|
"nanoid" "^3.3.1"
|
||||||
|
"picocolors" "^1.0.0"
|
||||||
|
"source-map-js" "^1.0.2"
|
||||||
|
|
||||||
|
"postcss@8.4.5":
|
||||||
|
"integrity" "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz"
|
||||||
|
"version" "8.4.5"
|
||||||
|
dependencies:
|
||||||
|
"nanoid" "^3.1.30"
|
||||||
|
"picocolors" "^1.0.0"
|
||||||
|
"source-map-js" "^1.0.1"
|
||||||
|
|
||||||
|
"queue-microtask@^1.2.2":
|
||||||
|
"integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
|
||||||
|
"version" "1.2.3"
|
||||||
|
|
||||||
|
"quick-lru@^5.1.1":
|
||||||
|
"integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz"
|
||||||
|
"version" "5.1.1"
|
||||||
|
|
||||||
|
"react-dom@^17.0.2 || ^18.0.0-0", "react-dom@17.0.2":
|
||||||
|
"integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"
|
||||||
|
"version" "17.0.2"
|
||||||
|
dependencies:
|
||||||
|
"loose-envify" "^1.1.0"
|
||||||
|
"object-assign" "^4.1.1"
|
||||||
|
"scheduler" "^0.20.2"
|
||||||
|
|
||||||
|
"react@^17.0.2 || ^18.0.0-0", "react@>= 16.8.0 || 17.x.x || 18.x.x", "react@17.0.2":
|
||||||
|
"integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
|
||||||
|
"version" "17.0.2"
|
||||||
|
dependencies:
|
||||||
|
"loose-envify" "^1.1.0"
|
||||||
|
"object-assign" "^4.1.1"
|
||||||
|
|
||||||
|
"read-cache@^1.0.0":
|
||||||
|
"integrity" "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q="
|
||||||
|
"resolved" "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz"
|
||||||
|
"version" "1.0.0"
|
||||||
|
dependencies:
|
||||||
|
"pify" "^2.3.0"
|
||||||
|
|
||||||
|
"readdirp@~3.6.0":
|
||||||
|
"integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
|
||||||
|
"version" "3.6.0"
|
||||||
|
dependencies:
|
||||||
|
"picomatch" "^2.2.1"
|
||||||
|
|
||||||
|
"resolve-from@^4.0.0":
|
||||||
|
"integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
|
||||||
|
"version" "4.0.0"
|
||||||
|
|
||||||
|
"resolve-from@^5.0.0":
|
||||||
|
"integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"
|
||||||
|
"version" "5.0.0"
|
||||||
|
|
||||||
|
"resolve@^1.1.7", "resolve@^1.22.0":
|
||||||
|
"integrity" "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz"
|
||||||
|
"version" "1.22.0"
|
||||||
|
dependencies:
|
||||||
|
"is-core-module" "^2.8.1"
|
||||||
|
"path-parse" "^1.0.7"
|
||||||
|
"supports-preserve-symlinks-flag" "^1.0.0"
|
||||||
|
|
||||||
|
"reusify@^1.0.4":
|
||||||
|
"integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
|
||||||
|
"version" "1.0.4"
|
||||||
|
|
||||||
|
"run-parallel@^1.1.9":
|
||||||
|
"integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
|
||||||
|
"version" "1.2.0"
|
||||||
|
dependencies:
|
||||||
|
"queue-microtask" "^1.2.2"
|
||||||
|
|
||||||
|
"scheduler@^0.20.2":
|
||||||
|
"integrity" "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz"
|
||||||
|
"version" "0.20.2"
|
||||||
|
dependencies:
|
||||||
|
"loose-envify" "^1.1.0"
|
||||||
|
"object-assign" "^4.1.1"
|
||||||
|
|
||||||
|
"socket.io-adapter@~2.4.0":
|
||||||
|
"integrity" "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz"
|
||||||
|
"version" "2.4.0"
|
||||||
|
|
||||||
|
"socket.io-client@^4.5.1":
|
||||||
|
"integrity" "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz"
|
||||||
|
"version" "4.5.4"
|
||||||
|
dependencies:
|
||||||
|
"@socket.io/component-emitter" "~3.1.0"
|
||||||
|
"debug" "~4.3.2"
|
||||||
|
"engine.io-client" "~6.2.3"
|
||||||
|
"socket.io-parser" "~4.2.1"
|
||||||
|
|
||||||
|
"socket.io-parser@~4.2.1":
|
||||||
|
"integrity" "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g=="
|
||||||
|
"resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz"
|
||||||
|
"version" "4.2.1"
|
||||||
|
dependencies:
|
||||||
|
"@socket.io/component-emitter" "~3.1.0"
|
||||||
|
"debug" "~4.3.1"
|
||||||
|
|
||||||
|
"socket.io@^4.5.1":
|
||||||
|
"integrity" "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz"
|
||||||
|
"version" "4.5.4"
|
||||||
|
dependencies:
|
||||||
|
"accepts" "~1.3.4"
|
||||||
|
"base64id" "~2.0.0"
|
||||||
|
"debug" "~4.3.2"
|
||||||
|
"engine.io" "~6.2.1"
|
||||||
|
"socket.io-adapter" "~2.4.0"
|
||||||
|
"socket.io-parser" "~4.2.1"
|
||||||
|
|
||||||
|
"source-map-js@^1.0.1", "source-map-js@^1.0.2":
|
||||||
|
"integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
|
||||||
|
"version" "1.0.2"
|
||||||
|
|
||||||
|
"styled-jsx@5.0.0":
|
||||||
|
"integrity" "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0.tgz"
|
||||||
|
"version" "5.0.0"
|
||||||
|
|
||||||
|
"supports-color@^5.3.0":
|
||||||
|
"integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="
|
||||||
|
"resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
|
||||||
|
"version" "5.5.0"
|
||||||
|
dependencies:
|
||||||
|
"has-flag" "^3.0.0"
|
||||||
|
|
||||||
|
"supports-color@^7.1.0":
|
||||||
|
"integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
|
||||||
|
"resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
|
||||||
|
"version" "7.2.0"
|
||||||
|
dependencies:
|
||||||
|
"has-flag" "^4.0.0"
|
||||||
|
|
||||||
|
"supports-preserve-symlinks-flag@^1.0.0":
|
||||||
|
"integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
|
||||||
|
"resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
|
||||||
|
"version" "1.0.0"
|
||||||
|
|
||||||
|
"tailwindcss@^3.0.23":
|
||||||
|
"integrity" "sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz"
|
||||||
|
"version" "3.0.23"
|
||||||
|
dependencies:
|
||||||
|
"arg" "^5.0.1"
|
||||||
|
"chalk" "^4.1.2"
|
||||||
|
"chokidar" "^3.5.3"
|
||||||
|
"color-name" "^1.1.4"
|
||||||
|
"cosmiconfig" "^7.0.1"
|
||||||
|
"detective" "^5.2.0"
|
||||||
|
"didyoumean" "^1.2.2"
|
||||||
|
"dlv" "^1.1.3"
|
||||||
|
"fast-glob" "^3.2.11"
|
||||||
|
"glob-parent" "^6.0.2"
|
||||||
|
"is-glob" "^4.0.3"
|
||||||
|
"normalize-path" "^3.0.0"
|
||||||
|
"object-hash" "^2.2.0"
|
||||||
|
"postcss" "^8.4.6"
|
||||||
|
"postcss-js" "^4.0.0"
|
||||||
|
"postcss-load-config" "^3.1.0"
|
||||||
|
"postcss-nested" "5.0.6"
|
||||||
|
"postcss-selector-parser" "^6.0.9"
|
||||||
|
"postcss-value-parser" "^4.2.0"
|
||||||
|
"quick-lru" "^5.1.1"
|
||||||
|
"resolve" "^1.22.0"
|
||||||
|
|
||||||
|
"to-regex-range@^5.0.1":
|
||||||
|
"integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
|
||||||
|
"version" "5.0.1"
|
||||||
|
dependencies:
|
||||||
|
"is-number" "^7.0.0"
|
||||||
|
|
||||||
|
"typescript@^4.6.2":
|
||||||
|
"integrity" "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz"
|
||||||
|
"version" "4.6.2"
|
||||||
|
|
||||||
|
"use-subscription@1.5.1":
|
||||||
|
"integrity" "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz"
|
||||||
|
"version" "1.5.1"
|
||||||
|
dependencies:
|
||||||
|
"object-assign" "^4.1.1"
|
||||||
|
|
||||||
|
"util-deprecate@^1.0.2":
|
||||||
|
"integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||||
|
"resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
|
||||||
|
"version" "1.0.2"
|
||||||
|
|
||||||
|
"vary@^1":
|
||||||
|
"integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
|
||||||
|
"version" "1.1.2"
|
||||||
|
|
||||||
|
"ws@~8.2.3":
|
||||||
|
"integrity" "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
|
||||||
|
"resolved" "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz"
|
||||||
|
"version" "8.2.3"
|
||||||
|
|
||||||
|
"xmlhttprequest-ssl@~2.0.0":
|
||||||
|
"integrity" "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A=="
|
||||||
|
"resolved" "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz"
|
||||||
|
"version" "2.0.0"
|
||||||
|
|
||||||
|
"xtend@^4.0.2":
|
||||||
|
"integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||||
|
"resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
|
||||||
|
"version" "4.0.2"
|
||||||
|
|
||||||
|
"yaml@^1.10.0", "yaml@^1.10.2":
|
||||||
|
"integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
|
||||||
|
"resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
|
||||||
|
"version" "1.10.2"
|
Loading…
Reference in New Issue