├── .github └── workflows │ ├── main.yml │ ├── release.yml │ └── size.yml ├── .gitignore ├── LICENSE ├── README.md ├── docs ├── .npmignore ├── components │ └── Card.jsx ├── list.js ├── next.config.js ├── package.json ├── pages │ ├── _app.js │ ├── examples.mdx │ ├── index.mdx │ └── meta.json ├── public │ └── example.svg ├── theme.config.js └── yarn.lock ├── example ├── .npmignore ├── example.ts ├── index.html ├── index.tsx ├── package.json ├── tsconfig.json ├── vite.config.js └── yarn.lock ├── package.json ├── src ├── Flex │ ├── index.tsx │ └── styles.ts ├── Item.ts ├── index.ts └── interfaces.ts ├── test ├── flex.test.tsx └── item.test.tsx ├── tsconfig.json └── yarn.lock /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [push] 3 | jobs: 4 | build: 5 | name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} 6 | 7 | runs-on: ${{ matrix.os }} 8 | strategy: 9 | matrix: 10 | node: ['12.x', '14.x', '16.x'] 11 | os: [ubuntu-latest, macOS-latest] 12 | 13 | steps: 14 | - name: Checkout repo 15 | uses: actions/checkout@v3 16 | 17 | - name: Use Node ${{ matrix.node }} 18 | uses: actions/setup-node@v3 19 | with: 20 | node-version: ${{ matrix.node }} 21 | 22 | - name: Install deps 23 | run: yarn install --ignore-engine 24 | 25 | - name: Lint 26 | run: yarn lint 27 | 28 | - name: Test 29 | run: yarn test --ci --coverage --maxWorkers=2 30 | 31 | - name: Build 32 | run: yarn build 33 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: 'release' 2 | on: 3 | push: 4 | tags-ignore: 5 | - '*.*' 6 | branches: 7 | - master 8 | jobs: 9 | release: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 13 | - uses: actions/setup-node@v2 14 | with: 15 | node-version: '12.x' 16 | registry-url: 'https://registry.npmjs.org' 17 | - name: Use Node ${{ matrix.node }} 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: ${{ matrix.node }} 21 | 22 | - name: Install deps and build (with cache) 23 | uses: bahmutov/npm-install@v1 24 | 25 | - name: Lint 26 | run: yarn lint 27 | 28 | - name: Test 29 | run: yarn test --ci --coverage --maxWorkers=2 30 | 31 | - name: Build 32 | run: yarn build 33 | 34 | - name: Publish to NPM 35 | run: | 36 | git config --global user.name "github-actions[bot]" 37 | git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" 38 | npm version patch 39 | npm publish 40 | env: 41 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 42 | 43 | - name: Push changes 44 | uses: ad-m/github-push-action@master 45 | with: 46 | tags: true 47 | github_token: ${{ secrets.GITHUB_TOKEN }} 48 | branch: ${{ github.ref }} 49 | -------------------------------------------------------------------------------- /.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v3 10 | - uses: andresz1/size-limit-action@v1 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .cache 5 | dist 6 | .vscode 7 | docs/node_modules 8 | docs/.cache 9 | docs/.next 10 | example/node_modules 11 | example/.cache 12 | example/dist -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 smakosh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-flex-ready 2 | 3 | [![Travis][build-badge]][build] 4 | [![npm package][npm-badge]][npm] 5 | 6 | [build-badge]: https://img.shields.io/travis/smakosh/react-flex-ready/master.png?style=flat-square 7 | [build]: https://travis-ci.org/smakosh/react-flex-ready 8 | 9 | [npm-badge]: https://img.shields.io/npm/v/npm-package.png?style=flat-square 10 | [npm]: https://www.npmjs.org/package/react-flex-ready 11 | 12 | ## Getting started 13 | 14 | ```bash 15 | npm i react-flex-ready 16 | ``` 17 | 18 | Or 19 | 20 | ```bash 21 | yarn add react-flex-ready 22 | ``` 23 | 24 | [See Docs](https://react-flex-ready.vercel.app) 25 | 26 | [See Example](https://codesandbox.io/s/react-flex-ready-example-q6fdg) 27 | 28 | ## Built with 29 | 30 | - React & Styled-components 31 | 32 | ## License 33 | 34 | This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details 35 | 36 | ## Contributors 37 | 38 | - [Myself](https://smakosh.com) 39 | - [Abdullah Hilson](https://github.com/abumalick) 40 | 41 | ## Todo 42 | 43 | - [x] convert CSS in JS to vanilla CSS and remove styled-components 44 | 45 | > CSS only alternative: 46 | 47 | - [x] Migrate to TypeScript 48 | 49 | ## Support 50 | 51 | If you love this React component and want to support me, you can do so through my Patreon or GitHub sponsors. 52 | 53 | [![Support me on Patreon](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/smakosh) 54 | -------------------------------------------------------------------------------- /docs/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache 3 | .next -------------------------------------------------------------------------------- /docs/components/Card.jsx: -------------------------------------------------------------------------------- 1 | const Card = ({ image, title, description }) => ( 2 |
3 | {title} 4 |
5 |
{title}
6 |

{description}

