chore: login view

pull/13/head
moonrailgun 4 years ago
parent d6dc79a2dc
commit 9788d204ee

@ -0,0 +1,20 @@
import { DependencyList, useEffect } from 'react';
import { FunctionReturningPromise } from '../types';
import { useAsyncFn } from './useAsyncFn';
// Reference: https://github.com/streamich/react-use/blob/master/src/useAsync.ts
export function useAsync<T extends FunctionReturningPromise>(
fn: T,
deps: DependencyList = []
) {
const [state, callback] = useAsyncFn(fn, deps, {
loading: true,
});
useEffect(() => {
callback();
}, [callback]);
return state;
}

@ -0,0 +1,69 @@
import { DependencyList, useCallback, useRef, useState } from 'react';
import { FunctionReturningPromise, PromiseType } from '../types';
import { useMountedState } from './useMountedState';
// Reference: https://github.com/streamich/react-use/blob/master/src/useAsyncFn.ts
export type AsyncState<T> =
| {
loading: boolean;
error?: undefined;
value?: undefined;
}
| {
loading: true;
error?: Error | undefined;
value?: T;
}
| {
loading: false;
error: Error;
value?: undefined;
}
| {
loading: false;
error?: undefined;
value: T;
};
type StateFromFunctionReturningPromise<T extends FunctionReturningPromise> =
AsyncState<PromiseType<ReturnType<T>>>;
export type AsyncFnReturn<
T extends FunctionReturningPromise = FunctionReturningPromise
> = [StateFromFunctionReturningPromise<T>, T];
export function useAsyncFn<T extends FunctionReturningPromise>(
fn: T,
deps: DependencyList = [],
initialState: StateFromFunctionReturningPromise<T> = { loading: false }
): AsyncFnReturn<T> {
const lastCallId = useRef(0);
const isMounted = useMountedState();
const [state, set] =
useState<StateFromFunctionReturningPromise<T>>(initialState);
const callback = useCallback((...args: Parameters<T>): ReturnType<T> => {
const callId = ++lastCallId.current;
set((prevState) => ({ ...prevState, loading: true }));
return fn(...args).then(
(value) => {
isMounted() &&
callId === lastCallId.current &&
set({ value, loading: false });
return value;
},
(error) => {
isMounted() &&
callId === lastCallId.current &&
set({ error, loading: false });
return error;
}
) as ReturnType<T>;
}, deps);
return [state, callback as unknown as T];
}

@ -0,0 +1,18 @@
import { useCallback, useEffect, useRef } from 'react';
// Reference: https://github.com/streamich/react-use/blob/master/src/useMountedState.ts
export function useMountedState(): () => boolean {
const mountedRef = useRef<boolean>(false);
const get = useCallback(() => mountedRef.current, []);
useEffect(() => {
mountedRef.current = true;
return () => {
mountedRef.current = false;
};
}, []);
return get;
}

@ -13,5 +13,10 @@ export { regField } from './components/FastForm/field';
export { regFormContainer } from './components/FastForm/container';
export type { FastFormContainerComponent } from './components/FastForm/container';
// hooks
export { useAsync } from './hooks/useAsync';
export { useAsyncFn } from './hooks/useAsyncFn';
export { useMountedState } from './hooks/useMountedState';
// manager
export { getStorage, setStorage, useStorage } from './manager/storage';

@ -32,7 +32,7 @@ export function useStorage<T>(
getStorage()
.get(key)
.then((data: T) => {
setValue(data);
setValue(data ?? defaultValue);
});
}, [key]);

@ -0,0 +1,5 @@
export type PromiseType<P extends Promise<any>> = P extends Promise<infer T>
? T
: never;
export type FunctionReturningPromise = (...args: any[]) => Promise<any>;

