From 0a021982c64e03bd0c3c155e742dbbf37645ea02 Mon Sep 17 00:00:00 2001 From: Jamie Date: Thu, 7 Oct 2021 03:47:33 -0700 Subject: [PATCH] Overdue wide boi commit - Files table - Sidebar + router - Get files --- package.json | 2 + src-tauri/Cargo.lock | 66 +++---- src-tauri/Cargo.toml | 4 +- src-tauri/src/app/config.rs | 2 +- src-tauri/src/commands.rs | 28 ++- src-tauri/src/main.rs | 5 +- src-tauri/tauri.conf.json | 4 +- src/App.tsx | 105 +++--------- src/components/file/FileList.tsx | 126 ++++++++++++++ src/components/file/FileListTable.tsx | 67 ++++++++ src/components/file/Sidebar.tsx | 69 +++----- src/components/layout/TopBar.tsx | 64 +++++++ src/components/primative/Button.tsx | 5 +- src/components/primative/Shortcut.tsx | 33 ++++ src/components/primative/Tag.tsx | 9 + src/screens/Explorer.tsx | 23 +++ src/screens/Settings.tsx | 80 +++++++++ src/style.css | 20 +++ src/types/filesystem.ts | 24 +-- tailwind.config.js | 6 +- yarn.lock | 238 ++++++++++++++++++++++++-- 21 files changed, 773 insertions(+), 207 deletions(-) create mode 100644 src/components/file/FileList.tsx create mode 100644 src/components/file/FileListTable.tsx create mode 100644 src/components/layout/TopBar.tsx create mode 100644 src/components/primative/Shortcut.tsx create mode 100644 src/components/primative/Tag.tsx create mode 100644 src/screens/Explorer.tsx create mode 100644 src/screens/Settings.tsx diff --git a/package.json b/package.json index c121fc3a9..54568bc0c 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@types/babel-core": "^6.25.7", "@types/react": "^17.0.18", "@types/react-dom": "^17.0.9", + "@types/react-router-dom": "^5.3.1", "@types/tailwindcss": "^2.2.1", "concurrently": "^6.2.1", "prettier": "^2.3.2", @@ -25,6 +26,7 @@ "@headlessui/react": "^1.4.0", "@heroicons/react": "^1.0.4", "@tauri-apps/api": "^1.0.0-beta.5", + "@types/react-table": "^7.7.6", "@vitejs/plugin-react-refresh": "^1.3.6", "autoprefixer": "^9", "clsx": "^1.1.1", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 482af4182..d1e677901 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -2,6 +2,39 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "SpaceDrive" +version = "0.1.0" +dependencies = [ + "anyhow", + "bytesize", + "cargo-edit", + "chrono", + "crossbeam", + "data-encoding", + "env_logger", + "futures", + "int-enum", + "libc", + "log", + "nix 0.23.0", + "once_cell", + "rebind", + "refinery", + "ring 0.17.0-alpha.10", + "rusqlite", + "sea-orm", + "serde", + "serde_json", + "sha256", + "snafu", + "sqlx", + "strum 0.21.0", + "tauri", + "tauri-build", + "walkdir", +] + [[package]] name = "addr2line" version = "0.16.0" @@ -3364,39 +3397,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "sd" -version = "0.1.0" -dependencies = [ - "anyhow", - "bytesize", - "cargo-edit", - "chrono", - "crossbeam", - "data-encoding", - "env_logger", - "futures", - "int-enum", - "libc", - "log", - "nix 0.23.0", - "once_cell", - "rebind", - "refinery", - "ring 0.17.0-alpha.10", - "rusqlite", - "sea-orm", - "serde", - "serde_json", - "sha256", - "snafu", - "sqlx", - "strum 0.21.0", - "tauri", - "tauri-build", - "walkdir", -] - [[package]] name = "sea-orm" version = "0.2.3" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 522e7b1d5..9b1489f2d 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,11 +1,11 @@ [package] -name = "sd" +name = "SpaceDrive" version = "0.1.0" description = "The next gen private virtual filesystem." authors = ["you"] license = "" repository = "" -default-run = "sd" +default-run = "SpaceDrive" edition = "2018" build = "src/build.rs" diff --git a/src-tauri/src/app/config.rs b/src-tauri/src/app/config.rs index 553b1fb8a..5c8353702 100644 --- a/src-tauri/src/app/config.rs +++ b/src-tauri/src/app/config.rs @@ -8,7 +8,7 @@ pub struct AppConfig { // returns the app config struct with complete values pub fn get_config() -> AppConfig { - let app_name = "sd"; + let app_name = "SpaceDrive"; let data_dir = path::data_dir() .unwrap_or(std::path::PathBuf::from("./")) .join(app_name); diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index bf9e8a14d..4746e4e1b 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -1,22 +1,25 @@ +use crate::db::entity::file; use crate::filesystem::{init, reader}; use crate::{db, filesystem}; use anyhow::Result; use once_cell::sync::OnceCell; -use sea_orm::DatabaseConnection; +use sea_orm::{DatabaseConnection, EntityTrait}; pub static DB_INSTANCE: OnceCell = OnceCell::new(); -async fn init_db_instance() -> Result<()> { - let db = db::connection::get_connection().await?; +async fn db_instance() -> Result<&'static DatabaseConnection> { if DB_INSTANCE.get().is_none() { + let db = db::connection::get_connection().await?; DB_INSTANCE.set(db).unwrap_or_default(); + Ok(DB_INSTANCE.get().unwrap()) + } else { + Ok(DB_INSTANCE.get().unwrap()) } - Ok(()) } #[tauri::command(async)] pub async fn scan_dir(path: &str) -> Result<(), String> { - init_db_instance().await.map_err(|e| e.to_string())?; + db_instance().await.map_err(|e| e.to_string())?; let directories = filesystem::explorer::scan(path) .await @@ -26,6 +29,21 @@ pub async fn scan_dir(path: &str) -> Result<(), String> { Ok(()) } + +#[tauri::command(async)] +pub async fn get_files() -> Result, String> { + let connection = db_instance().await.map_err(|e| e.to_string())?; + + let files = file::Entity::find() + .all(connection) + .await + .map_err(|e| e.to_string())?; + + println!("files found, {:?}", files.len()); + + Ok(files[..100].to_vec()) +} + // #[tauri::command(async)] // pub async fn generate_buffer_checksum(path: &str) -> Result { // let mut file = file::read_file(path) diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 47e67adb3..0bde518a3 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -30,7 +30,10 @@ fn main() { // block_on(filesystem::device::discover_storage_devices()).unwrap(); tauri::Builder::default() - .invoke_handler(tauri::generate_handler![commands::scan_dir]) + .invoke_handler(tauri::generate_handler![ + commands::scan_dir, + commands::get_files + ]) .menu(menu::get_menu()) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 9ab6f5cb7..79c1f5ee6 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "package": { - "productName": "sd", + "productName": "SpaceDrive", "version": "0.1.0" }, "build": { @@ -52,7 +52,7 @@ }, "windows": [ { - "title": "sd", + "title": "SpaceDrive", "width": 1200, "height": 700, "resizable": true, diff --git a/src/App.tsx b/src/App.tsx index 9b2718642..06ac56b99 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,93 +1,30 @@ -import React, { useRef, useState } from 'react'; -import { CookingPot, Copy, Gear, Pencil, TrashSimple } from 'phosphor-react'; - -import { invoke } from '@tauri-apps/api'; -import { Button } from './components/primative/Button'; -import { Input, Toggle } from './components/primative'; -import { InputContainer } from './components/primative/InputContainer'; -import { TrafficLights } from './components/os/TrafficLights'; -import { Checkbox } from './components/primative/Checkbox'; -import { useInputState } from './hooks/useInputState'; -import { Dropdown } from './components/primative/Dropdown'; -import { DuplicateIcon, PencilAltIcon, TrashIcon } from '@heroicons/react/solid'; -import { FileRow } from './components/file/FileRow'; +import React, { useRef } from 'react'; +import { Route, BrowserRouter as Router, Switch } from 'react-router-dom'; import { Sidebar } from './components/file/Sidebar'; +import { TopBar } from './components/layout/TopBar'; +import { useInputState } from './hooks/useInputState'; +import { SettingsScreen } from './screens/Settings'; +import { ExplorerScreen } from './screens/Explorer'; export default function App() { - const fileUploader = useRef(null); - const inputState = useInputState('/Users/jamie/Downloads'); - return ( -
-
- - -
-
-
- -
-
- - - - - - + +
+ +
+ +
+ + + + + + + +
-
- - -
-
- - -
-
- -
-
- - - -
- -
-
-
-
+ ); } diff --git a/src/components/file/FileList.tsx b/src/components/file/FileList.tsx new file mode 100644 index 000000000..5439cd2a9 --- /dev/null +++ b/src/components/file/FileList.tsx @@ -0,0 +1,126 @@ +import { DocumentIcon, DotsVerticalIcon, FilmIcon, MusicNoteIcon } from '@heroicons/react/solid'; +import clsx from 'clsx'; +import React, { useMemo, useState } from 'react'; +import { FileData } from '../../types'; + +interface Column { + column: string; + key: string; + width: number; +} + +interface FileListData { + id: number; + type?: string; + tags?: Tag[]; + [key: string]: any; +} + +interface Tag { + name: string; + color: string; +} + +// Function ensure no types are loss, but guarantees that they are Column[] +function ensureIsColumns(data: T) { + return data; +} + +const columns = ensureIsColumns([ + { column: 'Name', key: 'name', width: 280 } as const, + { column: 'Size', key: 'size_in_bytes', width: 120 } as const, + { column: 'Checksum', key: 'meta_checksum', width: 120 } as const + // { column: 'Tags', key: 'tags', width: 120 } as const +]); + +type ColumnKey = typeof columns[number]['key']; + +// const data: FileListData[] = [ +// { +// id: 1, +// name: 'MyNameJeff.mp4', +// type: 'video', +// size: '5GB' +// // tags: [{ name: 'Keepsafe', color: '#3076E6' }] +// }, +// { id: 2, name: 'cow.ogg', type: 'audio', size: '345KB' }, +// { id: 3, name: 'calvin.fig', size: '34MB' }, +// { id: 4, name: 'calvin.fig' }, +// { id: 5, name: 'calvin.fig' }, +// { id: 6, name: 'calvin.fig' } +// ]; + +const RenderCell = ({ colKey, row }: { colKey?: ColumnKey; row?: FileData }) => { + if (!row || !colKey || !row[colKey]) return <>; + + const renderCellWithIcon = (Icon: any) => { + return ( +
+ {colKey == 'name' && } + {row[colKey]} +
+ ); + }; + + switch (colKey) { + case 'name': + return renderCellWithIcon(FilmIcon); + case 'size_in_bytes': + return renderCellWithIcon(MusicNoteIcon); + // case 'tags': + // return renderCellWithIcon(MusicNoteIcon); + + default: + return <>; + } +}; + +export const FileList: React.FC<{ files: FileData[] }> = (props) => { + const [selectedRow, setSelectedRow] = useState(0); + return ( +
+
+
+ {columns.map((col) => ( +
+ + {col.column} +
+ ))} +
+
+
+ {props.files?.map((row, index) => ( +
setSelectedRow(row.id as number)} + className={clsx('table-body-row flex flex-row rounded-lg border-2 border-[#00000000]', { + 'bg-[#00000030]': index % 2 == 0, + 'border-primary-500': selectedRow === row.id + })} + > + {columns.map((col) => ( +
+ {useMemo( + () => ( + + ), + [row, col?.key] + )} +
+ ))} +
+ ))} +
+
+ ); +}; + +// const columnKeyMap = columns.reduce((obj, column, index) => { +// obj[column.key] = index; +// return obj; +// }, {} as Record); diff --git a/src/components/file/FileListTable.tsx b/src/components/file/FileListTable.tsx new file mode 100644 index 000000000..136e56def --- /dev/null +++ b/src/components/file/FileListTable.tsx @@ -0,0 +1,67 @@ +import clsx from 'clsx'; +import React, { useMemo, useState } from 'react'; +import { useTable } from 'react-table'; + +const columns = [ + { Header: 'Name', accessor: 'name' }, + { Header: 'Size', accessor: 'size' } +]; + +export const dummyFileData = [ + { id: 1, name: 'MyNameJeff.mp4', type: 'video', size: '5GB' }, + { id: 2, name: 'cow.ogg', type: 'audio', size: '345KB' }, + { id: 3, name: 'calvin.fig' }, + { id: 4, name: 'calvin.fig' }, + { id: 5, name: 'calvin.fig' }, + { id: 6, name: 'calvin.fig' } +]; + +export const FileListTable: React.FC<{}> = (props) => { + // @ts-expect-error + const tableInstance = useTable({ columns, data: dummyFileData }); + const [selectedRow, setSelectedRow] = useState(0); + const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } = tableInstance; + + return ( +
+ + + {headerGroups.map((headerGroup) => ( + + {headerGroup.headers.map((column) => ( + + ))} + + ))} + + + {rows.map((row) => { + prepareRow(row); + return ( + setSelectedRow(row.original.id || 0)} + className={clsx('even:bg-[#00000040] border-2 border-opacity-0 rounded-sm', { + 'border-2 border-opacity-100 border-primary z-50': selectedRow === row.original.id + })} + {...row.getRowProps()} + > + {row.cells.map((cell) => { + return ( + + ); + })} + + ); + })} + +
+ {column.render('Header')} +
+ {cell.render('Cell')} +
+
+ ); +}; diff --git a/src/components/file/Sidebar.tsx b/src/components/file/Sidebar.tsx index 28f1b8a03..3606814db 100644 --- a/src/components/file/Sidebar.tsx +++ b/src/components/file/Sidebar.tsx @@ -1,52 +1,34 @@ -import { CogIcon, CollectionIcon, CubeTransparentIcon, DatabaseIcon } from '@heroicons/react/solid'; -import { GearSix } from 'phosphor-react'; -import React, { SetStateAction, useState } from 'react'; -import { Button, ButtonVariant } from '../primative'; +import { + CogIcon, + CollectionIcon, + CubeTransparentIcon, + DatabaseIcon, + PhotographIcon, + ServerIcon +} from '@heroicons/react/solid'; +import { Planet } from 'phosphor-react'; +import React from 'react'; +import { NavLink } from 'react-router-dom'; import { Dropdown } from '../primative/Dropdown'; import { DefaultProps } from '../primative/types'; const tabs = [ - { name: 'Drive', icon: CollectionIcon }, - { name: 'Storage', icon: DatabaseIcon }, - { name: 'Explorer', icon: CubeTransparentIcon }, - { name: 'Settings', icon: CogIcon } + { name: 'Spaces', icon: Planet, uri: '/spaces' }, + { name: 'Photos', icon: PhotographIcon, uri: '/photos' }, + { name: 'Storage', icon: ServerIcon, uri: '/storage' }, + { name: 'Explorer', icon: CubeTransparentIcon, uri: '/explorer' }, + { name: 'Settings', icon: CogIcon, uri: '/settings' } ]; -interface SidebarButtonProps extends DefaultProps { - name: string; - icon: any; - setActiveTab: (name: string) => any; - getVarient: (name: string) => ButtonVariant; -} interface SidebarProps extends DefaultProps {} -const SidebarButton: React.FC = (props) => { - return ( - - ); -}; - export const Sidebar: React.FC = (props) => { - const [activeTab, setActiveTab] = useState(tabs[0].name); - - const getVarient = (name: string) => (activeTab == name ? 'selected' : 'default'); - return ( -
+
= (props) => { /> {tabs.map((button, index) => ( - + + {button.icon && } + {button.name} + ))}
); diff --git a/src/components/layout/TopBar.tsx b/src/components/layout/TopBar.tsx new file mode 100644 index 000000000..1048ee964 --- /dev/null +++ b/src/components/layout/TopBar.tsx @@ -0,0 +1,64 @@ +import { + ChevronLeftIcon, + ChevronRightIcon, + CogIcon, + HomeIcon, + ViewBoardsIcon, + ViewGridIcon, + ViewListIcon +} from '@heroicons/react/outline'; +import { HouseSimple } from 'phosphor-react'; +import React from 'react'; +import { TrafficLights } from '../os/TrafficLights'; +import { Button, Input } from '../primative'; +import { Shortcut } from '../primative/Shortcut'; +import { DefaultProps } from '../primative/types'; + +export interface TopBarProps extends DefaultProps {} + +export const TopBar: React.FC = (props) => { + return ( + <> +
+
+ +
+ + +
+ + + +
+
+ +
+ + +
+
+
+ +
+
+ + ); +}; diff --git a/src/components/primative/Button.tsx b/src/components/primative/Button.tsx index 7cd83b59e..625af187a 100644 --- a/src/components/primative/Button.tsx +++ b/src/components/primative/Button.tsx @@ -60,8 +60,9 @@ const variants = { `, primary: 'bg-primary text-white shadow-sm border-primary-600 dark:border-primary-400 active:bg-primary-600 active:border-primary-700 hover:bg-primary-400 hover:border-primary-500', - selected: - 'bg-gray-100 dark:bg-gray-500 active:text-gray-100 dark:hover:text-white dark:text-white' + selected: `bg-gray-100 dark:bg-gray-500 + text-black hover:text-black active:text-black dark:hover:text-white dark:text-white + ` }; export type ButtonVariant = keyof typeof variants; diff --git a/src/components/primative/Shortcut.tsx b/src/components/primative/Shortcut.tsx new file mode 100644 index 000000000..fc3b17a33 --- /dev/null +++ b/src/components/primative/Shortcut.tsx @@ -0,0 +1,33 @@ +import clsx from 'clsx'; +import React from 'react'; +import { DefaultProps } from './types'; + +export interface ShortcutProps extends DefaultProps { + chars: string; +} + +export const Shortcut: React.FC = (props) => { + return ( + + {props.chars} + + ); +}; diff --git a/src/components/primative/Tag.tsx b/src/components/primative/Tag.tsx new file mode 100644 index 000000000..aeef4a9e1 --- /dev/null +++ b/src/components/primative/Tag.tsx @@ -0,0 +1,9 @@ +import clsx from 'clsx'; +import React from 'react'; +import { DefaultProps } from './types'; + +export interface TagProps extends DefaultProps {} + +export const Tag: React.FC = (props) => { + return
{props.children}
; +}; diff --git a/src/screens/Explorer.tsx b/src/screens/Explorer.tsx new file mode 100644 index 000000000..2ba2de405 --- /dev/null +++ b/src/screens/Explorer.tsx @@ -0,0 +1,23 @@ +import React, { useEffect, useState } from 'react'; +import { FileList } from '../components/file/FileList'; +import { emit, listen } from '@tauri-apps/api/event'; +import { invoke } from '@tauri-apps/api'; +import { FileData } from '../types'; + +export const ExplorerScreen: React.FC<{}> = () => { + const [files, setFiles] = useState(null); + useEffect(() => { + invoke('get_files').then((res) => { + setFiles(res as FileData[]); + }); + }, []); + console.log({ files }); + + if (!files) return <>; + + return ( +
+ +
+ ); +}; diff --git a/src/screens/Settings.tsx b/src/screens/Settings.tsx new file mode 100644 index 000000000..1f20bc7f3 --- /dev/null +++ b/src/screens/Settings.tsx @@ -0,0 +1,80 @@ +import { DuplicateIcon, PencilAltIcon, TrashIcon } from '@heroicons/react/solid'; +import { invoke } from '@tauri-apps/api'; +import React, { useRef } from 'react'; +// import { dummyFileData, FileList } from '../components/file/FileList'; +import { Input, Toggle } from '../components/primative'; +import { Button } from '../components/primative/Button'; +import { Checkbox } from '../components/primative/Checkbox'; +import { Dropdown } from '../components/primative/Dropdown'; +import { InputContainer } from '../components/primative/InputContainer'; +import { Shortcut } from '../components/primative/Shortcut'; +import { useInputState } from '../hooks/useInputState'; + +export const SettingsScreen: React.FC<{}> = () => { + const fileUploader = useRef(null); + const inputState = useInputState('/Users/jamie/Downloads'); + + return ( +
+
+ {/* */} +
+ + + + + + +
+
+ + +
+
+ + +
+
+ +
+
+ + + +
+ +
+ + +
+
+
+ ); +}; diff --git a/src/style.css b/src/style.css index b5c61c956..95bc8ecee 100644 --- a/src/style.css +++ b/src/style.css @@ -1,3 +1,23 @@ @tailwind base; @tailwind components; @tailwind utilities; +/* +.table-container { + @apply w-full bg-gray-900; +} +.table-head { + @apply w-full; +} +.table-head-row { + @apply w-full flex flex-row; +} +.table-head-cell { +} +.table-body { + @apply w-full; +} +.table-row { + @apply w-full flex flex-row; +} +.table-cell { +} */ diff --git a/src/types/filesystem.ts b/src/types/filesystem.ts index 3231c502f..83a144240 100644 --- a/src/types/filesystem.ts +++ b/src/types/filesystem.ts @@ -1,31 +1,25 @@ import { Encryption } from './library'; import { ImageMeta, VideoMeta } from './media'; -export interface Object { +export interface FileData { id?: number; - checksum: string; - type: ObjectType; - + meta_checksum: string; uri: string; - name: string; - extension: string; - size: number; - mime: string; - encryption?: Encryption; date_created: Date; date_modified: Date; date_indexed: Date; + name: string; + extension: string; + size_in_bytes: string; + + library_id: string; directory_id: string; + ipfs_id: string; storage_device_id: string; capture_device_id: string; - parent_object_id: string; - user_id: string; - - geolocation: string; - extra_data: null | ImageMeta | VideoMeta; - ipfs_id: string; + parent_file_id: string; } export interface Directory { diff --git a/tailwind.config.js b/tailwind.config.js index b5fdfe610..ec87800ef 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -42,12 +42,12 @@ module.exports = { 800: '#282A34', 900: '#1B1C23' } - }, - fontFamily: { sans: ['Inter', ...defaultTheme.fontFamily.sans] } + } + // fontFamily: { sans: ['Inter', ...defaultTheme.fontFamily.sans] } } }, variants: { extend: {} }, - plugins: [require('@tailwindcss/forms')] + plugins: [] }; diff --git a/yarn.lock b/yarn.lock index bbe33d504..372029b3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -62,6 +62,22 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.15.4": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" + integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== + dependencies: + "@babel/types" "^7.15.6" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" + integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== + dependencies: + "@babel/types" "^7.15.4" + "@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" @@ -81,6 +97,15 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== + dependencies: + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" @@ -88,6 +113,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-hoist-variables@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" @@ -95,6 +127,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== + dependencies: + "@babel/types" "^7.15.4" + "@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" @@ -102,6 +141,13 @@ dependencies: "@babel/types" "^7.15.0" +"@babel/helper-module-imports@^7.0.0": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-imports@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" @@ -159,6 +205,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + "@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" @@ -192,6 +245,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== +"@babel/parser@^7.15.4": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" + integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== + "@babel/plugin-transform-react-jsx-self@^7.14.5": version "7.14.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz#33041e665453391eb6ee54a2ecf3ba1d46bd30f4" @@ -222,6 +280,15 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/template@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/traverse@^7.15.0": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" @@ -237,6 +304,21 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.4.5": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + debug "^4.1.0" + globals "^11.1.0" + "@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" @@ -245,11 +327,41 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@babel/types@^7.15.4", "@babel/types@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + "@cush/relative@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@cush/relative/-/relative-1.0.0.tgz#8cd1769bf9bde3bb27dac356b1bc94af40f6cc16" integrity sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA== +"@emotion/is-prop-valid@^0.8.8": + 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== + +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + "@graphql-typed-document-node/core@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950" @@ -323,13 +435,6 @@ dependencies: defer-to-connect "^2.0.0" -"@tailwindcss/forms@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.3.3.tgz#a29d22668804f3dae293dcadbef1aa6315c45b64" - integrity sha512-U8Fi/gq4mSuaLyLtFISwuDYzPB73YzgozjxOIHsK6NXgg/IWD1FLaHbFlWmurAMyy98O+ao74ksdQefsquBV1Q== - dependencies: - mini-svg-data-uri "^1.2.3" - "@tauri-apps/api@^1.0.0-beta.5": version "1.0.0-beta.5" resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.0.0-beta.5.tgz#32727b3b478f67330a79409ceaf16a4a51410fce" @@ -429,6 +534,19 @@ "@types/node" "*" "@types/responselike" "*" +"@types/history@*": + version "4.7.9" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.9.tgz#1cfb6d60ef3822c589f18e70f8b12f9a28ce8724" + integrity sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ== + +"@types/hoist-non-react-statics@*": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/http-cache-semantics@*": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" @@ -468,6 +586,30 @@ dependencies: "@types/react" "*" +"@types/react-router-dom@^5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.1.tgz#76700ccce6529413ec723024b71f01fc77a4a980" + integrity sha512-UvyRy73318QI83haXlaMwmklHHzV9hjl3u71MmM6wYNu0hOVk9NLTa0vGukf8zXUqnwz4O06ig876YSPpeK28A== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.17" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.17.tgz#087091006213b11042f39570e5cd414863693968" + integrity sha512-RNSXOyb3VyRs/EOGmjBhhGKTbnN6fHWvy5FNLzWfOWOGjgVUKqJZXfpKzLmgoU8h6Hj8mpALj/mbXQASOb92wQ== + dependencies: + "@types/history" "*" + "@types/react" "*" + +"@types/react-table@^7.7.6": + version "7.7.6" + resolved "https://registry.yarnpkg.com/@types/react-table/-/react-table-7.7.6.tgz#4899ccc46b4a1de08cc1daf120842e37e112e51e" + integrity sha512-ZMFHh1sG5AGDmhVRpz9mgGByGmBFAqnZ7QnyqGa5iAlKtcSC3vb/gul47lM0kJ1uvlawc+qN5k+++pe+GBdJ+g== + dependencies: + "@types/react" "*" + "@types/react@*", "@types/react@^17.0.18": version "17.0.18" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.18.tgz#4109cbbd901be9582e5e39e3d77acd7b66bb7fbe" @@ -489,6 +631,15 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/styled-components@^5.1.14": + version "5.1.14" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.14.tgz#e9cf8cdb5eef9d139628183a84c083f630635d67" + integrity sha512-d6P1/tyNytqKwam3cQXq7a9uPtovc/mdAs7dBiz1YbDdNIT3X4WmuFU78YdSYh84TXVuhOwezZ3EeKuNBhwsHQ== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" + "@types/tailwindcss@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@types/tailwindcss/-/tailwindcss-2.2.1.tgz#891349cc71b5a85208ca5796938d91dd48cc0417" @@ -669,6 +820,21 @@ autoprefixer@^9: postcss "^7.0.32" postcss-value-parser "^4.1.0" +"babel-plugin-styled-components@>= 1.12.0": + version "1.13.2" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz#ebe0e6deff51d7f93fceda1819e9b96aeb88278d" + integrity sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-module-imports" "^7.0.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -897,6 +1063,11 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001248: version "1.0.30001251" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" @@ -1215,11 +1386,25 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + css-unit-converter@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" @@ -2010,7 +2195,7 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -2492,7 +2677,7 @@ lodash.topath@^4.5.2: resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= -lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2654,11 +2839,6 @@ mini-create-react-context@^0.4.0: "@babel/runtime" "^7.12.1" tiny-warning "^1.0.3" -mini-svg-data-uri@^1.2.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/mini-svg-data-uri/-/mini-svg-data-uri-1.3.3.tgz#91d2c09f45e056e5e1043340b8b37ba7b50f4fac" - integrity sha512-+fA2oRcR1dJI/7ITmeQJDrYWks0wodlOz0pAEhKYJ2IVc1z0AnwJUsKY2fzFmPAM3Jo9J0rBx8JAA9QQSJ5PuA== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3148,7 +3328,7 @@ postcss-value-parser@^3.3.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== @@ -3354,6 +3534,11 @@ react-router@5.2.0: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" +react-table@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/react-table/-/react-table-7.7.0.tgz#e2ce14d7fe3a559f7444e9ecfe8231ea8373f912" + integrity sha512-jBlj70iBwOTvvImsU9t01LjFjy4sXEtclBovl3mTiqjz23Reu0DKnRza4zlLtOPACx6j2/7MrQIthIK1Wi+LIA== + react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -3669,6 +3854,11 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + sharp@0.28.3: version "0.28.3" resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.28.3.tgz#ecd74cefd020bee4891bb137c9850ee2ce277a8b" @@ -3947,12 +4137,28 @@ strtok3@^6.0.3: "@tokenizer/token" "^0.3.0" peek-readable "^4.0.1" +styled-components@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.1.tgz#8a86dcd31bff7049c2ed408bae36fa23f03f071a" + integrity sha512-JThv2JRzyH0NOIURrk9iskdxMSAAtCfj/b2Sf1WJaCUsloQkblepy1jaCLX/bYE+mhYo3unmwVSI9I5d9ncSiQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^0.8.8" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==