7 |
8 |
9 | ); 10 | 11 | export default Card; 12 | -------------------------------------------------------------------------------- /docs/list.js: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | columns: 1 4 | }, 5 | { 6 | columns: 1 7 | }, 8 | { 9 | columns: 1 10 | }, 11 | { 12 | columns: 1 13 | }, 14 | { 15 | columns: 1 16 | }, 17 | { 18 | columns: 1 19 | }, 20 | { 21 | columns: 1 22 | }, 23 | { 24 | columns: 1 25 | }, 26 | { 27 | columns: 1 28 | }, 29 | { 30 | columns: 1 31 | }, 32 | { 33 | columns: 1 34 | }, 35 | { 36 | columns: 1 37 | }, 38 | { 39 | columns: 2 40 | }, 41 | { 42 | columns: 2 43 | }, 44 | { 45 | columns: 2 46 | }, 47 | { 48 | columns: 2 49 | }, 50 | { 51 | columns: 2 52 | }, 53 | { 54 | columns: 2 55 | }, 56 | { 57 | columns: 3 58 | }, 59 | { 60 | columns: 3 61 | }, 62 | { 63 | columns: 3 64 | }, 65 | { 66 | columns: 3 67 | }, 68 | { 69 | columns: 4 70 | }, 71 | { 72 | columns: 4 73 | }, 74 | { 75 | columns: 4 76 | }, 77 | { 78 | columns: 5 79 | }, 80 | { 81 | columns: 7 82 | }, 83 | { 84 | columns: 6 85 | }, 86 | { 87 | columns: 6 88 | }, 89 | { 90 | columns: 4 91 | }, 92 | { 93 | columns: 8 94 | }, 95 | { 96 | columns: 3 97 | }, 98 | { 99 | columns: 9 100 | }, 101 | { 102 | columns: 2 103 | }, 104 | { 105 | columns: 10 106 | }, 107 | { 108 | columns: 1 109 | }, 110 | { 111 | columns: 11 112 | }, 113 | { 114 | columns: 12 115 | }, 116 | { 117 | columns: 4 118 | }, 119 | { 120 | columns: 4 121 | }, 122 | { 123 | columns: 4 124 | }, 125 | { 126 | columns: 4 127 | }, 128 | { 129 | columns: 4 130 | } 131 | ]; 132 | -------------------------------------------------------------------------------- /docs/next.config.js: -------------------------------------------------------------------------------- 1 | const withNextra = require('nextra')('nextra-theme-docs', './theme.config.js'); 2 | module.exports = withNextra(); 3 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "version": "1.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "dev": "next", 7 | "start": "next start", 8 | "build": "next build" 9 | }, 10 | "dependencies": { 11 | "next": "^10.0.3", 12 | "nextra": "^1.1.0", 13 | "nextra-theme-docs": "^1.2.6", 14 | "react": "^17.0.2", 15 | "react-dom": "^17.0.2", 16 | "react-flex-ready": "^1.3.3" 17 | }, 18 | "prettier": { 19 | "embeddedLanguageFormatting": "off", 20 | "htmlWhitespaceSensitivity": "strict" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /docs/pages/_app.js: -------------------------------------------------------------------------------- 1 | import "nextra-theme-docs/style.css"; 2 | 3 | export default function Nextra({ Component, pageProps }) { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /docs/pages/examples.mdx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import Callout from 'nextra-theme-docs/callout' 3 | import { Flex, Item } from "react-flex-ready"; 4 | import Card from '../components/Card'; 5 | 6 | # Examples 7 | 8 | #### 5 cards where each card takes 4 columns on Desktop, 6 columns on Tablet and 12 columns on Mobile 9 | 10 |
11 | 12 | {Array.from({ length: 5 }).map((_, i) => ( 13 | 21 | 26 | 27 | ))} 28 | 29 | 30 | 31 | Notice that we passed the same props to the `Flex` component so that the last card will be positioned correctly. 32 | 33 | 34 | ```jsx 35 | import { Flex, Item } from "react-flex-ready"; 36 | 37 | const YourApp = () => ( 38 | 39 | {Array.from({ length: 5 }).map((_, i) => ( 40 | 48 | 53 | 54 | ))} 55 | 56 | ); 57 | ``` 58 | 59 | #### 3 cards where each card takes 4 columns on Desktop, 6 columns on Tablet and 12 columns on Mobile and are stretched 60 | 61 |
62 | 63 | {Array.from({ length: 3 }).map((_, i) => ( 64 | 73 | 82 | 83 | ))} 84 | 85 | 86 | 87 | Notice that the cards are stretched to fill the available space. That's why `stretch` is set to `true` in the `Item` component. 88 | 89 | 90 | ```jsx 91 | import { Flex, Item } from "react-flex-ready"; 92 | 93 | const YourApp = () => ( 94 | 95 | {Array.from({ length: 3 }).map((_, i) => ( 96 | 105 | 114 | 115 | ))} 116 | 117 | ); 118 | ``` 119 | -------------------------------------------------------------------------------- /docs/pages/index.mdx: -------------------------------------------------------------------------------- 1 | import Link from "next/link"; 2 | import { Flex, Item } from "react-flex-ready"; 3 | import myList from "../list"; 4 | 5 | # Getting Started 6 | 7 | ## Installation 8 | 9 | Inside your React project directory, run the following: 10 | 11 | ```bash 12 | yarn add react-flex-ready 13 | ``` 14 | 15 | Or with npm: 16 | 17 | ```bash 18 | npm install react-flex-ready 19 | ``` 20 | 21 | ## Features 22 | 23 | - TypeScript support 24 | - Flexbox ready 25 | - Easy to use 26 | - Easy to customize 27 | 28 | ## Simple example 29 | 30 |
31 | 32 | 33 |
41 |

6 Columns

42 |
43 |
44 | 45 |
53 |

6 Columns

