├── src ├── decs.d.ts ├── vite-env.d.ts ├── atoms │ ├── ui.ts │ ├── current.ts │ └── data.ts ├── main.tsx ├── index.css ├── types.ts ├── components │ ├── Ring │ │ └── index.tsx │ ├── Base │ │ └── index.tsx │ ├── Cursors │ │ └── index.tsx │ ├── Banner │ │ └── index.tsx │ ├── World │ │ └── index.tsx │ ├── BuddyList │ │ └── index.tsx │ ├── Pane │ │ └── index.tsx │ └── Blog │ │ └── index.tsx ├── lib │ ├── index.ts │ └── ws.tsx ├── App.tsx ├── App.css └── stitches.config.ts ├── .gitignore ├── .eslintignore ├── .prettierignore ├── .prettierrc.json ├── vite.config.ts ├── index.html ├── tsconfig.json ├── .eslintrc.js ├── package.json ├── server.js ├── public ├── glove@2x.svg └── glove.svg └── yarn.lock /src/decs.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'culori'; 2 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | node_modules/* -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | node_modules/* -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "trailingComma": "all", 4 | "singleQuote": true, 5 | "printWidth": 90, 6 | "tabWidth": 2, 7 | "jsxBracketSameLine": true, 8 | "endOfLine": "auto" 9 | } -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import reactRefresh from '@vitejs/plugin-react-refresh'; 2 | import { defineConfig } from 'vite'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [reactRefresh()], 7 | }); 8 | -------------------------------------------------------------------------------- /src/atoms/ui.ts: -------------------------------------------------------------------------------- 1 | import { atomWithStorage } from 'jotai/utils'; 2 | 3 | import { Vec } from '../types'; 4 | 5 | const panes = atomWithStorage>('panes', { 6 | buddyList: { x: 600, y: 50 }, 7 | }); 8 | 9 | const atoms = { panes }; 10 | 11 | export default atoms; 12 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import './index.css'; 2 | 3 | import React from 'react'; 4 | import ReactDOM from 'react-dom'; 5 | 6 | import App from './App'; 7 | import { SocketProvider } from './lib'; 8 | 9 | ReactDOM.render( 10 | 11 | 12 | 13 | 14 | , 15 | document.getElementById('root'), 16 | ); 17 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | blogring 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export type UUID = string; 2 | 3 | export type Ring = { 4 | id: UUID; 5 | name: string; 6 | color: string; 7 | blogs: UUID[]; 8 | }; 9 | 10 | export type Blog = { 11 | id: UUID; 12 | content: string; 13 | title: string; 14 | author: string; 15 | position: Vec; 16 | updatedAt: number; 17 | createdAt: number; 18 | color: string; 19 | }; 20 | 21 | export type Vec = { 22 | x: number; 23 | y: number; 24 | }; 25 | 26 | export type User = { 27 | id: UUID; 28 | name: string; 29 | color: string; 30 | rings: UUID[]; 31 | }; 32 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "allowJs": false, 6 | "skipLibCheck": true, 7 | "esModuleInterop": false, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "module": "ESNext", 12 | "moduleResolution": "Node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "noEmit": true, 18 | "jsx": "react" 19 | }, 20 | "include": ["./src"], 21 | "exclude": ["node_modules"] 22 | } 23 | -------------------------------------------------------------------------------- /src/components/Ring/index.tsx: -------------------------------------------------------------------------------- 1 | import { useUpdateAtom } from 'jotai/utils'; 2 | import React from 'react'; 3 | 4 | import { useRing } from '../../atoms/current'; 5 | import data from '../../atoms/data'; 6 | import { RingPayload, useSetSocketHandler } from '../../lib/ws'; 7 | import { styled } from '../../stitches.config'; 8 | import { Banner } from '../Banner'; 9 | import { Blogs } from '../Blog'; 10 | import { BuddyList } from '../BuddyList'; 11 | import { Cursors } from '../Cursors'; 12 | import { World } from '../World'; 13 | 14 | export function Ring() { 15 | const ring = useRing(); 16 | const setRings = useUpdateAtom(data.rings); 17 | 18 | // Handle ring changes 19 | useSetSocketHandler('ring', (payload) => { 20 | const { ring } = payload as RingPayload; 21 | setRings((prev) => ({ 22 | ...prev, 23 | [ring.id]: { 24 | ...prev[ring.id], 25 | ...ring, 26 | }, 27 | })); 28 | }); 29 | 30 | return ( 31 | <> 32 | 33 | 34 | }> 35 | 36 | 37 | 38 | 39 | 40 | ); 41 | } 42 | const StyledBackground = styled('div', { 43 | full: 'fixed', 44 | zIndex: '-1', 45 | }); 46 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | import { filterHueRotate, formatRgb, parse } from 'culori'; 2 | import { useEffect, useRef, useState } from 'react'; 3 | 4 | import { Vec } from '../types'; 5 | 6 | // lerp function between two ranges 7 | export function lerp(value: number, r1: [number, number], r2: [number, number]): number { 8 | return ((value - r1[0]) * (r2[1] - r2[0])) / (r1[1] - r1[0]) + r2[0]; 9 | } 10 | 11 | // Stores the size of an element 12 | export function useSize() { 13 | const ref = useRef(null); 14 | 15 | const [size, setSize] = useState({ x: 0, y: 0 }); 16 | const [observer] = useState( 17 | new ResizeObserver((entries) => { 18 | const entry = entries[0]; 19 | if (entry.contentRect) { 20 | setSize({ x: entry.contentRect.width, y: entry.contentRect.height }); 21 | } 22 | }), 23 | ); 24 | 25 | useEffect(() => { 26 | const el = ref.current; 27 | if (!el) return; 28 | observer.observe(el); 29 | }, [observer]); 30 | 31 | return { size, ref } as const; 32 | } 33 | 34 | // Generate a random color in our palette 35 | export const BASE_COLOR = 'salmon'; // sets the SV for our colors 36 | export function randomColor() { 37 | const hueRotate = filterHueRotate(Math.random() * 360); 38 | return formatRgb(hueRotate(parse(BASE_COLOR))); 39 | } 40 | 41 | export { SocketProvider } from './ws'; 42 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: '@typescript-eslint/parser', 4 | parserOptions: { 5 | ecmaVersion: 2020, 6 | sourceType: 'module', 7 | ecmaFeatures: { 8 | jsx: true, 9 | }, 10 | }, 11 | settings: { 12 | react: { 13 | version: 'detect', 14 | }, 15 | }, 16 | env: { 17 | browser: true, 18 | amd: true, 19 | node: true, 20 | }, 21 | extends: [ 22 | 'eslint:recommended', 23 | 'plugin:react/recommended', 24 | 'plugin:jsx-a11y/recommended', 25 | 'plugin:prettier/recommended', // Make sure this is always the last element in the array. 26 | ], 27 | plugins: ['simple-import-sort', 'prettier'], 28 | rules: { 29 | 'prettier/prettier': ['error', {}, { usePrettierrc: true }], 30 | 'react/react-in-jsx-scope': 'off', 31 | 'jsx-a11y/accessible-emoji': 'off', 32 | 'react/prop-types': 'off', 33 | 'no-unused-vars': 'off', // doesnt understand typescript 34 | '@typescript-eslint/explicit-function-return-type': 'off', 35 | 'simple-import-sort/imports': 'error', 36 | 'simple-import-sort/exports': 'error', 37 | 'jsx-a11y/anchor-is-valid': [ 38 | 'error', 39 | { 40 | components: ['Link'], 41 | specialLink: ['hrefLeft', 'hrefRight'], 42 | aspects: ['invalidHref', 'preferButton'], 43 | }, 44 | ], 45 | }, 46 | }; 47 | -------------------------------------------------------------------------------- /src/components/Base/index.tsx: -------------------------------------------------------------------------------- 1 | import { styled } from '../../stitches.config'; 2 | 3 | export const UnstyledLink = styled('a', { 4 | textDecoration: 'none', 5 | color: 'inherit', 6 | }); 7 | 8 | // DO NOT EDIT MANUALLY 9 | // THIS IS COPIED FROM BUTTON BELOW 10 | export const ButtonLink = styled('a', { 11 | padding: '$2', 12 | borderRadius: '$1', 13 | typography: 's', 14 | display: 'block', 15 | width: '100%', 16 | background: 'whitesmoke', 17 | color: '$blackAText', 18 | 19 | '&:hover': { 20 | filter: 'brightness(102%)', 21 | cursor: 'pointer', 22 | }, 23 | '&:active': { 24 | filter: 'brightness(98%)', 25 | }, 26 | }); 27 | 28 | export const Button = styled('button', { 29 | padding: '$2', 30 | borderRadius: '$1', 31 | typography: 's', 32 | display: 'block', 33 | width: '100%', 34 | background: 'whitesmoke', 35 | color: '$blackAText', 36 | transition: 'transform .15s ease-in-out', 37 | 38 | '&:hover': { 39 | filter: 'brightness(102%)', 40 | cursor: 'pointer', 41 | transform: `rotate(-.5deg) scale(1.03)`, 42 | transition: 'transform .1s ease-in', 43 | }, 44 | '&:active': { 45 | filter: 'brightness(98%)', 46 | transform: `rotate(3deg) scale(.98)`, 47 | transition: 'transform .1s ease-out', 48 | }, 49 | 50 | variants: { 51 | size: { 52 | s: { 53 | padding: '$1 $2', 54 | }, 55 | }, 56 | }, 57 | }); 58 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import './App.css'; 2 | 3 | import { useAtom } from 'jotai'; 4 | import { useUpdateAtom } from 'jotai/utils'; 5 | import React, { useEffect } from 'react'; 6 | import { v4 as uuid } from 'uuid'; 7 | 8 | import { currentUserIdAtom, useWindowSizeObserver } from './atoms/current'; 9 | import data from './atoms/data'; 10 | import { Ring } from './components/Ring'; 11 | import { randomColor } from './lib'; 12 | import { UserPayload, useSetSocketHandler } from './lib/ws'; 13 | 14 | function App() { 15 | useWindowSizeObserver(); 16 | useCreateUser(); 17 | return ( 18 | <> 19 | 20 | 21 | ); 22 | } 23 | 24 | // If no existing user in localstorage, create a new one 25 | function useCreateUser() { 26 | const [currentUserId, setCurrentUserId] = useAtom(currentUserIdAtom); 27 | const setUsers = useUpdateAtom(data.users); 28 | useEffect(() => { 29 | if (currentUserId !== null) return; // Already logged in 30 | 31 | const id = uuid(); 32 | const newUser = { 33 | id, 34 | name: '', 35 | color: randomColor(), 36 | rings: ['1'], 37 | }; 38 | setCurrentUserId(id); 39 | setUsers((prev) => ({ 40 | ...prev, 41 | [id]: newUser, 42 | })); 43 | }, [currentUserId]); 44 | 45 | // Also sync changes from websockets 46 | useSetSocketHandler('user', (payload) => { 47 | const { user } = payload as UserPayload; 48 | setUsers((prev) => ({ 49 | ...prev, 50 | [user.id]: { 51 | ...prev[user.id], 52 | ...user, 53 | }, 54 | })); 55 | }); 56 | } 57 | 58 | export default App; 59 | -------------------------------------------------------------------------------- /src/components/Cursors/index.tsx: -------------------------------------------------------------------------------- 1 | import { animated, Spring } from '@react-spring/web'; 2 | import { atom } from 'jotai'; 3 | import { useAtomValue } from 'jotai/utils'; 4 | import React, { useRef } from 'react'; 5 | 6 | import data from '../../atoms/data'; 7 | import { CursorPayload, socketStateAtom } from '../../lib/ws'; 8 | import { styled } from '../../stitches.config'; 9 | import { Vec } from '../../types'; 10 | 11 | const cursorsAtom = atom( 12 | (get) => 13 | get(socketStateAtom)['cursor'] as Record>, 14 | ); 15 | 16 | export function Cursors() { 17 | const cursors = useAtomValue(cursorsAtom); 18 | 19 | return ( 20 | <> 21 | {cursors && 22 | Object.entries(cursors).map(([id, { position }]) => ( 23 | 24 | ))} 25 | 26 | ); 27 | } 28 | 29 | function Cursor({ position: { x, y }, id }: { id: string; position: Vec }) { 30 | const ref = useRef(null); 31 | const user = useAtomValue(data.userFamily(id)); 32 | 33 | return ( 34 | 35 | {(styles) => ( 36 | 42 | )} 43 | 44 | ); 45 | } 46 | 47 | const StyledCursor = styled(animated.div, { 48 | position: 'absolute', 49 | width: '100px', 50 | height: '100px', 51 | backgroundImage: 'url(./glove.svg)', 52 | backgroundRepeat: 'no-repeat', 53 | // pointerEvents: 'none', 54 | zIndex: '$cursor', 55 | }); 56 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blogring", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "node server.js & vite", 6 | "build": "tsc && vite build", 7 | "serve": "vite preview", 8 | "lint:fix": "eslint ./src --ext .jsx,.js,.ts,.tsx --quiet --fix --ignore-path ./.gitignore", 9 | "lint:format": "prettier --loglevel warn --write \"./**/*.{js,jsx,ts,tsx,css,md,json}\" ", 10 | "lint": "yarn lint:format && yarn lint:fix ", 11 | "type-check": "tsc", 12 | "start": "yarn build && NODE_ENV=production node server.js" 13 | }, 14 | "engines": { 15 | "node": "14.x" 16 | }, 17 | "dependencies": { 18 | "@react-spring/web": "^9.2.4", 19 | "@stitches/react": "^0.2.3", 20 | "culori": "^0.18.2", 21 | "jotai": "^1.2.2", 22 | "path": "^0.12.7", 23 | "react": "^17.0.2", 24 | "react-dom": "^17.0.2", 25 | "react-use-gesture": "^9.1.3", 26 | "uuid": "^8.3.2", 27 | "express": "^4.17.1", 28 | "ws": "^7.5.3" 29 | }, 30 | "devDependencies": { 31 | "yarn": "^1.22.11", 32 | "@types/react": "^17.0.0", 33 | "@types/react-dom": "^17.0.0", 34 | "@types/uuid": "^8.3.1", 35 | "@typescript-eslint/eslint-plugin": "^4.17.0", 36 | "@typescript-eslint/parser": "^4.17.0", 37 | "@vitejs/plugin-react-refresh": "^1.3.5", 38 | "eslint": "^7.22.0", 39 | "eslint-config-prettier": "^8.1.0", 40 | "eslint-plugin-import": "^2.22.1", 41 | "eslint-plugin-jsx-a11y": "^6.4.1", 42 | "eslint-plugin-prettier": "^3.3.1", 43 | "eslint-plugin-react": "^7.22.0", 44 | "eslint-plugin-simple-import-sort": "^7.0.0", 45 | "pre-commit": "^1.2.2", 46 | "prettier": "^2.2.1", 47 | "typescript": "^4.3.2", 48 | "vite": "^2.4.3" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/atoms/current.ts: -------------------------------------------------------------------------------- 1 | // Current instances of data.ts 2 | 3 | import { atom, useAtom } from 'jotai'; 4 | import { atomWithStorage, useAtomValue, useUpdateAtom } from 'jotai/utils'; 5 | import { useEffect, useMemo } from 'react'; 6 | 7 | import { UUID } from '../types'; 8 | import data from './data'; 9 | 10 | export const currentUserIdAtom = atomWithStorage('currentUserId', null); 11 | // export const currentUserAtom = atom((get) => { 12 | // const id = get(currentUserIdAtom); 13 | // if (id === null) return null; 14 | // return get(data.users)[id]; 15 | // }); 16 | export function useUser() { 17 | const id = useAtomValue(currentUserIdAtom); 18 | return useAtom(data.userFamily(id)); 19 | } 20 | 21 | export const currentRingIdAtom = atomWithStorage('currentRingId', '1'); 22 | // not using derived atom due to bug here: 23 | // bug: https://github.com/pmndrs/jotai/issues/616#issuecomment-887728130 24 | export function useRing() { 25 | const rings = useAtomValue(data.rings); 26 | const id = useAtomValue(currentRingIdAtom); 27 | const ring = useMemo(() => rings[id], [rings, id]); 28 | return ring; 29 | } 30 | 31 | export const currentScrollOffsetAtom = atom({ x: 0, y: 0 }); 32 | export const currentWindowSizeAtom = atom({ 33 | x: window.innerWidth, 34 | y: window.innerHeight, 35 | }); 36 | // Keeps the currentWindowSize atom updated without needing to call window.innerW/H which thrashes layout 37 | export function useWindowSizeObserver() { 38 | const set = useUpdateAtom(currentWindowSizeAtom); 39 | useEffect(() => { 40 | function updateCurrentWindowSize() { 41 | set({ x: window.innerWidth, y: window.innerHeight }); 42 | } 43 | window.addEventListener('resize', updateCurrentWindowSize); 44 | return () => { 45 | window.removeEventListener('resize', updateCurrentWindowSize); 46 | }; 47 | }, []); 48 | } 49 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'), 2 | http = require('http'), 3 | app = express(), 4 | server = http.createServer(app), 5 | path = require('path'), 6 | WebSocket = require('ws'); 7 | 8 | const wss = new WebSocket.Server({ server, path: '/ws' }); 9 | 10 | const clients = {}; // Record 11 | 12 | wss.on('connection', function connection(ws) { 13 | ws.on('message', function incoming(message) { 14 | // console.log('received: %s', message); 15 | 16 | // When a new user joins, pick another user to sync data over 17 | const payload = JSON.parse(message); 18 | // console.log(payload); 19 | if (payload.event === 'join') { 20 | // store client by client generated ID 21 | clients[payload.id] = ws; 22 | 23 | // use array.some like a forEach with break 24 | for (var i = 0; i < wss.clients.length; i++) { 25 | const client = wss.clients[i]; 26 | if (client !== ws && client.readyState === WebSocket.OPEN) { 27 | client.send(message); 28 | // console.log('SYNCER selected', client); 29 | break; 30 | } 31 | } 32 | } 33 | 34 | // The user that receives 'join' payload will sync back data to new user 35 | if (payload.event === 'sync') { 36 | // console.log('SYNC', payload); 37 | clients[payload.id].send(message); 38 | } 39 | 40 | wss.clients.forEach(function each(client) { 41 | // dont send to same client 42 | if (client !== ws && client.readyState === WebSocket.OPEN) { 43 | client.send(message); 44 | } 45 | }); 46 | }); 47 | }); 48 | 49 | app.use(express.static(path.join(__dirname, 'dist'))); 50 | 51 | app.get('/', (req, res) => { 52 | // res.json({'hi': 123}) 53 | 54 | res.sendFile(path.join(__dirname, 'dist', 'index.html')); 55 | }); 56 | 57 | const port = process.env.NODE_ENV === 'production' ? 3000 : 3001; 58 | server.listen(port, () => { 59 | console.log(`Listening on port ${port}`); 60 | }); 61 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | /* https://piccalil.li/blog/a-modern-css-reset/ */ 2 | /* Box sizing rules */ 3 | *, 4 | *::before, 5 | *::after { 6 | box-sizing: border-box; 7 | } 8 | 9 | /* Remove default margin */ 10 | body, 11 | h1, 12 | h2, 13 | h3, 14 | h4, 15 | p, 16 | ul, 17 | ol, 18 | figure, 19 | blockquote, 20 | dl, 21 | dd { 22 | margin: 0; 23 | } 24 | 25 | h1, 26 | h2, 27 | h3, 28 | h4, 29 | h5, 30 | h6 { 31 | font-weight: inherit; 32 | font-size: inherit; 33 | line-height: inherit; 34 | } 35 | 36 | /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */ 37 | ul, 38 | ol { 39 | padding: 0; 40 | list-style: none; 41 | } 42 | 43 | /* Set core root defaults */ 44 | html:focus-within { 45 | scroll-behavior: smooth; 46 | } 47 | 48 | /* Set core body defaults */ 49 | body { 50 | min-height: 100vh; 51 | text-rendering: optimizeSpeed; 52 | line-height: 1.5; 53 | overscroll-behavior: noscroll; 54 | cursor: image-set(url(glove.svg) 1x, url(glove@2x.svg) 2x), auto; 55 | } 56 | 57 | /* A elements that don't have a class get default styles */ 58 | a:not([class]) { 59 | text-decoration-skip-ink: auto; 60 | } 61 | 62 | /* Make images easier to work with */ 63 | img, 64 | picture { 65 | max-width: 100%; 66 | display: block; 67 | } 68 | 69 | /* Inherit fonts for inputs and buttons */ 70 | input, 71 | button, 72 | textarea, 73 | select { 74 | font: inherit; 75 | appearance: none; 76 | border: 0; 77 | background: inherit; 78 | color: inherit; 79 | } 80 | 81 | /* Remove all animations, transitions and smooth scroll for people that prefer not to see them */ 82 | @media (prefers-reduced-motion: reduce) { 83 | html:focus-within { 84 | scroll-behavior: auto; 85 | } 86 | 87 | *, 88 | *::before, 89 | *::after { 90 | animation-duration: 0.01ms !important; 91 | animation-iteration-count: 1 !important; 92 | transition-duration: 0.01ms !important; 93 | scroll-behavior: auto !important; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/stitches.config.ts: -------------------------------------------------------------------------------- 1 | // stitches.config.ts 2 | import { createCss } from '@stitches/react'; 3 | import { formatRgb, hsv, interpolate, parse, rgb } from 'culori'; 4 | 5 | import { BASE_COLOR } from './lib'; 6 | 7 | export const { styled, css, global, keyframes, getCssString, theme } = createCss({ 8 | theme: { 9 | space: { 10 | 1: '.25rem', 11 | 2: '.5rem', 12 | 3: '.75rem', 13 | 4: '1rem', 14 | }, 15 | radii: { 16 | 1: '.25rem', 17 | 2: '.5rem', 18 | 3: '.75rem', 19 | 4: '1rem', 20 | }, 21 | fontSizes: { 22 | xs: '.65rem', 23 | s: '.85rem', 24 | m: '1rem', 25 | l: '1.2rem', 26 | }, 27 | fontWeights: { 28 | xs: '600', 29 | s: '500', 30 | m: '400', 31 | l: '600', 32 | }, 33 | lineHeights: { 34 | xs: '1rem', 35 | s: '1rem', 36 | m: '1.4rem', 37 | l: '1.5rem', 38 | }, 39 | colors: { 40 | blackA: 'rgba(0,0,0,.1)', 41 | blackAText: 'rgba(0,0,0,.66)', 42 | gray400: 'gainsboro', 43 | gray500: 'lightgray', 44 | }, 45 | zIndices: { 46 | max: 2147483647, 47 | cursor: '$max', 48 | }, 49 | }, 50 | media: { 51 | phone: '(max-width: 400px)', 52 | tablet: '(max-width: 600px)', 53 | }, 54 | utils: { 55 | full: () => (position: '' | 'fixed' | 'absolute') => ({ 56 | position: position !== '' ? position : 'absolute', 57 | top: 0, 58 | left: 0, 59 | right: 0, 60 | bottom: 0, 61 | }), 62 | focus: () => (color: string) => ({ 63 | '&:focus-within': { 64 | boxShadow: `0 0 0 2px ${color ? color : `rgba(0, 0, 255, 0.3)`}`, 65 | }, 66 | }), 67 | noFocus: () => () => ({ '&:focus': { outline: 'none' } }), 68 | tintBgColor: () => (color?: string) => { 69 | if (!color) return {}; 70 | const tint = interpolate([color, 'white']); 71 | return { backgroundColor: formatRgb(tint(0.8)) }; 72 | }, 73 | shadeColor: () => (color: string) => { 74 | const shade = interpolate([color, 'black']); 75 | return { color: formatRgb(shade(0.8)) }; 76 | }, 77 | typography: (config) => (scale: 'xs' | 's' | 'm' | 'l') => ({ 78 | fontSize: config.theme.fontSizes[scale], 79 | fontWeight: config.theme.fontWeights[scale], 80 | lineHeight: config.theme.lineHeights[scale], 81 | letterSpacing: { xs: -0.3, s: 0, m: 0, l: -0.35 }[scale], 82 | }), 83 | shadowBorderColor: () => (color?: string) => { 84 | if (!color) return {}; 85 | const colorWithAlpha = rgb(parse(color)); 86 | colorWithAlpha.alpha = 0.3; 87 | return { boxShadow: `0 0 0 1px ${formatRgb(colorWithAlpha)}` }; 88 | }, 89 | tintToColor: () => (color?: string) => { 90 | if (!color) return {}; 91 | console.log(color); 92 | // take the hue of our color 93 | const toColor = hsv(parse(color)); 94 | // take the hue of the base color 95 | const baseColor = hsv(parse(BASE_COLOR)); 96 | // take that difference and apply it to the hue rotation for this sepia-based tint filter 97 | const baseColorRotation = -110; 98 | const hueRotate = toColor.h - baseColor.h + baseColorRotation; 99 | return { 100 | filter: `sepia(1) saturate(35%) brightness(80%) hue-rotate(${hueRotate}deg)`, 101 | }; 102 | }, 103 | }, 104 | }); 105 | -------------------------------------------------------------------------------- /src/components/Banner/index.tsx: -------------------------------------------------------------------------------- 1 | import { useUpdateAtom } from 'jotai/utils'; 2 | import React from 'react'; 3 | 4 | import { useUser } from '../../atoms/current'; 5 | import data from '../../atoms/data'; 6 | import { styled } from '../../stitches.config'; 7 | import { Ring } from '../../types'; 8 | import { Button } from '../Base'; 9 | 10 | interface Props { 11 | ring: Ring; 12 | } 13 | 14 | export function Banner({ ring: { color, id, name } }: Props) { 15 | const createBlog = useUpdateAtom(data.createBlog); 16 | const [user, setUser] = useUser(); 17 | 18 | if (!user) return null; 19 | 20 | return ( 21 | <> 22 | 23 | {/* {new Date().getFullYear()} */} 24 | 25 | {new Date().toDateString().split(' ').slice(0, 3).join(' ')} 26 | 27 | {/* {new Date().toDateString()} */} 28 | 29 | {/* Ring */} 30 | {name} 31 | {/* Write with {blogs.length} others */} 32 | 33 | 58 | 59 | 60 | 61 | ); 62 | } 63 | 64 | const StyledH1 = styled('h1', { 65 | typography: 'm', 66 | fontWeight: '600', 67 | '@phone': { 68 | typography: 's', 69 | }, 70 | }); 71 | 72 | const StyledText = styled('div', { 73 | typography: 'm', 74 | '@phone': { 75 | typography: 's', 76 | }, 77 | }); 78 | 79 | const StyledBanner = styled('div', { 80 | position: 'fixed', 81 | top: '$2', 82 | left: '$4', 83 | right: '$4', 84 | padding: '0 0 $2', 85 | opacity: '0.8', 86 | color: 'lightblue', 87 | filter: 'saturate(300%) hue-rotate(30deg) brightness(45%)', 88 | display: 'grid', 89 | // gridTemplateRows: 'auto 1fr', 90 | gridTemplateColumns: '1fr 4fr 1fr', 91 | gridAutoFlow: 'column', 92 | alignItems: 'center', 93 | gridGap: '$4', 94 | 95 | '@tablet': { 96 | gridTemplateColumns: 'auto 1fr auto', 97 | }, 98 | '@phone': { 99 | gridTemplateColumns: '1fr 1fr', 100 | gridTemplateRows: 'auto auto', 101 | gridGap: '$1', 102 | alignItems: 'start', 103 | gridAutoFlow: 'row', 104 | }, 105 | }); 106 | 107 | const StyledAction = styled('div', { 108 | '@phone': { 109 | gridColumn: '1 / span 2', 110 | }, 111 | }); 112 | 113 | // const StyledLabel = styled('div', { 114 | // // position: 'absolute', 115 | // // top: '0', 116 | // padding: '$1 0 .125rem', 117 | // typography: 'xs', 118 | // textTransform: 'uppercase', 119 | // }); 120 | -------------------------------------------------------------------------------- /src/components/World/index.tsx: -------------------------------------------------------------------------------- 1 | import { animated, SpringValue, useSpring } from '@react-spring/web'; 2 | import { atom } from 'jotai'; 3 | import { useUpdateAtom } from 'jotai/utils'; 4 | import React, { useEffect, useRef } from 'react'; 5 | import { useGesture } from 'react-use-gesture'; 6 | 7 | import { currentScrollOffsetAtom, currentWindowSizeAtom } from '../../atoms/current'; 8 | import { CursorPayload, useSendSocket } from '../../lib/ws'; 9 | import { styled } from '../../stitches.config'; 10 | import { Vec } from '../../types'; 11 | import { BLOGSIZE } from '../Blog'; 12 | 13 | // Allow other components to control the pan position 14 | const panSpringAtom = atom<{ x: SpringValue; y: SpringValue } | null>( 15 | null, 16 | ); 17 | export const panToAtom = atom(null, (get, set, blogPosition: Vec) => { 18 | const pan = get(panSpringAtom); 19 | if (pan !== null) { 20 | // Convert the top left of the blog to the top left of the window 21 | const screenSize = get(currentWindowSizeAtom); 22 | const position = { 23 | x: -blogPosition.x + screenSize.x / 2 - BLOGSIZE.x / 2, 24 | y: -blogPosition.y + screenSize.y / 2 - BLOGSIZE.y / 2, 25 | }; 26 | 27 | pan.x.stop(); 28 | pan.y.stop(); 29 | pan.x.start(position.x); 30 | pan.y.start(position.y); 31 | 32 | set(currentScrollOffsetAtom, position); 33 | } 34 | }); 35 | 36 | interface Props { 37 | fixedChildren: React.ReactNode; 38 | } 39 | 40 | export function World({ children, fixedChildren }: React.PropsWithChildren) { 41 | const setCurrentScroll = useUpdateAtom(currentScrollOffsetAtom); 42 | const pan = useSpring({ x: 0, y: 0 }); 43 | const setPanAtom = useUpdateAtom(panSpringAtom); 44 | // Add reference to pan as an atom to control scroll from elsewhere 45 | useEffect(() => { 46 | setPanAtom(pan); 47 | }, []); 48 | 49 | const bind = useGesture({ 50 | onWheel: ({ delta: [dx, dy] }) => { 51 | const x = pan.x.get() - dx; 52 | const y = pan.y.get() - dy; 53 | 54 | pan.x.set(x); 55 | pan.y.set(y); 56 | setCurrentScroll({ x: x, y: y }); 57 | }, 58 | }); 59 | 60 | // Prevent swipe gesture back/forward 61 | const ref = useRef(null); 62 | useEffect(() => { 63 | function preventSwipe(e: WheelEvent) { 64 | e.preventDefault(); 65 | } 66 | ref.current?.addEventListener('wheel', preventSwipe); 67 | return () => { 68 | ref.current?.removeEventListener('wheel', preventSwipe); 69 | }; 70 | }, [ref]); 71 | 72 | const send = useSendSocket(true); 73 | 74 | // Basic cursor event 75 | useEffect(() => { 76 | const onPointerMove = (e: MouseEvent) => { 77 | send({ 78 | event: 'cursor', 79 | position: { x: e.pageX - pan.x.get(), y: e.pageY - pan.y.get() }, 80 | } as CursorPayload); 81 | }; 82 | document.addEventListener('pointermove', onPointerMove); 83 | 84 | return () => { 85 | document.removeEventListener('pointermove', onPointerMove); 86 | }; 87 | }, [send, pan]); 88 | 89 | return ( 90 |
91 | 92 | 93 | {fixedChildren} 94 | {children} 95 | 96 | 97 |
98 | ); 99 | } 100 | 101 | const StyledViewport = styled(animated.div, { 102 | full: 'fixed', 103 | overflow: 'hidden', 104 | userSelect: 'none', // prevent text selection when dragging in canvas 105 | }); 106 | 107 | const StyledSelectable = styled('div', { 108 | userSelect: 'auto', // re-enable text selection within content 109 | }); 110 | 111 | const StyledPanWrapper = styled(animated.div, {}); 112 | -------------------------------------------------------------------------------- /public/glove@2x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/glove.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/BuddyList/index.tsx: -------------------------------------------------------------------------------- 1 | import { useAtom } from 'jotai'; 2 | import { useAtomValue, useUpdateAtom } from 'jotai/utils'; 3 | import React, { useMemo } from 'react'; 4 | 5 | import data from '../../atoms/data'; 6 | import ui from '../../atoms/ui'; 7 | import { styled } from '../../stitches.config'; 8 | import { Blog, UUID } from '../../types'; 9 | import { UnstyledLink } from '../Base'; 10 | import { Pane, StyledPaneTitle } from '../Pane'; 11 | import { panToAtom } from '../World'; 12 | 13 | const PANE = 'buddyList'; 14 | 15 | interface Props { 16 | blogIds: UUID[]; 17 | } 18 | 19 | export function BuddyList({ blogIds }: Props) { 20 | const [panePos, setPanePos] = useAtom(ui.panes); 21 | const blogs: Blog[] = useAtomValue(data.blogsFamily(blogIds)); 22 | 23 | // Group blogs by user to display in list 24 | // FIXME: this will rerender a lot due to updatedAt in blogs above 25 | // ideally push getting Blog[] into Buddy, sort locally 26 | // all we need here is actually each blog's author, no other data 27 | // ring.blogIds > blogs > blogs.author > sort into author Ids 28 | 29 | // try useAtomCallback? or just make a writable atom? 30 | const blogsByUser = useMemo(() => { 31 | const byUser: Record = {}; 32 | blogs.forEach((blog) => { 33 | const author = blog.author; 34 | if (!byUser[author]) { 35 | byUser[author] = []; 36 | } 37 | byUser[author].push(blog); 38 | }); 39 | return byUser; 40 | }, [blogs]); 41 | 42 | return ( 43 | { 47 | if (nextPosition === undefined) return; 48 | setPanePos((prev) => ({ ...prev, [PANE]: nextPosition })); 49 | }}> 50 | 🪐 Ring buds 51 | {/* 52 | 53 | */} 54 | 55 | {Object.entries(blogsByUser).map(([user, blogs]) => ( 56 | 57 | ))} 58 | {/* {blogs.map((id) => ( 59 | 60 | ))} */} 61 | 62 | 63 | ); 64 | } 65 | 66 | // function Blog({ id }: { id: UUID }) { 67 | // const blog = useAtomValue(data.blogFamily(id)); 68 | // const author = useAtomValue(data.userFamily(blog?.author)); 69 | // if (!blog) return null; 70 | // return ( 71 | // <> 72 | // 73 | // {author?.name} 74 | // 78 | // {blog.title} 79 | // 80 | // 81 | // 82 | // ); 83 | // } 84 | 85 | function Buddy({ userId, blogs }: { userId: UUID; blogs: Blog[] }) { 86 | const user = useAtomValue(data.userFamily(userId)); 87 | const panTo = useUpdateAtom(panToAtom); 88 | if (!user) return null; 89 | 90 | return ( 91 | <> 92 | {user.name} 93 | 94 | {blogs && 95 | blogs 96 | .sort((a, b) => b.updatedAt - a.updatedAt) 97 | .map((blog) => ( 98 |
  • 99 | e.preventDefault()} 103 | onClick={() => { 104 | panTo(blog.position); 105 | }}> 106 | {blog.title} 107 | 108 |
  • 109 | ))} 110 |
    111 | 112 | ); 113 | } 114 | 115 | const StyledList = styled('ul', { 116 | display: 'grid', 117 | gap: '$1', 118 | }); 119 | 120 | const StyledItem = styled('li', { 121 | listStyle: 'none', 122 | borderRadius: '$1', 123 | padding: '$1', 124 | typography: 's', 125 | }); 126 | 127 | const StyledBlogLink = styled(UnstyledLink, { 128 | borderRadius: '$1', 129 | typography: 's', 130 | display: 'block', 131 | padding: '$2', 132 | cursor: 'pointer', 133 | 134 | '&:hover': { 135 | filter: 'brightness(102%)', 136 | }, 137 | '&:active': { 138 | filter: 'brightness(98%)', 139 | }, 140 | }); 141 | -------------------------------------------------------------------------------- /src/components/Pane/index.tsx: -------------------------------------------------------------------------------- 1 | import { animated, useSpring } from '@react-spring/web'; 2 | import React, { useEffect, useState } from 'react'; 3 | import { useGesture } from 'react-use-gesture'; 4 | 5 | import { lerp, useSize } from '../../lib'; 6 | import { styled } from '../../stitches.config'; 7 | import { Vec } from '../../types'; 8 | 9 | interface Props { 10 | width: number | string; 11 | height?: number | string; 12 | position: Vec; 13 | onDrag?: ({ 14 | position, 15 | rotation, 16 | origin, 17 | }: { 18 | position?: Vec; 19 | rotation?: number; 20 | origin?: string; 21 | }) => void; 22 | style?: React.CSSProperties; 23 | color?: string; 24 | rotation?: number; 25 | origin?: string; 26 | id?: string; 27 | } 28 | 29 | export function Pane({ 30 | children, 31 | width, 32 | height, 33 | position, 34 | onDrag, 35 | style, 36 | color, 37 | rotation, 38 | origin, 39 | id, 40 | }: React.PropsWithChildren) { 41 | const { size, ref } = useSize(); 42 | const { transformOrigin } = useSpring({ 43 | from: { 44 | transformOrigin: 'center center', 45 | }, 46 | }); 47 | const { rotate } = useSpring({ 48 | from: { rotate: 0 }, 49 | }); 50 | const spring = useSpring({ 51 | x: position.x, 52 | y: position.y, 53 | }); 54 | const [isDragging, setIsDragging] = useState(false); 55 | 56 | // Drag animations 57 | const bind = useGesture({ 58 | onDrag: ({ event, buttons, first, delta: [dx, dy], velocities: [vx], last }) => { 59 | const e = event as React.PointerEvent; 60 | 61 | // reset when gesture finishes 62 | if (last) { 63 | rotate.start(0); 64 | setIsDragging(false); 65 | if (onDrag) onDrag({ rotation: 0, origin: transformOrigin.get() }); 66 | return; 67 | } 68 | 69 | // left click only 70 | if (buttons !== 1) { 71 | return; 72 | } 73 | // prevent text selection 74 | e.preventDefault(); 75 | if (first) { 76 | // We are preventing default so need to manually blur focused textarea 77 | // Because animation framerate drops when textarea is focused 78 | const el = document.activeElement; 79 | if (el?.tagName === 'TEXTAREA') { 80 | (el as HTMLTextAreaElement).blur(); 81 | } 82 | } 83 | 84 | // move pane 85 | const newX = position.x + dx; 86 | const newY = position.y + dy; 87 | spring.x.set(newX); 88 | spring.y.set(newY); 89 | 90 | // rotate physics 91 | const offset = { x: e.nativeEvent.offsetX, y: e.nativeEvent.offsetY }; // offset inside Pane 92 | const origin = `${offset.x}px ${offset.y}px`; 93 | if (first) { 94 | // save offset as the transform origin for physics animations 95 | transformOrigin.set(origin); 96 | setIsDragging(true); 97 | } 98 | // physics flips depending on how high up cursor is 99 | const flip = lerp(offset.y, [0, size.y], [1, -1]); 100 | const rotation = vx * 20 * flip; 101 | rotate.start(rotation); 102 | 103 | // onDrag callback 104 | if (onDrag) onDrag({ position: { x: newX, y: newY }, rotation, origin }); 105 | }, 106 | }); 107 | 108 | // Respond to remote rotation and origin 109 | useEffect(() => { 110 | if (rotation !== undefined) { 111 | rotate.start(rotation); 112 | } 113 | }, [rotation]); 114 | 115 | useEffect(() => { 116 | if (origin !== undefined) { 117 | transformOrigin.start(origin); 118 | } 119 | }, [origin]); 120 | 121 | return ( 122 | 129 | {children} 130 | 131 | ); 132 | } 133 | 134 | const StyledPane = styled(animated.div, { 135 | position: 'absolute', 136 | boxShadow: '0 0 0 1px $colors$blackA', 137 | background: 'white', 138 | padding: '$2', 139 | borderRadius: '$2', 140 | overflow: 'hidden', 141 | transition: 'box-shadow .25s linear', 142 | focus: '', 143 | cursor: 'grab', 144 | 145 | variants: { 146 | isDragging: { 147 | true: { 148 | cursor: 'grabbing', 149 | boxShadow: '0 0 0 1px $colors$blackA, 0 20px 40px 0 $colors$blackA', 150 | }, 151 | }, 152 | fixed: { 153 | true: { 154 | position: 'fixed', 155 | }, 156 | }, 157 | }, 158 | }); 159 | 160 | export const StyledPaneTitle = styled('div', { 161 | typography: 's', 162 | marginTop: '-.125rem', 163 | padding: '0 $1 $1 $1', 164 | display: 'grid', 165 | placeItems: 'center', 166 | }); 167 | -------------------------------------------------------------------------------- /src/components/Blog/index.tsx: -------------------------------------------------------------------------------- 1 | import { animated, useSpring } from '@react-spring/web'; 2 | import { atom, useAtom } from 'jotai'; 3 | import { atomFamily, useAtomValue, useUpdateAtom } from 'jotai/utils'; 4 | import React, { useEffect } from 'react'; 5 | 6 | import data from '../../atoms/data'; 7 | import { 8 | BlogPayload, 9 | RotationPayload, 10 | socketStateAtom, 11 | useSendSocket, 12 | useSetSocketHandler, 13 | } from '../../lib/ws'; 14 | import { styled } from '../../stitches.config'; 15 | import { UUID, Vec } from '../../types'; 16 | import { Pane, StyledPaneTitle } from '../Pane'; 17 | 18 | export const BLOGSIZE: Vec = { x: 300, y: 480 }; 19 | 20 | interface Props { 21 | id: string; 22 | } 23 | 24 | export function Blogs({ ids }: { ids: UUID[] }) { 25 | // const blogIds = useAtomValue(blogIds); 26 | const setBlogs = useUpdateAtom(data.blogs); 27 | 28 | useSetSocketHandler('blog', (payload) => { 29 | const { blog } = payload as BlogPayload; 30 | setBlogs((prev) => ({ 31 | ...prev, 32 | [blog.id]: { 33 | ...prev[blog.id], 34 | ...blog, 35 | }, 36 | })); 37 | }); 38 | return ( 39 | <> 40 | {ids.map((id) => ( 41 | 42 | ))} 43 | 44 | ); 45 | } 46 | 47 | const blogPaneRotationFamily = atomFamily((id: string) => 48 | atom((get) => { 49 | const rotations = get(socketStateAtom)['rotation'] as Record< 50 | string, 51 | Omit 52 | >; 53 | 54 | return rotations && rotations[id]; 55 | }), 56 | ); 57 | 58 | export function BlogPane(props: Props) { 59 | const [blog, setBlog] = useAtom(data.blogFamily(props.id)); 60 | const [author] = useAtom(data.userFamily(blog?.author)); 61 | const send = useSendSocket(false); 62 | const rotation = useAtomValue(blogPaneRotationFamily(props.id)); 63 | 64 | if (!blog) return null; 65 | 66 | return ( 67 |
    2736054770, still has .1s accuracy 72 | zIndex: Math.round((blog.updatedAt % 100000000000) / 100), 73 | position: 'absolute', 74 | }}> 75 | 76 | { 84 | if (nextPosition !== undefined) { 85 | setBlog((prev) => { 86 | const next = { 87 | ...prev, 88 | position: nextPosition, 89 | }; 90 | 91 | // Send partial payload 92 | send({ 93 | event: 'blog', 94 | blog: { 95 | id: next.id, 96 | position: next.position, 97 | updatedAt: next.updatedAt, 98 | }, 99 | } as BlogPayload); 100 | 101 | return next; 102 | }); 103 | } 104 | 105 | if (rotation !== undefined && origin !== undefined) { 106 | send({ 107 | event: 'rotation', 108 | id: blog.id, 109 | rotation, 110 | origin, 111 | }); 112 | } 113 | }} 114 | color={blog.color}> 115 | 116 | 117 | {blog.title} © {author?.name} 118 | 119 | event.stopPropagation()} // prevent pane onDrag stealing 122 | spellCheck={false} 123 | value={blog.content} 124 | onChange={(e) => { 125 | setBlog((prev) => { 126 | const next = { ...prev, content: e.target.value }; 127 | 128 | // Send partial payload 129 | send({ 130 | event: 'blog', 131 | blog: { 132 | id: next.id, 133 | content: next.content, 134 | updatedAt: next.updatedAt, 135 | }, 136 | } as BlogPayload); 137 | 138 | return next; 139 | }); 140 | }} 141 | /> 142 | 143 | 144 | 145 |
    146 | ); 147 | } 148 | 149 | export const shouldAnimateEntryAtom = atom([]); 150 | 151 | function AnimateEntryOnce({ 152 | children, 153 | createdAt, 154 | }: React.PropsWithChildren<{ createdAt: number }>) { 155 | const { y, opacity } = useSpring({ 156 | from: { y: 0, opacity: 0 }, 157 | to: { opacity: 1 }, // prevent flickering before animation code runs 158 | }); 159 | 160 | // If should animate reset to 0 offset 161 | useEffect(() => { 162 | const should = Date.now() - createdAt < 1000; 163 | if (should) { 164 | y.set(2000); 165 | y.start(0); 166 | } 167 | }, [createdAt]); 168 | 169 | return ( 170 | 171 | {children} 172 | 173 | ); 174 | } 175 | 176 | const StyledEditor = styled('textarea', { 177 | resize: 'none', 178 | border: 'none', 179 | width: '100%', 180 | height: '100%', 181 | padding: '0 $2', 182 | background: 'transparent', 183 | noFocus: '', 184 | typography: 'm', 185 | }); 186 | 187 | const StyledScrollview = styled('div', { 188 | height: '100%', 189 | overflowY: 'auto', 190 | display: 'grid', 191 | gridTemplateRows: 'auto 1fr', 192 | }); 193 | -------------------------------------------------------------------------------- /src/atoms/data.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'jotai'; 2 | import { atomFamily, atomWithStorage } from 'jotai/utils'; 3 | import { v4 as uuid } from 'uuid'; 4 | 5 | import { BLOGSIZE, shouldAnimateEntryAtom } from '../components/Blog'; 6 | import { BASE_COLOR, randomColor } from '../lib'; 7 | import { BlogPayload, RingPayload, sendSocketAtom, UserPayload } from '../lib/ws'; 8 | import { Blog, Ring, User, UUID } from '../types'; 9 | import { currentScrollOffsetAtom, currentWindowSizeAtom } from './current'; 10 | 11 | const rings = atomWithStorage>('rings', { 12 | '1': { 13 | id: '1', 14 | name: 'cuties vibin', 15 | color: 'lightblue', 16 | blogs: ['1'], 17 | }, 18 | }); 19 | 20 | const ringFamily = atomFamily((id: UUID) => 21 | atom((get) => { 22 | const ring = get(rings)[id]; 23 | return ring; 24 | }), 25 | ); 26 | 27 | const users = atomWithStorage>('users', { 28 | '1': { 29 | id: '1', 30 | name: 'julius', 31 | color: BASE_COLOR, 32 | rings: ['1'], 33 | }, 34 | }); 35 | 36 | const userFamily = atomFamily((id: UUID | null) => 37 | atom( 38 | (get) => { 39 | return id ? get(users)[id] : null; 40 | }, 41 | (_, set, user: User) => { 42 | set(users, (prev) => ({ 43 | ...prev, 44 | [user.id]: user, 45 | })); 46 | set(sendSocketAtom, { event: 'user', user } as UserPayload); 47 | }, 48 | ), 49 | ); 50 | 51 | // const blogIds = atomWithStorage('blogIds', ['2', '1']); 52 | const blogs = atomWithStorage>('blogs', { 53 | '1': { 54 | id: '1', 55 | author: '1', 56 | title: 'welcome~', 57 | content: `welcome to blogring 58 | 59 | it's a place for u to share ur thoughts and feelings with friends from cyberspace. i made this because i missed the synchronous vibes and pseudonymity of using aim with irl and net friends 60 | 61 | this is a shared ring, you can create a blog in here and only others in this ring can see it 62 | 63 | try creating one! everything's live! 64 | `, 65 | position: { x: 200, y: 200 }, 66 | updatedAt: Date.now() + 100, 67 | color: BASE_COLOR, 68 | createdAt: Date.now() + 100, 69 | }, 70 | }); 71 | 72 | // Adds a blog to a ring 73 | const createBlog = atom( 74 | null, 75 | (get, set, { blogInfo, ringId }: { blogInfo: Partial; ringId: UUID }) => { 76 | // center the new blog post 77 | const scrollOffset = get(currentScrollOffsetAtom); 78 | const screenSize = get(currentWindowSizeAtom); 79 | const blog = newBlog({ 80 | ...blogInfo, 81 | position: { 82 | x: -scrollOffset.x + screenSize.x / 2 - BLOGSIZE.x / 2, 83 | y: -scrollOffset.y + screenSize.y / 2 - BLOGSIZE.y / 2, 84 | }, 85 | }); 86 | 87 | // Add to shouldAnimateEntry to animate newly created blog 88 | set(shouldAnimateEntryAtom, (prev) => [...prev, blog.id]); 89 | 90 | // Update the blogs, then reference the id in the specified ring 91 | set(blogs, (prev) => ({ ...prev, [blog.id]: blog })); 92 | const ring = get(ringFamily(ringId)); 93 | const updatedRing = { 94 | ...ring, 95 | blogs: [...ring.blogs, blog.id], 96 | }; 97 | set(rings, (prev) => ({ 98 | ...prev, 99 | [ringId]: updatedRing, 100 | })); 101 | 102 | // Send new blog 103 | set(sendSocketAtom, { 104 | event: 'blog', 105 | blog, 106 | } as BlogPayload); 107 | 108 | // Send updated ring 109 | set(sendSocketAtom, { 110 | event: 'ring', 111 | ring: { 112 | id: ringId, 113 | blogs: updatedRing.blogs, 114 | }, 115 | } as RingPayload); 116 | }, 117 | ); 118 | 119 | // Creates a new Blog given partial information 120 | function newBlog(blog: Partial) { 121 | return { 122 | id: blog.id || uuid(), 123 | title: blog.title || 'New blog', 124 | author: blog.author || 'no author provided', 125 | content: blog.content || '', 126 | color: blog.color || randomColor(), 127 | updatedAt: Date.now(), 128 | createdAt: Date.now(), 129 | position: blog.position || { x: 0, y: 0 }, 130 | } as Blog; 131 | } 132 | 133 | const blogInfoByUser = atom[]>>((get) => { 134 | const allBlogs = get(blogs); 135 | const allUsers = get(users); 136 | const result = {} as Record[]>; 137 | Object.keys(allUsers).forEach((id) => { 138 | result[id] = Object.values(allBlogs) 139 | .filter(({ author }) => author === id) 140 | .map(({ id, title, color, updatedAt }) => ({ id, title, color, updatedAt })); 141 | }); 142 | return result; 143 | }); 144 | 145 | const blogInfoByUserFamily = atomFamily((id: UUID | undefined) => 146 | atom((get) => { 147 | return id ? get(blogInfoByUser)[id] : undefined; 148 | }), 149 | ); 150 | 151 | (window as any).resetData = () => { 152 | window.localStorage.removeItem('blogsIds'); 153 | window.localStorage.removeItem('blogs'); 154 | window.localStorage.removeItem('panes'); 155 | window.localStorage.removeItem('users'); 156 | window.localStorage.removeItem('currentUserId'); 157 | window.localStorage.removeItem('currentRingId'); 158 | window.localStorage.removeItem('rings'); 159 | }; 160 | 161 | // UUID : Blog 162 | const blogFamily = atomFamily((id: UUID) => 163 | atom( 164 | (get) => get(blogs)[id], 165 | (_, set, setter: (blog: Blog) => Blog) => { 166 | set(blogs, (prev) => { 167 | // Update timestamp so the setter has access 168 | const prevWithNextTime = { 169 | ...prev[id], 170 | updatedAt: Date.now(), 171 | }; 172 | const next = setter(prevWithNextTime); 173 | return { 174 | ...prev, 175 | [id]: { 176 | ...prev[id], 177 | ...next, 178 | }, 179 | }; 180 | }); 181 | }, 182 | ), 183 | ); 184 | 185 | // UUID[] : Blog[] 186 | const blogsFamily = atomFamily((ids: UUID[]) => 187 | atom((get) => { 188 | const allBlogs = get(blogs); 189 | return ids.map((id) => allBlogs[id]); 190 | }), 191 | ); 192 | 193 | const atoms = { 194 | // blogIds, 195 | blogs, 196 | createBlog, 197 | blogFamily, 198 | blogsFamily, 199 | users, 200 | userFamily, 201 | blogInfoByUserFamily, 202 | rings, 203 | ringFamily, 204 | }; 205 | 206 | export default atoms; 207 | -------------------------------------------------------------------------------- /src/lib/ws.tsx: -------------------------------------------------------------------------------- 1 | import { atom, useAtom } from 'jotai'; 2 | import { useUpdateAtom } from 'jotai/utils'; 3 | import React, { useCallback, useEffect, useState } from 'react'; 4 | 5 | import { currentUserIdAtom } from '../atoms/current'; 6 | import data from '../atoms/data'; 7 | import { Blog, Ring, User, UUID, Vec } from '../types'; 8 | 9 | // Websocket url changes based on dev or prod 10 | // localhost is not https:// so use ws:// instead of wss:// 11 | const SOCKET_URL = import.meta.env.DEV 12 | ? 'ws://localhost:3001/ws' 13 | : `${window.location.protocol.indexOf('https') > -1 ? 'wss' : 'ws'}://${ 14 | window.location.host 15 | }/ws`; 16 | 17 | type PayloadEvent = { 18 | id: string; // unique id that determines how its stored in socket state, only useful for presence? 19 | }; 20 | 21 | export type JoinPayload = PayloadEvent & { 22 | event: 'join'; 23 | }; 24 | 25 | export type SyncPayload = PayloadEvent & { 26 | event: 'sync'; 27 | blogs: Record; 28 | rings: Record; 29 | users: Record; 30 | }; 31 | 32 | export type CursorPayload = PayloadEvent & { 33 | event: 'cursor'; 34 | position: Vec; 35 | }; 36 | 37 | export type RotationPayload = PayloadEvent & { 38 | event: 'rotation'; 39 | rotation: number; 40 | origin: string; 41 | }; 42 | 43 | export type BlogPayload = { 44 | event: 'blog'; 45 | blog: Pick & Partial; 46 | }; 47 | 48 | export type RingPayload = { 49 | event: 'ring'; 50 | ring: Pick & Partial; 51 | }; 52 | 53 | export type UserPayload = { 54 | event: 'user'; 55 | user: Pick & Partial; 56 | }; 57 | 58 | type Payload = 59 | | CursorPayload 60 | | RotationPayload 61 | | BlogPayload 62 | | JoinPayload 63 | | SyncPayload 64 | | RingPayload 65 | | UserPayload; 66 | type Event = Payload['event']; 67 | type PartialPayload = Omit; 68 | 69 | // Share the same socket across hooks 70 | const socketAtom = atom(null); 71 | 72 | // Global function to send via socket 73 | export const sendSocketAtom = atom(null, (get, _, obj: Payload) => { 74 | const socket = get(socketAtom); 75 | if (!socket || socket.readyState !== WebSocket.OPEN) 76 | return console.error('No socket or it is not ready'); 77 | socket.send(JSON.stringify(obj)); 78 | }); 79 | const sendSocketWithUserAtom = atom(null, (get, _, obj: Omit) => { 80 | const socket = get(socketAtom); 81 | const id = get(currentUserIdAtom); 82 | if (!socket || socket.readyState !== WebSocket.OPEN) 83 | return console.error('No socket or it is not ready'); 84 | socket.send(JSON.stringify({ id, ...obj })); 85 | }); 86 | export function useSendSocket(useUserId: boolean) { 87 | if (useUserId) return useUpdateAtom(sendSocketWithUserAtom); 88 | return useUpdateAtom(sendSocketAtom); 89 | } 90 | 91 | // Share local state of the latest state for payloads by id 92 | export const socketStateAtom = atom< 93 | Partial>> 94 | >({}); 95 | 96 | // "Provider" (not really) that wraps the app and handles socket lifecycle 97 | export function SocketProvider({ children }: React.PropsWithChildren<{}>) { 98 | useSocket(); 99 | return <>{children}; 100 | } 101 | 102 | // Handlers that can be set from other parts of the app to keep colocation 103 | type SocketHandler = (payload: PartialPayload) => void; 104 | const socketHandlers = atom>>({}); 105 | export function useSetSocketHandler(event: Event, handler: SocketHandler) { 106 | const set = useUpdateAtom(socketHandlers); 107 | useEffect(() => { 108 | set((prev) => ({ ...prev, [event]: handler })); 109 | }, [event, handler]); 110 | } 111 | const runHandlerAtom = atom( 112 | null, 113 | ( 114 | get, 115 | _, 116 | { 117 | event, 118 | payload, 119 | }: { 120 | event: Event; 121 | payload: PartialPayload; 122 | }, 123 | ) => { 124 | const handlers = get(socketHandlers); 125 | if (handlers[event]) { 126 | handlers[event]!(payload); 127 | } 128 | }, 129 | ); 130 | 131 | function useSocket() { 132 | const [socket, setSocket] = useAtom(socketAtom); 133 | const setSocketState = useUpdateAtom(socketStateAtom); 134 | const runHandler = useUpdateAtom(runHandlerAtom); 135 | const sendJoin = useUpdateAtom(sendJoinPayloadAtom); 136 | const sendSync = useUpdateAtom(sendSyncPayloadAtom); 137 | const receiveSync = useUpdateAtom(receiveSyncPayloadAtom); 138 | 139 | // create new websocket connection 140 | const setup = useCallback(function connect() { 141 | const newSocket = new WebSocket(SOCKET_URL); 142 | newSocket.onopen = (e) => { 143 | console.log('Socket open', e); 144 | sendJoin(newSocket); // setSocket won't have run yet so we need to provide to atom 145 | }; 146 | newSocket.onclose = (e) => { 147 | console.error('Socket closed', e); 148 | setSocket(null); // trigger reconnect 149 | }; 150 | newSocket.onmessage = (e) => { 151 | // turn string into object 152 | const payload = JSON.parse(e.data) as Payload; 153 | 154 | // when another user joins sync data to them 155 | if (payload.event === 'join') { 156 | sendSync(payload.id); // recipient ID 157 | } 158 | 159 | // when you receive sync back 160 | if (payload.event === 'sync') { 161 | receiveSync(payload); 162 | } 163 | 164 | // presence states stores by user id 165 | if (payload.event === 'cursor' || payload.event === 'rotation') { 166 | const { event, id, ...rest } = payload; 167 | // store in a local store 168 | setSocketState((prev) => ({ 169 | ...prev, 170 | [event]: { 171 | ...prev[event], 172 | [id]: rest, 173 | }, 174 | })); 175 | } else { 176 | const { event, ...rest } = payload; 177 | runHandler({ event, payload: rest }); 178 | } 179 | }; 180 | setSocket(newSocket); 181 | }, []); 182 | 183 | const [, setRetries] = useState(0); 184 | 185 | // connect and reconnect 186 | useEffect(() => { 187 | if (socket === null) { 188 | setRetries((retries) => { 189 | if (retries > 3) { 190 | console.error('Too many retries, stopping'); 191 | return retries; 192 | } 193 | console.log('Connecting to socket ', SOCKET_URL, ', retry', retries); 194 | setup(); 195 | return retries + 1; 196 | }); 197 | } 198 | }, [setup, socket]); 199 | } 200 | 201 | // These handlers are atoms because it's easier to interact 202 | // imperatively with the required data during socket setup 203 | 204 | // Join payload handler 205 | const sendJoinPayloadAtom = atom(null, (get, _, socket: WebSocket) => { 206 | const id = get(currentUserIdAtom); 207 | if (id === null) return console.error('No current user when joining'); 208 | const payload: JoinPayload = { id, event: 'join' }; 209 | socket.send(JSON.stringify(payload)); 210 | }); 211 | 212 | // Sync payload handler 213 | const sendSyncPayloadAtom = atom(null, (get, _, recipientId: UUID) => { 214 | console.log('sync request received, sending sync'); 215 | const socket = get(socketAtom); 216 | const blogs = get(data.blogs); 217 | const rings = get(data.rings); 218 | const users = get(data.users); 219 | if (!socket) return console.error('No socket'); 220 | const payload: SyncPayload = { 221 | id: recipientId, 222 | event: 'sync', 223 | rings, 224 | blogs, 225 | users, 226 | }; 227 | socket.send(JSON.stringify(payload)); 228 | }); 229 | 230 | const receiveSyncPayloadAtom = atom(null, (get, set, payload: SyncPayload) => { 231 | const { rings, blogs, users } = payload; 232 | console.log('sync payload recevied', payload); 233 | // order matters as these are async and components may rerender 234 | // set by order of referenced -> referencer (E.g. blogs -> rings) 235 | 236 | // Merge data, better to have dupes than missing 237 | set(data.users, { 238 | ...users, 239 | ...get(data.users), 240 | }); 241 | 242 | // Blogs have timestamps so we know whether to update or not 243 | const updatedBlogs = { ...get(data.blogs) }; 244 | Object.values(blogs).map((blog) => { 245 | // add/replace if local blog with id doesnt exist or is older than remote 246 | if ( 247 | updatedBlogs[blog.id] === undefined || 248 | updatedBlogs[blog.id].updatedAt < blog.updatedAt 249 | ) { 250 | updatedBlogs[blog.id] = blog; 251 | } 252 | }); 253 | set(data.blogs, updatedBlogs); 254 | 255 | // Rings have blog references so we should merge them in case locally created new blog 256 | const updatedRings = { ...get(data.rings) }; 257 | Object.values(rings).map((ring) => { 258 | // get unique blog ids 259 | updatedRings[ring.id].blogs = Array.from( 260 | new Set([...updatedRings[ring.id].blogs, ...ring.blogs]), 261 | ); 262 | }); 263 | set(data.rings, updatedRings); 264 | }); 265 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/code-frame@^7.14.5": 13 | version "7.14.5" 14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 15 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 16 | dependencies: 17 | "@babel/highlight" "^7.14.5" 18 | 19 | "@babel/compat-data@^7.14.5": 20 | version "7.14.7" 21 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" 22 | integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== 23 | 24 | "@babel/core@^7.14.6": 25 | version "7.14.8" 26 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.8.tgz#20cdf7c84b5d86d83fac8710a8bc605a7ba3f010" 27 | integrity sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q== 28 | dependencies: 29 | "@babel/code-frame" "^7.14.5" 30 | "@babel/generator" "^7.14.8" 31 | "@babel/helper-compilation-targets" "^7.14.5" 32 | "@babel/helper-module-transforms" "^7.14.8" 33 | "@babel/helpers" "^7.14.8" 34 | "@babel/parser" "^7.14.8" 35 | "@babel/template" "^7.14.5" 36 | "@babel/traverse" "^7.14.8" 37 | "@babel/types" "^7.14.8" 38 | convert-source-map "^1.7.0" 39 | debug "^4.1.0" 40 | gensync "^1.0.0-beta.2" 41 | json5 "^2.1.2" 42 | semver "^6.3.0" 43 | source-map "^0.5.0" 44 | 45 | "@babel/generator@^7.14.8": 46 | version "7.14.8" 47 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.8.tgz#bf86fd6af96cf3b74395a8ca409515f89423e070" 48 | integrity sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg== 49 | dependencies: 50 | "@babel/types" "^7.14.8" 51 | jsesc "^2.5.1" 52 | source-map "^0.5.0" 53 | 54 | "@babel/helper-compilation-targets@^7.14.5": 55 | version "7.14.5" 56 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" 57 | integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== 58 | dependencies: 59 | "@babel/compat-data" "^7.14.5" 60 | "@babel/helper-validator-option" "^7.14.5" 61 | browserslist "^4.16.6" 62 | semver "^6.3.0" 63 | 64 | "@babel/helper-function-name@^7.14.5": 65 | version "7.14.5" 66 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" 67 | integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== 68 | dependencies: 69 | "@babel/helper-get-function-arity" "^7.14.5" 70 | "@babel/template" "^7.14.5" 71 | "@babel/types" "^7.14.5" 72 | 73 | "@babel/helper-get-function-arity@^7.14.5": 74 | version "7.14.5" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" 76 | integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== 77 | dependencies: 78 | "@babel/types" "^7.14.5" 79 | 80 | "@babel/helper-hoist-variables@^7.14.5": 81 | version "7.14.5" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" 83 | integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== 84 | dependencies: 85 | "@babel/types" "^7.14.5" 86 | 87 | "@babel/helper-member-expression-to-functions@^7.14.5": 88 | version "7.14.7" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" 90 | integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== 91 | dependencies: 92 | "@babel/types" "^7.14.5" 93 | 94 | "@babel/helper-module-imports@^7.14.5": 95 | version "7.14.5" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" 97 | integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== 98 | dependencies: 99 | "@babel/types" "^7.14.5" 100 | 101 | "@babel/helper-module-transforms@^7.14.8": 102 | version "7.14.8" 103 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz#d4279f7e3fd5f4d5d342d833af36d4dd87d7dc49" 104 | integrity sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA== 105 | dependencies: 106 | "@babel/helper-module-imports" "^7.14.5" 107 | "@babel/helper-replace-supers" "^7.14.5" 108 | "@babel/helper-simple-access" "^7.14.8" 109 | "@babel/helper-split-export-declaration" "^7.14.5" 110 | "@babel/helper-validator-identifier" "^7.14.8" 111 | "@babel/template" "^7.14.5" 112 | "@babel/traverse" "^7.14.8" 113 | "@babel/types" "^7.14.8" 114 | 115 | "@babel/helper-optimise-call-expression@^7.14.5": 116 | version "7.14.5" 117 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" 118 | integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== 119 | dependencies: 120 | "@babel/types" "^7.14.5" 121 | 122 | "@babel/helper-plugin-utils@^7.14.5": 123 | version "7.14.5" 124 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" 125 | integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== 126 | 127 | "@babel/helper-replace-supers@^7.14.5": 128 | version "7.14.5" 129 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" 130 | integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== 131 | dependencies: 132 | "@babel/helper-member-expression-to-functions" "^7.14.5" 133 | "@babel/helper-optimise-call-expression" "^7.14.5" 134 | "@babel/traverse" "^7.14.5" 135 | "@babel/types" "^7.14.5" 136 | 137 | "@babel/helper-simple-access@^7.14.8": 138 | version "7.14.8" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" 140 | integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== 141 | dependencies: 142 | "@babel/types" "^7.14.8" 143 | 144 | "@babel/helper-split-export-declaration@^7.14.5": 145 | version "7.14.5" 146 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" 147 | integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== 148 | dependencies: 149 | "@babel/types" "^7.14.5" 150 | 151 | "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.8": 152 | version "7.14.8" 153 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c" 154 | integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== 155 | 156 | "@babel/helper-validator-option@^7.14.5": 157 | version "7.14.5" 158 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" 159 | integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== 160 | 161 | "@babel/helpers@^7.14.8": 162 | version "7.14.8" 163 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.8.tgz#839f88f463025886cff7f85a35297007e2da1b77" 164 | integrity sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw== 165 | dependencies: 166 | "@babel/template" "^7.14.5" 167 | "@babel/traverse" "^7.14.8" 168 | "@babel/types" "^7.14.8" 169 | 170 | "@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": 171 | version "7.14.5" 172 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 173 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 174 | dependencies: 175 | "@babel/helper-validator-identifier" "^7.14.5" 176 | chalk "^2.0.0" 177 | js-tokens "^4.0.0" 178 | 179 | "@babel/parser@^7.14.5", "@babel/parser@^7.14.8": 180 | version "7.14.8" 181 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.8.tgz#66fd41666b2d7b840bd5ace7f7416d5ac60208d4" 182 | integrity sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA== 183 | 184 | "@babel/plugin-transform-react-jsx-self@^7.14.5": 185 | version "7.14.5" 186 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.5.tgz#703b5d1edccd342179c2a99ee8c7065c2b4403cc" 187 | integrity sha512-M/fmDX6n0cfHK/NLTcPmrfVAORKDhK8tyjDhyxlUjYyPYYO8FRWwuxBA3WBx8kWN/uBUuwGa3s/0+hQ9JIN3Tg== 188 | dependencies: 189 | "@babel/helper-plugin-utils" "^7.14.5" 190 | 191 | "@babel/plugin-transform-react-jsx-source@^7.14.5": 192 | version "7.14.5" 193 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz#79f728e60e6dbd31a2b860b0bf6c9765918acf1d" 194 | integrity sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q== 195 | dependencies: 196 | "@babel/helper-plugin-utils" "^7.14.5" 197 | 198 | "@babel/runtime-corejs3@^7.10.2": 199 | version "7.14.8" 200 | resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.8.tgz#68539e0129f13eb1ed9a9aa273d3542b93c88384" 201 | integrity sha512-4dMD5QRBkumn45oweR0SxoNtt15oz3BUBAQ8cIx7HJqZTtE8zjpM0My8aHJHVnyf4XfRg6DNzaE1080WLBiC1w== 202 | dependencies: 203 | core-js-pure "^3.15.0" 204 | regenerator-runtime "^0.13.4" 205 | 206 | "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2": 207 | version "7.14.8" 208 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" 209 | integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== 210 | dependencies: 211 | regenerator-runtime "^0.13.4" 212 | 213 | "@babel/template@^7.14.5": 214 | version "7.14.5" 215 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" 216 | integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== 217 | dependencies: 218 | "@babel/code-frame" "^7.14.5" 219 | "@babel/parser" "^7.14.5" 220 | "@babel/types" "^7.14.5" 221 | 222 | "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8": 223 | version "7.14.8" 224 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.8.tgz#c0253f02677c5de1a8ff9df6b0aacbec7da1a8ce" 225 | integrity sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg== 226 | dependencies: 227 | "@babel/code-frame" "^7.14.5" 228 | "@babel/generator" "^7.14.8" 229 | "@babel/helper-function-name" "^7.14.5" 230 | "@babel/helper-hoist-variables" "^7.14.5" 231 | "@babel/helper-split-export-declaration" "^7.14.5" 232 | "@babel/parser" "^7.14.8" 233 | "@babel/types" "^7.14.8" 234 | debug "^4.1.0" 235 | globals "^11.1.0" 236 | 237 | "@babel/types@^7.14.5", "@babel/types@^7.14.8": 238 | version "7.14.8" 239 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.8.tgz#38109de8fcadc06415fbd9b74df0065d4d41c728" 240 | integrity sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q== 241 | dependencies: 242 | "@babel/helper-validator-identifier" "^7.14.8" 243 | to-fast-properties "^2.0.0" 244 | 245 | "@eslint/eslintrc@^0.4.3": 246 | version "0.4.3" 247 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" 248 | integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== 249 | dependencies: 250 | ajv "^6.12.4" 251 | debug "^4.1.1" 252 | espree "^7.3.0" 253 | globals "^13.9.0" 254 | ignore "^4.0.6" 255 | import-fresh "^3.2.1" 256 | js-yaml "^3.13.1" 257 | minimatch "^3.0.4" 258 | strip-json-comments "^3.1.1" 259 | 260 | "@humanwhocodes/config-array@^0.5.0": 261 | version "0.5.0" 262 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" 263 | integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== 264 | dependencies: 265 | "@humanwhocodes/object-schema" "^1.2.0" 266 | debug "^4.1.1" 267 | minimatch "^3.0.4" 268 | 269 | "@humanwhocodes/object-schema@^1.2.0": 270 | version "1.2.0" 271 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" 272 | integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== 273 | 274 | "@nodelib/fs.scandir@2.1.5": 275 | version "2.1.5" 276 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 277 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 278 | dependencies: 279 | "@nodelib/fs.stat" "2.0.5" 280 | run-parallel "^1.1.9" 281 | 282 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 283 | version "2.0.5" 284 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 285 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 286 | 287 | "@nodelib/fs.walk@^1.2.3": 288 | version "1.2.8" 289 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 290 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 291 | dependencies: 292 | "@nodelib/fs.scandir" "2.1.5" 293 | fastq "^1.6.0" 294 | 295 | "@react-spring/animated@~9.2.0": 296 | version "9.2.4" 297 | resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.2.4.tgz#062ecc0fdfef89f2541a42d8500428b70035f879" 298 | integrity sha512-AfV6ZM8pCCAT29GY5C8/1bOPjZrv/7kD0vedjiE/tEYvNDwg9GlscrvsTViWR2XykJoYrDfdkYArrldWpsCJ5g== 299 | dependencies: 300 | "@react-spring/shared" "~9.2.0" 301 | "@react-spring/types" "~9.2.0" 302 | 303 | "@react-spring/core@~9.2.0": 304 | version "9.2.4" 305 | resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.2.4.tgz#275a4a065e3a315a4f5fb28c9a6f62ce718c25d6" 306 | integrity sha512-R+PwyfsjiuYCWqaTTfCpYpRmsP0h87RNm7uxC1Uxy7QAHUfHEm2sAHn+AdHPwq/MbVwDssVT8C5yf2WGcqiXGg== 307 | dependencies: 308 | "@react-spring/animated" "~9.2.0" 309 | "@react-spring/shared" "~9.2.0" 310 | "@react-spring/types" "~9.2.0" 311 | 312 | "@react-spring/rafz@~9.2.0": 313 | version "9.2.4" 314 | resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.2.4.tgz#44793e9adc14dd0dcd1573d094368af11a89d73a" 315 | integrity sha512-SOKf9eue+vAX+DGo7kWYNl9i9J3gPUlQjifIcV9Bzw9h3i30wPOOP0TjS7iMG/kLp2cdHQYDNFte6nt23VAZkQ== 316 | 317 | "@react-spring/shared@~9.2.0": 318 | version "9.2.4" 319 | resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.2.4.tgz#f9cc66ac5308a77293330a18518e34121f4008c1" 320 | integrity sha512-ZEr4l2BxmyFRUvRA2VCkPfCJii4E7cGkwbjmTBx1EmcGrOnde/V2eF5dxqCTY3k35QuCegkrWe0coRJVkh8q2Q== 321 | dependencies: 322 | "@react-spring/rafz" "~9.2.0" 323 | "@react-spring/types" "~9.2.0" 324 | 325 | "@react-spring/types@~9.2.0": 326 | version "9.2.4" 327 | resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.2.4.tgz#2365ce9d761f548a9adcb2cd68714bf26765a5de" 328 | integrity sha512-zHUXrWO8nweUN/ISjrjqU7GgXXvoEbFca1CgiE0TY0H/dqJb3l+Rhx8ecPVNYimzFg3ZZ1/T0egpLop8SOv4aA== 329 | 330 | "@react-spring/web@^9.2.4": 331 | version "9.2.4" 332 | resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.2.4.tgz#c6d5464a954bfd0d7bc90117050f796a95ebfa08" 333 | integrity sha512-vtPvOalLFvuju/MDBtoSnCyt0xXSL6Amyv82fljOuWPl1yGd4M1WteijnYL9Zlriljl0a3oXcPunAVYTD9dbDQ== 334 | dependencies: 335 | "@react-spring/animated" "~9.2.0" 336 | "@react-spring/core" "~9.2.0" 337 | "@react-spring/shared" "~9.2.0" 338 | "@react-spring/types" "~9.2.0" 339 | 340 | "@rollup/pluginutils@^4.1.0": 341 | version "4.1.1" 342 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.1.tgz#1d4da86dd4eded15656a57d933fda2b9a08d47ec" 343 | integrity sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ== 344 | dependencies: 345 | estree-walker "^2.0.1" 346 | picomatch "^2.2.2" 347 | 348 | "@stitches/react@^0.2.3": 349 | version "0.2.3" 350 | resolved "https://registry.yarnpkg.com/@stitches/react/-/react-0.2.3.tgz#b6c791783eb563bccf366ee75ab30dee2470393f" 351 | integrity sha512-x8sho2hGD+G58RW/Di4xhd2K5IONLtzHbz3JFx3res6Tc1sWFJsfT+3qZgMVnAgPrFhjEkHkDyvNVVTp5M0BbQ== 352 | 353 | "@types/json-schema@^7.0.7": 354 | version "7.0.8" 355 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" 356 | integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== 357 | 358 | "@types/prop-types@*": 359 | version "15.7.4" 360 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" 361 | integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== 362 | 363 | "@types/react-dom@^17.0.0": 364 | version "17.0.9" 365 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.9.tgz#441a981da9d7be117042e1a6fd3dac4b30f55add" 366 | integrity sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg== 367 | dependencies: 368 | "@types/react" "*" 369 | 370 | "@types/react@*", "@types/react@^17.0.0": 371 | version "17.0.14" 372 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.14.tgz#f0629761ca02945c4e8fea99b8177f4c5c61fb0f" 373 | integrity sha512-0WwKHUbWuQWOce61UexYuWTGuGY/8JvtUe/dtQ6lR4sZ3UiylHotJeWpf3ArP9+DSGUoLY3wbU59VyMrJps5VQ== 374 | dependencies: 375 | "@types/prop-types" "*" 376 | "@types/scheduler" "*" 377 | csstype "^3.0.2" 378 | 379 | "@types/scheduler@*": 380 | version "0.16.2" 381 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 382 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 383 | 384 | "@types/uuid@^8.3.1": 385 | version "8.3.1" 386 | resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.1.tgz#1a32969cf8f0364b3d8c8af9cc3555b7805df14f" 387 | integrity sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg== 388 | 389 | "@typescript-eslint/eslint-plugin@^4.17.0": 390 | version "4.28.4" 391 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz#e73c8cabbf3f08dee0e1bda65ed4e622ae8f8921" 392 | integrity sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw== 393 | dependencies: 394 | "@typescript-eslint/experimental-utils" "4.28.4" 395 | "@typescript-eslint/scope-manager" "4.28.4" 396 | debug "^4.3.1" 397 | functional-red-black-tree "^1.0.1" 398 | regexpp "^3.1.0" 399 | semver "^7.3.5" 400 | tsutils "^3.21.0" 401 | 402 | "@typescript-eslint/experimental-utils@4.28.4": 403 | version "4.28.4" 404 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz#9c70c35ebed087a5c70fb0ecd90979547b7fec96" 405 | integrity sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA== 406 | dependencies: 407 | "@types/json-schema" "^7.0.7" 408 | "@typescript-eslint/scope-manager" "4.28.4" 409 | "@typescript-eslint/types" "4.28.4" 410 | "@typescript-eslint/typescript-estree" "4.28.4" 411 | eslint-scope "^5.1.1" 412 | eslint-utils "^3.0.0" 413 | 414 | "@typescript-eslint/parser@^4.17.0": 415 | version "4.28.4" 416 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.4.tgz#bc462dc2779afeefdcf49082516afdc3e7b96fab" 417 | integrity sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA== 418 | dependencies: 419 | "@typescript-eslint/scope-manager" "4.28.4" 420 | "@typescript-eslint/types" "4.28.4" 421 | "@typescript-eslint/typescript-estree" "4.28.4" 422 | debug "^4.3.1" 423 | 424 | "@typescript-eslint/scope-manager@4.28.4": 425 | version "4.28.4" 426 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz#bdbce9b6a644e34f767bd68bc17bb14353b9fe7f" 427 | integrity sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w== 428 | dependencies: 429 | "@typescript-eslint/types" "4.28.4" 430 | "@typescript-eslint/visitor-keys" "4.28.4" 431 | 432 | "@typescript-eslint/types@4.28.4": 433 | version "4.28.4" 434 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.4.tgz#41acbd79b5816b7c0dd7530a43d97d020d3aeb42" 435 | integrity sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww== 436 | 437 | "@typescript-eslint/typescript-estree@4.28.4": 438 | version "4.28.4" 439 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz#252e6863278dc0727244be9e371eb35241c46d00" 440 | integrity sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ== 441 | dependencies: 442 | "@typescript-eslint/types" "4.28.4" 443 | "@typescript-eslint/visitor-keys" "4.28.4" 444 | debug "^4.3.1" 445 | globby "^11.0.3" 446 | is-glob "^4.0.1" 447 | semver "^7.3.5" 448 | tsutils "^3.21.0" 449 | 450 | "@typescript-eslint/visitor-keys@4.28.4": 451 | version "4.28.4" 452 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz#92dacfefccd6751cbb0a964f06683bfd72d0c4d3" 453 | integrity sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg== 454 | dependencies: 455 | "@typescript-eslint/types" "4.28.4" 456 | eslint-visitor-keys "^2.0.0" 457 | 458 | "@vitejs/plugin-react-refresh@^1.3.5": 459 | version "1.3.5" 460 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-refresh/-/plugin-react-refresh-1.3.5.tgz#be47e56d9965423968c8a6b2d62e5014e1e24478" 461 | integrity sha512-7c4ELQMygKw5YFCNMLhDHrt4BOgXmROP65gPax/W43mJPNQaYW8ny1kI/bvCDNuzMqZWSK8uf2tEjPVVBnZ5IQ== 462 | dependencies: 463 | "@babel/core" "^7.14.6" 464 | "@babel/plugin-transform-react-jsx-self" "^7.14.5" 465 | "@babel/plugin-transform-react-jsx-source" "^7.14.5" 466 | "@rollup/pluginutils" "^4.1.0" 467 | react-refresh "^0.10.0" 468 | 469 | accepts@~1.3.7: 470 | version "1.3.7" 471 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 472 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 473 | dependencies: 474 | mime-types "~2.1.24" 475 | negotiator "0.6.2" 476 | 477 | acorn-jsx@^5.3.1: 478 | version "5.3.2" 479 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 480 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 481 | 482 | acorn@^7.4.0: 483 | version "7.4.1" 484 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 485 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 486 | 487 | ajv@^6.10.0, ajv@^6.12.4: 488 | version "6.12.6" 489 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 490 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 491 | dependencies: 492 | fast-deep-equal "^3.1.1" 493 | fast-json-stable-stringify "^2.0.0" 494 | json-schema-traverse "^0.4.1" 495 | uri-js "^4.2.2" 496 | 497 | ajv@^8.0.1: 498 | version "8.6.2" 499 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" 500 | integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== 501 | dependencies: 502 | fast-deep-equal "^3.1.1" 503 | json-schema-traverse "^1.0.0" 504 | require-from-string "^2.0.2" 505 | uri-js "^4.2.2" 506 | 507 | ansi-colors@^4.1.1: 508 | version "4.1.1" 509 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 510 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 511 | 512 | ansi-regex@^5.0.0: 513 | version "5.0.0" 514 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 515 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 516 | 517 | ansi-styles@^3.2.1: 518 | version "3.2.1" 519 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 520 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 521 | dependencies: 522 | color-convert "^1.9.0" 523 | 524 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 525 | version "4.3.0" 526 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 527 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 528 | dependencies: 529 | color-convert "^2.0.1" 530 | 531 | argparse@^1.0.7: 532 | version "1.0.10" 533 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 534 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 535 | dependencies: 536 | sprintf-js "~1.0.2" 537 | 538 | aria-query@^4.2.2: 539 | version "4.2.2" 540 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" 541 | integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== 542 | dependencies: 543 | "@babel/runtime" "^7.10.2" 544 | "@babel/runtime-corejs3" "^7.10.2" 545 | 546 | array-flatten@1.1.1: 547 | version "1.1.1" 548 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 549 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 550 | 551 | array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: 552 | version "3.1.3" 553 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" 554 | integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== 555 | dependencies: 556 | call-bind "^1.0.2" 557 | define-properties "^1.1.3" 558 | es-abstract "^1.18.0-next.2" 559 | get-intrinsic "^1.1.1" 560 | is-string "^1.0.5" 561 | 562 | array-union@^2.1.0: 563 | version "2.1.0" 564 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 565 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 566 | 567 | array.prototype.flat@^1.2.4: 568 | version "1.2.4" 569 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" 570 | integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== 571 | dependencies: 572 | call-bind "^1.0.0" 573 | define-properties "^1.1.3" 574 | es-abstract "^1.18.0-next.1" 575 | 576 | array.prototype.flatmap@^1.2.4: 577 | version "1.2.4" 578 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" 579 | integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== 580 | dependencies: 581 | call-bind "^1.0.0" 582 | define-properties "^1.1.3" 583 | es-abstract "^1.18.0-next.1" 584 | function-bind "^1.1.1" 585 | 586 | ast-types-flow@^0.0.7: 587 | version "0.0.7" 588 | resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" 589 | integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= 590 | 591 | astral-regex@^2.0.0: 592 | version "2.0.0" 593 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 594 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 595 | 596 | axe-core@^4.0.2: 597 | version "4.3.1" 598 | resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.1.tgz#0c6a076e4a1c3e0544ba6a9479158f9be7a7928e" 599 | integrity sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g== 600 | 601 | axobject-query@^2.2.0: 602 | version "2.2.0" 603 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" 604 | integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== 605 | 606 | balanced-match@^1.0.0: 607 | version "1.0.2" 608 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 609 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 610 | 611 | body-parser@1.19.0: 612 | version "1.19.0" 613 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 614 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 615 | dependencies: 616 | bytes "3.1.0" 617 | content-type "~1.0.4" 618 | debug "2.6.9" 619 | depd "~1.1.2" 620 | http-errors "1.7.2" 621 | iconv-lite "0.4.24" 622 | on-finished "~2.3.0" 623 | qs "6.7.0" 624 | raw-body "2.4.0" 625 | type-is "~1.6.17" 626 | 627 | brace-expansion@^1.1.7: 628 | version "1.1.11" 629 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 630 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 631 | dependencies: 632 | balanced-match "^1.0.0" 633 | concat-map "0.0.1" 634 | 635 | braces@^3.0.1: 636 | version "3.0.2" 637 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 638 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 639 | dependencies: 640 | fill-range "^7.0.1" 641 | 642 | browserslist@^4.16.6: 643 | version "4.16.6" 644 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" 645 | integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== 646 | dependencies: 647 | caniuse-lite "^1.0.30001219" 648 | colorette "^1.2.2" 649 | electron-to-chromium "^1.3.723" 650 | escalade "^3.1.1" 651 | node-releases "^1.1.71" 652 | 653 | buffer-from@^1.0.0: 654 | version "1.1.1" 655 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 656 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 657 | 658 | bytes@3.1.0: 659 | version "3.1.0" 660 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 661 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 662 | 663 | call-bind@^1.0.0, call-bind@^1.0.2: 664 | version "1.0.2" 665 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 666 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 667 | dependencies: 668 | function-bind "^1.1.1" 669 | get-intrinsic "^1.0.2" 670 | 671 | callsites@^3.0.0: 672 | version "3.1.0" 673 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 674 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 675 | 676 | caniuse-lite@^1.0.30001219: 677 | version "1.0.30001246" 678 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001246.tgz#fe17d9919f87124d6bb416ef7b325356d69dc76c" 679 | integrity sha512-Tc+ff0Co/nFNbLOrziBXmMVtpt9S2c2Y+Z9Nk9Khj09J+0zR9ejvIW5qkZAErCbOrVODCx/MN+GpB5FNBs5GFA== 680 | 681 | chalk@^2.0.0: 682 | version "2.4.2" 683 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 684 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 685 | dependencies: 686 | ansi-styles "^3.2.1" 687 | escape-string-regexp "^1.0.5" 688 | supports-color "^5.3.0" 689 | 690 | chalk@^4.0.0: 691 | version "4.1.1" 692 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 693 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 694 | dependencies: 695 | ansi-styles "^4.1.0" 696 | supports-color "^7.1.0" 697 | 698 | color-convert@^1.9.0: 699 | version "1.9.3" 700 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 701 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 702 | dependencies: 703 | color-name "1.1.3" 704 | 705 | color-convert@^2.0.1: 706 | version "2.0.1" 707 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 708 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 709 | dependencies: 710 | color-name "~1.1.4" 711 | 712 | color-name@1.1.3: 713 | version "1.1.3" 714 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 715 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 716 | 717 | color-name@~1.1.4: 718 | version "1.1.4" 719 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 720 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 721 | 722 | colorette@^1.2.2: 723 | version "1.2.2" 724 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 725 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== 726 | 727 | concat-map@0.0.1: 728 | version "0.0.1" 729 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 730 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 731 | 732 | concat-stream@^1.4.7: 733 | version "1.6.2" 734 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 735 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 736 | dependencies: 737 | buffer-from "^1.0.0" 738 | inherits "^2.0.3" 739 | readable-stream "^2.2.2" 740 | typedarray "^0.0.6" 741 | 742 | content-disposition@0.5.3: 743 | version "0.5.3" 744 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 745 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 746 | dependencies: 747 | safe-buffer "5.1.2" 748 | 749 | content-type@~1.0.4: 750 | version "1.0.4" 751 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 752 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 753 | 754 | convert-source-map@^1.7.0: 755 | version "1.8.0" 756 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" 757 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 758 | dependencies: 759 | safe-buffer "~5.1.1" 760 | 761 | cookie-signature@1.0.6: 762 | version "1.0.6" 763 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 764 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 765 | 766 | cookie@0.4.0: 767 | version "0.4.0" 768 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 769 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 770 | 771 | core-js-pure@^3.15.0: 772 | version "3.15.2" 773 | resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" 774 | integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== 775 | 776 | core-util-is@~1.0.0: 777 | version "1.0.2" 778 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 779 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 780 | 781 | cross-spawn@^5.0.1: 782 | version "5.1.0" 783 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 784 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 785 | dependencies: 786 | lru-cache "^4.0.1" 787 | shebang-command "^1.2.0" 788 | which "^1.2.9" 789 | 790 | cross-spawn@^7.0.2: 791 | version "7.0.3" 792 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 793 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 794 | dependencies: 795 | path-key "^3.1.0" 796 | shebang-command "^2.0.0" 797 | which "^2.0.1" 798 | 799 | csstype@^3.0.2: 800 | version "3.0.8" 801 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" 802 | integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== 803 | 804 | culori@^0.18.2: 805 | version "0.18.2" 806 | resolved "https://registry.yarnpkg.com/culori/-/culori-0.18.2.tgz#8bbfe9a8bc56938cda870e5f44d3f3c82da764c9" 807 | integrity sha512-cEoI0aymWhLTFxYOPCERk3GRVA+pLML0a3VpTjmGZQICOq4Zs8/YHyZJYnPUwwt59Bup7hmWNI1pM3VLM/Sjog== 808 | 809 | damerau-levenshtein@^1.0.6: 810 | version "1.0.7" 811 | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" 812 | integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== 813 | 814 | debug@2.6.9, debug@^2.6.9: 815 | version "2.6.9" 816 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 817 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 818 | dependencies: 819 | ms "2.0.0" 820 | 821 | debug@^3.2.7: 822 | version "3.2.7" 823 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 824 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 825 | dependencies: 826 | ms "^2.1.1" 827 | 828 | debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: 829 | version "4.3.2" 830 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 831 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 832 | dependencies: 833 | ms "2.1.2" 834 | 835 | deep-is@^0.1.3: 836 | version "0.1.3" 837 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 838 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 839 | 840 | define-properties@^1.1.3: 841 | version "1.1.3" 842 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 843 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 844 | dependencies: 845 | object-keys "^1.0.12" 846 | 847 | depd@~1.1.2: 848 | version "1.1.2" 849 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 850 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 851 | 852 | destroy@~1.0.4: 853 | version "1.0.4" 854 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 855 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 856 | 857 | dir-glob@^3.0.1: 858 | version "3.0.1" 859 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 860 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 861 | dependencies: 862 | path-type "^4.0.0" 863 | 864 | doctrine@^2.1.0: 865 | version "2.1.0" 866 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 867 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 868 | dependencies: 869 | esutils "^2.0.2" 870 | 871 | doctrine@^3.0.0: 872 | version "3.0.0" 873 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 874 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 875 | dependencies: 876 | esutils "^2.0.2" 877 | 878 | ee-first@1.1.1: 879 | version "1.1.1" 880 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 881 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 882 | 883 | electron-to-chromium@^1.3.723: 884 | version "1.3.785" 885 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.785.tgz#79f546c69a6be4f30913aaace361bc746f26df48" 886 | integrity sha512-WmCgAeURsMFiyoJ646eUaJQ7GNfvMRLXo+GamUyKVNEM4MqTAsXyC0f38JEB4N3BtbD0tlAKozGP5E2T9K3YGg== 887 | 888 | emoji-regex@^8.0.0: 889 | version "8.0.0" 890 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 891 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 892 | 893 | emoji-regex@^9.0.0: 894 | version "9.2.2" 895 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 896 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 897 | 898 | encodeurl@~1.0.2: 899 | version "1.0.2" 900 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 901 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 902 | 903 | enquirer@^2.3.5: 904 | version "2.3.6" 905 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 906 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 907 | dependencies: 908 | ansi-colors "^4.1.1" 909 | 910 | error-ex@^1.3.1: 911 | version "1.3.2" 912 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 913 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 914 | dependencies: 915 | is-arrayish "^0.2.1" 916 | 917 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: 918 | version "1.18.3" 919 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" 920 | integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== 921 | dependencies: 922 | call-bind "^1.0.2" 923 | es-to-primitive "^1.2.1" 924 | function-bind "^1.1.1" 925 | get-intrinsic "^1.1.1" 926 | has "^1.0.3" 927 | has-symbols "^1.0.2" 928 | is-callable "^1.2.3" 929 | is-negative-zero "^2.0.1" 930 | is-regex "^1.1.3" 931 | is-string "^1.0.6" 932 | object-inspect "^1.10.3" 933 | object-keys "^1.1.1" 934 | object.assign "^4.1.2" 935 | string.prototype.trimend "^1.0.4" 936 | string.prototype.trimstart "^1.0.4" 937 | unbox-primitive "^1.0.1" 938 | 939 | es-to-primitive@^1.2.1: 940 | version "1.2.1" 941 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 942 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 943 | dependencies: 944 | is-callable "^1.1.4" 945 | is-date-object "^1.0.1" 946 | is-symbol "^1.0.2" 947 | 948 | esbuild@^0.12.8: 949 | version "0.12.15" 950 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.15.tgz#9d99cf39aeb2188265c5983e983e236829f08af0" 951 | integrity sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw== 952 | 953 | escalade@^3.1.1: 954 | version "3.1.1" 955 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 956 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 957 | 958 | escape-html@~1.0.3: 959 | version "1.0.3" 960 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 961 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 962 | 963 | escape-string-regexp@^1.0.5: 964 | version "1.0.5" 965 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 966 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 967 | 968 | escape-string-regexp@^4.0.0: 969 | version "4.0.0" 970 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 971 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 972 | 973 | eslint-config-prettier@^8.1.0: 974 | version "8.3.0" 975 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" 976 | integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== 977 | 978 | eslint-import-resolver-node@^0.3.4: 979 | version "0.3.4" 980 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" 981 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 982 | dependencies: 983 | debug "^2.6.9" 984 | resolve "^1.13.1" 985 | 986 | eslint-module-utils@^2.6.1: 987 | version "2.6.1" 988 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" 989 | integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== 990 | dependencies: 991 | debug "^3.2.7" 992 | pkg-dir "^2.0.0" 993 | 994 | eslint-plugin-import@^2.22.1: 995 | version "2.23.4" 996 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" 997 | integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== 998 | dependencies: 999 | array-includes "^3.1.3" 1000 | array.prototype.flat "^1.2.4" 1001 | debug "^2.6.9" 1002 | doctrine "^2.1.0" 1003 | eslint-import-resolver-node "^0.3.4" 1004 | eslint-module-utils "^2.6.1" 1005 | find-up "^2.0.0" 1006 | has "^1.0.3" 1007 | is-core-module "^2.4.0" 1008 | minimatch "^3.0.4" 1009 | object.values "^1.1.3" 1010 | pkg-up "^2.0.0" 1011 | read-pkg-up "^3.0.0" 1012 | resolve "^1.20.0" 1013 | tsconfig-paths "^3.9.0" 1014 | 1015 | eslint-plugin-jsx-a11y@^6.4.1: 1016 | version "6.4.1" 1017 | resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" 1018 | integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== 1019 | dependencies: 1020 | "@babel/runtime" "^7.11.2" 1021 | aria-query "^4.2.2" 1022 | array-includes "^3.1.1" 1023 | ast-types-flow "^0.0.7" 1024 | axe-core "^4.0.2" 1025 | axobject-query "^2.2.0" 1026 | damerau-levenshtein "^1.0.6" 1027 | emoji-regex "^9.0.0" 1028 | has "^1.0.3" 1029 | jsx-ast-utils "^3.1.0" 1030 | language-tags "^1.0.5" 1031 | 1032 | eslint-plugin-prettier@^3.3.1: 1033 | version "3.4.0" 1034 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" 1035 | integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== 1036 | dependencies: 1037 | prettier-linter-helpers "^1.0.0" 1038 | 1039 | eslint-plugin-react@^7.22.0: 1040 | version "7.24.0" 1041 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" 1042 | integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== 1043 | dependencies: 1044 | array-includes "^3.1.3" 1045 | array.prototype.flatmap "^1.2.4" 1046 | doctrine "^2.1.0" 1047 | has "^1.0.3" 1048 | jsx-ast-utils "^2.4.1 || ^3.0.0" 1049 | minimatch "^3.0.4" 1050 | object.entries "^1.1.4" 1051 | object.fromentries "^2.0.4" 1052 | object.values "^1.1.4" 1053 | prop-types "^15.7.2" 1054 | resolve "^2.0.0-next.3" 1055 | string.prototype.matchall "^4.0.5" 1056 | 1057 | eslint-plugin-simple-import-sort@^7.0.0: 1058 | version "7.0.0" 1059 | resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8" 1060 | integrity sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw== 1061 | 1062 | eslint-scope@^5.1.1: 1063 | version "5.1.1" 1064 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 1065 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 1066 | dependencies: 1067 | esrecurse "^4.3.0" 1068 | estraverse "^4.1.1" 1069 | 1070 | eslint-utils@^2.1.0: 1071 | version "2.1.0" 1072 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 1073 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 1074 | dependencies: 1075 | eslint-visitor-keys "^1.1.0" 1076 | 1077 | eslint-utils@^3.0.0: 1078 | version "3.0.0" 1079 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 1080 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 1081 | dependencies: 1082 | eslint-visitor-keys "^2.0.0" 1083 | 1084 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 1085 | version "1.3.0" 1086 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 1087 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 1088 | 1089 | eslint-visitor-keys@^2.0.0: 1090 | version "2.1.0" 1091 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 1092 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 1093 | 1094 | eslint@^7.22.0: 1095 | version "7.31.0" 1096 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.31.0.tgz#f972b539424bf2604907a970860732c5d99d3aca" 1097 | integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== 1098 | dependencies: 1099 | "@babel/code-frame" "7.12.11" 1100 | "@eslint/eslintrc" "^0.4.3" 1101 | "@humanwhocodes/config-array" "^0.5.0" 1102 | ajv "^6.10.0" 1103 | chalk "^4.0.0" 1104 | cross-spawn "^7.0.2" 1105 | debug "^4.0.1" 1106 | doctrine "^3.0.0" 1107 | enquirer "^2.3.5" 1108 | escape-string-regexp "^4.0.0" 1109 | eslint-scope "^5.1.1" 1110 | eslint-utils "^2.1.0" 1111 | eslint-visitor-keys "^2.0.0" 1112 | espree "^7.3.1" 1113 | esquery "^1.4.0" 1114 | esutils "^2.0.2" 1115 | fast-deep-equal "^3.1.3" 1116 | file-entry-cache "^6.0.1" 1117 | functional-red-black-tree "^1.0.1" 1118 | glob-parent "^5.1.2" 1119 | globals "^13.6.0" 1120 | ignore "^4.0.6" 1121 | import-fresh "^3.0.0" 1122 | imurmurhash "^0.1.4" 1123 | is-glob "^4.0.0" 1124 | js-yaml "^3.13.1" 1125 | json-stable-stringify-without-jsonify "^1.0.1" 1126 | levn "^0.4.1" 1127 | lodash.merge "^4.6.2" 1128 | minimatch "^3.0.4" 1129 | natural-compare "^1.4.0" 1130 | optionator "^0.9.1" 1131 | progress "^2.0.0" 1132 | regexpp "^3.1.0" 1133 | semver "^7.2.1" 1134 | strip-ansi "^6.0.0" 1135 | strip-json-comments "^3.1.0" 1136 | table "^6.0.9" 1137 | text-table "^0.2.0" 1138 | v8-compile-cache "^2.0.3" 1139 | 1140 | espree@^7.3.0, espree@^7.3.1: 1141 | version "7.3.1" 1142 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 1143 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 1144 | dependencies: 1145 | acorn "^7.4.0" 1146 | acorn-jsx "^5.3.1" 1147 | eslint-visitor-keys "^1.3.0" 1148 | 1149 | esprima@^4.0.0: 1150 | version "4.0.1" 1151 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1152 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1153 | 1154 | esquery@^1.4.0: 1155 | version "1.4.0" 1156 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 1157 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 1158 | dependencies: 1159 | estraverse "^5.1.0" 1160 | 1161 | esrecurse@^4.3.0: 1162 | version "4.3.0" 1163 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1164 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1165 | dependencies: 1166 | estraverse "^5.2.0" 1167 | 1168 | estraverse@^4.1.1: 1169 | version "4.3.0" 1170 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1171 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1172 | 1173 | estraverse@^5.1.0, estraverse@^5.2.0: 1174 | version "5.2.0" 1175 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 1176 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 1177 | 1178 | estree-walker@^2.0.1: 1179 | version "2.0.2" 1180 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 1181 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 1182 | 1183 | esutils@^2.0.2: 1184 | version "2.0.3" 1185 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1186 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1187 | 1188 | etag@~1.8.1: 1189 | version "1.8.1" 1190 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1191 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 1192 | 1193 | express@^4.17.1: 1194 | version "4.17.1" 1195 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 1196 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 1197 | dependencies: 1198 | accepts "~1.3.7" 1199 | array-flatten "1.1.1" 1200 | body-parser "1.19.0" 1201 | content-disposition "0.5.3" 1202 | content-type "~1.0.4" 1203 | cookie "0.4.0" 1204 | cookie-signature "1.0.6" 1205 | debug "2.6.9" 1206 | depd "~1.1.2" 1207 | encodeurl "~1.0.2" 1208 | escape-html "~1.0.3" 1209 | etag "~1.8.1" 1210 | finalhandler "~1.1.2" 1211 | fresh "0.5.2" 1212 | merge-descriptors "1.0.1" 1213 | methods "~1.1.2" 1214 | on-finished "~2.3.0" 1215 | parseurl "~1.3.3" 1216 | path-to-regexp "0.1.7" 1217 | proxy-addr "~2.0.5" 1218 | qs "6.7.0" 1219 | range-parser "~1.2.1" 1220 | safe-buffer "5.1.2" 1221 | send "0.17.1" 1222 | serve-static "1.14.1" 1223 | setprototypeof "1.1.1" 1224 | statuses "~1.5.0" 1225 | type-is "~1.6.18" 1226 | utils-merge "1.0.1" 1227 | vary "~1.1.2" 1228 | 1229 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1230 | version "3.1.3" 1231 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1232 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1233 | 1234 | fast-diff@^1.1.2: 1235 | version "1.2.0" 1236 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 1237 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 1238 | 1239 | fast-glob@^3.1.1: 1240 | version "3.2.7" 1241 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" 1242 | integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== 1243 | dependencies: 1244 | "@nodelib/fs.stat" "^2.0.2" 1245 | "@nodelib/fs.walk" "^1.2.3" 1246 | glob-parent "^5.1.2" 1247 | merge2 "^1.3.0" 1248 | micromatch "^4.0.4" 1249 | 1250 | fast-json-stable-stringify@^2.0.0: 1251 | version "2.1.0" 1252 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1253 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1254 | 1255 | fast-levenshtein@^2.0.6: 1256 | version "2.0.6" 1257 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1258 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1259 | 1260 | fastq@^1.6.0: 1261 | version "1.11.1" 1262 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" 1263 | integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== 1264 | dependencies: 1265 | reusify "^1.0.4" 1266 | 1267 | file-entry-cache@^6.0.1: 1268 | version "6.0.1" 1269 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1270 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1271 | dependencies: 1272 | flat-cache "^3.0.4" 1273 | 1274 | fill-range@^7.0.1: 1275 | version "7.0.1" 1276 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1277 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1278 | dependencies: 1279 | to-regex-range "^5.0.1" 1280 | 1281 | finalhandler@~1.1.2: 1282 | version "1.1.2" 1283 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 1284 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 1285 | dependencies: 1286 | debug "2.6.9" 1287 | encodeurl "~1.0.2" 1288 | escape-html "~1.0.3" 1289 | on-finished "~2.3.0" 1290 | parseurl "~1.3.3" 1291 | statuses "~1.5.0" 1292 | unpipe "~1.0.0" 1293 | 1294 | find-up@^2.0.0, find-up@^2.1.0: 1295 | version "2.1.0" 1296 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1297 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 1298 | dependencies: 1299 | locate-path "^2.0.0" 1300 | 1301 | flat-cache@^3.0.4: 1302 | version "3.0.4" 1303 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1304 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1305 | dependencies: 1306 | flatted "^3.1.0" 1307 | rimraf "^3.0.2" 1308 | 1309 | flatted@^3.1.0: 1310 | version "3.2.1" 1311 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.1.tgz#bbef080d95fca6709362c73044a1634f7c6e7d05" 1312 | integrity sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg== 1313 | 1314 | forwarded@0.2.0: 1315 | version "0.2.0" 1316 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 1317 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 1318 | 1319 | fresh@0.5.2: 1320 | version "0.5.2" 1321 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1322 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 1323 | 1324 | fs.realpath@^1.0.0: 1325 | version "1.0.0" 1326 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1327 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1328 | 1329 | fsevents@~2.3.2: 1330 | version "2.3.2" 1331 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1332 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1333 | 1334 | function-bind@^1.1.1: 1335 | version "1.1.1" 1336 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1337 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1338 | 1339 | functional-red-black-tree@^1.0.1: 1340 | version "1.0.1" 1341 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1342 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1343 | 1344 | gensync@^1.0.0-beta.2: 1345 | version "1.0.0-beta.2" 1346 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1347 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1348 | 1349 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 1350 | version "1.1.1" 1351 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 1352 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1353 | dependencies: 1354 | function-bind "^1.1.1" 1355 | has "^1.0.3" 1356 | has-symbols "^1.0.1" 1357 | 1358 | glob-parent@^5.1.2: 1359 | version "5.1.2" 1360 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1361 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1362 | dependencies: 1363 | is-glob "^4.0.1" 1364 | 1365 | glob@^7.1.3: 1366 | version "7.1.7" 1367 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 1368 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 1369 | dependencies: 1370 | fs.realpath "^1.0.0" 1371 | inflight "^1.0.4" 1372 | inherits "2" 1373 | minimatch "^3.0.4" 1374 | once "^1.3.0" 1375 | path-is-absolute "^1.0.0" 1376 | 1377 | globals@^11.1.0: 1378 | version "11.12.0" 1379 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1380 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1381 | 1382 | globals@^13.6.0, globals@^13.9.0: 1383 | version "13.10.0" 1384 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" 1385 | integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== 1386 | dependencies: 1387 | type-fest "^0.20.2" 1388 | 1389 | globby@^11.0.3: 1390 | version "11.0.4" 1391 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" 1392 | integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== 1393 | dependencies: 1394 | array-union "^2.1.0" 1395 | dir-glob "^3.0.1" 1396 | fast-glob "^3.1.1" 1397 | ignore "^5.1.4" 1398 | merge2 "^1.3.0" 1399 | slash "^3.0.0" 1400 | 1401 | graceful-fs@^4.1.2: 1402 | version "4.2.6" 1403 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1404 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 1405 | 1406 | has-bigints@^1.0.1: 1407 | version "1.0.1" 1408 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" 1409 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 1410 | 1411 | has-flag@^3.0.0: 1412 | version "3.0.0" 1413 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1414 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1415 | 1416 | has-flag@^4.0.0: 1417 | version "4.0.0" 1418 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1419 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1420 | 1421 | has-symbols@^1.0.1, has-symbols@^1.0.2: 1422 | version "1.0.2" 1423 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 1424 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1425 | 1426 | has@^1.0.3: 1427 | version "1.0.3" 1428 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1429 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1430 | dependencies: 1431 | function-bind "^1.1.1" 1432 | 1433 | hosted-git-info@^2.1.4: 1434 | version "2.8.9" 1435 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 1436 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 1437 | 1438 | http-errors@1.7.2: 1439 | version "1.7.2" 1440 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1441 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1442 | dependencies: 1443 | depd "~1.1.2" 1444 | inherits "2.0.3" 1445 | setprototypeof "1.1.1" 1446 | statuses ">= 1.5.0 < 2" 1447 | toidentifier "1.0.0" 1448 | 1449 | http-errors@~1.7.2: 1450 | version "1.7.3" 1451 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1452 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1453 | dependencies: 1454 | depd "~1.1.2" 1455 | inherits "2.0.4" 1456 | setprototypeof "1.1.1" 1457 | statuses ">= 1.5.0 < 2" 1458 | toidentifier "1.0.0" 1459 | 1460 | iconv-lite@0.4.24: 1461 | version "0.4.24" 1462 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1463 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1464 | dependencies: 1465 | safer-buffer ">= 2.1.2 < 3" 1466 | 1467 | ignore@^4.0.6: 1468 | version "4.0.6" 1469 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1470 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1471 | 1472 | ignore@^5.1.4: 1473 | version "5.1.8" 1474 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 1475 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1476 | 1477 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1478 | version "3.3.0" 1479 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1480 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1481 | dependencies: 1482 | parent-module "^1.0.0" 1483 | resolve-from "^4.0.0" 1484 | 1485 | imurmurhash@^0.1.4: 1486 | version "0.1.4" 1487 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1488 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1489 | 1490 | inflight@^1.0.4: 1491 | version "1.0.6" 1492 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1493 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1494 | dependencies: 1495 | once "^1.3.0" 1496 | wrappy "1" 1497 | 1498 | inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: 1499 | version "2.0.4" 1500 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1501 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1502 | 1503 | inherits@2.0.3: 1504 | version "2.0.3" 1505 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1506 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1507 | 1508 | internal-slot@^1.0.3: 1509 | version "1.0.3" 1510 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" 1511 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 1512 | dependencies: 1513 | get-intrinsic "^1.1.0" 1514 | has "^1.0.3" 1515 | side-channel "^1.0.4" 1516 | 1517 | ipaddr.js@1.9.1: 1518 | version "1.9.1" 1519 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 1520 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 1521 | 1522 | is-arrayish@^0.2.1: 1523 | version "0.2.1" 1524 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1525 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1526 | 1527 | is-bigint@^1.0.1: 1528 | version "1.0.2" 1529 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" 1530 | integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== 1531 | 1532 | is-boolean-object@^1.1.0: 1533 | version "1.1.1" 1534 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" 1535 | integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== 1536 | dependencies: 1537 | call-bind "^1.0.2" 1538 | 1539 | is-callable@^1.1.4, is-callable@^1.2.3: 1540 | version "1.2.3" 1541 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" 1542 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== 1543 | 1544 | is-core-module@^2.2.0, is-core-module@^2.4.0: 1545 | version "2.5.0" 1546 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" 1547 | integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== 1548 | dependencies: 1549 | has "^1.0.3" 1550 | 1551 | is-date-object@^1.0.1: 1552 | version "1.0.4" 1553 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" 1554 | integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== 1555 | 1556 | is-extglob@^2.1.1: 1557 | version "2.1.1" 1558 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1559 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1560 | 1561 | is-fullwidth-code-point@^3.0.0: 1562 | version "3.0.0" 1563 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1564 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1565 | 1566 | is-glob@^4.0.0, is-glob@^4.0.1: 1567 | version "4.0.1" 1568 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1569 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1570 | dependencies: 1571 | is-extglob "^2.1.1" 1572 | 1573 | is-negative-zero@^2.0.1: 1574 | version "2.0.1" 1575 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 1576 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 1577 | 1578 | is-number-object@^1.0.4: 1579 | version "1.0.5" 1580 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" 1581 | integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== 1582 | 1583 | is-number@^7.0.0: 1584 | version "7.0.0" 1585 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1586 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1587 | 1588 | is-regex@^1.1.3: 1589 | version "1.1.3" 1590 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" 1591 | integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== 1592 | dependencies: 1593 | call-bind "^1.0.2" 1594 | has-symbols "^1.0.2" 1595 | 1596 | is-string@^1.0.5, is-string@^1.0.6: 1597 | version "1.0.6" 1598 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" 1599 | integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== 1600 | 1601 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1602 | version "1.0.4" 1603 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 1604 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1605 | dependencies: 1606 | has-symbols "^1.0.2" 1607 | 1608 | isarray@~1.0.0: 1609 | version "1.0.0" 1610 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1611 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1612 | 1613 | isexe@^2.0.0: 1614 | version "2.0.0" 1615 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1616 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1617 | 1618 | jotai@^1.2.2: 1619 | version "1.2.2" 1620 | resolved "https://registry.yarnpkg.com/jotai/-/jotai-1.2.2.tgz#631fd7ad44e9ac26cdf9874d52282c1cfe032807" 1621 | integrity sha512-iqkkUdWsH2Mk4HY1biba/8kA77+8liVBy8E0d8Nce29qow4h9mzdDhpTasAruuFYPycw6JvfZgL5RB0JJuIZjw== 1622 | 1623 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1624 | version "4.0.0" 1625 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1626 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1627 | 1628 | js-yaml@^3.13.1: 1629 | version "3.14.1" 1630 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1631 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1632 | dependencies: 1633 | argparse "^1.0.7" 1634 | esprima "^4.0.0" 1635 | 1636 | jsesc@^2.5.1: 1637 | version "2.5.2" 1638 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1639 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1640 | 1641 | json-parse-better-errors@^1.0.1: 1642 | version "1.0.2" 1643 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1644 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1645 | 1646 | json-schema-traverse@^0.4.1: 1647 | version "0.4.1" 1648 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1649 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1650 | 1651 | json-schema-traverse@^1.0.0: 1652 | version "1.0.0" 1653 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1654 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1655 | 1656 | json-stable-stringify-without-jsonify@^1.0.1: 1657 | version "1.0.1" 1658 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1659 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1660 | 1661 | json5@^2.1.2, json5@^2.2.0: 1662 | version "2.2.0" 1663 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 1664 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 1665 | dependencies: 1666 | minimist "^1.2.5" 1667 | 1668 | "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: 1669 | version "3.2.0" 1670 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" 1671 | integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== 1672 | dependencies: 1673 | array-includes "^3.1.2" 1674 | object.assign "^4.1.2" 1675 | 1676 | language-subtag-registry@~0.3.2: 1677 | version "0.3.21" 1678 | resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" 1679 | integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== 1680 | 1681 | language-tags@^1.0.5: 1682 | version "1.0.5" 1683 | resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" 1684 | integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= 1685 | dependencies: 1686 | language-subtag-registry "~0.3.2" 1687 | 1688 | levn@^0.4.1: 1689 | version "0.4.1" 1690 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1691 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1692 | dependencies: 1693 | prelude-ls "^1.2.1" 1694 | type-check "~0.4.0" 1695 | 1696 | load-json-file@^4.0.0: 1697 | version "4.0.0" 1698 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1699 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 1700 | dependencies: 1701 | graceful-fs "^4.1.2" 1702 | parse-json "^4.0.0" 1703 | pify "^3.0.0" 1704 | strip-bom "^3.0.0" 1705 | 1706 | locate-path@^2.0.0: 1707 | version "2.0.0" 1708 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1709 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1710 | dependencies: 1711 | p-locate "^2.0.0" 1712 | path-exists "^3.0.0" 1713 | 1714 | lodash.clonedeep@^4.5.0: 1715 | version "4.5.0" 1716 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" 1717 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= 1718 | 1719 | lodash.merge@^4.6.2: 1720 | version "4.6.2" 1721 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1722 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1723 | 1724 | lodash.truncate@^4.4.2: 1725 | version "4.4.2" 1726 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 1727 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 1728 | 1729 | loose-envify@^1.1.0, loose-envify@^1.4.0: 1730 | version "1.4.0" 1731 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1732 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1733 | dependencies: 1734 | js-tokens "^3.0.0 || ^4.0.0" 1735 | 1736 | lru-cache@^4.0.1: 1737 | version "4.1.5" 1738 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1739 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1740 | dependencies: 1741 | pseudomap "^1.0.2" 1742 | yallist "^2.1.2" 1743 | 1744 | lru-cache@^6.0.0: 1745 | version "6.0.0" 1746 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1747 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1748 | dependencies: 1749 | yallist "^4.0.0" 1750 | 1751 | media-typer@0.3.0: 1752 | version "0.3.0" 1753 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1754 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1755 | 1756 | merge-descriptors@1.0.1: 1757 | version "1.0.1" 1758 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1759 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1760 | 1761 | merge2@^1.3.0: 1762 | version "1.4.1" 1763 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1764 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1765 | 1766 | methods@~1.1.2: 1767 | version "1.1.2" 1768 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1769 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1770 | 1771 | micromatch@^4.0.4: 1772 | version "4.0.4" 1773 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 1774 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1775 | dependencies: 1776 | braces "^3.0.1" 1777 | picomatch "^2.2.3" 1778 | 1779 | mime-db@1.49.0: 1780 | version "1.49.0" 1781 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" 1782 | integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== 1783 | 1784 | mime-types@~2.1.24: 1785 | version "2.1.32" 1786 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" 1787 | integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== 1788 | dependencies: 1789 | mime-db "1.49.0" 1790 | 1791 | mime@1.6.0: 1792 | version "1.6.0" 1793 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1794 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1795 | 1796 | minimatch@^3.0.4: 1797 | version "3.0.4" 1798 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1799 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1800 | dependencies: 1801 | brace-expansion "^1.1.7" 1802 | 1803 | minimist@^1.2.0, minimist@^1.2.5: 1804 | version "1.2.5" 1805 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1806 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1807 | 1808 | ms@2.0.0: 1809 | version "2.0.0" 1810 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1811 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1812 | 1813 | ms@2.1.1: 1814 | version "2.1.1" 1815 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1816 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1817 | 1818 | ms@2.1.2: 1819 | version "2.1.2" 1820 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1821 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1822 | 1823 | ms@^2.1.1: 1824 | version "2.1.3" 1825 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1826 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1827 | 1828 | nanoid@^3.1.23: 1829 | version "3.1.23" 1830 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 1831 | integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== 1832 | 1833 | natural-compare@^1.4.0: 1834 | version "1.4.0" 1835 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1836 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1837 | 1838 | negotiator@0.6.2: 1839 | version "0.6.2" 1840 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1841 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1842 | 1843 | node-releases@^1.1.71: 1844 | version "1.1.73" 1845 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" 1846 | integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== 1847 | 1848 | normalize-package-data@^2.3.2: 1849 | version "2.5.0" 1850 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1851 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1852 | dependencies: 1853 | hosted-git-info "^2.1.4" 1854 | resolve "^1.10.0" 1855 | semver "2 || 3 || 4 || 5" 1856 | validate-npm-package-license "^3.0.1" 1857 | 1858 | object-assign@^4.1.1: 1859 | version "4.1.1" 1860 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1861 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1862 | 1863 | object-inspect@^1.10.3, object-inspect@^1.9.0: 1864 | version "1.11.0" 1865 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" 1866 | integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== 1867 | 1868 | object-keys@^1.0.12, object-keys@^1.1.1: 1869 | version "1.1.1" 1870 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1871 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1872 | 1873 | object.assign@^4.1.2: 1874 | version "4.1.2" 1875 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1876 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1877 | dependencies: 1878 | call-bind "^1.0.0" 1879 | define-properties "^1.1.3" 1880 | has-symbols "^1.0.1" 1881 | object-keys "^1.1.1" 1882 | 1883 | object.entries@^1.1.4: 1884 | version "1.1.4" 1885 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" 1886 | integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA== 1887 | dependencies: 1888 | call-bind "^1.0.2" 1889 | define-properties "^1.1.3" 1890 | es-abstract "^1.18.2" 1891 | 1892 | object.fromentries@^2.0.4: 1893 | version "2.0.4" 1894 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" 1895 | integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== 1896 | dependencies: 1897 | call-bind "^1.0.2" 1898 | define-properties "^1.1.3" 1899 | es-abstract "^1.18.0-next.2" 1900 | has "^1.0.3" 1901 | 1902 | object.values@^1.1.3, object.values@^1.1.4: 1903 | version "1.1.4" 1904 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" 1905 | integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== 1906 | dependencies: 1907 | call-bind "^1.0.2" 1908 | define-properties "^1.1.3" 1909 | es-abstract "^1.18.2" 1910 | 1911 | on-finished@~2.3.0: 1912 | version "2.3.0" 1913 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1914 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1915 | dependencies: 1916 | ee-first "1.1.1" 1917 | 1918 | once@^1.3.0: 1919 | version "1.4.0" 1920 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1921 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1922 | dependencies: 1923 | wrappy "1" 1924 | 1925 | optionator@^0.9.1: 1926 | version "0.9.1" 1927 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1928 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1929 | dependencies: 1930 | deep-is "^0.1.3" 1931 | fast-levenshtein "^2.0.6" 1932 | levn "^0.4.1" 1933 | prelude-ls "^1.2.1" 1934 | type-check "^0.4.0" 1935 | word-wrap "^1.2.3" 1936 | 1937 | os-shim@^0.1.2: 1938 | version "0.1.3" 1939 | resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" 1940 | integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= 1941 | 1942 | p-limit@^1.1.0: 1943 | version "1.3.0" 1944 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1945 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1946 | dependencies: 1947 | p-try "^1.0.0" 1948 | 1949 | p-locate@^2.0.0: 1950 | version "2.0.0" 1951 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1952 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1953 | dependencies: 1954 | p-limit "^1.1.0" 1955 | 1956 | p-try@^1.0.0: 1957 | version "1.0.0" 1958 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1959 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1960 | 1961 | parent-module@^1.0.0: 1962 | version "1.0.1" 1963 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1964 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1965 | dependencies: 1966 | callsites "^3.0.0" 1967 | 1968 | parse-json@^4.0.0: 1969 | version "4.0.0" 1970 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1971 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1972 | dependencies: 1973 | error-ex "^1.3.1" 1974 | json-parse-better-errors "^1.0.1" 1975 | 1976 | parseurl@~1.3.3: 1977 | version "1.3.3" 1978 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1979 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1980 | 1981 | path-exists@^3.0.0: 1982 | version "3.0.0" 1983 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1984 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1985 | 1986 | path-is-absolute@^1.0.0: 1987 | version "1.0.1" 1988 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1989 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1990 | 1991 | path-key@^3.1.0: 1992 | version "3.1.1" 1993 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1994 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1995 | 1996 | path-parse@^1.0.6: 1997 | version "1.0.7" 1998 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1999 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2000 | 2001 | path-to-regexp@0.1.7: 2002 | version "0.1.7" 2003 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2004 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 2005 | 2006 | path-type@^3.0.0: 2007 | version "3.0.0" 2008 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 2009 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 2010 | dependencies: 2011 | pify "^3.0.0" 2012 | 2013 | path-type@^4.0.0: 2014 | version "4.0.0" 2015 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 2016 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2017 | 2018 | path@^0.12.7: 2019 | version "0.12.7" 2020 | resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" 2021 | integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= 2022 | dependencies: 2023 | process "^0.11.1" 2024 | util "^0.10.3" 2025 | 2026 | picomatch@^2.2.2, picomatch@^2.2.3: 2027 | version "2.3.0" 2028 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 2029 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 2030 | 2031 | pify@^3.0.0: 2032 | version "3.0.0" 2033 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2034 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 2035 | 2036 | pkg-dir@^2.0.0: 2037 | version "2.0.0" 2038 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 2039 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 2040 | dependencies: 2041 | find-up "^2.1.0" 2042 | 2043 | pkg-up@^2.0.0: 2044 | version "2.0.0" 2045 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" 2046 | integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= 2047 | dependencies: 2048 | find-up "^2.1.0" 2049 | 2050 | postcss@^8.3.5: 2051 | version "8.3.5" 2052 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" 2053 | integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== 2054 | dependencies: 2055 | colorette "^1.2.2" 2056 | nanoid "^3.1.23" 2057 | source-map-js "^0.6.2" 2058 | 2059 | pre-commit@^1.2.2: 2060 | version "1.2.2" 2061 | resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" 2062 | integrity sha1-287g7p3nI15X95xW186UZBpp7sY= 2063 | dependencies: 2064 | cross-spawn "^5.0.1" 2065 | spawn-sync "^1.0.15" 2066 | which "1.2.x" 2067 | 2068 | prelude-ls@^1.2.1: 2069 | version "1.2.1" 2070 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 2071 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 2072 | 2073 | prettier-linter-helpers@^1.0.0: 2074 | version "1.0.0" 2075 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 2076 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 2077 | dependencies: 2078 | fast-diff "^1.1.2" 2079 | 2080 | prettier@^2.2.1: 2081 | version "2.3.2" 2082 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" 2083 | integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== 2084 | 2085 | process-nextick-args@~2.0.0: 2086 | version "2.0.1" 2087 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2088 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2089 | 2090 | process@^0.11.1: 2091 | version "0.11.10" 2092 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 2093 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 2094 | 2095 | progress@^2.0.0: 2096 | version "2.0.3" 2097 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2098 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 2099 | 2100 | prop-types@^15.7.2: 2101 | version "15.7.2" 2102 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 2103 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 2104 | dependencies: 2105 | loose-envify "^1.4.0" 2106 | object-assign "^4.1.1" 2107 | react-is "^16.8.1" 2108 | 2109 | proxy-addr@~2.0.5: 2110 | version "2.0.7" 2111 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 2112 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 2113 | dependencies: 2114 | forwarded "0.2.0" 2115 | ipaddr.js "1.9.1" 2116 | 2117 | pseudomap@^1.0.2: 2118 | version "1.0.2" 2119 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2120 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 2121 | 2122 | punycode@^2.1.0: 2123 | version "2.1.1" 2124 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2125 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2126 | 2127 | qs@6.7.0: 2128 | version "6.7.0" 2129 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 2130 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 2131 | 2132 | queue-microtask@^1.2.2: 2133 | version "1.2.3" 2134 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 2135 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2136 | 2137 | range-parser@~1.2.1: 2138 | version "1.2.1" 2139 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 2140 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 2141 | 2142 | raw-body@2.4.0: 2143 | version "2.4.0" 2144 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 2145 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 2146 | dependencies: 2147 | bytes "3.1.0" 2148 | http-errors "1.7.2" 2149 | iconv-lite "0.4.24" 2150 | unpipe "1.0.0" 2151 | 2152 | react-dom@^17.0.2: 2153 | version "17.0.2" 2154 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" 2155 | integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== 2156 | dependencies: 2157 | loose-envify "^1.1.0" 2158 | object-assign "^4.1.1" 2159 | scheduler "^0.20.2" 2160 | 2161 | react-is@^16.8.1: 2162 | version "16.13.1" 2163 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 2164 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 2165 | 2166 | react-refresh@^0.10.0: 2167 | version "0.10.0" 2168 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.10.0.tgz#2f536c9660c0b9b1d500684d9e52a65e7404f7e3" 2169 | integrity sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ== 2170 | 2171 | react-use-gesture@^9.1.3: 2172 | version "9.1.3" 2173 | resolved "https://registry.yarnpkg.com/react-use-gesture/-/react-use-gesture-9.1.3.tgz#92bd143e4f58e69bd424514a5bfccba2a1d62ec0" 2174 | integrity sha512-CdqA2SmS/fj3kkS2W8ZU8wjTbVBAIwDWaRprX7OKaj7HlGwBasGEFggmk5qNklknqk9zK/h8D355bEJFTpqEMg== 2175 | 2176 | react@^17.0.2: 2177 | version "17.0.2" 2178 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" 2179 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== 2180 | dependencies: 2181 | loose-envify "^1.1.0" 2182 | object-assign "^4.1.1" 2183 | 2184 | read-pkg-up@^3.0.0: 2185 | version "3.0.0" 2186 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" 2187 | integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= 2188 | dependencies: 2189 | find-up "^2.0.0" 2190 | read-pkg "^3.0.0" 2191 | 2192 | read-pkg@^3.0.0: 2193 | version "3.0.0" 2194 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 2195 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 2196 | dependencies: 2197 | load-json-file "^4.0.0" 2198 | normalize-package-data "^2.3.2" 2199 | path-type "^3.0.0" 2200 | 2201 | readable-stream@^2.2.2: 2202 | version "2.3.7" 2203 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 2204 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 2205 | dependencies: 2206 | core-util-is "~1.0.0" 2207 | inherits "~2.0.3" 2208 | isarray "~1.0.0" 2209 | process-nextick-args "~2.0.0" 2210 | safe-buffer "~5.1.1" 2211 | string_decoder "~1.1.1" 2212 | util-deprecate "~1.0.1" 2213 | 2214 | regenerator-runtime@^0.13.4: 2215 | version "0.13.7" 2216 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" 2217 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== 2218 | 2219 | regexp.prototype.flags@^1.3.1: 2220 | version "1.3.1" 2221 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" 2222 | integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== 2223 | dependencies: 2224 | call-bind "^1.0.2" 2225 | define-properties "^1.1.3" 2226 | 2227 | regexpp@^3.1.0: 2228 | version "3.2.0" 2229 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 2230 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 2231 | 2232 | require-from-string@^2.0.2: 2233 | version "2.0.2" 2234 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 2235 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 2236 | 2237 | resolve-from@^4.0.0: 2238 | version "4.0.0" 2239 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2240 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2241 | 2242 | resolve@^1.10.0, resolve@^1.13.1, resolve@^1.20.0: 2243 | version "1.20.0" 2244 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 2245 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 2246 | dependencies: 2247 | is-core-module "^2.2.0" 2248 | path-parse "^1.0.6" 2249 | 2250 | resolve@^2.0.0-next.3: 2251 | version "2.0.0-next.3" 2252 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" 2253 | integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== 2254 | dependencies: 2255 | is-core-module "^2.2.0" 2256 | path-parse "^1.0.6" 2257 | 2258 | reusify@^1.0.4: 2259 | version "1.0.4" 2260 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2261 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2262 | 2263 | rimraf@^3.0.2: 2264 | version "3.0.2" 2265 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2266 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2267 | dependencies: 2268 | glob "^7.1.3" 2269 | 2270 | rollup@^2.38.5: 2271 | version "2.53.2" 2272 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.53.2.tgz#3279f9bfba1fe446585560802e418c5fbcaefa51" 2273 | integrity sha512-1CtEYuS5CRCzFZ7SNW5528SlDlk4VDXIRGwbm/2POQxA/G4+7/crIqJwkmnj8Q/74hGx4oVlNvh4E1CJQ5hZ6w== 2274 | optionalDependencies: 2275 | fsevents "~2.3.2" 2276 | 2277 | run-parallel@^1.1.9: 2278 | version "1.2.0" 2279 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2280 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2281 | dependencies: 2282 | queue-microtask "^1.2.2" 2283 | 2284 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2285 | version "5.1.2" 2286 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2287 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2288 | 2289 | "safer-buffer@>= 2.1.2 < 3": 2290 | version "2.1.2" 2291 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2292 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2293 | 2294 | scheduler@^0.20.2: 2295 | version "0.20.2" 2296 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" 2297 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== 2298 | dependencies: 2299 | loose-envify "^1.1.0" 2300 | object-assign "^4.1.1" 2301 | 2302 | "semver@2 || 3 || 4 || 5": 2303 | version "5.7.1" 2304 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2305 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2306 | 2307 | semver@^6.3.0: 2308 | version "6.3.0" 2309 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2310 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2311 | 2312 | semver@^7.2.1, semver@^7.3.5: 2313 | version "7.3.5" 2314 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 2315 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 2316 | dependencies: 2317 | lru-cache "^6.0.0" 2318 | 2319 | send@0.17.1: 2320 | version "0.17.1" 2321 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 2322 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 2323 | dependencies: 2324 | debug "2.6.9" 2325 | depd "~1.1.2" 2326 | destroy "~1.0.4" 2327 | encodeurl "~1.0.2" 2328 | escape-html "~1.0.3" 2329 | etag "~1.8.1" 2330 | fresh "0.5.2" 2331 | http-errors "~1.7.2" 2332 | mime "1.6.0" 2333 | ms "2.1.1" 2334 | on-finished "~2.3.0" 2335 | range-parser "~1.2.1" 2336 | statuses "~1.5.0" 2337 | 2338 | serve-static@1.14.1: 2339 | version "1.14.1" 2340 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 2341 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 2342 | dependencies: 2343 | encodeurl "~1.0.2" 2344 | escape-html "~1.0.3" 2345 | parseurl "~1.3.3" 2346 | send "0.17.1" 2347 | 2348 | setprototypeof@1.1.1: 2349 | version "1.1.1" 2350 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2351 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2352 | 2353 | shebang-command@^1.2.0: 2354 | version "1.2.0" 2355 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2356 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2357 | dependencies: 2358 | shebang-regex "^1.0.0" 2359 | 2360 | shebang-command@^2.0.0: 2361 | version "2.0.0" 2362 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2363 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2364 | dependencies: 2365 | shebang-regex "^3.0.0" 2366 | 2367 | shebang-regex@^1.0.0: 2368 | version "1.0.0" 2369 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2370 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2371 | 2372 | shebang-regex@^3.0.0: 2373 | version "3.0.0" 2374 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2375 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2376 | 2377 | side-channel@^1.0.4: 2378 | version "1.0.4" 2379 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 2380 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2381 | dependencies: 2382 | call-bind "^1.0.0" 2383 | get-intrinsic "^1.0.2" 2384 | object-inspect "^1.9.0" 2385 | 2386 | slash@^3.0.0: 2387 | version "3.0.0" 2388 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2389 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2390 | 2391 | slice-ansi@^4.0.0: 2392 | version "4.0.0" 2393 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 2394 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 2395 | dependencies: 2396 | ansi-styles "^4.0.0" 2397 | astral-regex "^2.0.0" 2398 | is-fullwidth-code-point "^3.0.0" 2399 | 2400 | source-map-js@^0.6.2: 2401 | version "0.6.2" 2402 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" 2403 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== 2404 | 2405 | source-map@^0.5.0: 2406 | version "0.5.7" 2407 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2408 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2409 | 2410 | spawn-sync@^1.0.15: 2411 | version "1.0.15" 2412 | resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" 2413 | integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY= 2414 | dependencies: 2415 | concat-stream "^1.4.7" 2416 | os-shim "^0.1.2" 2417 | 2418 | spdx-correct@^3.0.0: 2419 | version "3.1.1" 2420 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 2421 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 2422 | dependencies: 2423 | spdx-expression-parse "^3.0.0" 2424 | spdx-license-ids "^3.0.0" 2425 | 2426 | spdx-exceptions@^2.1.0: 2427 | version "2.3.0" 2428 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 2429 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 2430 | 2431 | spdx-expression-parse@^3.0.0: 2432 | version "3.0.1" 2433 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 2434 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 2435 | dependencies: 2436 | spdx-exceptions "^2.1.0" 2437 | spdx-license-ids "^3.0.0" 2438 | 2439 | spdx-license-ids@^3.0.0: 2440 | version "3.0.9" 2441 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" 2442 | integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== 2443 | 2444 | sprintf-js@~1.0.2: 2445 | version "1.0.3" 2446 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2447 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2448 | 2449 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 2450 | version "1.5.0" 2451 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2452 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2453 | 2454 | string-width@^4.2.0: 2455 | version "4.2.2" 2456 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 2457 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 2458 | dependencies: 2459 | emoji-regex "^8.0.0" 2460 | is-fullwidth-code-point "^3.0.0" 2461 | strip-ansi "^6.0.0" 2462 | 2463 | string.prototype.matchall@^4.0.5: 2464 | version "4.0.5" 2465 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" 2466 | integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== 2467 | dependencies: 2468 | call-bind "^1.0.2" 2469 | define-properties "^1.1.3" 2470 | es-abstract "^1.18.2" 2471 | get-intrinsic "^1.1.1" 2472 | has-symbols "^1.0.2" 2473 | internal-slot "^1.0.3" 2474 | regexp.prototype.flags "^1.3.1" 2475 | side-channel "^1.0.4" 2476 | 2477 | string.prototype.trimend@^1.0.4: 2478 | version "1.0.4" 2479 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" 2480 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== 2481 | dependencies: 2482 | call-bind "^1.0.2" 2483 | define-properties "^1.1.3" 2484 | 2485 | string.prototype.trimstart@^1.0.4: 2486 | version "1.0.4" 2487 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" 2488 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== 2489 | dependencies: 2490 | call-bind "^1.0.2" 2491 | define-properties "^1.1.3" 2492 | 2493 | string_decoder@~1.1.1: 2494 | version "1.1.1" 2495 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2496 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2497 | dependencies: 2498 | safe-buffer "~5.1.0" 2499 | 2500 | strip-ansi@^6.0.0: 2501 | version "6.0.0" 2502 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2503 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2504 | dependencies: 2505 | ansi-regex "^5.0.0" 2506 | 2507 | strip-bom@^3.0.0: 2508 | version "3.0.0" 2509 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2510 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2511 | 2512 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 2513 | version "3.1.1" 2514 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2515 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2516 | 2517 | supports-color@^5.3.0: 2518 | version "5.5.0" 2519 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2520 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2521 | dependencies: 2522 | has-flag "^3.0.0" 2523 | 2524 | supports-color@^7.1.0: 2525 | version "7.2.0" 2526 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2527 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2528 | dependencies: 2529 | has-flag "^4.0.0" 2530 | 2531 | table@^6.0.9: 2532 | version "6.7.1" 2533 | resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" 2534 | integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== 2535 | dependencies: 2536 | ajv "^8.0.1" 2537 | lodash.clonedeep "^4.5.0" 2538 | lodash.truncate "^4.4.2" 2539 | slice-ansi "^4.0.0" 2540 | string-width "^4.2.0" 2541 | strip-ansi "^6.0.0" 2542 | 2543 | text-table@^0.2.0: 2544 | version "0.2.0" 2545 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2546 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2547 | 2548 | to-fast-properties@^2.0.0: 2549 | version "2.0.0" 2550 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2551 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2552 | 2553 | to-regex-range@^5.0.1: 2554 | version "5.0.1" 2555 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2556 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2557 | dependencies: 2558 | is-number "^7.0.0" 2559 | 2560 | toidentifier@1.0.0: 2561 | version "1.0.0" 2562 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2563 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2564 | 2565 | tsconfig-paths@^3.9.0: 2566 | version "3.10.1" 2567 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz#79ae67a68c15289fdf5c51cb74f397522d795ed7" 2568 | integrity sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q== 2569 | dependencies: 2570 | json5 "^2.2.0" 2571 | minimist "^1.2.0" 2572 | strip-bom "^3.0.0" 2573 | 2574 | tslib@^1.8.1: 2575 | version "1.14.1" 2576 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2577 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2578 | 2579 | tsutils@^3.21.0: 2580 | version "3.21.0" 2581 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 2582 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 2583 | dependencies: 2584 | tslib "^1.8.1" 2585 | 2586 | type-check@^0.4.0, type-check@~0.4.0: 2587 | version "0.4.0" 2588 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2589 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2590 | dependencies: 2591 | prelude-ls "^1.2.1" 2592 | 2593 | type-fest@^0.20.2: 2594 | version "0.20.2" 2595 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2596 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2597 | 2598 | type-is@~1.6.17, type-is@~1.6.18: 2599 | version "1.6.18" 2600 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2601 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2602 | dependencies: 2603 | media-typer "0.3.0" 2604 | mime-types "~2.1.24" 2605 | 2606 | typedarray@^0.0.6: 2607 | version "0.0.6" 2608 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 2609 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 2610 | 2611 | typescript@^4.3.2: 2612 | version "4.3.5" 2613 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" 2614 | integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== 2615 | 2616 | unbox-primitive@^1.0.1: 2617 | version "1.0.1" 2618 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" 2619 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== 2620 | dependencies: 2621 | function-bind "^1.1.1" 2622 | has-bigints "^1.0.1" 2623 | has-symbols "^1.0.2" 2624 | which-boxed-primitive "^1.0.2" 2625 | 2626 | unpipe@1.0.0, unpipe@~1.0.0: 2627 | version "1.0.0" 2628 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2629 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2630 | 2631 | uri-js@^4.2.2: 2632 | version "4.4.1" 2633 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2634 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2635 | dependencies: 2636 | punycode "^2.1.0" 2637 | 2638 | util-deprecate@~1.0.1: 2639 | version "1.0.2" 2640 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2641 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2642 | 2643 | util@^0.10.3: 2644 | version "0.10.4" 2645 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" 2646 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== 2647 | dependencies: 2648 | inherits "2.0.3" 2649 | 2650 | utils-merge@1.0.1: 2651 | version "1.0.1" 2652 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2653 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2654 | 2655 | uuid@^8.3.2: 2656 | version "8.3.2" 2657 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2658 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2659 | 2660 | v8-compile-cache@^2.0.3: 2661 | version "2.3.0" 2662 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 2663 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 2664 | 2665 | validate-npm-package-license@^3.0.1: 2666 | version "3.0.4" 2667 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2668 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2669 | dependencies: 2670 | spdx-correct "^3.0.0" 2671 | spdx-expression-parse "^3.0.0" 2672 | 2673 | vary@~1.1.2: 2674 | version "1.1.2" 2675 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2676 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2677 | 2678 | vite@^2.4.3: 2679 | version "2.4.3" 2680 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.4.3.tgz#fe4aa78e9dd7d36bcb12eccbd52313b26cfadf77" 2681 | integrity sha512-iT6NPeiUUZ2FkzC3eazytOEMRaM4J+xgRQcNcpRcbmfYjakCFP4WKPJpeEz1U5JEKHAtwv3ZBQketQUFhFU3ng== 2682 | dependencies: 2683 | esbuild "^0.12.8" 2684 | postcss "^8.3.5" 2685 | resolve "^1.20.0" 2686 | rollup "^2.38.5" 2687 | optionalDependencies: 2688 | fsevents "~2.3.2" 2689 | 2690 | which-boxed-primitive@^1.0.2: 2691 | version "1.0.2" 2692 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 2693 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 2694 | dependencies: 2695 | is-bigint "^1.0.1" 2696 | is-boolean-object "^1.1.0" 2697 | is-number-object "^1.0.4" 2698 | is-string "^1.0.5" 2699 | is-symbol "^1.0.3" 2700 | 2701 | which@1.2.x: 2702 | version "1.2.14" 2703 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 2704 | integrity sha1-mofEN48D6CfOyvGs31bHNsAcFOU= 2705 | dependencies: 2706 | isexe "^2.0.0" 2707 | 2708 | which@^1.2.9: 2709 | version "1.3.1" 2710 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2711 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2712 | dependencies: 2713 | isexe "^2.0.0" 2714 | 2715 | which@^2.0.1: 2716 | version "2.0.2" 2717 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2718 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2719 | dependencies: 2720 | isexe "^2.0.0" 2721 | 2722 | word-wrap@^1.2.3: 2723 | version "1.2.3" 2724 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2725 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2726 | 2727 | wrappy@1: 2728 | version "1.0.2" 2729 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2730 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2731 | 2732 | ws@^7.5.3: 2733 | version "7.5.3" 2734 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" 2735 | integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== 2736 | 2737 | yallist@^2.1.2: 2738 | version "2.1.2" 2739 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2740 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 2741 | 2742 | yallist@^4.0.0: 2743 | version "4.0.0" 2744 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2745 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2746 | 2747 | yarn@^1.22.11: 2748 | version "1.22.11" 2749 | resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.11.tgz#d0104043e7349046e0e2aec977c24be106925ed6" 2750 | integrity sha512-AWje4bzqO9RUn3sdnM5N8n4ZJ0BqCc/kqFJvpOI5/EVkINXui0yuvU7NDCEF//+WaxHuNay2uOHxA4+tq1P3cg== 2751 | --------------------------------------------------------------------------------