diff --git a/.eslintrc b/.eslintrc
index b6a3abf2..8eee0d1b 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,22 +1,3 @@
{
- "root": true,
- "parser": "@typescript-eslint/parser",
- "plugins": ["@typescript-eslint"],
- "extends": [
- "eslint:recommended",
- "plugin:@typescript-eslint/recommended",
- "plugin:react-hooks/recommended",
- "plugin:react/recommended",
- "plugin:import/recommended",
- "plugin:import/typescript",
- "plugin:prettier/recommended"
- ],
- "rules": {
- "@typescript-eslint/consistent-type-imports": "error"
- },
- "settings": {
- "react": {
- "version": "detect"
- }
- }
+ "extends": ["@verypossible/eslint-config/react"]
}
diff --git a/README.md b/README.md
index ac27b250..aa6d233a 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Meshtastic.js
+# Meshtastic Web
[](https://open.vscode.dev/meshtastic/meshtastic-web)
diff --git a/package.json b/package.json
index 5916f1fb..727a9b0c 100644
--- a/package.json
+++ b/package.json
@@ -11,12 +11,11 @@
"lint": "eslint 'src/**/*.{ts,tsx}'"
},
"dependencies": {
- "@headlessui/react": "^1.3.0",
+ "@headlessui/react": "^1.4.0",
"@heroicons/react": "^1.0.1",
"@meshtastic/meshtasticjs": "^0.6.16",
"@reduxjs/toolkit": "^1.6.0",
"boring-avatars": "^1.5.8",
- "framer-motion": "^4.1.17",
"i18next": "^20.3.5",
"i18next-browser-languagedetector": "^6.1.2",
"react": "^17.0.2",
@@ -24,30 +23,34 @@
"react-flags-select": "^2.1.2",
"react-hook-form": "^7.9.0",
"react-i18next": "^11.11.4",
- "react-redux": "^7.2.4"
+ "react-redux": "^7.2.4",
+ "type-route": "^0.6.0",
+ "use-breakpoint": "^2.0.1",
+ "yarn": "^1.22.11"
},
"devDependencies": {
"@snowpack/plugin-dotenv": "^2.0.5",
"@snowpack/plugin-postcss": "^1.4.3",
"@snowpack/plugin-react-refresh": "^2.5.0",
"@snowpack/plugin-typescript": "^1.2.0",
- "@types/eslint": "^7.2.13",
"@types/react": "^17.0.13",
"@types/react-dom": "^17.0.8",
"@types/react-redux": "^7.1.16",
"@types/snowpack-env": "^2.3.3",
- "@typescript-eslint/eslint-plugin": "^4.28.1",
- "@typescript-eslint/parser": "^4.28.1",
+ "@typescript-eslint/eslint-plugin": "^4.29.1",
+ "@typescript-eslint/parser": "^4.29.1",
+ "@verypossible/eslint-config": "^1.6.0",
"autoprefixer": "^10.2.6",
- "eslint": "^7.29.0",
+ "babel-plugin-module-resolver": "^4.1.0",
+ "eslint": "^7.32.0",
"eslint-config-prettier": "^8.3.0",
- "eslint-plugin-import": "^2.23.4",
- "eslint-plugin-prettier": "^3.4.0",
+ "eslint-import-resolver-babel-module": "^5.3.1",
+ "eslint-import-resolver-typescript": "^2.4.0",
+ "eslint-plugin-import": "^2.24.0",
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^4.2.0",
"gzipper": "^5.0.0",
"postcss": "^8.3.5",
- "postcss-cli": "^8.3.1",
"prettier": "^2.3.2",
"snowpack": "^3.7.1",
"tailwindcss": "^2.2.4",
diff --git a/postcss.config.js b/postcss.config.js
index 33ad091d..12a703d9 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -3,4 +3,4 @@ module.exports = {
tailwindcss: {},
autoprefixer: {},
},
-}
+};
diff --git a/public/Mesh_Logo_Black.svg b/public/Mesh_Logo_Black.svg
new file mode 100644
index 00000000..e0f9bb19
--- /dev/null
+++ b/public/Mesh_Logo_Black.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/public/Mesh_Logo_White.svg b/public/Mesh_Logo_White.svg
new file mode 100644
index 00000000..b1bcd575
--- /dev/null
+++ b/public/Mesh_Logo_White.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/public/index.html b/public/index.html
index e772d911..e3678126 100644
--- a/public/index.html
+++ b/public/index.html
@@ -8,13 +8,27 @@
+
+
+
+
+
-
+
-
Snowpack App
+ Meshtastic Web
diff --git a/snowpack.config.mjs b/snowpack.config.mjs
index 388dbafd..9f212c34 100644
--- a/snowpack.config.mjs
+++ b/snowpack.config.mjs
@@ -16,6 +16,16 @@ export default {
},
],
],
+ alias: {
+ // Type 1: Package Import Alias
+ // "lodash": "lodash-es",
+ // Type 2: Local Directory Import Alias (relative to cwd)
+ '@app': './src',
+ '@pages': './src/pages',
+ '@components': './src/components',
+ '@core': './src/core',
+ '@static': './src/static',
+ },
routes: [
/* Enable an SPA Fallback in development: */
// {"match": "routes", "src": ".*", "dest": "/index.html"},
diff --git a/src/App.tsx b/src/App.tsx
index d26b1136..efe4bbc7 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,37 +1,58 @@
import React from 'react';
-import { Protobuf, SettingsManager, Types } from '@meshtastic/meshtasticjs';
-
-import { Header } from './components/Header';
-import { connection } from './connection';
-import { useAppDispatch } from './hooks/redux';
-import { Main } from './Main';
+import { useAppDispatch, useAppSelector } from '@app/hooks/redux';
+import { DeviceStatusDropdown } from '@components/menu/buttons/DeviceStatusDropdown';
+import { MobileNavToggle } from '@components/menu/buttons/MobileNavToggle';
+import { ThemeToggle } from '@components/menu/buttons/ThemeToggle';
+import { Logo } from '@components/menu/Logo';
+import { MobileNav } from '@components/menu/MobileNav';
+import { Navigation } from '@components/menu/Navigation';
+import { connection } from '@core/connection';
+import { useRoute } from '@core/router';
import {
+ ackMessage,
addChannel,
+ addMessage,
addNode,
setDeviceStatus,
setLastMeshInterraction,
setMyNodeInfo,
setPreferences,
setReady,
-} from './slices/meshtasticSlice';
+} from '@core/slices/meshtasticSlice';
+import { Protobuf, SettingsManager, Types } from '@meshtastic/meshtasticjs';
+import { About } from '@pages/About';
+import { Messages } from '@pages/Messages';
+import { Nodes } from '@pages/Nodes/Index';
+import { Settings } from '@pages/settings/Index';
const App = (): JSX.Element => {
const dispatch = useAppDispatch();
+ const route = useRoute();
+
+ const myNodeInfo = useAppSelector((state) => state.meshtastic.myNodeInfo);
+ const darkMode = useAppSelector((state) => state.app.darkMode);
+ const hostOverrideEnabled = useAppSelector(
+ (state) => state.meshtastic.hostOverrideEnabled,
+ );
+ const hostOverride = useAppSelector((state) => state.meshtastic.hostOverride);
React.useEffect(() => {
SettingsManager.debugMode = Protobuf.LogRecord_Level.TRACE;
- connection.connect({
- address:
- import.meta.env.NODE_ENV === 'production'
- ? window.location.hostname
- : import.meta.env.SNOWPACK_PUBLIC_DEVICE_IP,
+ void connection.connect({
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ address: hostOverrideEnabled
+ ? hostOverride
+ : import.meta.env.NODE_ENV === 'production'
+ ? window.location.hostname
+ : import.meta.env.SNOWPACK_PUBLIC_DEVICE_IP ??
+ 'http://meshtastic.local',
receiveBatchRequests: false,
tls: false,
fetchInterval: 2000,
});
- }, []);
+ }, [hostOverrideEnabled, hostOverride]);
React.useEffect(() => {
connection.onDeviceStatus.subscribe((status) => {
@@ -40,6 +61,9 @@ const App = (): JSX.Element => {
if (status === Types.DeviceStatusEnum.DEVICE_CONFIGURED) {
dispatch(setReady(true));
}
+ if (status === Types.DeviceStatusEnum.DEVICE_DISCONNECTED) {
+ dispatch(setReady(false));
+ }
});
connection.onMyNodeInfo.subscribe((nodeInfo) => {
@@ -70,12 +94,71 @@ const App = (): JSX.Element => {
connection.onMeshHeartbeat.subscribe((date) =>
dispatch(setLastMeshInterraction(date.getTime())),
);
- }, [dispatch]);
+
+ connection.onTextPacket.subscribe((message) => {
+ dispatch(
+ addMessage({
+ message: message,
+ ack: message.packet.from !== myNodeInfo.myNodeNum,
+ isSender: message.packet.from === myNodeInfo.myNodeNum,
+ received: new Date(message.packet.rxTime),
+ }),
+ );
+ });
+
+ connection.onRoutingPacket.subscribe((routingPacket) => {
+ if (routingPacket.packet.payloadVariant.oneofKind === 'decoded') {
+ dispatch(
+ ackMessage(routingPacket.packet.payloadVariant.decoded.requestId),
+ );
+ }
+ });
+
+ return (): void => {
+ connection.onDeviceStatus.cancelAll();
+ connection.onMyNodeInfo.cancelAll();
+ connection.onNodeInfoPacket.cancelAll();
+ connection.onAdminPacket.cancelAll();
+ connection.onMeshHeartbeat.cancelAll();
+ connection.onTextPacket.cancelAll();
+ connection.onRoutingPacket.cancelAll();
+ };
+ }, [dispatch, myNodeInfo.myNodeNum]);
return (
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* */}
+
+
+
+
+
+
+
+
+
+
+ {route.name === 'messages' &&
}
+ {route.name === 'nodes' &&
}
+ {route.name === 'settings' &&
}
+ {route.name === 'about' &&
}
+ {route.name === false && 'Not Found'}
+
+
+
);
};
diff --git a/src/Main.tsx b/src/Main.tsx
deleted file mode 100644
index 8b9acb89..00000000
--- a/src/Main.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react';
-
-import { useTranslation } from 'react-i18next';
-
-import type { Types } from '@meshtastic/meshtasticjs';
-
-import { ChatMessage } from './components/ChatMessage';
-import { MessageBox } from './components/MessageBox';
-import { Sidebar } from './components/Sidebar';
-import { connection } from './connection';
-
-export const Main = (): JSX.Element => {
- const [messages, setMessages] = React.useState<
- { message: Types.TextPacket; ack: boolean }[]
- >([]);
- const { t } = useTranslation();
-
- React.useEffect(() => {
- connection.onTextPacket.subscribe((message) => {
- setMessages((messages) => [
- ...messages,
- { message: message, ack: false },
- ]);
- });
- }, []);
-
- React.useEffect(() => {
- connection.onRoutingPacket.subscribe((routingPacket) => {
- setMessages(
- messages.map((message) => {
- return routingPacket.packet.payloadVariant.oneofKind === 'decoded' &&
- message.message.packet.id ===
- routingPacket.packet.payloadVariant.decoded.requestId
- ? {
- ack: true,
- message: message.message,
- }
- : message;
- }),
- );
- });
- }, [messages]);
-
- return (
-
-
-
- {messages.length ? (
- messages.map((message, Main) => (
-
- ))
- ) : (
-
- {t('placeholder.no_messages')}
-
- )}
-
-
-
-
-
- );
-};
diff --git a/src/components/ChatMessage.tsx b/src/components/ChatMessage.tsx
deleted file mode 100644
index 83e172c8..00000000
--- a/src/components/ChatMessage.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import React from 'react';
-
-import Avatar from 'boring-avatars';
-
-import {
- CheckCircleIcon,
- DotsCircleHorizontalIcon,
-} from '@heroicons/react/outline';
-import type { Types } from '@meshtastic/meshtasticjs';
-
-import { useAppSelector } from '../hooks/redux';
-
-interface ChatMessageProps {
- message: { message: Types.TextPacket; ack: boolean };
-}
-
-export const ChatMessage = (props: ChatMessageProps): JSX.Element => {
- const myNodeInfo = useAppSelector((state) => state.meshtastic.myNodeInfo);
- const nodes = useAppSelector((state) => state.meshtastic.nodes);
-
- const node = nodes.find((node) => {
- return node.num === props.message.message.packet.from;
- });
-
- return (
-
-
-
- }
- >
-
-
-
{node?.user?.longName ?? 'UNK'}
-
-
-
- {new Date(
- props.message.message.packet.rxTime > 0
- ? props.message.message.packet.rxTime
- : Date.now(),
- ).toLocaleString()}
-
-
-
- {props.message.message.data}
- {node?.num === myNodeInfo.myNodeNum &&
- (props.message.ack ? (
-
- ) : (
-
- ))}
-
-
-
-
-
- );
-};
diff --git a/src/components/Header.tsx b/src/components/Header.tsx
deleted file mode 100644
index 22498c2f..00000000
--- a/src/components/Header.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import React from 'react';
-
-import {
- DeviceMobileIcon,
- StatusOfflineIcon,
- StatusOnlineIcon,
-} from '@heroicons/react/outline';
-import { Types } from '@meshtastic/meshtasticjs';
-
-import { useAppSelector } from '../hooks/redux';
-import { Logo } from './Logo';
-
-export const Header = (): JSX.Element => {
- const deviceStatus = useAppSelector((state) => state.meshtastic.deviceStatus);
- const ready = useAppSelector((state) => state.meshtastic.ready);
- const lastMeshInterraction = useAppSelector(
- (state) => state.meshtastic.lastMeshInterraction,
- );
-
- return (
-
- );
-};
diff --git a/src/components/Logo.tsx b/src/components/Logo.tsx
deleted file mode 100644
index eb31f6a9..00000000
--- a/src/components/Logo.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import React from 'react';
-
-export const Logo = (): JSX.Element => {
- return (
-
- );
-};
diff --git a/src/components/MessageBox.tsx b/src/components/MessageBox.tsx
deleted file mode 100644
index 0905a32e..00000000
--- a/src/components/MessageBox.tsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import React from 'react';
-
-import { motion } from 'framer-motion';
-import { useTranslation } from 'react-i18next';
-
-import { MenuIcon, PaperAirplaneIcon } from '@heroicons/react/outline';
-
-import { connection } from '../connection';
-import { useAppDispatch, useAppSelector } from '../hooks/redux';
-import { toggleSidebar } from '../slices/appSlice';
-
-export const MessageBox = (): JSX.Element => {
- const ready = useAppSelector((state) => state.meshtastic.ready);
- const [currentMessage, setCurrentMessage] = React.useState('');
- const sendMessage = () => {
- if (ready) {
- connection.sendText(currentMessage, undefined, true);
- setCurrentMessage('');
- }
- };
- const { t } = useTranslation();
- const dispatch = useAppDispatch();
-
- return (
-
-
{
- dispatch(toggleSidebar());
- }}
- >
-
-
-
-
- );
-};
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
deleted file mode 100644
index a2af360f..00000000
--- a/src/components/Sidebar.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from 'react';
-
-import { AnimatePresence, motion } from 'framer-motion';
-
-import { useAppSelector } from '../hooks/redux';
-import { Channels } from './Sidebar/Channels/Index';
-import { Device } from './Sidebar/Device/Index';
-import { Nodes } from './Sidebar/Nodes/Index';
-import { UI } from './Sidebar/UI/Index';
-
-export const Sidebar = (): JSX.Element => {
- const sidebarOpen = useAppSelector((state) => state.app.sidebarOpen);
-
- return (
-
- {sidebarOpen && (
-
-
-
-
-
-
-
- )}
-
- );
-};
diff --git a/src/components/Sidebar/Channels/Channel.tsx b/src/components/Sidebar/Channels/Channel.tsx
deleted file mode 100644
index 3ee9366c..00000000
--- a/src/components/Sidebar/Channels/Channel.tsx
+++ /dev/null
@@ -1,114 +0,0 @@
-import React from 'react';
-
-import { Disclosure } from '@headlessui/react';
-import { ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/outline';
-import { Protobuf } from '@meshtastic/meshtasticjs';
-
-export interface ChannelProps {
- channel: Protobuf.Channel;
-}
-
-export const Channel = (props: ChannelProps): JSX.Element => {
- return (
-
- {({ open }) => (
- <>
-
-
- {open ? (
-
- ) : (
-
- )}
- {props.channel.index} -{' '}
- {Protobuf.Channel_Role[props.channel.role]}
-
-
-
-
-
-
Bandwidth:
-
- {props.channel.settings?.bandwidth}
-
-
-
-
-
Channel Number:
-
- {props.channel.settings?.channelNum}
-
-
-
-
-
Coding Rate:
-
- {props.channel.settings?.codingRate}
-
-
-
-
-
ID:
-
- {props.channel.settings?.id}
-
-
-
-
-
Modem Config:
-
- {props.channel.settings?.modemConfig
- ? Protobuf.ChannelSettings_ModemConfig[
- props.channel.settings.modemConfig
- ]
- : null}
-
-
-
-
-
Name:
-
- {props.channel.settings?.name}
-
-
-
-
-
PSK:
-
- {props.channel.settings?.psk.toLocaleString()}
-
-
-
-
-
Spread Factor:
-
- {props.channel.settings?.spreadFactor}
-
-
-
-
-
Tx Power:
-
- {props.channel.settings?.txPower}
-
-
-
-
-
Uplink:
-
- {props.channel.settings?.uplinkEnabled ? 'true' : 'false'}
-
-
-
-
Downlink:
-
- {props.channel.settings?.downlinkEnabled ? 'true' : 'false'}
-
-
-
-
- >
- )}
-
- );
-};
diff --git a/src/components/Sidebar/Channels/ChannelList.tsx b/src/components/Sidebar/Channels/ChannelList.tsx
deleted file mode 100644
index 5782336d..00000000
--- a/src/components/Sidebar/Channels/ChannelList.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react';
-
-import { Protobuf } from '@meshtastic/meshtasticjs';
-
-import { useAppSelector } from '../../../hooks/redux';
-import { Channel } from './Channel';
-
-export const ChannelList = (): JSX.Element => {
- const channels = useAppSelector((state) => state.meshtastic.channels);
-
- return (
- <>
- {channels.map((channel, index) => {
- if (channel.role !== Protobuf.Channel_Role.DISABLED)
- return ;
- })}
- >
- );
-};
diff --git a/src/components/Sidebar/Channels/Index.tsx b/src/components/Sidebar/Channels/Index.tsx
deleted file mode 100644
index 05521d9a..00000000
--- a/src/components/Sidebar/Channels/Index.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-
-import { useTranslation } from 'react-i18next';
-
-import { HashtagIcon } from '@heroicons/react/outline';
-
-import { Dropdown } from '../../basic/Dropdown';
-import { ChannelList } from './ChannelList';
-
-export const Channels = (): JSX.Element => {
- const { t } = useTranslation();
- return (
- }
- title={t('settings.channel')}
- content={}
- fallbackMessage={'Loading...'}
- />
- );
-};
diff --git a/src/components/Sidebar/Device/Index.tsx b/src/components/Sidebar/Device/Index.tsx
deleted file mode 100644
index 75927fee..00000000
--- a/src/components/Sidebar/Device/Index.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-
-import { useTranslation } from 'react-i18next';
-
-import { AdjustmentsIcon } from '@heroicons/react/outline';
-
-import { Dropdown } from '../../basic/Dropdown';
-import { Settings } from './Settings';
-
-export const Device = (): JSX.Element => {
- const { t } = useTranslation();
- return (
- }
- title={t('settings.device')}
- content={}
- fallbackMessage={'Loading...'}
- />
- );
-};
diff --git a/src/components/Sidebar/Device/Settings.tsx b/src/components/Sidebar/Device/Settings.tsx
deleted file mode 100644
index 422ba6c0..00000000
--- a/src/components/Sidebar/Device/Settings.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-import React from 'react';
-
-import { useForm } from 'react-hook-form';
-import { useTranslation } from 'react-i18next';
-
-import { SaveIcon } from '@heroicons/react/outline';
-import { Protobuf } from '@meshtastic/meshtasticjs';
-
-import { connection } from '../../../connection';
-import { useAppSelector } from '../../../hooks/redux';
-
-export const Settings = (): JSX.Element => {
- const { t } = useTranslation();
- const preferences = useAppSelector((state) => state.meshtastic.preferences);
-
- const { register, handleSubmit } =
- useForm({
- defaultValues: preferences,
- });
-
- const onSubmit = handleSubmit((data) => connection.setPreferences(data));
- return (
-
- );
-};
diff --git a/src/components/Sidebar/Nodes/Index.tsx b/src/components/Sidebar/Nodes/Index.tsx
deleted file mode 100644
index 82dd606a..00000000
--- a/src/components/Sidebar/Nodes/Index.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-
-import { useTranslation } from 'react-i18next';
-
-import { UsersIcon } from '@heroicons/react/outline';
-
-import { Dropdown } from '../../basic/Dropdown';
-import { NodeList } from './NodeList';
-
-export const Nodes = (): JSX.Element => {
- const { t } = useTranslation();
- return (
- }
- title={t('strings.nodes')}
- content={}
- fallbackMessage={t('placeholder.no_messages')}
- />
- );
-};
diff --git a/src/components/Sidebar/Nodes/Node.tsx b/src/components/Sidebar/Nodes/Node.tsx
deleted file mode 100644
index d740ecb2..00000000
--- a/src/components/Sidebar/Nodes/Node.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import React from 'react';
-
-import Avatar from 'boring-avatars';
-
-import { Disclosure } from '@headlessui/react';
-import {
- ChevronDownIcon,
- ChevronRightIcon,
- ClockIcon,
- FlagIcon,
- GlobeIcon,
- LightningBoltIcon,
-} from '@heroicons/react/outline';
-import type { Protobuf } from '@meshtastic/meshtasticjs';
-
-import { useAppSelector } from '../../../hooks/redux';
-
-export interface NodeProps {
- node: Protobuf.NodeInfo;
-}
-
-export const Node = (props: NodeProps): JSX.Element => {
- const myNodeInfo = useAppSelector((state) => state.meshtastic.myNodeInfo);
-
- return (
-
- {({ open }) => (
- <>
-
-
- {open ? (
-
- ) : (
-
- )}
-
- {props.node.num === myNodeInfo.myNodeNum ? (
-
- ) : null}
-
-
- {props.node.user?.longName}
-
-
-
-
-
{props.node.snr}
-
- {`Last heard: ${
- props.node?.lastHeard
- ? new Date(props.node.lastHeard).toLocaleString()
- : 'Unknown'
- }`}{' '}
- {}
-
-
-
-
- {props.node.position?.latitudeI &&
- props.node.position?.longitudeI
- ? `${props.node.position.latitudeI / 1e7},
- ${props.node.position.longitudeI / 1e7}`
- : 'Unknown'}
- , El:
- {props.node.position?.altitude}
-
-
-
-
-
-
{props.node.position?.time}
-
-
-
-
{props.node.position?.batteryLevel}
-
-
-
- >
- )}
-
- );
-};
diff --git a/src/components/Sidebar/Nodes/NodeList.tsx b/src/components/Sidebar/Nodes/NodeList.tsx
deleted file mode 100644
index 30f72002..00000000
--- a/src/components/Sidebar/Nodes/NodeList.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react';
-
-import { useAppSelector } from '../../../hooks/redux';
-import { Node } from './Node';
-
-export const NodeList = (): JSX.Element => {
- const nodes = useAppSelector((state) => state.meshtastic.nodes);
-
- return (
- <>
- {nodes.map((node, index) => (
-
- ))}
- >
- );
-};
diff --git a/src/components/Sidebar/UI/Index.tsx b/src/components/Sidebar/UI/Index.tsx
deleted file mode 100644
index a9042121..00000000
--- a/src/components/Sidebar/UI/Index.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-
-import { useTranslation } from 'react-i18next';
-
-import { CogIcon } from '@heroicons/react/outline';
-
-import { Dropdown } from '../../basic/Dropdown';
-import { Translations } from './Translations';
-
-export const UI = (): JSX.Element => {
- const { t } = useTranslation();
-
- return (
- }
- title={t('settings.ui')}
- content={}
- fallbackMessage={'Loading...'}
- />
- );
-};
diff --git a/src/components/Sidebar/UI/Translations.tsx b/src/components/Sidebar/UI/Translations.tsx
deleted file mode 100644
index 441e0791..00000000
--- a/src/components/Sidebar/UI/Translations.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import React from 'react';
-
-import { Br, Jp, Us } from 'react-flags-select';
-import { useTranslation } from 'react-i18next';
-
-import { Disclosure } from '@headlessui/react';
-import { ChevronDownIcon, ChevronRightIcon } from '@heroicons/react/outline';
-
-export const Translations = (): JSX.Element => {
- const { t } = useTranslation();
-
- return (
-
- {({ open }) => (
- <>
-
-
- {open ? (
-
- ) : (
-
- )}
- {t('strings.language')}
- {/*
- {language === LanguageEnum.ENGLISH ? (
-
- ) : language === LanguageEnum.JAPANESE ? (
-
- ) : language === LanguageEnum.PORTUGUESE ? (
-
- ) : null}
-
*/}
-
-
-
- {
- // setLanguage(LanguageEnum.ENGLISH);
- }}
- >
- English
-
- {
- // setLanguage(LanguageEnum.PORTUGUESE);
- }}
- >
- Português
-
- {
- // setLanguage(LanguageEnum.JAPANESE);
- }}
- >
- 日本語
-
-
- >
- )}
-
- );
-};
diff --git a/src/components/basic/Dropdown.tsx b/src/components/basic/Dropdown.tsx
deleted file mode 100644
index 9c294841..00000000
--- a/src/components/basic/Dropdown.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import React from 'react';
-
-import { AnimatePresence, motion } from 'framer-motion';
-
-import { Disclosure } from '@headlessui/react';
-import { ChevronDownIcon } from '@heroicons/react/outline';
-
-interface DropdownProps {
- icon: JSX.Element;
- title: string;
- content: JSX.Element;
- fallbackMessage: string;
-}
-
-export const Dropdown = (props: DropdownProps): JSX.Element => {
- return (
-
- {({ open }) => (
- <>
-
-
-
-
-
- {props.icon}
- {props.title}
-
-
-
-
- {open && (
-
-
-
- {props.fallbackMessage}
-
-
- }
- >
- {props.content}
-
-
- )}
-
- >
- )}
-
- );
-};
diff --git a/src/components/basic/ToggleSwitch.tsx b/src/components/basic/ToggleSwitch.tsx
deleted file mode 100644
index c649842c..00000000
--- a/src/components/basic/ToggleSwitch.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-
-import { Switch } from '@headlessui/react';
-
-interface ToggleSwitchProps {
- active: boolean;
-}
-
-export const ToggleSwitch = (props: ToggleSwitchProps): JSX.Element => {
- const [active, setActive] = React.useState(false);
-
- React.useEffect(() => {
- setActive(props.active);
- }, []);
-
- return (
-
-
-
- );
-};
diff --git a/src/components/chat/Message.tsx b/src/components/chat/Message.tsx
new file mode 100644
index 00000000..9c15b1cb
--- /dev/null
+++ b/src/components/chat/Message.tsx
@@ -0,0 +1,56 @@
+import React from 'react';
+
+import Avatar from 'boring-avatars';
+
+export interface MessageProps {
+ message: string;
+ ack: boolean;
+ isSender: boolean;
+ rxTime: Date;
+ senderName: string;
+}
+
+export const Message = ({
+ message,
+ ack,
+ isSender,
+ rxTime,
+ senderName,
+}: MessageProps): JSX.Element => {
+ return (
+
+
+
+
+ {rxTime.toLocaleTimeString(undefined, {
+ hour: '2-digit',
+ minute: '2-digit',
+ })}
+
+
+ );
+};
diff --git a/src/components/chat/MessageBar.tsx b/src/components/chat/MessageBar.tsx
new file mode 100644
index 00000000..307db01a
--- /dev/null
+++ b/src/components/chat/MessageBar.tsx
@@ -0,0 +1,58 @@
+import React from 'react';
+
+import { useTranslation } from 'react-i18next';
+
+import { useAppSelector } from '@app/hooks/redux';
+import { Button } from '@components/generic/Button';
+import { Input } from '@components/generic/Input';
+import { connection } from '@core/connection';
+import {
+ EmojiHappyIcon,
+ PaperAirplaneIcon,
+ PaperClipIcon,
+} from '@heroicons/react/outline';
+
+export const MessageBar = (): JSX.Element => {
+ const ready = useAppSelector((state) => state.meshtastic.ready);
+ const [currentMessage, setCurrentMessage] = React.useState('');
+ const sendMessage = (): void => {
+ if (ready) {
+ void connection.sendText(currentMessage, undefined, true);
+ setCurrentMessage('');
+ }
+ };
+ const { t } = useTranslation();
+ return (
+
+
+
+ } circle />
+ } circle />
+
+
+
+
+ );
+};
diff --git a/src/components/generic/Blur.tsx b/src/components/generic/Blur.tsx
new file mode 100644
index 00000000..17937709
--- /dev/null
+++ b/src/components/generic/Blur.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+
+type DefaultDivProps = JSX.IntrinsicElements['div'];
+
+interface LocalBlurProps {
+ disableOnMd?: boolean;
+}
+
+export type BlurProps = LocalBlurProps & DefaultDivProps;
+
+export const Blur = ({
+ disableOnMd,
+ className,
+ onClick,
+ ...props
+}: BlurProps): JSX.Element => {
+ return (
+
+ );
+};
diff --git a/src/components/generic/Button.tsx b/src/components/generic/Button.tsx
new file mode 100644
index 00000000..5c7f5000
--- /dev/null
+++ b/src/components/generic/Button.tsx
@@ -0,0 +1,50 @@
+import React from 'react';
+
+type DefaultButtonProps = JSX.IntrinsicElements['button'];
+
+interface LocalButtonProps {
+ icon?: JSX.Element;
+ circle?: boolean;
+ active?: boolean;
+ border?: boolean;
+}
+
+export type ButtonProps = LocalButtonProps & DefaultButtonProps;
+
+export const Button = ({
+ icon,
+ circle,
+ className,
+ active,
+ border,
+ disabled,
+ children,
+ ...props
+}: ButtonProps): JSX.Element => {
+ return (
+
+ );
+};
diff --git a/src/components/generic/Drawer.tsx b/src/components/generic/Drawer.tsx
new file mode 100644
index 00000000..0aa6e8df
--- /dev/null
+++ b/src/components/generic/Drawer.tsx
@@ -0,0 +1,35 @@
+import React from 'react';
+
+import { Blur } from '@components/generic/Blur';
+
+type DefaultAsideProps = JSX.IntrinsicElements['aside'];
+
+interface LocalDrawerProps {
+ open: boolean;
+ permenant?: boolean;
+ onClose: () => void;
+}
+export type DrawerProps = LocalDrawerProps & DefaultAsideProps;
+
+export const Drawer = ({
+ open,
+ permenant,
+ onClose,
+ children,
+ ...props
+}: DrawerProps): JSX.Element => {
+ return (
+ <>
+ {open && }
+
+
+ >
+ );
+};
diff --git a/src/components/generic/Input.tsx b/src/components/generic/Input.tsx
new file mode 100644
index 00000000..5f404341
--- /dev/null
+++ b/src/components/generic/Input.tsx
@@ -0,0 +1,50 @@
+import React from 'react';
+
+type DefaultInputProps = JSX.IntrinsicElements['input'];
+
+interface LocalInputProps {
+ icon?: JSX.Element;
+ label?: string;
+ valid?: boolean;
+ validationMessage?: string;
+}
+
+export type InputProps = LocalInputProps & DefaultInputProps;
+
+export const Input = React.forwardRef(
+ function Input(
+ { icon, label, valid, validationMessage, id, ...props }: InputProps,
+ ref,
+ ) {
+ return (
+
+
+
+ {icon && (
+
+ {React.cloneElement(icon, {
+ className: 'w-5 h-5 text-gray-500 dark:text-gray-600',
+ })}
+
+ )}
+
+
+ {!valid && (
+
{validationMessage}
+ )}
+
+ );
+ },
+);
diff --git a/src/components/generic/Select.tsx b/src/components/generic/Select.tsx
new file mode 100644
index 00000000..f2da5be8
--- /dev/null
+++ b/src/components/generic/Select.tsx
@@ -0,0 +1,82 @@
+import React from 'react';
+
+import { Listbox } from '@headlessui/react';
+import { CheckIcon, SelectorIcon } from '@heroicons/react/solid';
+
+export interface SelectProps {
+ label: string;
+ options: {
+ name: string;
+ value: string;
+ icon: JSX.Element;
+ }[];
+ id: string;
+ value: string;
+ onChange: (value: string) => void;
+}
+
+export const Select = ({
+ label,
+ options,
+ id,
+ value,
+ onChange,
+}: SelectProps): JSX.Element => {
+ return (
+
+
+
+
+
+
+ {value}
+
+
+
+
+
+
+ {options.map((option) => (
+
+ `cursor-default select-none relative py-2 pl-10 pr-4 first:rounded-t-md last:rounded-b-md dark:text-white ${
+ active ? 'bg-gray-200 dark:bg-primaryDark' : 'text-gray-900'
+ }`
+ }
+ value={option.value}
+ >
+ {({ selected, active }): JSX.Element => (
+ <>
+
+ {option.name}
+
+ {selected ? (
+
+
+
+ ) : null}
+ >
+ )}
+
+ ))}
+
+
+
+
+ );
+};
diff --git a/src/components/generic/SidebarItem.tsx b/src/components/generic/SidebarItem.tsx
new file mode 100644
index 00000000..8d97ec90
--- /dev/null
+++ b/src/components/generic/SidebarItem.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+
+type DefaultDivProps = JSX.IntrinsicElements['div'];
+
+interface LocalSidebarItemProps {
+ title: string;
+ description: string;
+ selected: boolean;
+ icon: JSX.Element;
+}
+
+export type SidebarItemProps = LocalSidebarItemProps & DefaultDivProps;
+
+export const SidebarItem = ({
+ title,
+ description,
+ selected,
+ icon,
+}: SidebarItemProps): JSX.Element => {
+ return (
+
+
{icon}
+
+
{title}
+
{description}
+
+
+ );
+};
diff --git a/src/components/menu/Logo.tsx b/src/components/menu/Logo.tsx
new file mode 100644
index 00000000..c9233690
--- /dev/null
+++ b/src/components/menu/Logo.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+
+export const Logo = (): JSX.Element => {
+ return (
+ <>
+
+
+ >
+ );
+};
diff --git a/src/components/menu/MobileNav.tsx b/src/components/menu/MobileNav.tsx
new file mode 100644
index 00000000..b0fc1301
--- /dev/null
+++ b/src/components/menu/MobileNav.tsx
@@ -0,0 +1,34 @@
+import React from 'react';
+
+import { useAppDispatch, useAppSelector } from '@app/hooks/redux';
+import { Drawer } from '@components/generic/Drawer';
+import { closeMobileNav } from '@core/slices/appSlice';
+
+import { Logo } from './Logo';
+import { Navigation } from './Navigation';
+
+export const MobileNav = (): JSX.Element => {
+ const dispatch = useAppDispatch();
+
+ const mobileNavOpen = useAppSelector((state) => state.app.mobileNavOpen);
+
+ return (
+ {
+ dispatch(closeMobileNav());
+ }}
+ >
+
+
+
+
+
{
+ dispatch(closeMobileNav());
+ }}
+ />
+
+
+ );
+};
diff --git a/src/components/menu/Navigation.tsx b/src/components/menu/Navigation.tsx
new file mode 100644
index 00000000..c0cdec14
--- /dev/null
+++ b/src/components/menu/Navigation.tsx
@@ -0,0 +1,69 @@
+import React from 'react';
+
+import { Button } from '@components/generic/Button';
+import { routes, useRoute } from '@core/router';
+import {
+ AnnotationIcon,
+ CogIcon,
+ InformationCircleIcon,
+ ViewGridIcon,
+} from '@heroicons/react/outline';
+
+type DefaultDivProps = JSX.IntrinsicElements['div'];
+
+export type NavigationProps = DefaultDivProps;
+
+export const Navigation = ({
+ onClick,
+ className,
+ ...props
+}: NavigationProps): JSX.Element => {
+ const route = useRoute();
+ return (
+
+
+ }
+ active={route.name === 'messages'}
+ className="w-full md:w-auto"
+ {...routes.messages().link}
+ >
+ Messages
+
+
+
+ }
+ className="w-full md:w-auto"
+ active={route.name === 'nodes'}
+ {...routes.nodes().link}
+ >
+ Nodes
+
+
+
+ }
+ className="w-full md:w-auto"
+ active={route.name === 'settings'}
+ {...routes.settings().link}
+ >
+ Settings
+
+
+
+ }
+ className="w-full md:w-auto"
+ active={route.name === 'about'}
+ {...routes.about().link}
+ >
+ About
+
+
+
+ );
+};
diff --git a/src/components/menu/buttons/DeviceStatusDropdown.tsx b/src/components/menu/buttons/DeviceStatusDropdown.tsx
new file mode 100644
index 00000000..061f67f4
--- /dev/null
+++ b/src/components/menu/buttons/DeviceStatusDropdown.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+
+import { useAppSelector } from '@app/hooks/redux';
+import { Button } from '@components/generic/Button';
+import { SwitchVerticalIcon } from '@heroicons/react/outline';
+
+export const DeviceStatusDropdown = (): JSX.Element => {
+ const ready = useAppSelector((state) => state.meshtastic.ready);
+
+ return (
+
+ }
+ circle
+ />
+ );
+};
diff --git a/src/components/menu/buttons/MobileNavToggle.tsx b/src/components/menu/buttons/MobileNavToggle.tsx
new file mode 100644
index 00000000..59fde9f5
--- /dev/null
+++ b/src/components/menu/buttons/MobileNavToggle.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+
+import { Button } from '@components/generic/Button';
+import { openMobileNav } from '@core/slices/appSlice';
+import { MenuIcon } from '@heroicons/react/outline';
+
+import { useAppDispatch } from '../../../hooks/redux';
+
+export const MobileNavToggle = (): JSX.Element => {
+ const dispatch = useAppDispatch();
+
+ return (
+
+ }
+ onClick={(): void => {
+ dispatch(openMobileNav());
+ }}
+ circle
+ />
+
+ );
+};
diff --git a/src/components/menu/buttons/ThemeToggle.tsx b/src/components/menu/buttons/ThemeToggle.tsx
new file mode 100644
index 00000000..ce75c4e3
--- /dev/null
+++ b/src/components/menu/buttons/ThemeToggle.tsx
@@ -0,0 +1,27 @@
+import React from 'react';
+
+import { useAppDispatch, useAppSelector } from '@app/hooks/redux';
+import { Button } from '@components/generic/Button';
+import { setDarkModeEnabled } from '@core/slices/appSlice';
+import { MoonIcon, SunIcon } from '@heroicons/react/outline';
+
+export const ThemeToggle = (): JSX.Element => {
+ const dispatch = useAppDispatch();
+ const darkMode = useAppSelector((state) => state.app.darkMode);
+
+ return (
+
+ ) : (
+
+ )
+ }
+ circle
+ onClick={(): void => {
+ dispatch(setDarkModeEnabled(!darkMode));
+ }}
+ />
+ );
+};
diff --git a/src/components/nodes/Node.tsx b/src/components/nodes/Node.tsx
new file mode 100644
index 00000000..4180e53f
--- /dev/null
+++ b/src/components/nodes/Node.tsx
@@ -0,0 +1,31 @@
+import React from 'react';
+
+import Avatar from 'boring-avatars';
+
+import type { Protobuf } from '@meshtastic/meshtasticjs';
+
+type DefaultDivProps = JSX.IntrinsicElements['div'];
+
+export interface NodeProps {
+ node: Protobuf.NodeInfo;
+}
+
+export const Node = ({
+ node,
+ ...props
+}: NodeProps & DefaultDivProps): JSX.Element => {
+ return (
+
+
+
{node.user?.longName}
+
+ );
+};
diff --git a/src/components/templates/PrimaryTemplate.tsx b/src/components/templates/PrimaryTemplate.tsx
new file mode 100644
index 00000000..1179a11e
--- /dev/null
+++ b/src/components/templates/PrimaryTemplate.tsx
@@ -0,0 +1,45 @@
+import React from 'react';
+
+export interface PrimaryTemplateProps {
+ children: React.ReactNode;
+ title: string;
+ tagline: string;
+ button?: JSX.Element;
+ footer?: JSX.Element;
+}
+
+export const PrimaryTemplate = ({
+ children,
+ title,
+ tagline,
+ button,
+ footer,
+}: PrimaryTemplateProps): JSX.Element => {
+ return (
+
+
+ {button &&
{button}
}
+
+
+
{children}
+
+ {footer && (
+
+ {button &&
{button}
}
+
{footer}
+
+ )}
+
+ );
+};
diff --git a/src/connection.ts b/src/core/connection.ts
similarity index 100%
rename from src/connection.ts
rename to src/core/connection.ts
diff --git a/src/core/router.ts b/src/core/router.ts
new file mode 100644
index 00000000..6ac63051
--- /dev/null
+++ b/src/core/router.ts
@@ -0,0 +1,8 @@
+import { createRouter, defineRoute } from 'type-route';
+
+export const { RouteProvider, useRoute, routes } = createRouter({
+ messages: defineRoute('/'),
+ nodes: defineRoute('/nodes'),
+ settings: defineRoute('/settings'),
+ about: defineRoute('/about'),
+});
diff --git a/src/core/slices/appSlice.ts b/src/core/slices/appSlice.ts
new file mode 100644
index 00000000..6016aa5f
--- /dev/null
+++ b/src/core/slices/appSlice.ts
@@ -0,0 +1,45 @@
+import type { PayloadAction } from '@reduxjs/toolkit';
+import { createSlice } from '@reduxjs/toolkit';
+
+export type currentPageName = 'messages' | 'settings';
+
+interface AppState {
+ mobileNavOpen: boolean;
+ darkMode: boolean;
+ currentPage: currentPageName;
+}
+
+const initialState: AppState = {
+ mobileNavOpen: false,
+ darkMode: localStorage.getItem('darkMode') === 'true' ?? false,
+ currentPage: 'messages',
+};
+
+export const appSlice = createSlice({
+ name: 'app',
+ initialState,
+ reducers: {
+ openMobileNav(state) {
+ state.mobileNavOpen = true;
+ },
+ closeMobileNav(state) {
+ state.mobileNavOpen = false;
+ },
+ setDarkModeEnabled(state, action: PayloadAction) {
+ localStorage.setItem('darkMode', String(action.payload));
+ state.darkMode = action.payload;
+ },
+ setCurrentPage(state, action: PayloadAction) {
+ state.currentPage = action.payload;
+ },
+ },
+});
+
+export const {
+ openMobileNav,
+ closeMobileNav,
+ setDarkModeEnabled,
+ setCurrentPage,
+} = appSlice.actions;
+
+export default appSlice.reducer;
diff --git a/src/slices/meshtasticSlice.ts b/src/core/slices/meshtasticSlice.ts
similarity index 66%
rename from src/slices/meshtasticSlice.ts
rename to src/core/slices/meshtasticSlice.ts
index 3eba4d0c..fcb103f6 100644
--- a/src/slices/meshtasticSlice.ts
+++ b/src/core/slices/meshtasticSlice.ts
@@ -2,40 +2,42 @@ import { Protobuf, Types } from '@meshtastic/meshtasticjs';
import type { PayloadAction } from '@reduxjs/toolkit';
import { createSlice } from '@reduxjs/toolkit';
+import { connection } from '../connection';
+
+export interface MessageWithAck {
+ message: Types.TextPacket;
+ ack: boolean;
+ isSender: boolean;
+ received: Date;
+}
+
interface AppState {
deviceStatus: Types.DeviceStatusEnum;
lastMeshInterraction: number;
ready: boolean;
- fromRaioPackets: Protobuf.FromRadio[];
- meshPackets: Protobuf.MeshPacket[];
myNodeInfo: Protobuf.MyNodeInfo;
- radioConfig: Protobuf.RadioConfig[];
- routingPackets: Types.RoutingPacket[];
positionPackets: Types.PositionPacket[];
- textPackets: Types.TextPacket[];
- logRecords: Protobuf.LogRecord[];
- //
nodes: Protobuf.NodeInfo[];
channels: Protobuf.Channel[];
preferences: Protobuf.RadioConfig_UserPreferences;
+ messages: MessageWithAck[];
+ hostOverrideEnabled: boolean;
+ hostOverride: string;
}
const initialState: AppState = {
deviceStatus: Types.DeviceStatusEnum.DEVICE_DISCONNECTED,
lastMeshInterraction: 0,
ready: false,
- fromRaioPackets: [],
- meshPackets: [],
myNodeInfo: Protobuf.MyNodeInfo.create(),
- radioConfig: [],
- routingPackets: [],
positionPackets: [],
- textPackets: [],
- logRecords: [],
- //
nodes: [],
channels: [],
preferences: Protobuf.RadioConfig_UserPreferences.create(),
+ messages: [],
+ hostOverrideEnabled:
+ localStorage.getItem('hostOverrideEnabled') === 'true' ?? false,
+ hostOverride: localStorage.getItem('hostOverride') ?? '',
};
export const meshtasticSlice = createSlice({
@@ -51,31 +53,12 @@ export const meshtasticSlice = createSlice({
setReady: (state, action: PayloadAction) => {
state.ready = action.payload;
},
- addFromRadioPacket: (state, action: PayloadAction) => {
- state.fromRaioPackets.push(action.payload);
- },
- addMeshPacket: (state, action: PayloadAction) => {
- state.meshPackets.push(action.payload);
- },
setMyNodeInfo: (state, action: PayloadAction) => {
state.myNodeInfo = action.payload;
},
- addRadioConfig: (state, action: PayloadAction) => {
- state.radioConfig.push(action.payload);
- },
- addRoutingPacket: (state, action: PayloadAction) => {
- state.routingPackets.push(action.payload);
- },
addPositionPacket: (state, action: PayloadAction) => {
state.positionPackets.push(action.payload);
},
- addTextPacket: (state, action: PayloadAction) => {
- state.textPackets.push(action.payload);
- },
- addLogRecord: (state, action: PayloadAction) => {
- state.logRecords.push(action.payload);
- },
- //
addNode: (state, action: PayloadAction) => {
if (
state.nodes.findIndex((node) => node.num === action.payload.num) !== -1
@@ -109,6 +92,30 @@ export const meshtasticSlice = createSlice({
) => {
state.preferences = action.payload;
},
+ addMessage: (state, action: PayloadAction) => {
+ state.messages.push(action.payload);
+ },
+ ackMessage: (state, messageId: PayloadAction) => {
+ state.messages.map((message) => {
+ if (message.message.packet.id === messageId.payload) {
+ message.ack = true;
+ }
+ });
+ },
+ setHostOverrideEnabled: (state, action: PayloadAction) => {
+ state.hostOverrideEnabled = action.payload;
+ localStorage.setItem('hostOverrideEnabled', String(action.payload));
+ if (state.hostOverrideEnabled !== action.payload) {
+ connection.disconnect();
+ }
+ },
+ setHostOverride: (state, action: PayloadAction) => {
+ state.hostOverride = action.payload;
+ localStorage.setItem('hostOverride', action.payload);
+ if (state.hostOverride !== action.payload) {
+ connection.disconnect();
+ }
+ },
},
});
@@ -116,17 +123,15 @@ export const {
setDeviceStatus,
setLastMeshInterraction,
setReady,
- addFromRadioPacket,
- addMeshPacket,
setMyNodeInfo,
- addRadioConfig,
- addRoutingPacket,
addPositionPacket,
- addTextPacket,
- addLogRecord,
addNode,
addChannel,
setPreferences,
+ addMessage,
+ ackMessage,
+ setHostOverrideEnabled,
+ setHostOverride,
} = meshtasticSlice.actions;
export default meshtasticSlice.reducer;
diff --git a/src/store.ts b/src/core/store.ts
similarity index 100%
rename from src/store.ts
rename to src/core/store.ts
diff --git a/src/translation.ts b/src/core/translation.ts
similarity index 53%
rename from src/translation.ts
rename to src/core/translation.ts
index 6a44d2db..10f0dc7f 100644
--- a/src/translation.ts
+++ b/src/core/translation.ts
@@ -2,17 +2,19 @@ import i18n from 'i18next';
import detector from 'i18next-browser-languagedetector';
import { initReactI18next } from 'react-i18next';
-import en from './translations/en.json';
+import { en } from '../translations/en';
+import { jp } from '../translations/jp';
+import { pt } from '../translations/pt';
-i18n
+void i18n
.use(detector)
.use(initReactI18next)
.init({
fallbackLng: 'en',
resources: {
- en: {
- translation: en,
- },
+ en: { translation: en },
+ jp: { translation: jp },
+ pt: { translation: pt },
},
});
diff --git a/src/hooks/breakpoint.ts b/src/hooks/breakpoint.ts
new file mode 100644
index 00000000..eccfc39f
--- /dev/null
+++ b/src/hooks/breakpoint.ts
@@ -0,0 +1,21 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
+import useBreakpointHook from 'use-breakpoint';
+
+const BREAKPOINTS = {
+ sm: 640,
+ // => @media (min-width: 640px) { ... }
+
+ md: 768,
+ // => @media (min-width: 768px) { ... }
+
+ lg: 1024,
+ // => @media (min-width: 1024px) { ... }
+
+ xl: 1280,
+ // => @media (min-width: 1280px) { ... }
+
+ '2xl': 1536,
+ // => @media (min-width: 1536px) { ... }
+};
+export const useBreakpoint = () => useBreakpointHook(BREAKPOINTS);
diff --git a/src/hooks/redux.ts b/src/hooks/redux.ts
index 6f02a25a..404c34cf 100644
--- a/src/hooks/redux.ts
+++ b/src/hooks/redux.ts
@@ -1,7 +1,9 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import type { TypedUseSelectorHook } from 'react-redux';
import { useDispatch, useSelector } from 'react-redux';
-import type { AppDispatch, RootState } from '../store';
+import type { AppDispatch, RootState } from '@core/store';
export const useAppDispatch = () => useDispatch();
export const useAppSelector: TypedUseSelectorHook = useSelector;
diff --git a/src/index.tsx b/src/index.tsx
index 2b9e1b2b..83435f8f 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,19 +1,23 @@
-import './index.css';
-import './translation';
+import '@app/index.css';
+import '@core/translation';
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
+import { RouteProvider } from '@core/router';
+import { store } from '@core/store';
+
import App from './App';
-import { store } from './store';
ReactDOM.render(
-
-
-
+
+
+
+
+
,
document.getElementById('root'),
);
diff --git a/src/pages/About.tsx b/src/pages/About.tsx
new file mode 100644
index 00000000..be8b2f82
--- /dev/null
+++ b/src/pages/About.tsx
@@ -0,0 +1,11 @@
+import React from 'react';
+
+import { PrimaryTemplate } from '@components/templates/PrimaryTemplate';
+
+export const About = (): JSX.Element => {
+ return (
+
+ Content
+
+ );
+};
diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx
new file mode 100644
index 00000000..c038dd0a
--- /dev/null
+++ b/src/pages/Messages.tsx
@@ -0,0 +1,55 @@
+import React from 'react';
+
+import { Message } from '@components/chat/Message';
+import { MessageBar } from '@components/chat/MessageBar';
+import { Button } from '@components/generic/Button';
+import { HashtagIcon, MapIcon, UsersIcon } from '@heroicons/react/outline';
+import { Protobuf } from '@meshtastic/meshtasticjs';
+
+import { useAppSelector } from '../hooks/redux';
+
+export const Messages = (): JSX.Element => {
+ const messages = useAppSelector((state) => state.meshtastic.messages);
+ const nodes = useAppSelector((state) => state.meshtastic.nodes);
+ const channels = useAppSelector((state) => state.meshtastic.channels);
+
+ const channelName = (): string => {
+ const name =
+ channels.find((channel) => channel.role === Protobuf.Channel_Role.PRIMARY)
+ ?.settings?.name ?? 'Unknown';
+
+ return name.length ? name : 'Default';
+ };
+
+ return (
+
+
+
+
+ {channelName()}
+
+
+ } circle />
+
+ } circle />
+
+
+
+ {messages.map((message, index) => (
+ node.num === message.message.packet.from)
+ ?.user?.longName ?? 'UNK'
+ }
+ />
+ ))}
+
+
+
+ );
+};
diff --git a/src/pages/Nodes/Index.tsx b/src/pages/Nodes/Index.tsx
new file mode 100644
index 00000000..6dbea95d
--- /dev/null
+++ b/src/pages/Nodes/Index.tsx
@@ -0,0 +1,92 @@
+import React from 'react';
+
+import Avatar from 'boring-avatars';
+
+import { useBreakpoint } from '@app/hooks/breakpoint';
+import { useAppSelector } from '@app/hooks/redux';
+import { Button } from '@components/generic/Button';
+import { Drawer } from '@components/generic/Drawer';
+import { SidebarItem } from '@components/generic/SidebarItem';
+import { Tab } from '@headlessui/react';
+import { XCircleIcon } from '@heroicons/react/outline';
+
+import { Node } from './Node';
+
+export const Nodes = (): JSX.Element => {
+ const [navOpen, setNavOpen] = React.useState(false);
+
+ const { breakpoint } = useBreakpoint();
+
+ const nodes = useAppSelector((state) => state.meshtastic.nodes);
+
+ return (
+
+
+
{
+ setNavOpen(!navOpen);
+ }}
+ >
+
+
+
+ Nodes
+
+
+ }
+ circle
+ onClick={(): void => {
+ setNavOpen(false);
+ }}
+ />
+
+
+
+ {nodes.map((node) => (
+ {
+ setNavOpen(false);
+ }}
+ key={node.num}
+ >
+ {({ selected }): JSX.Element => (
+
+ }
+ />
+ )}
+
+ ))}
+
+
+
+
+ {nodes.map((node) => (
+
+
+
+ ))}
+
+
+
+
+ );
+};
diff --git a/src/pages/Nodes/Node.tsx b/src/pages/Nodes/Node.tsx
new file mode 100644
index 00000000..0e7371c1
--- /dev/null
+++ b/src/pages/Nodes/Node.tsx
@@ -0,0 +1,32 @@
+import React from 'react';
+
+import { Button } from '@components/generic/Button';
+import { PrimaryTemplate } from '@components/templates/PrimaryTemplate';
+import { MenuIcon } from '@heroicons/react/outline';
+import type { Protobuf } from '@meshtastic/meshtasticjs';
+
+export interface NodeProps {
+ navOpen: boolean;
+ setNavOpen: React.Dispatch>;
+ node: Protobuf.NodeInfo;
+}
+
+export const Node = ({ navOpen, setNavOpen, node }: NodeProps): JSX.Element => {
+ return (
+ }
+ onClick={(): void => {
+ setNavOpen(!navOpen);
+ }}
+ circle
+ />
+ }
+ >
+ Content
+
+ );
+};
diff --git a/src/pages/settings/Device.tsx b/src/pages/settings/Device.tsx
new file mode 100644
index 00000000..d7f261a5
--- /dev/null
+++ b/src/pages/settings/Device.tsx
@@ -0,0 +1,69 @@
+import React from 'react';
+
+import { useForm } from 'react-hook-form';
+import { useTranslation } from 'react-i18next';
+
+import { connection } from '@app/core/connection';
+import { useAppSelector } from '@app/hooks/redux';
+import { Button } from '@components/generic/Button';
+import { Input } from '@components/generic/Input';
+import { PrimaryTemplate } from '@components/templates/PrimaryTemplate';
+import { MenuIcon, SaveIcon } from '@heroicons/react/outline';
+import type { Protobuf } from '@meshtastic/meshtasticjs';
+
+export interface DeviceProps {
+ navOpen: boolean;
+ setNavOpen: React.Dispatch>;
+}
+
+export const Device = ({ navOpen, setNavOpen }: DeviceProps): JSX.Element => {
+ const { t } = useTranslation();
+ const radioConfig = useAppSelector((state) => state.meshtastic.preferences);
+
+ const { register, handleSubmit, formState } =
+ useForm({
+ defaultValues: radioConfig,
+ });
+
+ const onSubmit = handleSubmit((data) => {
+ void connection.setPreferences(data);
+ });
+
+ return (
+ }
+ onClick={(): void => {
+ setNavOpen(!navOpen);
+ }}
+ circle
+ />
+ }
+ footer={
+ }
+ disabled={!formState.isDirty}
+ active
+ border
+ >
+ {t('strings.save_changes')}
+
+ }
+ >
+
+
+
+
+ );
+};
diff --git a/src/pages/settings/Index.tsx b/src/pages/settings/Index.tsx
new file mode 100644
index 00000000..3c5fdc01
--- /dev/null
+++ b/src/pages/settings/Index.tsx
@@ -0,0 +1,101 @@
+import React from 'react';
+
+import { useBreakpoint } from '@app/hooks/breakpoint';
+import { Button } from '@components/generic/Button';
+import { Drawer } from '@components/generic/Drawer';
+import { SidebarItem } from '@components/generic/SidebarItem';
+import { Tab } from '@headlessui/react';
+import {
+ CollectionIcon,
+ DeviceMobileIcon,
+ WifiIcon,
+ XCircleIcon,
+} from '@heroicons/react/outline';
+
+import { Device } from './Device';
+import { Interface } from './Interface';
+import { Radio } from './Radio';
+
+export const Settings = (): JSX.Element => {
+ const [navOpen, setNavOpen] = React.useState(false);
+
+ const { breakpoint } = useBreakpoint();
+
+ return (
+
+
+
{
+ setNavOpen(!navOpen);
+ }}
+ >
+
+
+
+ Settings
+
+
+ }
+ circle
+ onClick={(): void => {
+ setNavOpen(false);
+ }}
+ />
+
+
+ {
+ setNavOpen(false);
+ }}
+ >
+ {({ selected }): JSX.Element => (
+ }
+ />
+ )}
+
+
+ {({ selected }): JSX.Element => (
+ }
+ />
+ )}
+
+
+ {({ selected }): JSX.Element => (
+ }
+ />
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/src/pages/settings/Interface.tsx b/src/pages/settings/Interface.tsx
new file mode 100644
index 00000000..9c093fab
--- /dev/null
+++ b/src/pages/settings/Interface.tsx
@@ -0,0 +1,76 @@
+import React from 'react';
+
+import { Jp, Pt, Us } from 'react-flags-select';
+import { useTranslation } from 'react-i18next';
+
+import { Select } from '@app/components/generic/Select';
+import i18n from '@app/core/translation';
+import { Button } from '@components/generic/Button';
+import { PrimaryTemplate } from '@components/templates/PrimaryTemplate';
+import { MenuIcon, SaveIcon } from '@heroicons/react/outline';
+
+export interface InterfaceProps {
+ navOpen: boolean;
+ setNavOpen: React.Dispatch>;
+}
+
+export const Interface = ({
+ navOpen,
+ setNavOpen,
+}: InterfaceProps): JSX.Element => {
+ const { t } = useTranslation();
+
+ return (
+ }
+ onClick={(): void => {
+ setNavOpen(!navOpen);
+ }}
+ circle
+ />
+ }
+ footer={
+ }
+ active
+ border
+ >
+ {t('strings.save_changes')}
+
+ }
+ >
+
+
+
+ );
+};
diff --git a/src/pages/settings/Radio.tsx b/src/pages/settings/Radio.tsx
new file mode 100644
index 00000000..a0e2e961
--- /dev/null
+++ b/src/pages/settings/Radio.tsx
@@ -0,0 +1,47 @@
+import React from 'react';
+
+import { useTranslation } from 'react-i18next';
+
+import { Button } from '@components/generic/Button';
+import { Input } from '@components/generic/Input';
+import { PrimaryTemplate } from '@components/templates/PrimaryTemplate';
+import { MenuIcon, SaveIcon } from '@heroicons/react/outline';
+
+export interface RadioProps {
+ navOpen: boolean;
+ setNavOpen: React.Dispatch>;
+}
+
+export const Radio = ({ navOpen, setNavOpen }: RadioProps): JSX.Element => {
+ const { t } = useTranslation();
+
+ return (
+ }
+ onClick={(): void => {
+ setNavOpen(!navOpen);
+ }}
+ circle
+ />
+ }
+ footer={
+ }
+ active
+ border
+ >
+ {t('strings.save_changes')}
+
+ }
+ >
+
+
+
+
+ );
+};
diff --git a/src/slices/appSlice.ts b/src/slices/appSlice.ts
deleted file mode 100644
index 45153d0f..00000000
--- a/src/slices/appSlice.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { createSlice } from '@reduxjs/toolkit';
-
-interface AppState {
- sidebarOpen: boolean;
- darkMode: boolean;
-}
-
-const initialState: AppState = {
- sidebarOpen: true,
- darkMode: false,
-};
-
-export const appSlice = createSlice({
- name: 'app',
- initialState,
- reducers: {
- openSidebar(state) {
- state.sidebarOpen = true;
- },
- closeSidebar(state) {
- state.sidebarOpen = false;
- },
- toggleSidebar(state) {
- state.sidebarOpen = !state.sidebarOpen;
- },
- },
-});
-
-export const { openSidebar, closeSidebar, toggleSidebar } = appSlice.actions;
-
-export default appSlice.reducer;
diff --git a/src/translations/en.json b/src/translations/en.json
deleted file mode 100644
index 7e7df9f1..00000000
--- a/src/translations/en.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "errors": {},
- "placeholder": {
- "message": "Enter Message",
- "no_messages": "No messages yet",
- "no_nodes": "No nodes found"
- },
- "strings": {
- "nodes": "Nodes",
- "color_scheme": "Color scheme",
- "language": "Language",
- "device_region": "Device region",
- "wifi_ssid": "WiFi SSID",
- "wifi_psk": "WiFi PSK",
- "save_changes": "Save changes"
- },
- "settings": {
- "ui": "UI Settings",
- "device": "Device Settings",
- "channel": "Channels"
- }
-}
diff --git a/src/translations/en.ts b/src/translations/en.ts
new file mode 100644
index 00000000..5ccacf56
--- /dev/null
+++ b/src/translations/en.ts
@@ -0,0 +1,22 @@
+export const en = {
+ errors: {},
+ placeholder: {
+ message: 'Enter Message',
+ no_messages: 'No messages yet',
+ no_nodes: 'No nodes found',
+ },
+ strings: {
+ nodes: 'Nodes',
+ color_scheme: 'Color scheme',
+ language: 'Language',
+ device_region: 'Device region',
+ wifi_ssid: 'WiFi SSID',
+ wifi_psk: 'WiFi PSK',
+ save_changes: 'Save changes',
+ },
+ settings: {
+ ui: 'UI Settings',
+ device: 'Device Settings',
+ channel: 'Channels',
+ },
+};
diff --git a/src/translations/jp.json b/src/translations/jp.json
deleted file mode 100644
index c5e5133b..00000000
--- a/src/translations/jp.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "errors": {},
- "placeholder": {
- "message": "メッセージを入力してください",
- "no_messages": "まだメッセージはありません",
- "no_nodes": "ノードが見つかりません"
- },
- "strings": {
- "nodes": "ノード",
- "color_scheme": "カラースキーム",
- "language": "言語",
- "device_region": "デバイスリージョン",
- "wifi_ssid": "WiFi名",
- "wifi_psk": "WiFiパスワード",
- "save_changes": "変更内容を保存"
- },
- "settings": {
- "ui": "UI設定",
- "device": "デバイスの設定",
- "channel": "#################"
- }
-}
diff --git a/src/translations/jp.ts b/src/translations/jp.ts
new file mode 100644
index 00000000..fd431f06
--- /dev/null
+++ b/src/translations/jp.ts
@@ -0,0 +1,22 @@
+export const jp = {
+ errors: {},
+ placeholder: {
+ message: 'メッセージを入力してください',
+ no_messages: 'まだメッセージはありません',
+ no_nodes: 'ノードが見つかりません',
+ },
+ strings: {
+ nodes: 'ノード',
+ color_scheme: 'カラースキーム',
+ language: '言語',
+ device_region: 'デバイスリージョン',
+ wifi_ssid: 'WiFi名',
+ wifi_psk: 'WiFiパスワード',
+ save_changes: '変更内容を保存',
+ },
+ settings: {
+ ui: 'UI設定',
+ device: 'デバイスの設定',
+ channel: '#################',
+ },
+};
diff --git a/src/translations/pt.json b/src/translations/pt.json
deleted file mode 100644
index 6161c29f..00000000
--- a/src/translations/pt.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "errors": {},
- "placeholder": {
- "message": "Entre mensagem",
- "no_messages": "Não a mensagens ainda",
- "no_nodes": "Nenhum nó foi encontrado"
- },
- "strings": {
- "nodes": "Nós",
- "color_scheme": "Esquema de cores",
- "language": "Idioma",
- "device_region": "Região do dispositivo",
- "wifi_ssid": "Nome do WiFi",
- "wifi_psk": "Senha do WiFi",
- "save_changes": "Salvar alterações"
- },
- "settings": {
- "ui": "Configurações da Interface",
- "device": "Configurações do dispositivo",
- "channel": "Canais"
- }
-}
diff --git a/src/translations/pt.ts b/src/translations/pt.ts
new file mode 100644
index 00000000..b1af305b
--- /dev/null
+++ b/src/translations/pt.ts
@@ -0,0 +1,22 @@
+export const pt = {
+ errors: {},
+ placeholder: {
+ message: 'Entre mensagem',
+ no_messages: 'Não a mensagens ainda',
+ no_nodes: 'Nenhum nó foi encontrado',
+ },
+ strings: {
+ nodes: 'Nós',
+ color_scheme: 'Esquema de cores',
+ language: 'Idioma',
+ device_region: 'Região do dispositivo',
+ wifi_ssid: 'Nome do WiFi',
+ wifi_psk: 'Senha do WiFi',
+ save_changes: 'Salvar alterações',
+ },
+ settings: {
+ ui: 'Configurações da Interface',
+ device: 'Configurações do dispositivo',
+ channel: 'Canais',
+ },
+};
diff --git a/tailwind.config.js b/tailwind.config.js
index 69651156..18b96472 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,12 +1,19 @@
module.exports = {
mode: 'jit',
purge: ['./public/**/*.html', './src/**/*.tsx'],
- darkMode: false, // or 'media' or 'class'
+ darkMode: 'class', // or 'media' or 'class'
theme: {
- extend: {},
- },
- variants: {
- extend: {},
+ fontFamily: {
+ sans: 'Roboto',
+ },
+ extend: {
+ colors: {
+ primary: '#67ea94',
+ primaryDark: '#1E293B',
+ secondaryDark: '#0F172A',
+ },
+ },
},
+ variants: {},
plugins: [],
};
diff --git a/tsconfig.json b/tsconfig.json
index 47ad03e7..99909538 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -12,10 +12,17 @@
// Add this line to get types for streaming imports (packageOptions.source="remote"):
// "*": [".snowpack/types/*"]
// More info: https://www.snowpack.dev/guides/streaming-imports
+ "@app/*": ["./src/*"],
+ "@pages/*": ["./src/pages/*"],
+ "@components/*": ["./src/components/*"],
+ "@core/*": ["./src/core/*"],
+ "@static/*": ["./src/static/*"]
},
/* noEmit - Snowpack builds (emits) files, not tsc. */
"noEmit": true,
/* Additional Options */
+ "importHelpers": true,
+ "removeComments": true,
"strict": true,
"strictNullChecks": true,
"skipLibCheck": true,
diff --git a/yarn.lock b/yarn.lock
index ceded10c..19093d79 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16,25 +16,25 @@
dependencies:
"@babel/highlight" "^7.14.5"
-"@babel/compat-data@^7.14.5":
- version "7.14.9"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.9.tgz#ac7996ceaafcf8f410119c8af0d1db4cf914a210"
- integrity sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==
+"@babel/compat-data@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176"
+ integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==
"@babel/core@^7.0.0":
- version "7.14.8"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.8.tgz#20cdf7c84b5d86d83fac8710a8bc605a7ba3f010"
- integrity sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8"
+ integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==
dependencies:
"@babel/code-frame" "^7.14.5"
- "@babel/generator" "^7.14.8"
- "@babel/helper-compilation-targets" "^7.14.5"
- "@babel/helper-module-transforms" "^7.14.8"
+ "@babel/generator" "^7.15.0"
+ "@babel/helper-compilation-targets" "^7.15.0"
+ "@babel/helper-module-transforms" "^7.15.0"
"@babel/helpers" "^7.14.8"
- "@babel/parser" "^7.14.8"
+ "@babel/parser" "^7.15.0"
"@babel/template" "^7.14.5"
- "@babel/traverse" "^7.14.8"
- "@babel/types" "^7.14.8"
+ "@babel/traverse" "^7.15.0"
+ "@babel/types" "^7.15.0"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@@ -42,21 +42,21 @@
semver "^6.3.0"
source-map "^0.5.0"
-"@babel/generator@^7.14.8", "@babel/generator@^7.14.9":
- version "7.14.9"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.9.tgz#23b19c597d38b4f7dc2e3fe42a69c88d9ecfaa16"
- integrity sha512-4yoHbhDYzFa0GLfCzLp5GxH7vPPMAHdZjyE7M/OajM9037zhx0rf+iNsJwp4PT0MSFpwjG7BsHEbPkBQpZ6cYA==
+"@babel/generator@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15"
+ integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==
dependencies:
- "@babel/types" "^7.14.9"
+ "@babel/types" "^7.15.0"
jsesc "^2.5.1"
source-map "^0.5.0"
-"@babel/helper-compilation-targets@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"
- integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==
+"@babel/helper-compilation-targets@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818"
+ integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==
dependencies:
- "@babel/compat-data" "^7.14.5"
+ "@babel/compat-data" "^7.15.0"
"@babel/helper-validator-option" "^7.14.5"
browserslist "^4.16.6"
semver "^6.3.0"
@@ -84,12 +84,12 @@
dependencies:
"@babel/types" "^7.14.5"
-"@babel/helper-member-expression-to-functions@^7.14.5":
- version "7.14.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970"
- integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==
+"@babel/helper-member-expression-to-functions@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b"
+ integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==
dependencies:
- "@babel/types" "^7.14.5"
+ "@babel/types" "^7.15.0"
"@babel/helper-module-imports@^7.14.5":
version "7.14.5"
@@ -98,19 +98,19 @@
dependencies:
"@babel/types" "^7.14.5"
-"@babel/helper-module-transforms@^7.14.8":
- version "7.14.8"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz#d4279f7e3fd5f4d5d342d833af36d4dd87d7dc49"
- integrity sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==
+"@babel/helper-module-transforms@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08"
+ integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==
dependencies:
"@babel/helper-module-imports" "^7.14.5"
- "@babel/helper-replace-supers" "^7.14.5"
+ "@babel/helper-replace-supers" "^7.15.0"
"@babel/helper-simple-access" "^7.14.8"
"@babel/helper-split-export-declaration" "^7.14.5"
- "@babel/helper-validator-identifier" "^7.14.8"
+ "@babel/helper-validator-identifier" "^7.14.9"
"@babel/template" "^7.14.5"
- "@babel/traverse" "^7.14.8"
- "@babel/types" "^7.14.8"
+ "@babel/traverse" "^7.15.0"
+ "@babel/types" "^7.15.0"
"@babel/helper-optimise-call-expression@^7.14.5":
version "7.14.5"
@@ -124,15 +124,15 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
-"@babel/helper-replace-supers@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94"
- integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==
+"@babel/helper-replace-supers@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4"
+ integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==
dependencies:
- "@babel/helper-member-expression-to-functions" "^7.14.5"
+ "@babel/helper-member-expression-to-functions" "^7.15.0"
"@babel/helper-optimise-call-expression" "^7.14.5"
- "@babel/traverse" "^7.14.5"
- "@babel/types" "^7.14.5"
+ "@babel/traverse" "^7.15.0"
+ "@babel/types" "^7.15.0"
"@babel/helper-simple-access@^7.14.8":
version "7.14.8"
@@ -148,7 +148,7 @@
dependencies:
"@babel/types" "^7.14.5"
-"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.8", "@babel/helper-validator-identifier@^7.14.9":
+"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9":
version "7.14.9"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"
integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==
@@ -159,13 +159,13 @@
integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
"@babel/helpers@^7.14.8":
- version "7.14.8"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.8.tgz#839f88f463025886cff7f85a35297007e2da1b77"
- integrity sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==
+ version "7.15.3"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357"
+ integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==
dependencies:
"@babel/template" "^7.14.5"
- "@babel/traverse" "^7.14.8"
- "@babel/types" "^7.14.8"
+ "@babel/traverse" "^7.15.0"
+ "@babel/types" "^7.15.0"
"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
version "7.14.5"
@@ -176,10 +176,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.14.5", "@babel/parser@^7.14.8", "@babel/parser@^7.14.9":
- version "7.14.9"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.9.tgz#596c1ad67608070058ebf8df50c1eaf65db895a4"
- integrity sha512-RdUTOseXJ8POjjOeEBEvNMIZU/nm4yu2rufRkcibzkkg7DmQvXU8v3M4Xk9G7uuI86CDGkKcuDWgioqZm+mScQ==
+"@babel/parser@^7.14.5", "@babel/parser@^7.15.0":
+ version "7.15.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862"
+ integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==
"@babel/plugin-syntax-class-properties@^7.10.0":
version "7.12.13"
@@ -188,10 +188,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.12.13"
-"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.9.2":
- version "7.14.8"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446"
- integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==
+"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.7.6", "@babel/runtime@^7.9.2":
+ version "7.15.3"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"
+ integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==
dependencies:
regenerator-runtime "^0.13.4"
@@ -204,41 +204,29 @@
"@babel/parser" "^7.14.5"
"@babel/types" "^7.14.5"
-"@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8":
- version "7.14.9"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.9.tgz#016126b331210bf06fff29d52971eef8383e556f"
- integrity sha512-bldh6dtB49L8q9bUyB7bC20UKgU+EFDwKJylwl234Kv+ySZeMD31Xeht6URyueQ6LrRRpF2tmkfcZooZR9/e8g==
+"@babel/traverse@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98"
+ integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==
dependencies:
"@babel/code-frame" "^7.14.5"
- "@babel/generator" "^7.14.9"
+ "@babel/generator" "^7.15.0"
"@babel/helper-function-name" "^7.14.5"
"@babel/helper-hoist-variables" "^7.14.5"
"@babel/helper-split-export-declaration" "^7.14.5"
- "@babel/parser" "^7.14.9"
- "@babel/types" "^7.14.9"
+ "@babel/parser" "^7.15.0"
+ "@babel/types" "^7.15.0"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.14.9":
- version "7.14.9"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.9.tgz#f2b19c3f2f77c5708d67fe8f6046e9cea2b5036d"
- integrity sha512-u0bLTnv3DFHeaQLYzb7oRJ1JHr1sv/SYDM7JSqHFFLwXG1wTZRughxFI5NCP8qBEo1rVVsn7Yg2Lvw49nne/Ow==
+"@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0":
+ version "7.15.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd"
+ integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==
dependencies:
"@babel/helper-validator-identifier" "^7.14.9"
to-fast-properties "^2.0.0"
-"@emotion/is-prop-valid@^0.8.2":
- version "0.8.8"
- resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
- integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
- dependencies:
- "@emotion/memoize" "0.7.4"
-
-"@emotion/memoize@0.7.4":
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
- integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
-
"@eslint/eslintrc@^0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
@@ -254,7 +242,7 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
-"@headlessui/react@^1.3.0":
+"@headlessui/react@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.4.0.tgz#c6d424d8ab10ac925e4423d7f3cbab02c30d736a"
integrity sha512-C+FmBVF6YGvqcEI5fa2dfVbEaXr2RGR6Kw1E5HXIISIZEfsrH/yuCgsjWw5nlRF9vbCxmQ/EKs64GAdKeb8gCw==
@@ -308,9 +296,9 @@
fastq "^1.6.0"
"@npmcli/arborist@^2.6.4":
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.8.0.tgz#ff078287eba44595383eb58ad8aa8540bc8aae9e"
- integrity sha512-R9rTyak1rGdmVTyiU14dgBb+qMllY3B6I8hp7FB4xXsU9dJDrYZJR8I+191CMo5Y1941jTDCtNcXXW9TldPEFQ==
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.8.1.tgz#ee7e9128e48aba735d45d2184542dfbefd4346ff"
+ integrity sha512-kbBWllN4CcdeN032Rw6b+TIsyoxWcv4YNN5gzkMCe8cCu0llwlq5P7uAD2oyL24QdmGlrlg/Yp0L1JF+HD8g9Q==
dependencies:
"@npmcli/installed-package-contents" "^1.0.7"
"@npmcli/map-workspaces" "^1.0.2"
@@ -368,9 +356,9 @@
npm-normalize-package-bin "^1.0.1"
"@npmcli/map-workspaces@^1.0.2":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.3.tgz#6072a0794762cf8f572e6080fa66d1bbefa991d5"
- integrity sha512-SdlRlOoQw4WKD4vtb/n5gUkobEABYBEOo8fRE4L8CtBkyWDSvIrReTfKvQ/Jc/LQqDaaZ5iv1iMSQzKCUr1n1A==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab"
+ integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q==
dependencies:
"@npmcli/name-from-folder" "^1.0.1"
glob "^7.1.6"
@@ -564,14 +552,6 @@
"@types/node" "*"
"@types/responselike" "*"
-"@types/eslint@^7.2.13":
- version "7.28.0"
- resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a"
- integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==
- dependencies:
- "@types/estree" "*"
- "@types/json-schema" "*"
-
"@types/estree@*":
version "0.0.50"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"
@@ -595,10 +575,10 @@
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
-"@types/json-schema@*", "@types/json-schema@^7.0.7":
- version "7.0.8"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818"
- integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==
+"@types/json-schema@^7.0.7":
+ version "7.0.9"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
+ integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
"@types/keyv@*":
version "3.1.2"
@@ -608,9 +588,9 @@
"@types/node" "*"
"@types/node@*":
- version "16.4.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.10.tgz#e57e2a54fc6da58da94b3571b1cb456d39f88597"
- integrity sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ==
+ version "16.6.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.1.tgz#aee62c7b966f55fc66c7b6dfa1d58db2a616da61"
+ integrity sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==
"@types/parse-json@^4.0.0":
version "4.0.0"
@@ -640,9 +620,9 @@
redux "^4.0.0"
"@types/react@*", "@types/react@^17.0.13":
- version "17.0.15"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.15.tgz#c7533dc38025677e312606502df7656a6ea626d0"
- integrity sha512-uTKHDK9STXFHLaKv6IMnwp52fm0hwU+N89w/p9grdUqcFA6WuqDyPhaWopbNyE1k/VhgzmHl8pu1L4wITtmlLw==
+ version "17.0.18"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.18.tgz#4109cbbd901be9582e5e39e3d77acd7b66bb7fbe"
+ integrity sha512-YTLgu7oS5zvSqq49X5Iue5oAbVGhgPc5Au29SJC4VeE17V6gASoOxVkUDy9pXFMRFxCWCD9fLeweNFizo3UzOg==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -672,75 +652,92 @@
resolved "https://registry.yarnpkg.com/@types/snowpack-env/-/snowpack-env-2.3.4.tgz#79073fd98a47a5f1ba83326b75cb433dc31a7c36"
integrity sha512-zYzMb2aMyzXW5VgOQHy+FgI8N5tLFb+tIsUqk35CIgSr9pT4pji2GR8BCOTMdniusVuRHIp/DaYQNQGYGLVZHQ==
-"@typescript-eslint/eslint-plugin@^4.28.1":
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz#b866c9cd193bfaba5e89bade0015629ebeb27996"
- integrity sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA==
+"@typescript-eslint/eslint-plugin@^4.28.0", "@typescript-eslint/eslint-plugin@^4.29.1":
+ version "4.29.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz#808d206e2278e809292b5de752a91105da85860b"
+ integrity sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw==
dependencies:
- "@typescript-eslint/experimental-utils" "4.29.0"
- "@typescript-eslint/scope-manager" "4.29.0"
+ "@typescript-eslint/experimental-utils" "4.29.1"
+ "@typescript-eslint/scope-manager" "4.29.1"
debug "^4.3.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.1.0"
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/experimental-utils@4.29.0":
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz#19b1417602d0e1ef325b3312ee95f61220542df5"
- integrity sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w==
+"@typescript-eslint/experimental-utils@4.29.1":
+ version "4.29.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz#0af2b17b0296b60c6b207f11062119fa9c5a8994"
+ integrity sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw==
dependencies:
"@types/json-schema" "^7.0.7"
- "@typescript-eslint/scope-manager" "4.29.0"
- "@typescript-eslint/types" "4.29.0"
- "@typescript-eslint/typescript-estree" "4.29.0"
+ "@typescript-eslint/scope-manager" "4.29.1"
+ "@typescript-eslint/types" "4.29.1"
+ "@typescript-eslint/typescript-estree" "4.29.1"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
-"@typescript-eslint/parser@^4.28.1":
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.0.tgz#e5367ca3c63636bb5d8e0748fcbab7a4f4a04289"
- integrity sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA==
+"@typescript-eslint/parser@^4.28.0", "@typescript-eslint/parser@^4.29.1":
+ version "4.29.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.1.tgz#17dfbb45c9032ffa0fe15881d20fbc2a4bdeb02d"
+ integrity sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg==
dependencies:
- "@typescript-eslint/scope-manager" "4.29.0"
- "@typescript-eslint/types" "4.29.0"
- "@typescript-eslint/typescript-estree" "4.29.0"
+ "@typescript-eslint/scope-manager" "4.29.1"
+ "@typescript-eslint/types" "4.29.1"
+ "@typescript-eslint/typescript-estree" "4.29.1"
debug "^4.3.1"
-"@typescript-eslint/scope-manager@4.29.0":
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz#cf5474f87321bedf416ef65839b693bddd838599"
- integrity sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==
+"@typescript-eslint/scope-manager@4.29.1":
+ version "4.29.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz#f25da25bc6512812efa2ce5ebd36619d68e61358"
+ integrity sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==
dependencies:
- "@typescript-eslint/types" "4.29.0"
- "@typescript-eslint/visitor-keys" "4.29.0"
+ "@typescript-eslint/types" "4.29.1"
+ "@typescript-eslint/visitor-keys" "4.29.1"
-"@typescript-eslint/types@4.29.0":
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.0.tgz#c8f1a1e4441ea4aca9b3109241adbc145f7f8a4e"
- integrity sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==
+"@typescript-eslint/types@4.29.1":
+ version "4.29.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.1.tgz#94cce6cf7cc83451df03339cda99d326be2feaf5"
+ integrity sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==
-"@typescript-eslint/typescript-estree@4.29.0":
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz#af7ab547757b86c91bfdbc54ff86845410856256"
- integrity sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==
+"@typescript-eslint/typescript-estree@4.29.1":
+ version "4.29.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz#7b32a25ff8e51f2671ccc6b26cdbee3b1e6c5e7f"
+ integrity sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==
dependencies:
- "@typescript-eslint/types" "4.29.0"
- "@typescript-eslint/visitor-keys" "4.29.0"
+ "@typescript-eslint/types" "4.29.1"
+ "@typescript-eslint/visitor-keys" "4.29.1"
debug "^4.3.1"
globby "^11.0.3"
is-glob "^4.0.1"
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/visitor-keys@4.29.0":
- version "4.29.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz#1ff60f240def4d85ea68d4fd2e4e9759b7850c04"
- integrity sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==
+"@typescript-eslint/visitor-keys@4.29.1":
+ version "4.29.1"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz#0615be8b55721f5e854f3ee99f1a714f2d093e5d"
+ integrity sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==
dependencies:
- "@typescript-eslint/types" "4.29.0"
+ "@typescript-eslint/types" "4.29.1"
eslint-visitor-keys "^2.0.0"
+"@verypossible/eslint-config@^1.6.0":
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@verypossible/eslint-config/-/eslint-config-1.6.1.tgz#4360627af7e247890026abc5b0ead13c4d638294"
+ integrity sha512-3qf2FSag49zqI6rZlwKcF8RryLX0RJ3W+koJuhDhdQNyelSEeTxiijQ+Y/Xss4ILFzyqpBnzqiphmABGcOgj1Q==
+ dependencies:
+ "@typescript-eslint/eslint-plugin" "^4.28.0"
+ "@typescript-eslint/parser" "^4.28.0"
+ babel-plugin-module-resolver "^4.1.0"
+ eslint "^7.29.0"
+ eslint-config-prettier "^8.3.0"
+ eslint-import-resolver-babel-module "^5.3.1"
+ eslint-import-resolver-typescript "^2.4.0"
+ eslint-plugin-import "^2.23.4"
+ eslint-plugin-react "^7.24.0"
+ eslint-plugin-react-hooks "^4.2.0"
+ prettier "^2.3.2"
+
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -956,11 +953,6 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-at-least-node@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
- integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-
autoprefixer@^10.2.6:
version "10.3.1"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.3.1.tgz#954214821d3aa06692406c6a0a9e9d401eafbed2"
@@ -973,7 +965,7 @@ autoprefixer@^10.2.6:
normalize-range "^0.1.2"
postcss-value-parser "^4.1.0"
-available-typed-arrays@^1.0.2:
+available-typed-arrays@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9"
integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==
@@ -988,6 +980,17 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+babel-plugin-module-resolver@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2"
+ integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==
+ dependencies:
+ find-babel-config "^1.2.0"
+ glob "^7.1.6"
+ pkg-up "^3.1.0"
+ reselect "^4.0.0"
+ resolve "^1.13.1"
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -1060,15 +1063,15 @@ braces@^3.0.1, braces@~3.0.2:
fill-range "^7.0.1"
browserslist@^4.16.6:
- version "4.16.6"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
- integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
+ version "4.16.7"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335"
+ integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==
dependencies:
- caniuse-lite "^1.0.30001219"
+ caniuse-lite "^1.0.30001248"
colorette "^1.2.2"
- electron-to-chromium "^1.3.723"
+ electron-to-chromium "^1.3.793"
escalade "^3.1.1"
- node-releases "^1.1.71"
+ node-releases "^1.1.73"
bufferutil@^4.0.2:
version "4.0.3"
@@ -1156,10 +1159,10 @@ camelcase-css@^2.0.1:
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001243:
- version "1.0.30001248"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz#26ab45e340f155ea5da2920dadb76a533cb8ebce"
- integrity sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==
+caniuse-lite@^1.0.30001243, caniuse-lite@^1.0.30001248:
+ version "1.0.30001251"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85"
+ integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==
caseless@~0.12.0:
version "0.12.0"
@@ -1207,7 +1210,7 @@ cheerio@1.0.0-rc.10:
parse5-htmlparser2-tree-adapter "^6.0.1"
tslib "^2.2.0"
-chokidar@^3.3.0, chokidar@^3.4.0, chokidar@^3.5.2:
+chokidar@^3.4.0, chokidar@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
@@ -1247,15 +1250,6 @@ cli-spinners@^2.5.0:
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939"
integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==
-cliui@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
- integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.0"
- wrap-ansi "^7.0.0"
-
clone-response@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
@@ -1315,10 +1309,10 @@ color@^3.2.0:
color-convert "^1.9.3"
color-string "^1.6.0"
-colorette@^1.2.1, colorette@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
- integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
+colorette@^1.2.2:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af"
+ integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
@@ -1544,11 +1538,6 @@ depd@^1.1.2:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-dependency-graph@^0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318"
- integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==
-
detect-port@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1"
@@ -1653,10 +1642,10 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
-electron-to-chromium@^1.3.723:
- version "1.3.793"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz#c10dff5f3126238004de344db458f1da3641d554"
- integrity sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==
+electron-to-chromium@^1.3.793:
+ version "1.3.806"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.806.tgz#21502100f11aead6c501d1cd7f2504f16c936642"
+ integrity sha512-AH/otJLAAecgyrYp0XK1DPiGVWcOgwPeJBOLeuFQ5l//vhQhwC9u6d+GijClqJAmsHG4XDue81ndSQPohUu0xA==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -1711,7 +1700,7 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:
+es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2, es-abstract@^1.18.5:
version "1.18.5"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19"
integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==
@@ -1818,33 +1807,52 @@ eslint-config-prettier@^8.3.0:
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a"
integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==
-eslint-import-resolver-node@^0.3.4:
- version "0.3.4"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
- integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
+eslint-import-resolver-babel-module@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-5.3.1.tgz#808a42f311a6c33d473f9f4c846d1d487d29eff4"
+ integrity sha512-WomQAkjO7lUNOdU3FG2zgNgylkoAVUmaw04bHgSpM9QrMWuOLLWa2qcP6CrsBd4VWuLRbUPyzrgBc9ZQIx9agw==
dependencies:
- debug "^2.6.9"
- resolve "^1.13.1"
+ pkg-up "^3.1.0"
+ resolve "^1.20.0"
-eslint-module-utils@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233"
- integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==
+eslint-import-resolver-node@^0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.5.tgz#939bbb0f74e179e757ca87f7a4a890dabed18ac4"
+ integrity sha512-XMoPKjSpXbkeJ7ZZ9icLnJMTY5Mc1kZbCakHquaFsXPpyWOwK0TK6CODO+0ca54UoM9LKOxyUNnoVZRl8TeaAg==
+ dependencies:
+ debug "^3.2.7"
+ resolve "^1.20.0"
+
+eslint-import-resolver-typescript@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz#ec1e7063ebe807f0362a7320543aaed6fe1100e1"
+ integrity sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==
+ dependencies:
+ debug "^4.1.1"
+ glob "^7.1.6"
+ is-glob "^4.0.1"
+ resolve "^1.17.0"
+ tsconfig-paths "^3.9.0"
+
+eslint-module-utils@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534"
+ integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==
dependencies:
debug "^3.2.7"
pkg-dir "^2.0.0"
-eslint-plugin-import@^2.23.4:
- version "2.23.4"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97"
- integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==
+eslint-plugin-import@^2.23.4, eslint-plugin-import@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.0.tgz#697ffd263e24da5e84e03b282f5fb62251777177"
+ integrity sha512-Kc6xqT9hiYi2cgybOc0I2vC9OgAYga5o/rAFinam/yF/t5uBqxQbauNPMC6fgb640T/89P0gFoO27FOilJ/Cqg==
dependencies:
array-includes "^3.1.3"
array.prototype.flat "^1.2.4"
debug "^2.6.9"
doctrine "^2.1.0"
- eslint-import-resolver-node "^0.3.4"
- eslint-module-utils "^2.6.1"
+ eslint-import-resolver-node "^0.3.5"
+ eslint-module-utils "^2.6.2"
find-up "^2.0.0"
has "^1.0.3"
is-core-module "^2.4.0"
@@ -1855,13 +1863,6 @@ eslint-plugin-import@^2.23.4:
resolve "^1.20.0"
tsconfig-paths "^3.9.0"
-eslint-plugin-prettier@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7"
- integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==
- dependencies:
- prettier-linter-helpers "^1.0.0"
-
eslint-plugin-react-hooks@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556"
@@ -1917,7 +1918,7 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-eslint@^7.29.0:
+eslint@^7.29.0, eslint@^7.32.0:
version "7.32.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
@@ -2061,11 +2062,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-diff@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
- integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
-
fast-glob@^3.1.1, fast-glob@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1"
@@ -2113,6 +2109,14 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
+find-babel-config@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
+ integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
+ dependencies:
+ json5 "^0.5.1"
+ path-exists "^3.0.0"
+
find-cache-dir@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
@@ -2129,6 +2133,13 @@ find-up@^2.0.0, find-up@^2.1.0:
dependencies:
locate-path "^2.0.0"
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
find-up@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
@@ -2182,26 +2193,6 @@ fraction.js@^4.1.1:
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff"
integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==
-framer-motion@^4.1.17:
- version "4.1.17"
- resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-4.1.17.tgz#4029469252a62ea599902e5a92b537120cc89721"
- integrity sha512-thx1wvKzblzbs0XaK2X0G1JuwIdARcoNOW7VVwjO8BUltzXPyONGAElLu6CiCScsOQRI7FIk/45YTFtJw5Yozw==
- dependencies:
- framesync "5.3.0"
- hey-listen "^1.0.8"
- popmotion "9.3.6"
- style-value-types "4.1.4"
- tslib "^2.1.0"
- optionalDependencies:
- "@emotion/is-prop-valid" "^0.8.2"
-
-framesync@5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/framesync/-/framesync-5.3.0.tgz#0ecfc955e8f5a6ddc8fdb0cc024070947e1a0d9b"
- integrity sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA==
- dependencies:
- tslib "^2.1.0"
-
fs-extra@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
@@ -2211,16 +2202,6 @@ fs-extra@^10.0.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-extra@^9.0.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
- integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
- dependencies:
- at-least-node "^1.0.0"
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
fs-minipass@^2.0.0, fs-minipass@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
@@ -2279,11 +2260,6 @@ gensync@^1.0.0-beta.2:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-get-caller-file@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
@@ -2293,11 +2269,6 @@ get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@
has "^1.0.3"
has-symbols "^1.0.1"
-get-stdin@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53"
- integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
-
get-stream@^5.1.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
@@ -2349,13 +2320,13 @@ globals@^11.1.0:
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
globals@^13.6.0, globals@^13.9.0:
- version "13.10.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676"
- integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==
+ version "13.11.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7"
+ integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==
dependencies:
type-fest "^0.20.2"
-globby@^11.0.0, globby@^11.0.3:
+globby@^11.0.3:
version "11.0.4"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==
@@ -2385,9 +2356,9 @@ got@^11.1.4:
responselike "^2.0.0"
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3:
- version "4.2.6"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
- integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
+ integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
gzipper@^5.0.0:
version "5.0.0"
@@ -2431,6 +2402,13 @@ has-symbols@^1.0.1, has-symbols@^1.0.2:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
+has-tostringtag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+ integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+ dependencies:
+ has-symbols "^1.0.2"
+
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
@@ -2443,10 +2421,12 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
-hey-listen@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68"
- integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==
+history@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/history/-/history-5.0.1.tgz#de35025ed08bce0db62364b47ebbf9d97b5eb06a"
+ integrity sha512-5qC/tFUKfVci5kzgRxZxN5Mf1CV8NmJx9ByaPX0YTLx5Vz3Svh7NYp6eA4CpDq4iA9D0C1t8BNIfvQIrUI3mVw==
+ dependencies:
+ "@babel/runtime" "^7.7.6"
hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
version "3.3.2"
@@ -2553,9 +2533,9 @@ i18next-browser-languagedetector@^6.1.2:
"@babel/runtime" "^7.14.6"
i18next@^20.3.5:
- version "20.3.5"
- resolved "https://registry.yarnpkg.com/i18next/-/i18next-20.3.5.tgz#14308b79a3f1cafb24fdcd8e182d3673baf1e979"
- integrity sha512-//MGeU6n4TencJmCgG+TCrpdgAD/NDEU/KfKQekYbJX6QV7sD/NjWQdVdBi+bkT0snegnSoB7QhjSeatrk3a0w==
+ version "20.4.0"
+ resolved "https://registry.yarnpkg.com/i18next/-/i18next-20.4.0.tgz#6897229a7898e23f3c4885f10315c978b594d3b9"
+ integrity sha512-89iWWJudmaHJwzIdJ/1eu98GtsJnwBhOUWwlAre70itPMuTE/NTPtgVeaS1CGaB8Q3XrYBGpEqlq4jsScDx9kg==
dependencies:
"@babel/runtime" "^7.12.0"
@@ -2668,11 +2648,12 @@ ip@^1.1.5:
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
is-arguments@^1.0.4, is-arguments@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
- integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
+ integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
dependencies:
- call-bind "^1.0.0"
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
@@ -2685,9 +2666,11 @@ is-arrayish@^0.3.1:
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
is-bigint@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a"
- integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
is-binary-path@~2.1.0:
version "2.1.0"
@@ -2697,16 +2680,17 @@ is-binary-path@~2.1.0:
binary-extensions "^2.0.0"
is-boolean-object@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8"
- integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
dependencies:
call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
is-callable@^1.1.4, is-callable@^1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
- integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
+ integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
is-core-module@^2.2.0, is-core-module@^2.4.0:
version "2.5.0"
@@ -2716,9 +2700,11 @@ is-core-module@^2.2.0, is-core-module@^2.4.0:
has "^1.0.3"
is-date-object@^1.0.1, is-date-object@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5"
- integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+ integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
is-docker@^2.0.0, is-docker@^2.1.1:
version "2.2.1"
@@ -2775,9 +2761,11 @@ is-negative-zero@^2.0.1:
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
is-number-object@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb"
- integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
+ integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
+ dependencies:
+ has-tostringtag "^1.0.0"
is-number@^7.0.0:
version "7.0.0"
@@ -2797,12 +2785,12 @@ is-reference@^1.1.4, is-reference@^1.2.1:
"@types/estree" "*"
is-regex@^1.1.1, is-regex@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
- integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
dependencies:
call-bind "^1.0.2"
- has-symbols "^1.0.2"
+ has-tostringtag "^1.0.0"
is-set@^2.0.1, is-set@^2.0.2:
version "2.0.2"
@@ -2815,9 +2803,11 @@ is-stream@^2.0.0:
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
is-string@^1.0.5, is-string@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
- integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+ dependencies:
+ has-tostringtag "^1.0.0"
is-symbol@^1.0.2, is-symbol@^1.0.3:
version "1.0.4"
@@ -2826,16 +2816,16 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
-is-typed-array@^1.1.3:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e"
- integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==
+is-typed-array@^1.1.6:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.7.tgz#881ddc660b13cb8423b2090fa88c0fe37a83eb2f"
+ integrity sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==
dependencies:
- available-typed-arrays "^1.0.2"
+ available-typed-arrays "^1.0.4"
call-bind "^1.0.2"
- es-abstract "^1.18.0-next.2"
+ es-abstract "^1.18.5"
foreach "^2.0.5"
- has-symbols "^1.0.1"
+ has-tostringtag "^1.0.0"
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
@@ -2959,6 +2949,11 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -3077,6 +3072,14 @@ locate-path@^2.0.0:
p-locate "^2.0.0"
path-exists "^3.0.0"
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
@@ -3101,41 +3104,11 @@ lodash.clonedeep@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
-lodash.difference@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
- integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
-
-lodash.forown@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.forown/-/lodash.forown-4.4.0.tgz#85115cf04f73ef966eced52511d3893cc46683af"
- integrity sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=
-
-lodash.get@^4.4.2:
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
- integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
-
-lodash.groupby@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1"
- integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=
-
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-lodash.sortby@^4.7.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
- integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-
-lodash.toarray@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
- integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
-
lodash.topath@^4.5.2:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009"
@@ -3365,9 +3338,9 @@ ms@^2.0.0, ms@^2.1.1:
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.1.23:
- version "3.1.23"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
- integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==
+ version "3.1.25"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152"
+ integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==
natural-compare@^1.4.0:
version "1.4.0"
@@ -3380,11 +3353,11 @@ negotiator@^0.6.2:
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
node-emoji@^1.8.1:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
- integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c"
+ integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==
dependencies:
- lodash.toarray "^4.4.0"
+ lodash "^4.17.21"
node-gyp-build@^4.2.0:
version "4.2.3"
@@ -3407,10 +3380,10 @@ node-gyp@^7.1.0:
tar "^6.0.2"
which "^2.0.2"
-node-releases@^1.1.71:
- version "1.1.73"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"
- integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==
+node-releases@^1.1.73:
+ version "1.1.74"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e"
+ integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==
nopt@^5.0.0:
version "5.0.0"
@@ -3661,7 +3634,7 @@ p-limit@^1.1.0:
dependencies:
p-try "^1.0.0"
-p-limit@^2.2.0:
+p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -3682,6 +3655,13 @@ p-locate@^2.0.0:
dependencies:
p-limit "^1.1.0"
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
p-locate@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
@@ -3885,33 +3865,12 @@ pkg-up@^2.0.0:
dependencies:
find-up "^2.1.0"
-popmotion@9.3.6:
- version "9.3.6"
- resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-9.3.6.tgz#b5236fa28f242aff3871b9e23721f093133248d1"
- integrity sha512-ZTbXiu6zIggXzIliMi8LGxXBF5ST+wkpXGEjeTUDUOCdSQ356hij/xjeUdv0F8zCQNeqB1+PR5/BB+gC+QLAPw==
+pkg-up@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
+ integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
dependencies:
- framesync "5.3.0"
- hey-listen "^1.0.8"
- style-value-types "4.1.4"
- tslib "^2.1.0"
-
-postcss-cli@^8.3.1:
- version "8.3.1"
- resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-8.3.1.tgz#865dad08300ac59ae9cecb7066780aa81c767a77"
- integrity sha512-leHXsQRq89S3JC9zw/tKyiVV2jAhnfQe0J8VI4eQQbUjwIe0XxVqLrR+7UsahF1s9wi4GlqP6SJ8ydf44cgF2Q==
- dependencies:
- chalk "^4.0.0"
- chokidar "^3.3.0"
- dependency-graph "^0.9.0"
- fs-extra "^9.0.0"
- get-stdin "^8.0.0"
- globby "^11.0.0"
- postcss-load-config "^3.0.0"
- postcss-reporter "^7.0.0"
- pretty-hrtime "^1.0.3"
- read-cache "^1.0.0"
- slash "^3.0.0"
- yargs "^16.0.0"
+ find-up "^3.0.0"
postcss-js@^3.0.3:
version "3.0.3"
@@ -3921,7 +3880,7 @@ postcss-js@^3.0.3:
camelcase-css "^2.0.1"
postcss "^8.1.6"
-postcss-load-config@^3.0.0, postcss-load-config@^3.0.1, postcss-load-config@^3.1.0:
+postcss-load-config@^3.0.1, postcss-load-config@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.0.tgz#d39c47091c4aec37f50272373a6a648ef5e97829"
integrity sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==
@@ -3979,18 +3938,6 @@ postcss-nested@5.0.5:
dependencies:
postcss-selector-parser "^6.0.4"
-postcss-reporter@^7.0.0:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.2.tgz#03e9e7381c1afe40646f9c22e7aeeb860e051065"
- integrity sha512-JyQ96NTQQsso42y6L1H1RqHfWH1C3Jr0pt91mVv5IdYddZAE9DUZxuferNgk6q0o6vBVOrfVJb10X1FgDzjmDw==
- dependencies:
- colorette "^1.2.1"
- lodash.difference "^4.5.0"
- lodash.forown "^4.4.0"
- lodash.get "^4.4.2"
- lodash.groupby "^4.6.0"
- lodash.sortby "^4.7.0"
-
postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.6:
version "6.0.6"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"
@@ -4023,13 +3970,6 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-prettier-linter-helpers@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
- integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
- dependencies:
- fast-diff "^1.1.2"
-
prettier@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d"
@@ -4189,13 +4129,6 @@ react@^17.0.2:
loose-envify "^1.1.0"
object-assign "^4.1.1"
-read-cache@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
- integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=
- dependencies:
- pify "^2.3.0"
-
read-cmd-shim@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9"
@@ -4270,9 +4203,9 @@ redux-thunk@^2.3.0:
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
redux@^4.0.0, redux@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.0.tgz#eb049679f2f523c379f1aff345c8612f294c88d4"
- integrity sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.1.tgz#76f1c439bb42043f985fbd9bf21990e60bd67f47"
+ integrity sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw==
dependencies:
"@babel/runtime" "^7.9.2"
@@ -4320,11 +4253,6 @@ request@^2.88.2:
tunnel-agent "^0.6.0"
uuid "^3.3.2"
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-
require-from-string@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
@@ -4398,9 +4326,9 @@ rollup-plugin-polyfill-node@^0.6.2:
"@rollup/plugin-inject" "^4.0.0"
rollup@^2.23.0:
- version "2.55.1"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.55.1.tgz#66a444648e2fb603d8e329e77a61c608a6510fda"
- integrity sha512-1P9w5fpb6b4qroePh8vHKGIvPNxwoCQhjJpIqfZGHLKpZ0xcU2/XBmFxFbc9697/6bmHpmFTLk5R1dAQhFSo0g==
+ version "2.56.2"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f"
+ integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==
optionalDependencies:
fsevents "~2.3.2"
@@ -4496,7 +4424,7 @@ simple-swizzle@^0.2.2:
dependencies:
is-arrayish "^0.3.1"
-skypack@^0.3.0:
+skypack@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/skypack/-/skypack-0.3.2.tgz#9df9fde1ed73ae6874d15111f0636e16f2cab1b9"
integrity sha512-je1pix0QYER6iHuUGbgcafRJT5TI+EGUIBfzBLMqo3Wi22I2SzB9TVHQqwKCw8pzJMuHqhVTFEHc3Ey+ra25Sw==
@@ -4529,14 +4457,14 @@ slice-ansi@^4.0.0:
is-fullwidth-code-point "^3.0.0"
smart-buffer@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba"
- integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
snowpack@^3.7.1:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/snowpack/-/snowpack-3.8.3.tgz#5f136dcbe051189ce20092acd36759d03e6cbf87"
- integrity sha512-nD699xWIDk9nGH4V9xKjgIVPA8jXWp/crUG46mu3/11rrdEv94v4xV/j373w3EvegGVQ3JdA5mlNpxDU8wk5uw==
+ version "3.8.6"
+ resolved "https://registry.yarnpkg.com/snowpack/-/snowpack-3.8.6.tgz#0bef5c071caef86a2f91aa5c3d5b70d0c2e2793c"
+ integrity sha512-EZ3Y7RtTiPvxnVFTKPfkvi2PKBrprXCvOHKWQQLBkHonf+xdtG51RiNjtrRLJeCjislAlD6OoeGHUxz76ToGHw==
dependencies:
"@npmcli/arborist" "^2.6.4"
bufferutil "^4.0.2"
@@ -4580,7 +4508,7 @@ snowpack@^3.7.1:
rimraf "^3.0.0"
rollup "~2.37.1"
signal-exit "^3.0.3"
- skypack "^0.3.0"
+ skypack "^0.3.2"
slash "~3.0.0"
source-map "^0.7.3"
strip-ansi "^6.0.0"
@@ -4650,9 +4578,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f"
- integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b"
+ integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==
sprintf-js@~1.0.2:
version "1.0.3"
@@ -4703,7 +4631,7 @@ string-width@^1.0.1:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string-width@^4.1.0, string-width@^4.2.0:
+string-width@^4.2.0:
version "4.2.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
@@ -4790,14 +4718,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-style-value-types@4.1.4:
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-4.1.4.tgz#80f37cb4fb024d6394087403dfb275e8bb627e75"
- integrity sha512-LCJL6tB+vPSUoxgUBt9juXIlNJHtBMy8jkXzUJSBzeHWdBu6lhzHqCvLVkXFGsFIlNa2ln1sQHya/gzaFmB2Lg==
- dependencies:
- hey-listen "^1.0.8"
- tslib "^2.1.0"
-
sub-events@^1.8.9:
version "1.8.9"
resolved "https://registry.yarnpkg.com/sub-events/-/sub-events-1.8.9.tgz#57b332134ae1ded738f7c2ddbcd9c1bc81ca8c2e"
@@ -4867,9 +4787,9 @@ tailwindcss@^2.2.4:
tmp "^0.2.1"
tar@^6.0.2, tar@^6.1.0:
- version "6.1.3"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.3.tgz#e44b97ee7d6cc7a4c574e8b01174614538291825"
- integrity sha512-3rUqwucgVZXTeyJyL2jqtUau8/8r54SioM1xj3AmTX3HnWQdj2AydfJ2qYYayPyIIznSplcvU9mhBb7dR2XF3w==
+ version "6.1.8"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.8.tgz#4fc50cfe56511c538ce15b71e05eebe66530cbd4"
+ integrity sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
@@ -4929,10 +4849,10 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.1.0, tslib@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
- integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
+tslib@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
+ integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
tsutils@^3.21.0:
version "3.21.0"
@@ -4965,6 +4885,13 @@ type-fest@^0.20.2:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+type-route@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-route/-/type-route-0.6.0.tgz#0762fde72c592f7fc9eea3451f7c538811b7439e"
+ integrity sha512-uh5bxHxHOKNDNTetGwBgtSP5ba3SUtnKcdj3d5AjbIALVbYBwaix4wwfpyxqrE9ia31LknXUc+359FChcC01jw==
+ dependencies:
+ history "^5.0.0"
+
typedarray-to-buffer@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
@@ -5020,6 +4947,11 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
+use-breakpoint@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/use-breakpoint/-/use-breakpoint-2.0.1.tgz#0e98cd55a6b0173147b84837a8cdecc63eabfcd7"
+ integrity sha512-f9PuRHzPsCIBW6oizdGpTAuH+49Tt9hMvByWQYpqI95tUN8k6qDX5WhL5s3b6cQfbubtIHCd1bw/8s5CzSbXpA==
+
utf-8-validate@^5.0.3:
version "5.0.5"
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1"
@@ -5115,17 +5047,16 @@ which-collection@^1.0.1:
is-weakset "^2.0.1"
which-typed-array@^1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff"
- integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.6.tgz#f3713d801da0720a7f26f50c596980a9f5c8b383"
+ integrity sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==
dependencies:
- available-typed-arrays "^1.0.2"
- call-bind "^1.0.0"
- es-abstract "^1.18.0-next.1"
+ available-typed-arrays "^1.0.4"
+ call-bind "^1.0.2"
+ es-abstract "^1.18.5"
foreach "^2.0.5"
- function-bind "^1.1.1"
- has-symbols "^1.0.1"
- is-typed-array "^1.1.3"
+ has-tostringtag "^1.0.0"
+ is-typed-array "^1.1.6"
which@^2.0.1, which@^2.0.2:
version "2.0.2"
@@ -5151,15 +5082,6 @@ workerpool@^6.1.2:
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581"
integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -5185,11 +5107,6 @@ xtend@^4.0.2:
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-y18n@^5.0.5:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
- integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
@@ -5200,23 +5117,15 @@ yaml@^1.10.0, yaml@^1.10.2:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-yargs-parser@^20.0.0, yargs-parser@^20.2.2:
+yargs-parser@^20.0.0:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs@^16.0.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
- integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
- dependencies:
- cliui "^7.0.2"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.0"
- y18n "^5.0.5"
- yargs-parser "^20.2.2"
+yarn@^1.22.11:
+ version "1.22.11"
+ resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.11.tgz#d0104043e7349046e0e2aec977c24be106925ed6"
+ integrity sha512-AWje4bzqO9RUn3sdnM5N8n4ZJ0BqCc/kqFJvpOI5/EVkINXui0yuvU7NDCEF//+WaxHuNay2uOHxA4+tq1P3cg==
yocto-queue@^0.1.0:
version "0.1.0"