54 |
55 |
56 |
57 | 58 | ```jsx 59 | import { Flex, Item } from "react-flex-ready"; 60 | 61 | const YourApp = () => ( 62 | 63 | 64 |
72 |

6 Columns

73 |
74 |
75 | 76 |
84 |

6 Columns

85 |
86 |
87 |
88 | ); 89 | ``` 90 | 91 | ## Advanced example 92 | 93 |
94 | 100 | {myList.map(({ columns }, i) => ( 101 | 110 |
118 |

{columns}

119 |
120 |
121 | ))} 122 |
123 | 124 | ```jsx 125 | import myList from "some-list"; 126 | import { Flex, Item } from "react-flex-ready"; 127 | 128 | const YourApp = () => ( 129 | 135 | {myList.map(({ columns }, i) => ( 136 | 145 |
153 |

{columns}

154 |
155 |
156 | ))} 157 |
158 | ); 159 | ``` 160 | 161 | ## Sandbox 162 | 163 | [CodeSandbox](https://codesandbox.io/s/react-flex-ready-example-q6fdg) 164 | -------------------------------------------------------------------------------- /docs/pages/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "index": "Installation & usage" 3 | } 4 | -------------------------------------------------------------------------------- /docs/public/example.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/theme.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | github: "https://github.com/smakosh/react-flex-ready", 3 | docsRepositoryBase: 4 | "https://github.com/smakosh/react-flex-ready/blob/master/pages", 5 | branch: "master", 6 | path: "/", 7 | titleSuffix: " – React Flex Ready", 8 | nextLinks: true, 9 | prevLinks: true, 10 | search: true, 11 | customSearch: null, 12 | darkMode: false, 13 | footer: true, 14 | footerText: `MIT ${new Date().getFullYear()} © Smakosh`, 15 | footerEditOnGitHubLink: true, // will link to the docs repo 16 | logo: ( 17 | <> 18 | 19 | React Flex Ready 20 | 21 | 22 | A Flexbox grid ready, easy to implement and customize 23 | 24 | 25 | ), 26 | head: ( 27 | <> 28 | 29 | 33 | 37 | 38 | ), 39 | }; 40 | -------------------------------------------------------------------------------- /example/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .cache 3 | dist -------------------------------------------------------------------------------- /example/example.ts: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | columns: 1, 4 | }, 5 | { 6 | columns: 1, 7 | }, 8 | { 9 | columns: 1, 10 | }, 11 | { 12 | columns: 1, 13 | }, 14 | { 15 | columns: 1, 16 | }, 17 | { 18 | columns: 1, 19 | }, 20 | { 21 | columns: 1, 22 | }, 23 | { 24 | columns: 1, 25 | }, 26 | { 27 | columns: 1, 28 | }, 29 | { 30 | columns: 1, 31 | }, 32 | { 33 | columns: 1, 34 | }, 35 | { 36 | columns: 1, 37 | }, 38 | { 39 | columns: 2, 40 | }, 41 | { 42 | columns: 2, 43 | }, 44 | { 45 | columns: 2, 46 | }, 47 | { 48 | columns: 2, 49 | }, 50 | { 51 | columns: 2, 52 | }, 53 | { 54 | columns: 2, 55 | }, 56 | { 57 | columns: 3, 58 | }, 59 | { 60 | columns: 3, 61 | }, 62 | { 63 | columns: 3, 64 | }, 65 | { 66 | columns: 3, 67 | }, 68 | { 69 | columns: 4, 70 | }, 71 | { 72 | columns: 4, 73 | }, 74 | { 75 | columns: 4, 76 | }, 77 | { 78 | columns: 5, 79 | }, 80 | { 81 | columns: 7, 82 | }, 83 | { 84 | columns: 6, 85 | }, 86 | { 87 | columns: 6, 88 | }, 89 | { 90 | columns: 4, 91 | }, 92 | { 93 | columns: 8, 94 | }, 95 | { 96 | columns: 3, 97 | }, 98 | { 99 | columns: 9, 100 | }, 101 | { 102 | columns: 2, 103 | }, 104 | { 105 | columns: 10, 106 | }, 107 | { 108 | columns: 1, 109 | }, 110 | { 111 | columns: 11, 112 | }, 113 | { 114 | columns: 12, 115 | }, 116 | { 117 | columns: 4, 118 | }, 119 | { 120 | columns: 4, 121 | }, 122 | { 123 | columns: 4, 124 | }, 125 | { 126 | columns: 4, 127 | }, 128 | { 129 | columns: 4, 130 | }, 131 | ]; 132 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Playground 8 | 9 | 10 | 11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /example/index.tsx: -------------------------------------------------------------------------------- 1 | import 'react-app-polyfill/ie11'; 2 | import * as React from 'react'; 3 | import * as ReactDOM from 'react-dom'; 4 | import { Flex, Item, Range } from '../.'; 5 | import myList from './example'; 6 | 7 | const App = () => ( 8 |
14 |

Example