@ -0,0 +1,114 @@
<svg xmlns="http://www.w3.org/2000/svg" width="169" height="425" viewBox="0 0 169 425">
<g fill="none" fill-rule="nonzero">
<path d="M0 0h169v425H0z"/>
<circle cx="15" cy="16" r="10" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="41" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="66" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="91" r="9" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="116" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="16" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="41" r="8" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="66" r="6" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="91" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="116" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="16" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="41" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="66" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="91" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="116" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="16" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="41" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="66" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="91" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="116" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="16" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="41" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="66" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="91" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="116" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="16" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="41" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="66" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="91" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="116" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="41" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="66" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="141" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="141" r="6" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="141" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="141" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="141" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="141" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="116" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="166" r="10" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="191" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="216" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="241" r="9" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="266" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="166" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="191" r="8" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="216" r="6" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="241" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="266" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="166" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="191" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="216" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="241" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="266" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="166" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="191" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="216" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="241" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="266" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="166" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="191" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="216" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="241" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="266" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="191" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="216" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="241" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="266" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="166" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="191" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="391" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="416" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="391" r="8" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="416" r="6" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="391" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="416" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="391" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="416" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="391" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="416" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="416" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="416" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="291" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="291" r="6" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="291" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="291" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="291" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="291" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="291" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="241" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="316" r="9" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="341" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="316" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="341" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="316" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="341" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="316" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="341" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="316" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="115" cy="341" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="316" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="341" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="15" cy="366" r="7" fill="#FFF" fill-opacity=".1"/>
<circle cx="40" cy="366" r="6" fill="#FFF" fill-opacity=".1"/>
<circle cx="65" cy="366" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="90" cy="366" r="5" fill="#FFF" fill-opacity=".1"/>
<circle cx="140" cy="366" r="2" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="366" r="3" fill="#FFF" fill-opacity=".1"/>
<circle cx="165" cy="316" r="2" fill="#FFF" fill-opacity=".1"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

@ -22,7 +22,6 @@
"react-dom": "^17.0.2",
"react-router": "^5.2.0",
"react-router-dom": "^5.2.0",
"react-use": "^17.2.4",
"socket.io-client": "^4.1.2",
"tailwindcss": "^2.2.4"
},