15 | 16 | {myList.map(({ columns }: { columns: Range }, i: number) => ( 17 | 26 |
34 |

{columns}

35 |
36 |
37 | ))} 38 |
39 |
40 | ); 41 | 42 | ReactDOM.render(, document.getElementById('root')); 43 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "start": "vite", 8 | "build": "vite build" 9 | }, 10 | "dependencies": { 11 | "react-app-polyfill": "^1.0.0" 12 | }, 13 | "alias": { 14 | "react": "../node_modules/react", 15 | "react-dom": "../node_modules/react-dom/profiling", 16 | "scheduler/tracing": "../node_modules/scheduler/tracing-profiling" 17 | }, 18 | "devDependencies": { 19 | "@types/react": "^16.9.11", 20 | "@types/react-dom": "^16.8.4", 21 | "typescript": "^4", 22 | "vite": "latest", 23 | "vite-preset-react": "latest" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": false, 4 | "target": "es5", 5 | "module": "commonjs", 6 | "jsx": "react", 7 | "moduleResolution": "node", 8 | "noImplicitAny": false, 9 | "noUnusedLocals": false, 10 | "noUnusedParameters": false, 11 | "removeComments": true, 12 | "strictNullChecks": true, 13 | "preserveConstEnums": true, 14 | "sourceMap": true, 15 | "lib": ["es2015", "es2016", "dom"], 16 | "types": ["node"], 17 | "resolveJsonModule": true, 18 | "esModuleInterop": true 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /example/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import ReactPlugin from 'vite-preset-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [ 7 | ReactPlugin({ 8 | injectReact: false, 9 | }), 10 | ], 11 | }); 12 | -------------------------------------------------------------------------------- /example/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.1.2" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" 8 | integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "^0.3.0" 11 | 12 | "@babel/code-frame@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" 15 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 16 | dependencies: 17 | "@babel/highlight" "^7.16.7" 18 | 19 | "@babel/compat-data@^7.17.7": 20 | version "7.17.7" 21 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" 22 | integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== 23 | 24 | "@babel/core@^7.16.12": 25 | version "7.17.7" 26 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.7.tgz#f7c28228c83cdf2dbd1b9baa06eaf9df07f0c2f9" 27 | integrity sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ== 28 | dependencies: 29 | "@ampproject/remapping" "^2.1.0" 30 | "@babel/code-frame" "^7.16.7" 31 | "@babel/generator" "^7.17.7" 32 | "@babel/helper-compilation-targets" "^7.17.7" 33 | "@babel/helper-module-transforms" "^7.17.7" 34 | "@babel/helpers" "^7.17.7" 35 | "@babel/parser" "^7.17.7" 36 | "@babel/template" "^7.16.7" 37 | "@babel/traverse" "^7.17.3" 38 | "@babel/types" "^7.17.0" 39 | convert-source-map "^1.7.0" 40 | debug "^4.1.0" 41 | gensync "^1.0.0-beta.2" 42 | json5 "^2.1.2" 43 | semver "^6.3.0" 44 | 45 | "@babel/generator@^7.17.3", "@babel/generator@^7.17.7": 46 | version "7.17.7" 47 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" 48 | integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== 49 | dependencies: 50 | "@babel/types" "^7.17.0" 51 | jsesc "^2.5.1" 52 | source-map "^0.5.0" 53 | 54 | "@babel/helper-annotate-as-pure@^7.16.7": 55 | version "7.16.7" 56 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" 57 | integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== 58 | dependencies: 59 | "@babel/types" "^7.16.7" 60 | 61 | "@babel/helper-compilation-targets@^7.17.7": 62 | version "7.17.7" 63 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" 64 | integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== 65 | dependencies: 66 | "@babel/compat-data" "^7.17.7" 67 | "@babel/helper-validator-option" "^7.16.7" 68 | browserslist "^4.17.5" 69 | semver "^6.3.0" 70 | 71 | "@babel/helper-environment-visitor@^7.16.7": 72 | version "7.16.7" 73 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" 74 | integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== 75 | dependencies: 76 | "@babel/types" "^7.16.7" 77 | 78 | "@babel/helper-function-name@^7.16.7": 79 | version "7.16.7" 80 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" 81 | integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== 82 | dependencies: 83 | "@babel/helper-get-function-arity" "^7.16.7" 84 | "@babel/template" "^7.16.7" 85 | "@babel/types" "^7.16.7" 86 | 87 | "@babel/helper-get-function-arity@^7.16.7": 88 | version "7.16.7" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" 90 | integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== 91 | dependencies: 92 | "@babel/types" "^7.16.7" 93 | 94 | "@babel/helper-hoist-variables@^7.16.7": 95 | version "7.16.7" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" 97 | integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== 98 | dependencies: 99 | "@babel/types" "^7.16.7" 100 | 101 | "@babel/helper-module-imports@^7.16.7": 102 | version "7.16.7" 103 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" 104 | integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== 105 | dependencies: 106 | "@babel/types" "^7.16.7" 107 | 108 | "@babel/helper-module-transforms@^7.17.7": 109 | version "7.17.7" 110 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" 111 | integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== 112 | dependencies: 113 | "@babel/helper-environment-visitor" "^7.16.7" 114 | "@babel/helper-module-imports" "^7.16.7" 115 | "@babel/helper-simple-access" "^7.17.7" 116 | "@babel/helper-split-export-declaration" "^7.16.7" 117 | "@babel/helper-validator-identifier" "^7.16.7" 118 | "@babel/template" "^7.16.7" 119 | "@babel/traverse" "^7.17.3" 120 | "@babel/types" "^7.17.0" 121 | 122 | "@babel/helper-plugin-utils@^7.16.7": 123 | version "7.16.7" 124 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" 125 | integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== 126 | 127 | "@babel/helper-simple-access@^7.17.7": 128 | version "7.17.7" 129 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" 130 | integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== 131 | dependencies: 132 | "@babel/types" "^7.17.0" 133 | 134 | "@babel/helper-split-export-declaration@^7.16.7": 135 | version "7.16.7" 136 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" 137 | integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== 138 | dependencies: 139 | "@babel/types" "^7.16.7" 140 | 141 | "@babel/helper-validator-identifier@^7.16.7": 142 | version "7.16.7" 143 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 144 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 145 | 146 | "@babel/helper-validator-option@^7.16.7": 147 | version "7.16.7" 148 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" 149 | integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== 150 | 151 | "@babel/helpers@^7.17.7": 152 | version "7.17.7" 153 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.7.tgz#6fc0a24280fd00026e85424bbfed4650e76d7127" 154 | integrity sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w== 155 | dependencies: 156 | "@babel/template" "^7.16.7" 157 | "@babel/traverse" "^7.17.3" 158 | "@babel/types" "^7.17.0" 159 | 160 | "@babel/highlight@^7.16.7": 161 | version "7.16.10" 162 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" 163 | integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== 164 | dependencies: 165 | "@babel/helper-validator-identifier" "^7.16.7" 166 | chalk "^2.0.0" 167 | js-tokens "^4.0.0" 168 | 169 | "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.7": 170 | version "7.17.7" 171 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.7.tgz#fc19b645a5456c8d6fdb6cecd3c66c0173902800" 172 | integrity sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA== 173 | 174 | "@babel/plugin-syntax-jsx@^7.16.7": 175 | version "7.16.7" 176 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" 177 | integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== 178 | dependencies: 179 | "@babel/helper-plugin-utils" "^7.16.7" 180 | 181 | "@babel/plugin-transform-react-jsx-development@^7.16.7": 182 | version "7.16.7" 183 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" 184 | integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== 185 | dependencies: 186 | "@babel/plugin-transform-react-jsx" "^7.16.7" 187 | 188 | "@babel/plugin-transform-react-jsx-self@^7.16.7": 189 | version "7.16.7" 190 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" 191 | integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== 192 | dependencies: 193 | "@babel/helper-plugin-utils" "^7.16.7" 194 | 195 | "@babel/plugin-transform-react-jsx-source@^7.16.7": 196 | version "7.16.7" 197 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" 198 | integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== 199 | dependencies: 200 | "@babel/helper-plugin-utils" "^7.16.7" 201 | 202 | "@babel/plugin-transform-react-jsx@^7.16.7": 203 | version "7.17.3" 204 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" 205 | integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== 206 | dependencies: 207 | "@babel/helper-annotate-as-pure" "^7.16.7" 208 | "@babel/helper-module-imports" "^7.16.7" 209 | "@babel/helper-plugin-utils" "^7.16.7" 210 | "@babel/plugin-syntax-jsx" "^7.16.7" 211 | "@babel/types" "^7.17.0" 212 | 213 | "@babel/template@^7.16.7": 214 | version "7.16.7" 215 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" 216 | integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== 217 | dependencies: 218 | "@babel/code-frame" "^7.16.7" 219 | "@babel/parser" "^7.16.7" 220 | "@babel/types" "^7.16.7" 221 | 222 | "@babel/traverse@^7.17.3": 223 | version "7.17.3" 224 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" 225 | integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== 226 | dependencies: 227 | "@babel/code-frame" "^7.16.7" 228 | "@babel/generator" "^7.17.3" 229 | "@babel/helper-environment-visitor" "^7.16.7" 230 | "@babel/helper-function-name" "^7.16.7" 231 | "@babel/helper-hoist-variables" "^7.16.7" 232 | "@babel/helper-split-export-declaration" "^7.16.7" 233 | "@babel/parser" "^7.17.3" 234 | "@babel/types" "^7.17.0" 235 | debug "^4.1.0" 236 | globals "^11.1.0" 237 | 238 | "@babel/types@^7.16.7", "@babel/types@^7.17.0": 239 | version "7.17.0" 240 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" 241 | integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== 242 | dependencies: 243 | "@babel/helper-validator-identifier" "^7.16.7" 244 | to-fast-properties "^2.0.0" 245 | 246 | "@jridgewell/resolve-uri@^3.0.3": 247 | version "3.0.5" 248 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" 249 | integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== 250 | 251 | "@jridgewell/sourcemap-codec@^1.4.10": 252 | version "1.4.11" 253 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" 254 | integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== 255 | 256 | "@jridgewell/trace-mapping@^0.3.0": 257 | version "0.3.4" 258 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" 259 | integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== 260 | dependencies: 261 | "@jridgewell/resolve-uri" "^3.0.3" 262 | "@jridgewell/sourcemap-codec" "^1.4.10" 263 | 264 | "@rollup/pluginutils@^4.1.2": 265 | version "4.2.0" 266 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.0.tgz#a14bbd058fdbba0a5647143b16ed0d86fb60bd08" 267 | integrity sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA== 268 | dependencies: 269 | estree-walker "^2.0.1" 270 | picomatch "^2.2.2" 271 | 272 | "@types/prop-types@*": 273 | version "15.7.3" 274 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" 275 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 276 | 277 | "@types/react-dom@^16.8.4": 278 | version "16.9.8" 279 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" 280 | integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== 281 | dependencies: 282 | "@types/react" "*" 283 | 284 | "@types/react@*", "@types/react@^16.9.11": 285 | version "16.9.50" 286 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.50.tgz#cb5f2c22d42de33ca1f5efc6a0959feb784a3a2d" 287 | integrity sha512-kPx5YsNnKDJejTk1P+lqThwxN2PczrocwsvqXnjvVvKpFescoY62ZiM3TV7dH1T8lFhlHZF+PE5xUyimUwqEGA== 288 | dependencies: 289 | "@types/prop-types" "*" 290 | csstype "^3.0.2" 291 | 292 | "@vitejs/plugin-react@^1.0.9": 293 | version "1.2.0" 294 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-1.2.0.tgz#4cfb4c0475e93885e56d66ff15e12ef4c34b0af0" 295 | integrity sha512-Rywwt0IXXg6yQ0hv3cMT3mtdDcGIw31mGaa+MMMAT651LhoXLF2yFy4LrakiTs7UKs7RPBo9eNgaS8pgl2A6Qw== 296 | dependencies: 297 | "@babel/core" "^7.16.12" 298 | "@babel/plugin-transform-react-jsx" "^7.16.7" 299 | "@babel/plugin-transform-react-jsx-development" "^7.16.7" 300 | "@babel/plugin-transform-react-jsx-self" "^7.16.7" 301 | "@babel/plugin-transform-react-jsx-source" "^7.16.7" 302 | "@rollup/pluginutils" "^4.1.2" 303 | react-refresh "^0.11.0" 304 | resolve "^1.22.0" 305 | 306 | ansi-styles@^3.2.1: 307 | version "3.2.1" 308 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 309 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 310 | dependencies: 311 | color-convert "^1.9.0" 312 | 313 | asap@~2.0.6: 314 | version "2.0.6" 315 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 316 | integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= 317 | 318 | browserslist@^4.17.5: 319 | version "4.20.0" 320 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.0.tgz#35951e3541078c125d36df76056e94738a52ebe9" 321 | integrity sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ== 322 | dependencies: 323 | caniuse-lite "^1.0.30001313" 324 | electron-to-chromium "^1.4.76" 325 | escalade "^3.1.1" 326 | node-releases "^2.0.2" 327 | picocolors "^1.0.0" 328 | 329 | caniuse-lite@^1.0.30001313: 330 | version "1.0.30001317" 331 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz#0548fb28fd5bc259a70b8c1ffdbe598037666a1b" 332 | integrity sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ== 333 | 334 | chalk@^2.0.0: 335 | version "2.4.2" 336 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 337 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 338 | dependencies: 339 | ansi-styles "^3.2.1" 340 | escape-string-regexp "^1.0.5" 341 | supports-color "^5.3.0" 342 | 343 | color-convert@^1.9.0: 344 | version "1.9.3" 345 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 346 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 347 | dependencies: 348 | color-name "1.1.3" 349 | 350 | color-name@1.1.3: 351 | version "1.1.3" 352 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 353 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 354 | 355 | convert-source-map@^1.7.0: 356 | version "1.7.0" 357 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 358 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 359 | dependencies: 360 | safe-buffer "~5.1.1" 361 | 362 | core-js@^3.5.0: 363 | version "3.6.5" 364 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" 365 | integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== 366 | 367 | csstype@^3.0.2: 368 | version "3.0.3" 369 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" 370 | integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== 371 | 372 | debug@^4.1.0: 373 | version "4.2.0" 374 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 375 | integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 376 | dependencies: 377 | ms "2.1.2" 378 | 379 | electron-to-chromium@^1.4.76: 380 | version "1.4.84" 381 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.84.tgz#2700befbcb49c42c4ee162e137ff392c07658249" 382 | integrity sha512-b+DdcyOiZtLXHdgEG8lncYJdxbdJWJvclPNMg0eLUDcSOSO876WA/pYjdSblUTd7eJdIs4YdIxHWGazx7UPSJw== 383 | 384 | esbuild-android-64@0.14.27: 385 | version "0.14.27" 386 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz#b868bbd9955a92309c69df628d8dd1945478b45c" 387 | integrity sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ== 388 | 389 | esbuild-android-arm64@0.14.27: 390 | version "0.14.27" 391 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz#e7d6430555e8e9c505fd87266bbc709f25f1825c" 392 | integrity sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ== 393 | 394 | esbuild-darwin-64@0.14.27: 395 | version "0.14.27" 396 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz#4dc7484127564e89b4445c0a560a3cb50b3d68e1" 397 | integrity sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g== 398 | 399 | esbuild-darwin-arm64@0.14.27: 400 | version "0.14.27" 401 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz#469e59c665f84a8ed323166624c5e7b9b2d22ac1" 402 | integrity sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ== 403 | 404 | esbuild-freebsd-64@0.14.27: 405 | version "0.14.27" 406 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz#895df03bf5f87094a56c9a5815bf92e591903d70" 407 | integrity sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA== 408 | 409 | esbuild-freebsd-arm64@0.14.27: 410 | version "0.14.27" 411 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz#0b72a41a6b8655e9a8c5608f2ec1afdcf6958441" 412 | integrity sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA== 413 | 414 | esbuild-linux-32@0.14.27: 415 | version "0.14.27" 416 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz#43b8ba3803b0bbe7f051869c6a8bf6de1e95de28" 417 | integrity sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw== 418 | 419 | esbuild-linux-64@0.14.27: 420 | version "0.14.27" 421 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz#dc8072097327ecfadba1735562824ce8c05dd0bd" 422 | integrity sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg== 423 | 424 | esbuild-linux-arm64@0.14.27: 425 | version "0.14.27" 426 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz#c52b58cbe948426b1559910f521b0a3f396f10b8" 427 | integrity sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ== 428 | 429 | esbuild-linux-arm@0.14.27: 430 | version "0.14.27" 431 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz#df869dbd67d4ee3a04b3c7273b6bd2b233e78a18" 432 | integrity sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw== 433 | 434 | esbuild-linux-mips64le@0.14.27: 435 | version "0.14.27" 436 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz#a2b646d9df368b01aa970a7b8968be6dd6b01d19" 437 | integrity sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A== 438 | 439 | esbuild-linux-ppc64le@0.14.27: 440 | version "0.14.27" 441 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz#9a21af766a0292578a3009c7408b8509cac7cefd" 442 | integrity sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA== 443 | 444 | esbuild-linux-riscv64@0.14.27: 445 | version "0.14.27" 446 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz#344a27f91568056a5903ad5841b447e00e78d740" 447 | integrity sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg== 448 | 449 | esbuild-linux-s390x@0.14.27: 450 | version "0.14.27" 451 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz#73a7309bd648a07ef58f069658f989a5096130db" 452 | integrity sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg== 453 | 454 | esbuild-netbsd-64@0.14.27: 455 | version "0.14.27" 456 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz#482a587cdbd18a6c264a05136596927deb46c30a" 457 | integrity sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q== 458 | 459 | esbuild-openbsd-64@0.14.27: 460 | version "0.14.27" 461 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz#e99f8cdc63f1628747b63edd124d53cf7796468d" 462 | integrity sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw== 463 | 464 | esbuild-sunos-64@0.14.27: 465 | version "0.14.27" 466 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz#8611d825bcb8239c78d57452e83253a71942f45c" 467 | integrity sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg== 468 | 469 | esbuild-windows-32@0.14.27: 470 | version "0.14.27" 471 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz#c06374206d4d92dd31d4fda299b09f51a35e82f6" 472 | integrity sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw== 473 | 474 | esbuild-windows-64@0.14.27: 475 | version "0.14.27" 476 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz#756631c1d301dfc0d1a887deed2459ce4079582f" 477 | integrity sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg== 478 | 479 | esbuild-windows-arm64@0.14.27: 480 | version "0.14.27" 481 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz#ad7e187193dcd18768b16065a950f4441d7173f4" 482 | integrity sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg== 483 | 484 | esbuild@^0.14.14: 485 | version "0.14.27" 486 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.27.tgz#41fe0f1b6b68b9f77cac025009bc54bb96e616f1" 487 | integrity sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q== 488 | optionalDependencies: 489 | esbuild-android-64 "0.14.27" 490 | esbuild-android-arm64 "0.14.27" 491 | esbuild-darwin-64 "0.14.27" 492 | esbuild-darwin-arm64 "0.14.27" 493 | esbuild-freebsd-64 "0.14.27" 494 | esbuild-freebsd-arm64 "0.14.27" 495 | esbuild-linux-32 "0.14.27" 496 | esbuild-linux-64 "0.14.27" 497 | esbuild-linux-arm "0.14.27" 498 | esbuild-linux-arm64 "0.14.27" 499 | esbuild-linux-mips64le "0.14.27" 500 | esbuild-linux-ppc64le "0.14.27" 501 | esbuild-linux-riscv64 "0.14.27" 502 | esbuild-linux-s390x "0.14.27" 503 | esbuild-netbsd-64 "0.14.27" 504 | esbuild-openbsd-64 "0.14.27" 505 | esbuild-sunos-64 "0.14.27" 506 | esbuild-windows-32 "0.14.27" 507 | esbuild-windows-64 "0.14.27" 508 | esbuild-windows-arm64 "0.14.27" 509 | 510 | escalade@^3.1.1: 511 | version "3.1.1" 512 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 513 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 514 | 515 | escape-string-regexp@^1.0.5: 516 | version "1.0.5" 517 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 518 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 519 | 520 | estree-walker@^2.0.1: 521 | version "2.0.2" 522 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 523 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 524 | 525 | fsevents@~2.3.2: 526 | version "2.3.2" 527 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 528 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 529 | 530 | function-bind@^1.1.1: 531 | version "1.1.1" 532 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 533 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 534 | 535 | gensync@^1.0.0-beta.2: 536 | version "1.0.0-beta.2" 537 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 538 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 539 | 540 | globals@^11.1.0: 541 | version "11.12.0" 542 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 543 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 544 | 545 | has-flag@^3.0.0: 546 | version "3.0.0" 547 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 548 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 549 | 550 | has@^1.0.3: 551 | version "1.0.3" 552 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 553 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 554 | dependencies: 555 | function-bind "^1.1.1" 556 | 557 | is-core-module@^2.8.1: 558 | version "2.8.1" 559 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" 560 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== 561 | dependencies: 562 | has "^1.0.3" 563 | 564 | js-tokens@^4.0.0: 565 | version "4.0.0" 566 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 567 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 568 | 569 | jsesc@^2.5.1: 570 | version "2.5.2" 571 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 572 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 573 | 574 | json5@^2.1.2: 575 | version "2.1.3" 576 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" 577 | integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== 578 | dependencies: 579 | minimist "^1.2.5" 580 | 581 | minimist@^1.2.5: 582 | version "1.2.5" 583 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 584 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 585 | 586 | ms@2.1.2: 587 | version "2.1.2" 588 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 589 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 590 | 591 | nanoid@^3.3.1: 592 | version "3.3.1" 593 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" 594 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 595 | 596 | node-releases@^2.0.2: 597 | version "2.0.2" 598 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" 599 | integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== 600 | 601 | object-assign@^4.1.1: 602 | version "4.1.1" 603 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 604 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 605 | 606 | path-parse@^1.0.7: 607 | version "1.0.7" 608 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 609 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 610 | 611 | performance-now@^2.1.0: 612 | version "2.1.0" 613 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 614 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 615 | 616 | picocolors@^1.0.0: 617 | version "1.0.0" 618 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 619 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 620 | 621 | picomatch@^2.2.2: 622 | version "2.3.1" 623 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 624 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 625 | 626 | postcss@^8.4.6: 627 | version "8.4.8" 628 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.8.tgz#dad963a76e82c081a0657d3a2f3602ce10c2e032" 629 | integrity sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ== 630 | dependencies: 631 | nanoid "^3.3.1" 632 | picocolors "^1.0.0" 633 | source-map-js "^1.0.2" 634 | 635 | promise@^8.0.3: 636 | version "8.1.0" 637 | resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" 638 | integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== 639 | dependencies: 640 | asap "~2.0.6" 641 | 642 | raf@^3.4.1: 643 | version "3.4.1" 644 | resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" 645 | integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== 646 | dependencies: 647 | performance-now "^2.1.0" 648 | 649 | react-app-polyfill@^1.0.0: 650 | version "1.0.6" 651 | resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" 652 | integrity sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g== 653 | dependencies: 654 | core-js "^3.5.0" 655 | object-assign "^4.1.1" 656 | promise "^8.0.3" 657 | raf "^3.4.1" 658 | regenerator-runtime "^0.13.3" 659 | whatwg-fetch "^3.0.0" 660 | 661 | react-refresh@^0.11.0: 662 | version "0.11.0" 663 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" 664 | integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== 665 | 666 | regenerator-runtime@^0.13.3: 667 | version "0.13.7" 668 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" 669 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== 670 | 671 | resolve@^1.22.0: 672 | version "1.22.0" 673 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" 674 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 675 | dependencies: 676 | is-core-module "^2.8.1" 677 | path-parse "^1.0.7" 678 | supports-preserve-symlinks-flag "^1.0.0" 679 | 680 | rollup@^2.59.0: 681 | version "2.70.1" 682 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.70.1.tgz#824b1f1f879ea396db30b0fc3ae8d2fead93523e" 683 | integrity sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA== 684 | optionalDependencies: 685 | fsevents "~2.3.2" 686 | 687 | safe-buffer@~5.1.1: 688 | version "5.1.2" 689 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 690 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 691 | 692 | semver@^6.3.0: 693 | version "6.3.0" 694 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 695 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 696 | 697 | source-map-js@^1.0.2: 698 | version "1.0.2" 699 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 700 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 701 | 702 | source-map@^0.5.0: 703 | version "0.5.7" 704 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 705 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 706 | 707 | supports-color@^5.3.0: 708 | version "5.5.0" 709 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 710 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 711 | dependencies: 712 | has-flag "^3.0.0" 713 | 714 | supports-preserve-symlinks-flag@^1.0.0: 715 | version "1.0.0" 716 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 717 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 718 | 719 | to-fast-properties@^2.0.0: 720 | version "2.0.0" 721 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 722 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 723 | 724 | typescript@^4: 725 | version "4.6.2" 726 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" 727 | integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== 728 | 729 | vite-preset-react@latest: 730 | version "2.2.0" 731 | resolved "https://registry.yarnpkg.com/vite-preset-react/-/vite-preset-react-2.2.0.tgz#0fc10389b8368c84f545ccff68c817b27806cee5" 732 | integrity sha512-14PnTw+UjhOJouBH87h1M3ejkfUscs/1QbMlj7+BmFHEYBQWIygJV/KPu+rvWJlVw10Ln1LCO2b9evka6JWujw== 733 | dependencies: 734 | "@vitejs/plugin-react" "^1.0.9" 735 | 736 | vite@latest: 737 | version "2.8.6" 738 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.8.6.tgz#32d50e23c99ca31b26b8ccdc78b1d72d4d7323d3" 739 | integrity sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug== 740 | dependencies: 741 | esbuild "^0.14.14" 742 | postcss "^8.4.6" 743 | resolve "^1.22.0" 744 | rollup "^2.59.0" 745 | optionalDependencies: 746 | fsevents "~2.3.2" 747 | 748 | whatwg-fetch@^3.0.0: 749 | version "3.4.1" 750 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3" 751 | integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ== 752 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-flex-ready", 3 | "version": "1.3.5", 4 | "license": "MIT", 5 | "author": "smakosh", 6 | "module": "dist/react-flex-ready.esm.js", 7 | "main": "dist/index.js", 8 | "typings": "dist/index.d.ts", 9 | "bugs": { 10 | "url": "https://github.com/smakosh/react-flex-ready/issues" 11 | }, 12 | "repository": "smakosh/react-flex-ready", 13 | "homepage": "https://react-flex-ready.vercel.app", 14 | "files": [ 15 | "dist", 16 | "src" 17 | ], 18 | "engines": { 19 | "node": ">=12" 20 | }, 21 | "scripts": { 22 | "start": "dts watch", 23 | "build": "dts build", 24 | "test": "dts test --passWithNoTests", 25 | "lint": "dts lint", 26 | "prepare": "dts build", 27 | "size": "size-limit", 28 | "analyze": "size-limit --why" 29 | }, 30 | "husky": { 31 | "hooks": { 32 | "pre-commit": "dts lint" 33 | } 34 | }, 35 | "prettier": { 36 | "printWidth": 80, 37 | "semi": true, 38 | "singleQuote": true, 39 | "trailingComma": "es5", 40 | "endOfLine": "auto" 41 | }, 42 | "size-limit": [ 43 | { 44 | "path": "dist/react-flex-ready.cjs.production.min.js", 45 | "limit": "16 KB" 46 | }, 47 | { 48 | "path": "dist/react-flex-ready.esm.js", 49 | "limit": "16 KB" 50 | } 51 | ], 52 | "peerDependencies": { 53 | "react": ">=16" 54 | }, 55 | "dependencies": { 56 | "styled-components": "^5.3.3" 57 | }, 58 | "devDependencies": { 59 | "@babel/core": "^7.11.6", 60 | "@size-limit/preset-small-lib": "^7.0.8", 61 | "@tsconfig/create-react-app": "^1.0.2", 62 | "@tsconfig/recommended": "^1.0.1", 63 | "@types/react": "^16.9.50", 64 | "@types/react-dom": "^16.9.8", 65 | "@types/styled-components": "^5.1.3", 66 | "babel-loader": "^8.1.0", 67 | "dts-cli": "^1.4.0", 68 | "husky": "^4.3.0", 69 | "react": "^17.0.2", 70 | "react-dom": "^17.0.2", 71 | "react-is": "^16.13.1", 72 | "size-limit": "^7.0.8", 73 | "tslib": "^2.0.1", 74 | "typescript": "^4.6.2" 75 | }, 76 | "jest": { 77 | "testEnvironment": "jsdom" 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/Flex/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { FlexProps } from '../interfaces'; 3 | import Item from '../Item'; 4 | import { StyledFlex } from './styles'; 5 | 6 | const Flex: React.FC = ({ 7 | children, 8 | col = 12, 9 | colTablet, 10 | colMobile, 11 | gap, 12 | gapTablet, 13 | gapMobile, 14 | align, 15 | className, 16 | style, 17 | }) => ( 18 | 29 | {children} 30 | 38 | 39 | ); 40 | 41 | export default Flex; 42 | -------------------------------------------------------------------------------- /src/Flex/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | import { FlexProps } from '../interfaces'; 3 | 4 | export const StyledFlex = styled.div` 5 | display: flex; 6 | justify-content: space-between; 7 | flex-wrap: wrap; 8 | align-items: ${({ align }) => align || 'center'}; 9 | 10 | &:after { 11 | content: ''; 12 | max-width: ${({ col, gap = 1 }) => 13 | col && col < 12 ? `${(100 * col) / 12 - gap}%` : '100%'}; 14 | width: 100%; 15 | 16 | @media (max-width: 960px) { 17 | max-width: ${({ colTablet, gapTablet = 1 }) => 18 | colTablet && colTablet < 12 19 | ? `${(100 * colTablet) / 12 - gapTablet}%` 20 | : '100%'}; 21 | } 22 | 23 | @media (max-width: 680px) { 24 | max-width: ${({ colMobile, gapMobile = 1 }) => 25 | colMobile && colMobile < 12 26 | ? `${(100 * colMobile) / 12 - gapMobile}%` 27 | : '100%'}; 28 | } 29 | } 30 | `; 31 | -------------------------------------------------------------------------------- /src/Item.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | import { ItemProps } from './interfaces'; 3 | 4 | const Item = styled.div` 5 | width: 100%; 6 | max-width: ${({ col, gap = 1 }) => 7 | col && col < 12 ? `${(100 * col) / 12 - gap}%` : '100%'}; 8 | 9 | ${({ marginBottom }) => 10 | marginBottom && 11 | ` 12 | margin-bottom: ${marginBottom}px; 13 | `} 14 | 15 | @media (max-width: 960px) { 16 | max-width: ${({ colTablet, gapTablet = 1 }) => 17 | colTablet && colTablet < 12 18 | ? `${(100 * colTablet) / 12 - gapTablet}%` 19 | : '100%'}; 20 | margin-bottom: ${({ marginBottom = 10 }) => `${marginBottom}px`}; 21 | } 22 | 23 | @media (max-width: 680px) { 24 | max-width: ${({ colMobile, gapMobile = 1 }) => 25 | colMobile && colMobile < 12 26 | ? `${(100 * colMobile) / 12 - gapMobile}%` 27 | : '100%'}; 28 | 29 | &:last-child { 30 | margin-bottom: unset; 31 | } 32 | } 33 | 34 | ${({ stretch }) => 35 | stretch && 36 | ` 37 | display: flex; 38 | align-self: stretch; 39 | `} 40 | `; 41 | 42 | export default Item; 43 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Flex } from './Flex'; 2 | export { default as Item } from './Item'; 3 | export type { Range, FlexProps, ItemProps } from './interfaces'; 4 | -------------------------------------------------------------------------------- /src/interfaces.ts: -------------------------------------------------------------------------------- 1 | import { HTMLAttributes, Component, StyleHTMLAttributes } from 'react'; 2 | 3 | export type Range = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12; 4 | 5 | export interface ItemProps extends HTMLAttributes { 6 | gap?: number; 7 | gapTablet?: number; 8 | gapMobile?: number; 9 | col: Range; 10 | colTablet?: Range; 11 | colMobile?: Range; 12 | marginBottom?: number; 13 | stretch?: boolean; 14 | as?: string | Component; 15 | className?: string; 16 | style?: StyleHTMLAttributes; 17 | } 18 | 19 | export interface FlexProps extends HTMLAttributes { 20 | gap?: number; 21 | gapTablet?: number; 22 | gapMobile?: number; 23 | align?: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'; 24 | col?: Range; 25 | colTablet?: Range; 26 | colMobile?: Range; 27 | className?: string; 28 | style?: StyleHTMLAttributes; 29 | as?: string | Component; 30 | } 31 | -------------------------------------------------------------------------------- /test/flex.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as ReactDOM from 'react-dom'; 3 | import { Flex } from '../src'; 4 | 5 | describe('Flex', () => { 6 | it('renders without crashing', () => { 7 | const div = document.createElement('div'); 8 | ReactDOM.render(, div); 9 | ReactDOM.unmountComponentAtNode(div); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /test/item.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as ReactDOM from 'react-dom'; 3 | import { Item } from '../src'; 4 | 5 | describe('Item', () => { 6 | it('renders without crashing', () => { 7 | const div = document.createElement('div'); 8 | ReactDOM.render(, div); 9 | ReactDOM.unmountComponentAtNode(div); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs 3 | "extends": "@tsconfig/create-react-app/tsconfig.json", 4 | "include": ["src", "types"] 5 | } 6 | --------------------------------------------------------------------------------