@ -4,6 +4,8 @@ import { useStorage } from 'pawchat-shared';
import clsx from 'clsx';
import { Loadable } from './components/Loadable';
import './dark.less';
const MainRoute = Loadable(() =>
import('./routes/Main').then((module) => module.MainRoute)
);
@ -22,7 +24,7 @@ export const App: React.FC = React.memo(() => {
return (
<div
className={clsx('h-screen w-screen', {
className={clsx('h-screen w-screen min-h-screen', {
dark: darkMode,
})}
>
@ -36,3 +38,4 @@ export const App: React.FC = React.memo(() => {
</div>
);
});
App.displayName = 'App';

@ -1,5 +1,5 @@
import { Icon } from '@iconify/react';
import React from 'react';
import { Spinner } from './Spinner';
interface LoadingSpinnerProps {
tip?: string;
@ -8,9 +8,10 @@ export const LoadingSpinner: React.FC<LoadingSpinnerProps> = React.memo(
(props) => {
return (
<div>
<Icon className="animate-spin h-5 w-5 mr-3" icon="mdi-loading" />
<Spinner />
{props.tip ?? 'Processing'}
</div>
);
}
);
LoadingSpinner.displayName = 'LoadingSpinner';

@ -0,0 +1,7 @@
import { Icon } from '@iconify/react';
import React from 'react';
export const Spinner: React.FC = React.memo(() => {
return <Icon className="animate-spin mr-3 inline" icon="mdi-loading" />;
});
Spinner.displayName = 'Spinner';

@ -0,0 +1,10 @@
.dark {
.ant-form-item-label > label {
color: white;
}
.ant-divider-horizontal.ant-divider-with-text {
border-top-color: rgba(255,255,255,0.12);
color: rgba(255,255,255,0.85);
}
}

@ -1,31 +1,78 @@
import React from 'react';
import { FastFormFieldMeta } from 'pawchat-shared';
import { WebFastForm } from '../../components/WebFastForm';
import { useCallback } from 'react';
import { Icon } from '@iconify/react';
import { Divider } from 'antd';
import { useAsyncFn } from 'pawchat-shared';
import React, { useState } from 'react';
import { Spinner } from '../../components/Spinner';
const fields: FastFormFieldMeta[] = [
{
type: 'text',
name: 'email',
label: '邮箱',
},
{
type: 'password',
name: 'password',
label: '密码',
},
];
/**
*
*/
const OAuthLoginView: React.FC = React.memo(() => {
// TODO
return (
<>
<Divider></Divider>
<div className="bg-gray-400 w-1/3 px-4 py-1 text-3xl text-center rounded-md cursor-pointer shadow-md">
<Icon className="mx-auto" icon="mdi-github" />
</div>
</>
);
});
OAuthLoginView.displayName = 'OAuthLoginView';
/**
*
*/
export const LoginView: React.FC = React.memo(() => {
const handleLogin = useCallback((values) => {
console.log('values', values);
}, []);
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
const [{ value, loading }, handleLogin] = useAsyncFn(async () => {
await new Promise((resolve) => {
setTimeout(() => {
resolve('');
}, 2000);
});
console.log({ username, password });
}, [username, password]);
return (
<div className="w-96 text-white">
<div className="text-xl"> Paw Chat</div>
<div className="mb-4 text-2xl"> Paw Chat</div>
<div>
<div className="mb-4">
<div className="mb-2"></div>
<input
id="email"
className="appearance-none rounded-md relative block w-full px-4 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 text-base sm:text-sm"
placeholder="name@example.com"
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
/>
</div>
<div className="mb-8">
<div className="mb-2"></div>
<input
id="password"
className="appearance-none rounded-md relative block w-full px-4 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 text-base sm:text-sm"
type="password"
placeholder="******"
value={password}
onChange={(e) => setPassword(e.target.value)}
/>
</div>
<WebFastForm layout="vertical" fields={fields} onSubmit={handleLogin} />
<button
className="group relative w-full py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
onClick={handleLogin}
>
{loading && <Spinner />}
</button>
</div>
</div>
);
});

@ -4,6 +4,7 @@ import { LoginView } from './LoginView';
import bgImage from '../../../assets/images/bg.jpg';
import clsx from 'clsx';
import styles from './index.module.less';
import loginPatternUrl from '../../../assets/images/login-pattern.svg';
export const EntryRoute = React.memo(() => {
return (
@ -11,8 +12,9 @@ export const EntryRoute = React.memo(() => {
<div
className={clsx(
styles.entryLeft,
'entry-left w-142 sm:w-full bg-gray-600 h-full flex items-center justify-center'
'entry-left w-142 sm:w-full pt-40 bg-gray-600 min-h-full flex justify-center bg-repeat-y'
)}
style={{ backgroundImage: `url(${loginPatternUrl})` }}
>
<Switch>
<Route path="/entry/login" component={LoginView} />
@ -21,7 +23,7 @@ export const EntryRoute = React.memo(() => {
</div>
<div
className="flex-1 sm:hidden bg-center bg-cover bg-no-repeat"
// style={{ backgroundImage: `url(${bgImage})` }}
style={{ backgroundImage: `url(${bgImage})`, zIndex: -1 }}
/>
</div>
);

@ -1,2 +1,3 @@
declare module '*.jpg';
declare module '*.svg';
declare module '*.module.less';

@ -797,11 +797,6 @@
jest-diff "^26.0.0"
pretty-format "^26.0.0"
"@types/js-cookie@^2.2.6":
version "2.2.6"
resolved "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f"
integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw==
"@types/json-schema@*", "@types/json-schema@^7.0.6":
version "7.0.7"
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
@ -1132,11 +1127,6 @@
resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz#b5fde2f0f79c1e120307c415a4c1d5eb15a6f278"
integrity sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==
"@xobotyi/scrollbar-width@^1.9.5":
version "1.9.5"
resolved "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d"
integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
@ -2082,7 +2072,7 @@ copy-descriptor@^0.1.0:
resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
copy-to-clipboard@^3.2.0, copy-to-clipboard@^3.3.1:
copy-to-clipboard@^3.2.0:
version "3.3.1"
resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae"
integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==
@ -2149,14 +2139,6 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
css-in-js-utils@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99"
integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==
dependencies:
hyphenate-style-name "^1.0.2"
isobject "^3.0.1"
css-loader@^5.2.6:
version "5.2.6"
resolved "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1"
@ -2184,14 +2166,6 @@ css-select@^4.1.3:
domutils "^2.6.0"
nth-check "^2.0.0"
css-tree@^1.1.2:
version "1.1.3"
resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
dependencies:
mdn-data "2.0.14"
source-map "^0.6.1"
css-unit-converter@^1.1.1:
version "1.1.2"
resolved "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21"
@ -2224,7 +2198,7 @@ cssstyle@^2.3.0:
dependencies:
cssom "~0.3.6"
csstype@^3.0.2, csstype@^3.0.6:
csstype@^3.0.2:
version "3.0.8"
resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340"
integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==
@ -2605,13 +2579,6 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
error-stack-parser@^2.0.6:
version "2.0.6"
resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
dependencies:
stackframe "^1.1.1"
es-module-lexer@^0.6.0:
version "0.6.0"
resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz#e72ab05b7412e62b9be37c37a09bdb6000d706f0"
@ -2856,7 +2823,7 @@ extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
fast-deep-equal@^3.1.1:
version "3.1.3"
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@ -2882,21 +2849,11 @@ fast-levenshtein@~2.0.6:
resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fast-shallow-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b"
integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==
fastest-levenshtein@^1.0.12:
version "1.0.12"
resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2"
integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==
fastest-stable-stringify@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76"
integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==
fastq@^1.6.0:
version "1.11.0"
resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
@ -3424,11 +3381,6 @@ human-signals@^2.1.0:
resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
hyphenate-style-name@^1.0.2:
version "1.0.4"
resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@ -3514,13 +3466,6 @@ inherits@2.0.3:
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
inline-style-prefixer@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz#f73d5dbf2855733d6b153a4d24b7b47a73e9770b"
integrity sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg==
dependencies:
css-in-js-utils "^2.0.0"
inquirer@3.0.6:
version "3.0.6"
resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
@ -4303,11 +4248,6 @@ joycon@^3.0.1:
resolved "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz#9074c9b08ccf37a6726ff74a18485f85efcaddaf"
integrity sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==
js-cookie@^2.2.1:
version "2.2.1"
resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@ -4609,11 +4549,6 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
mdn-data@2.0.14:
version "2.0.14"
resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@ -4813,20 +4748,6 @@ nan@^2.12.1:
resolved "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
nano-css@^5.3.1:
version "5.3.1"
resolved "https://registry.npmjs.org/nano-css/-/nano-css-5.3.1.tgz#b709383e07ad3be61f64edffacb9d98250b87a1f"
integrity sha512-ENPIyNzANQRyYVvb62ajDd7PAyIgS2LIUnT9ewih4yrXSZX4hKoUwssy8WjUH++kEOA5wUTMgNnV7ko5n34kUA==
dependencies:
css-tree "^1.1.2"
csstype "^3.0.6"
fastest-stable-stringify "^2.0.2"
inline-style-prefixer "^6.0.0"
rtl-css-js "^1.14.0"
sourcemap-codec "^1.4.8"
stacktrace-js "^2.0.2"
stylis "^4.0.6"
nanoclone@^0.2.1:
version "0.2.1"
resolved "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4"
@ -6007,31 +5928,6 @@ react-router@5.2.0, react-router@^5.2.0:
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
react-universal-interface@^0.6.2:
version "0.6.2"
resolved "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b"
integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==
react-use@^17.2.4:
version "17.2.4"
resolved "https://registry.npmjs.org/react-use/-/react-use-17.2.4.tgz#1f89be3db0a8237c79253db0a15e12bbe3cfeff1"
integrity sha512-vQGpsAM0F5UIlshw5UI8ULGPS4yn5rm7/qvn3T1Gnkrz7YRMEEMh+ynKcmRloOyiIeLvKWiQjMiwRGtdbgs5qQ==
dependencies:
"@types/js-cookie" "^2.2.6"
"@xobotyi/scrollbar-width" "^1.9.5"
copy-to-clipboard "^3.3.1"
fast-deep-equal "^3.1.3"
fast-shallow-equal "^1.0.0"
js-cookie "^2.2.1"
nano-css "^5.3.1"
react-universal-interface "^0.6.2"
resize-observer-polyfill "^1.5.1"
screenfull "^5.1.0"
set-harmonic-interval "^1.0.1"
throttle-debounce "^3.0.1"
ts-easing "^0.2.0"
tslib "^2.1.0"
react@^17.0.2:
version "17.0.2"
resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
@ -6259,13 +6155,6 @@ rimraf@^3.0.0:
dependencies:
glob "^7.1.3"
rtl-css-js@^1.14.0:
version "1.14.1"
resolved "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.14.1.tgz#f79781d6a0c510abe73fde60aa3cbe9dfd134a45"
integrity sha512-G9N1s/6329FpJr8k9e1U/Lg0IDWThv99sb7k0IrXHjSnubxe01h52/ajsPRafJK1/2Vqrhz3VKLe3E1dx6jS9Q==
dependencies:
"@babel/runtime" "^7.1.2"
run-async@^2.2.0:
version "2.4.1"
resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@ -6343,11 +6232,6 @@ schema-utils@^3.0.0:
ajv "^6.12.5"
ajv-keywords "^3.5.2"
screenfull@^5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8"
integrity sha512-dYaNuOdzr+kc6J6CFcBrzkLCfyGcMg+gWkJ8us93IQ7y1cevhQAugFsaCdMHb6lw8KV3xPzSxzH7zM1dQap9mA==
scroll-into-view-if-needed@^2.2.25:
version "2.2.28"
resolved "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.28.tgz#5a15b2f58a52642c88c8eca584644e01703d645a"
@ -6438,11 +6322,6 @@ set-blocking@^2.0.0:
resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
set-harmonic-interval@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249"
integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==
set-value@^2.0.0, set-value@^2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
@ -6628,11 +6507,6 @@ source-map-url@^0.4.0:
resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
source-map@0.5.6:
version "0.5.6"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
source-map@^0.5.0, source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@ -6648,11 +6522,6 @@ source-map@^0.7.3, source-map@~0.7.2:
resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
sourcemap-codec@^1.4.8:
version "1.4.8"
resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
spdy-transport@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
@ -6688,13 +6557,6 @@ sprintf-js@~1.0.2:
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
stack-generator@^2.0.5:
version "2.0.5"
resolved "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36"
integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==
dependencies:
stackframe "^1.1.1"
stack-utils@^2.0.3:
version "2.0.3"
resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277"
@ -6702,28 +6564,6 @@ stack-utils@^2.0.3:
dependencies:
escape-string-regexp "^2.0.0"
stackframe@^1.1.1:
version "1.2.0"
resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==
stacktrace-gps@^3.0.4:
version "3.0.4"
resolved "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a"
integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==
dependencies:
source-map "0.5.6"
stackframe "^1.1.1"
stacktrace-js@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b"
integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==
dependencies:
error-stack-parser "^2.0.6"
stack-generator "^2.0.5"
stacktrace-gps "^3.0.4"
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@ -6843,11 +6683,6 @@ style-loader@^3.0.0:
resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.0.0.tgz#2eafcd0dbe70b07438e0256a9714ea94dd63cbe0"
integrity sha512-pqJTDiCtLr8D2eyVWXPiwNkLsAMDuvPHnu+Z/Edo9hu+DzdJwdO5eZv9zUBF6tWI8GJGhAkenWJaVjXI+sHnuQ==
stylis@^4.0.6:
version "4.0.10"
resolved "https://registry.npmjs.org/stylis/-/stylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240"
integrity sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@ -6988,11 +6823,6 @@ throat@^6.0.1:
resolved "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==
throttle-debounce@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb"
integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==
through@^2.3.6:
version "2.3.8"
resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@ -7100,11 +6930,6 @@ tr46@^2.1.0:
dependencies:
punycode "^2.1.1"
ts-easing@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec"
integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==
ts-node@^10.0.0:
version "10.0.0"
resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be"
@ -7136,7 +6961,7 @@ tslib@^1.10.0:
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.0.3, tslib@^2.1.0:
tslib@^2.0.3:
version "2.3.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==

Loading…
Cancel
Save