├── src
├── drawers
│ ├── text.sass
│ └── text.jsx
├── editors
│ ├── text.sass
│ └── text.jsx
├── index.js
├── utilities.js
├── clipboard.js
├── base-editor.js
├── object-table.sass
├── object-cell.jsx
├── object-row.jsx
└── object-table.jsx
├── .npmignore
├── demo-site
├── _includes
│ ├── head.html
│ └── required_static.html
├── demos.sass
├── demos.jsx
├── _config.yml
├── webpack.config.js
├── package.json
├── simple-demo.jsx
├── index.html
├── features-demo.jsx
└── customisation-demo.jsx
├── esbuild.js
├── .gitignore
├── LICENSE
├── .eslintrc
├── README.md
├── package.json
└── yarn.lock
/src/drawers/text.sass:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src/
2 | demo-site/
3 | webpack.config.js
4 |
--------------------------------------------------------------------------------
/demo-site/_includes/head.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demo-site/_includes/required_static.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/editors/text.sass:
--------------------------------------------------------------------------------
1 | div.object-table-container
2 | td.text-editor
3 | input
4 | text-align: left
5 |
--------------------------------------------------------------------------------
/demo-site/demos.sass:
--------------------------------------------------------------------------------
1 | @import 'node_modules/uptick-demo-site/dist/uptick-demo-site'
2 | @import 'node_modules/react-object-table/dist/react-object-table'
3 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import ObjectTable, { ObjectCell, ObjectRow, BaseEditor, TextEditor, TextDrawer } from './object-table'
2 |
3 | export default ObjectTable
4 | export { ObjectCell, ObjectRow, BaseEditor, TextEditor, TextDrawer }
--------------------------------------------------------------------------------
/demo-site/demos.jsx:
--------------------------------------------------------------------------------
1 | import { init } from 'uptick-demo-site'
2 |
3 | import SimpleDemo from './simple-demo.jsx'
4 | import FeaturesDemo from './features-demo.jsx'
5 | import CustomisationDemo from './customisation-demo.jsx'
6 |
7 | init();
8 |
--------------------------------------------------------------------------------
/demo-site/_config.yml:
--------------------------------------------------------------------------------
1 | layouts_dir: 'node_modules/uptick-demo-site/dist'
2 |
3 | package_name: React Object Table
4 | package_github_url: https://github.com/uptick/react-object-table
5 | package_npm_url: https://www.npmjs.com/package/react-object-table
6 |
--------------------------------------------------------------------------------
/src/drawers/text.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types'
2 | import React from 'react'
3 |
4 | class TextDrawer extends React.Component {
5 | static propTypes = {
6 | value: PropTypes.string,
7 | }
8 | render() {
9 | return (
10 | {String(this.props.value)}
11 | )
12 | }
13 | }
14 |
15 | export default {
16 | className: 'text-drawer',
17 | component: TextDrawer,
18 | }
19 |
--------------------------------------------------------------------------------
/esbuild.js:
--------------------------------------------------------------------------------
1 | const { build } = require("esbuild");
2 | const { nodeExternalsPlugin } = require("esbuild-node-externals");
3 |
4 | build({
5 | entryPoints: ["src/index.js"],
6 | outdir: "dist",
7 | bundle: true,
8 | sourcemap: true,
9 | minify: true,
10 | splitting: true,
11 | format: "esm",
12 | target: ["es2015"],
13 | loader: {
14 | ".js": "jsx",
15 | },
16 | plugins: [nodeExternalsPlugin({ allowList: ['jquery', 'classnames', 'clone'], })],
17 | }).catch(() => process.exit(1));
18 |
--------------------------------------------------------------------------------
/demo-site/webpack.config.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 |
3 | module.exports = {
4 | entry: './demos.jsx',
5 | output: {
6 | path: __dirname + '/dist',
7 | filename: 'demos.js',
8 | },
9 | module: {
10 | loaders: [
11 | {
12 | test: /\.jsx?$/,
13 | exclude: /(node_modules)/,
14 | loader: 'babel',
15 | query: {
16 | presets: [
17 | 'react',
18 | 'es2015',
19 | 'stage-0',
20 | ],
21 | },
22 | },
23 | ],
24 | },
25 | };
26 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
3 | # Logs
4 | logs
5 | *.log
6 | npm-debug.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 |
13 | # Directory for instrumented libs generated by jscoverage/JSCover
14 | lib-cov
15 |
16 | # Coverage directory used by tools like istanbul
17 | coverage
18 |
19 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
20 | .grunt
21 |
22 | # node-waf configuration
23 | .lock-wscript
24 |
25 | # Compiled binary addons (http://nodejs.org/api/addons.html)
26 | build/Release
27 |
28 | # Dependency directory
29 | node_modules
30 |
31 | # Optional npm cache directory
32 | .npm
33 |
34 | # Optional REPL history
35 | .node_repl_history
36 |
37 | # Built files
38 | dist
39 |
40 | # Jekyll
41 | demo-site/_site/
42 | # demo dist
43 |
--------------------------------------------------------------------------------
/src/utilities.js:
--------------------------------------------------------------------------------
1 | function dictCount(dict) {
2 | let count = 0
3 | for (const _ in dict) {
4 | count++
5 | }
6 | return count
7 | }
8 |
9 | function dictFirstKey(dict) {
10 | for (const dictKey in dict) {
11 | return dictKey
12 | }
13 | return undefined
14 | }
15 |
16 | function cellIsEditable(object, column) {
17 | const { isReadOnly, editor } = column
18 | const editorIsSet = editor !== false
19 | const readOnly = typeof isReadOnly === 'function' ? isReadOnly(object) : (isReadOnly === true)
20 | return editorIsSet && !readOnly
21 | }
22 |
23 | function isDifferent(objectA, objectB, exemptions) {
24 | for (const key in objectA) {
25 | if (exemptions && key in exemptions) {
26 | continue
27 | }
28 | if (JSON.stringify(objectB[key]) !== JSON.stringify(objectA[key])) {
29 | return true
30 | }
31 | }
32 | return false
33 | }
34 |
35 | export {
36 | dictCount,
37 | dictFirstKey,
38 | cellIsEditable,
39 | isDifferent,
40 | }
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Uptick Pty Ltd
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.
22 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "react",
4 | "@typescript-eslint"
5 | ],
6 | "parser": "@typescript-eslint/parser",
7 | "rules": {
8 |
9 | // stops the 'React' was used before it was defined no-use-before-define error for .js files.
10 | "no-use-before-define": "off",
11 | "@typescript-eslint/no-use-before-define": ["error"],
12 |
13 | "react/prop-types": 1,
14 | "react/jsx-handler-names": "off",
15 | "react/jsx-uses-react": "error",
16 | "react/jsx-uses-vars": "error",
17 |
18 | "comma-dangle": [2, {
19 | "arrays": "always-multiline",
20 | "exports": "always-multiline",
21 | "functions": "never",
22 | "imports": "always-multiline",
23 | "objects": "always-multiline"
24 | }],
25 |
26 | "space-before-function-paren": [2, {
27 | "anonymous": "never",
28 | "named": "never",
29 | "asyncArrow": "always"
30 | }],
31 |
32 | "jsx-quotes": [2, "prefer-double"],
33 | "no-var": 2,
34 |
35 | "semi": [2, "never"],
36 | "lines-between-class-members": "off"
37 | },
38 |
39 | "extends": ["standard", "standard-react"],
40 |
41 | "env": {
42 | "browser": true,
43 | "jest": true,
44 | "jasmine": true
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/demo-site/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-object-table-demo-site",
3 | "version": "1.0.1",
4 | "description": "Demo site for react-object-table package",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "build-css": "./node_modules/node-sass/bin/node-sass demos.sass dist/demos.css",
9 | "watch-css": "npm run build-css; ./node_modules/node-sass/bin/node-sass demos.sass dist/demos.css --watch",
10 | "build-js": "./node_modules/webpack/bin/webpack.js",
11 | "watch-js": "./node_modules/webpack/bin/webpack.js --watch",
12 | "build": "npm run build-js; npm run build-css",
13 | "watch": "parallel --ungroup ::: \"npm run watch-js\" \"npm run watch-css\""
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "react-object-table"
18 | },
19 | "author": "Uptick Pty Ltd",
20 | "license": "MIT",
21 | "dependencies": {
22 | "moment": "^2.16.0",
23 | "react": "16.x",
24 | "react-dom": "16.x",
25 | "react-object-table": "latest",
26 | "uptick-demo-site": "latest"
27 | },
28 | "devDependencies": {
29 | "babel-cli": "^6.18.0",
30 | "babel-core": "^6.18.2",
31 | "babel-loader": "^6.2.7",
32 | "babel-preset-es2015": "^6.18.0",
33 | "babel-preset-react": "^6.16.0",
34 | "babel-preset-stage-0": "^6.16.0",
35 | "node-sass": "^3.12.1",
36 | "webpack": "^1.13.3"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/demo-site/simple-demo.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDom from 'react-dom'
3 |
4 | import ObjectTable from 'react-object-table'
5 |
6 | class SimpleTable extends React.Component {
7 | state = {
8 | objects: [
9 | {id: 1, firstName: 'Jon', lastName: 'Athon'},
10 | {id: 2, firstName: 'Andrew', lastName: 'Angagram'},
11 | {id: 3, firstName: 'Craig', lastName: 'Jenny'},
12 | {id: 4, firstName: 'Luke', lastName: 'Hotkins'},
13 | ],
14 | }
15 |
16 | handleUpdate(id, values) {
17 | this.setState(prevState => {
18 | const stateChanges = {
19 | objects: prevState.objects,
20 | }
21 | prevState.objects.map((object, index) => {
22 | if (object.id === id) {
23 | stateChanges.objects[index] = {
24 | ...object,
25 | ...values,
26 | };
27 | }
28 | });
29 | return stateChanges;
30 | });
31 | }
32 |
33 | render() {
34 | return (
35 |
40 | );
41 | }
42 | }
43 | SimpleTable.defaultProps = {
44 | columns: [
45 | {
46 | name: 'First Name',
47 | key: 'firstName',
48 | },
49 | {
50 | name: 'Last Name',
51 | key: 'lastName',
52 | },
53 | ],
54 | };
55 |
56 | var mount = document.querySelectorAll('div.demo-mount-simple');
57 | ReactDom.render(
58 | ,
59 | mount[0]
60 | );
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-object-table
2 |
3 | [](http://badge.fury.io/js/react-object-table)
4 | 
5 |
6 | React powered table of objects, designed to be editable and fast.
7 |
8 | ## Live Demo
9 |
10 | Check out the live demo here: http://uptick.github.io/react-object-table/
11 |
12 | ## Installation
13 |
14 | Install the package with npm:
15 |
16 | ```
17 | npm install react-object-table
18 | ```
19 |
20 | Then require and use with ES6 imports:
21 |
22 | ```javascript
23 | import React from 'react'
24 | import ReactDom from 'react-dom'
25 |
26 | import ObjectTable from 'react-object-table'
27 |
28 | var mount = document.querySelectorAll('div.table-mount');
29 | ReactDom.render(
30 | ,
44 | mount[0]
45 | );
46 | ```
47 |
48 | Optionally, include the built css with an import:
49 |
50 | ```scss
51 | @import 'node_modules/react-object-table/dist/react-object-table.css';
52 |
53 | ```
54 |
55 | or tag:
56 |
57 | ```html
58 |
59 | ```
60 |
61 | Full reference documentation coming soon. For now, take a look at the reference on the live demo at
62 | http://uptick.github.io/react-object-table/.
63 |
--------------------------------------------------------------------------------
/src/clipboard.js:
--------------------------------------------------------------------------------
1 | function deserializeCells(clipboardData) {
2 | let gridData = clipboardData.getData('react/object-grid')
3 | if (gridData) {
4 | return JSON.parse(gridData)
5 | }
6 | let tabbedData = clipboardData.getData('text/plain')
7 | if (tabbedData) {
8 | let rows = []
9 | let lines = tabbedData.split('\n')
10 | for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
11 | let columns = []
12 | let tabs = lines[lineIndex].split('\t')
13 | for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {
14 | columns.push(tabs[tabIndex])
15 | }
16 | rows.push(columns)
17 | }
18 | return rows
19 | }
20 | return []
21 | }
22 |
23 | function stringValue(value) {
24 | switch (typeof value) {
25 | case 'number':
26 | return value.toString()
27 |
28 | case 'object':
29 | if (Array.isArray(value)) {
30 | let stringValue = ''
31 | for (let valueIndex = 0; valueIndex < value.length; valueIndex++) {
32 | stringValue += stringValue(value[valueIndex])
33 | if (valueIndex < value.length - 1) {
34 | stringValue += ', '
35 | }
36 | }
37 | return stringValue
38 | }
39 |
40 | if (value === null) {
41 | return ''
42 | } else {
43 | return 'object'
44 | }
45 |
46 | case 'boolean':
47 | if (value) {
48 | return 'true'
49 | } else {
50 | return 'false'
51 | }
52 |
53 | case 'string':
54 | return value
55 | }
56 | return ''
57 | }
58 |
59 | export {
60 | deserializeCells,
61 | stringValue,
62 | }
63 |
--------------------------------------------------------------------------------
/src/editors/text.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import BaseEditor from './../base-editor'
3 |
4 | function validate(value, props) {
5 | return {
6 | valid: true,
7 | cleanedValue: String(value),
8 | }
9 | }
10 |
11 | class TextEditor extends BaseEditor {
12 | componentDidMount() {
13 | if (this.props.editReplace) {
14 | this.field.setSelectionRange(this.state.value.length, this.state.value.length)
15 | }
16 | }
17 |
18 | validate(value) {
19 | return validate(value, this.props)
20 | }
21 |
22 | handleChange = (event) => {
23 | let newValue = this.field.value
24 | this.setState({value: newValue})
25 | }
26 |
27 | handleFocus = (event) => {
28 | if (this.props.editReplace === null) {
29 | window.setTimeout(() => {
30 | let inputElement = this.field
31 | inputElement.select()
32 | }, 0)
33 | }
34 | }
35 |
36 | render() {
37 | return (
38 |
56 | )
57 | }
58 | }
59 |
60 | export default {
61 | className: 'text-editor',
62 | component: TextEditor,
63 | validate: validate,
64 | }
65 |
--------------------------------------------------------------------------------
/src/base-editor.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types'
2 | import React from 'react'
3 |
4 | function validate(value, props) {
5 | return {
6 | valid: true,
7 | cleanedValue: value,
8 | }
9 | }
10 |
11 | class BaseEditor extends React.Component {
12 | static propTypes = {
13 | editReplace: PropTypes.any,
14 | value: PropTypes.any,
15 | abort: PropTypes.func,
16 | update: PropTypes.func,
17 | cellError: PropTypes.func,
18 | objectId: PropTypes.oneOfType([
19 | PropTypes.string,
20 | PropTypes.number,
21 | ]),
22 | columnKey: PropTypes.string,
23 | }
24 | static defaultProps = {
25 | editReplace: null,
26 | }
27 | state = {
28 | value: (this.props.editReplace !== null) ? this.props.editReplace : this.props.value,
29 | }
30 |
31 | validate(value) {
32 | return validate(value, this.props)
33 | }
34 |
35 | abort(nextAction) {
36 | this.props.abort(nextAction)
37 | }
38 |
39 | commit(value, nextAction) {
40 | let validation = this.validate(value)
41 |
42 | if (validation.valid) {
43 | this.props.update(
44 | this.props.objectId,
45 | this.props.columnKey,
46 | validation.cleanedValue,
47 | nextAction,
48 | )
49 | } else {
50 | this.props.cellError(
51 | this.props.objectId,
52 | this.props.columnKey,
53 | `"${value}" is not a valid value.`
54 | )
55 | this.abort(nextAction)
56 | }
57 | }
58 |
59 | handleBlur = (event) => {
60 | this.commit(this.state.value, false)
61 | }
62 | handleSubmit = (event) => {
63 | event.preventDefault()
64 | event.stopPropagation()
65 | this.commit(this.state.value, 'nextRow')
66 | }
67 | handleKeyDown = (event) => {
68 | if (event.which === 9) {
69 | event.preventDefault()
70 | this.commit(this.state.value, 'nextColumn')
71 | }
72 | if (event.which === 27) {
73 | event.preventDefault()
74 | this.abort(false)
75 | }
76 | }
77 | }
78 |
79 | export default BaseEditor
80 |
--------------------------------------------------------------------------------
/demo-site/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: base
3 | ---
4 |
5 |
8 |
To participate in the demonstration you will need:
9 |
10 | - Javascript enabled
11 | - A modern browser
12 |
13 |
All examples given are written with babel loaders to support es6 (stage-0) and JSX syntax.
14 |
15 |
Simple Example
16 |
This is the simplest implementation of React-Object-Table, an editable list of strings.
17 |
To allow editing, the table requires an onUpdate handler (refer to source code below).
18 |
Even this simple example supports:
19 |
20 | - Single cell editing
21 | - Familiar navigation and completion hotkeys such as the arrow keys and tab/enter
22 | - Multi column or row copy-paste (except on Firefox, where the required events do not
23 | exist)
24 |
25 |
26 |
Loading ...
30 |
31 |
More Feature-Filled Example
32 |
This example demonstrates:
33 |
34 | - Read-only columns
35 | - A more complex update handler
36 | - The ability to add rows (handled outside the scope of React-Object-Table)
37 | - Row-level action handlers
38 | - A very basic custom renderer
39 |
40 |
41 |
Loading ...
45 |
46 |
Customisation Example
47 |
This example demonstrates:
48 |
49 | - A more exciting custom renderer
50 | - A custom editor widget
51 | - Cell input validation (age column, confirmed to be positive integer in a reasonable
52 | range)
53 | - Very basic validation error exception handling
54 |
55 |
56 |
Loading ...
60 |
61 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-object-table",
3 | "version": "0.7.1",
4 | "description": "React powered table of objects, designed to be editable and fast.",
5 | "main": "dist/index.js",
6 | "module": "dist/index.js",
7 | "exports": {
8 | ".": {
9 | "require": "./dist/index.js",
10 | "import": "./dist/index.js"
11 | }
12 | },
13 | "scripts": {
14 | "publish-demo": "git branch -D gh-pages; git push origin --delete gh-pages; git checkout -b gh-pages; cd demo-site; yarn; npm run build; cd ..; git add .; git add -f demo-site/dist; git add -f demo-site/node_modules/uptick-demo-site/dist; git commit -m \"Demo site build\"; git push origin gh-pages; git checkout master; git push origin `git subtree split --prefix demo-site gh-pages`:gh-pages --force;",
15 | "test": "echo \"Error: no test specified\" && exit 1",
16 | "build-js": "rm -rf dist && node ./esbuild.js",
17 | "build-css": "./node_modules/node-sass/bin/node-sass src/object-table.sass dist/react-object-table.css",
18 | "build": "npm run build-js; npm run build-css",
19 | "prepublish": "npm run build"
20 | },
21 | "repository": {
22 | "type": "git",
23 | "url": "https://github.com/uptick/react-object-table.git"
24 | },
25 | "keywords": [
26 | "react",
27 | "object",
28 | "grid",
29 | "table",
30 | "editable"
31 | ],
32 | "author": "Uptick Pty Ltd",
33 | "license": "MIT",
34 | "bugs": {
35 | "url": "https://github.com/uptick/react-object-table/issues"
36 | },
37 | "homepage": "https://github.com/uptick/react-object-table#readme",
38 | "dependencies": {
39 | "classnames": "^2.3.1",
40 | "clone": "^2.1.2"
41 | },
42 | "peerDependencies": {
43 | "jquery": "^3.x",
44 | "react": "15.x - 16.x",
45 | "react-dom": "15.x - 16.x"
46 | },
47 | "devDependencies": {
48 | "@typescript-eslint/eslint-plugin": "^4.26.0",
49 | "@typescript-eslint/parser": "^4.26.0",
50 | "esbuild": "^0.12.5",
51 | "esbuild-node-externals": "^1.2.0",
52 | "eslint": "^7.27.0",
53 | "eslint-config-standard": "*",
54 | "eslint-config-standard-react": "*",
55 | "eslint-plugin-import": "*",
56 | "eslint-plugin-node": "*",
57 | "eslint-plugin-promise": "*",
58 | "eslint-plugin-react": "*",
59 | "eslint-plugin-standard": "*",
60 | "jquery": "^3.6.0",
61 | "node-sass": "^6.0.0",
62 | "react": "^16.13.0",
63 | "react-dom": "^16.13.0",
64 | "typescript": "^4.3.2"
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/demo-site/features-demo.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDom from 'react-dom'
3 |
4 | import Moment from 'moment'
5 |
6 | import ObjectTable from 'react-object-table'
7 |
8 | class SinceDrawer extends React.Component {
9 | render() {
10 | return (
11 | {Moment(this.props.value).fromNow()}
12 | );
13 | }
14 | }
15 | SinceDrawer = {
16 | className: 'since-drawer',
17 | component: SinceDrawer,
18 | };
19 |
20 | class SimpleTable extends React.Component {
21 | constructor(props) {
22 | super(props);
23 |
24 | this.state = {
25 | ...this.state,
26 | objects: [
27 | {
28 | id: 1,
29 | firstName: 'Sean',
30 | lastName: 'MacMini',
31 | updated: +(Moment() - Moment.duration({weeks: 1})),
32 | },
33 | {
34 | id: 2,
35 | firstName: 'Jarek',
36 | lastName: 'Grwovwatski',
37 | updated: +(Moment() - Moment.duration({weeks: 1})),
38 | },
39 | ],
40 | };
41 | }
42 |
43 | handleUpdate(id, values) {
44 | this.setState(prevState => {
45 | const stateChanges = {
46 | objects: prevState.objects,
47 | }
48 | prevState.objects.map((object, index) => {
49 | if (object.id === id) {
50 | stateChanges.objects[index] = {
51 | ...object,
52 | ...values,
53 | updated: +Moment(),
54 | };
55 | }
56 | });
57 | return stateChanges;
58 | });
59 | }
60 | handleDuplicate(id) {
61 | this.setState(prevState => {
62 | const stateChanges = {
63 | objects: prevState.objects,
64 | }
65 | var newId = 0;
66 | var original;
67 | prevState.objects.map((object) => {
68 | if (object.id === id) {
69 | original = object;
70 | }
71 | if (object.id > newId) {
72 | newId = object.id;
73 | }
74 | });
75 | newId++;
76 | if (original) {
77 | stateChanges.objects.push({
78 | ...original,
79 | id: newId,
80 | updated: +Moment(),
81 | });
82 | }
83 | return stateChanges;
84 | });
85 | }
86 |
87 | render() {
88 | return (
89 |
97 | );
98 | }
99 | }
100 | SimpleTable.defaultProps = {
101 | columns: [
102 | {
103 | name: 'First Name',
104 | key: 'firstName',
105 | },
106 | {
107 | name: 'Last Name',
108 | key: 'lastName',
109 | },
110 | {
111 | name: 'Updated',
112 | key: 'updated',
113 | editor: false,
114 | drawer: SinceDrawer,
115 | width: 200,
116 | },
117 | ],
118 | };
119 |
120 | var mount = document.querySelectorAll('div.demo-mount-features');
121 | ReactDom.render(
122 | ,
123 | mount[0]
124 | );
125 |
--------------------------------------------------------------------------------
/src/object-table.sass:
--------------------------------------------------------------------------------
1 | $selection-colour: #337ab7
2 | $cell-padding: 0.4rem
3 | $border-colour: #ddd
4 |
5 | div.object-table-container
6 | margin-bottom: 2em
7 | table
8 | width: 100%
9 | border: none !important
10 | outline: none !important
11 | border-collapse: collapse
12 |
13 | &.editing
14 | td
15 | div.contents
16 | opacity: 0.2
17 | &.editing div.contents
18 | opacity: 1
19 |
20 | // borders
21 | $border: 0.1rem solid $border-colour
22 |
23 | tr:first-child
24 | td, th
25 | border-top: $border
26 | tr:last-child
27 | td
28 | border-bottom: $border
29 | td:first-child, th:first-child
30 | border-left: $border
31 | td:last-child, th:last-child
32 | border-right: $border
33 | td.actions
34 | border-left: $border
35 | i
36 | cursor: pointer
37 |
38 | tr.disabled
39 | opacity: 0.5
40 | td, th
41 | div.contents
42 | transition: opacity 0.2s
43 |
44 | -webkit-box-sizing: border-box
45 | -moz-box-sizing: border-box
46 | -ms-box-sizing: border-box
47 | box-sizing: border-box
48 |
49 | // no selecting
50 | -webkit-user-select: none
51 | -moz-user-select: none
52 | -ms-user-select: none
53 | user-select: none
54 |
55 | &:not(.editing)
56 | td
57 | &.selected
58 | background: $selection-colour
59 | color: #fff
60 | &.copying div.contents
61 | opacity: 0.5
62 |
63 | th
64 | padding: $cell-padding
65 | text-align: left
66 | font-weight: normal
67 |
68 | td.actions
69 | position: relative
70 | text-align: center
71 | cursor: pointer
72 | ul.actions
73 | overflow: hidden
74 | line-height: 1em
75 | text-align: left
76 | position: absolute
77 | top: 50%
78 | right: -0.1rem
79 | list-style: none
80 | padding: 0
81 | margin: 0
82 | z-index: 20
83 | background: #fff
84 | border: 0.1rem solid $border-colour
85 | min-width: 10rem
86 | li
87 | display: block
88 | margin: 0
89 | padding: 0.6rem
90 | cursor: pointer
91 | &:hover
92 | background: $selection-colour
93 | color: #fff
94 | &.disabled
95 | cursor: not-allowed
96 | color: $border-colour
97 | &:hover
98 | background: #fff
99 | color: $border-colour
100 |
101 |
102 | td.uneditable
103 | background: #fafafa
104 |
105 | // all editors by default
106 | div.object-table-container
107 | td.editor
108 | input
109 | box-shadow: none
110 | width: 100%
111 | padding: $cell-padding
112 | margin: 0
113 | border: none
114 | outline: none
115 | background: none
116 |
117 | // all drawers by default
118 | div.object-table-container
119 | td.drawer, td.empty
120 | padding: $cell-padding
121 |
122 | @import 'drawers/text'
123 | @import 'editors/text'
124 |
--------------------------------------------------------------------------------
/demo-site/customisation-demo.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDom from 'react-dom'
3 |
4 | import ObjectTable from 'react-object-table'
5 | import { TextEditor } from 'react-object-table'
6 |
7 | class ColourDrawer extends React.Component {
8 | constructor(props) {
9 | super(props);
10 | }
11 |
12 | render() {
13 | return (
14 |
17 |
25 |
26 | );
27 | }
28 | }
29 | ColourDrawer = {
30 | className: 'since-drawer',
31 | component: ColourDrawer,
32 | };
33 |
34 | function validate_age(value, props) {
35 | var intAge = parseInt(value);
36 | if (isNaN(intAge)) {
37 | return {valid: false,};
38 | }
39 | if (intAge < 0 || intAge > 125) {
40 | return {valid: false,};
41 | }
42 | return {
43 | valid: true,
44 | cleanedValue: intAge,
45 | };
46 | }
47 | class AgeEditor extends TextEditor.component {
48 | validate(value) {
49 | return validate_age(value, this.props);
50 | }
51 | }
52 | AgeEditor = {
53 | className: 'age-editor',
54 | component: AgeEditor,
55 | validate: validate_age,
56 | };
57 |
58 | class CustomisedTable extends React.Component {
59 | constructor(props) {
60 | super(props);
61 |
62 | this.state = {
63 | ...this.state,
64 | exception: null,
65 | objects: [
66 | {
67 | id: 1,
68 | name: 'Phillip',
69 | favouriteColour: 'black',
70 | age: 75,
71 | },
72 | {
73 | id: 2,
74 | name: 'Michael',
75 | favouriteColour: '#f44',
76 | age: 19,
77 | },
78 | {
79 | id: 3,
80 | name: 'Steven McShane',
81 | favouriteColour: '#05AB45',
82 | age: 22,
83 | },
84 | {
85 | id: 4,
86 | name: 'Aidan',
87 | favouriteColour: 'rebeccapurple',
88 | age: 31,
89 | },
90 | ],
91 | };
92 | }
93 |
94 | handleUpdate(id, values) {
95 | this.setState(prevState => {
96 | const stateChanges = {
97 | exception: null,
98 | objects: prevState.objects,
99 | }
100 | prevState.objects.map((object, index) => {
101 | if (object.id === id) {
102 | stateChanges.objects[index] = {
103 | ...object,
104 | ...values,
105 | };
106 | }
107 | });
108 | return stateChanges;
109 | });
110 | }
111 | handleCellError(objectId, columnKey, message) {
112 | this.setState({exception: `Unable to update ${columnKey}:\n${message}`});
113 | }
114 | handleRowError(row, message) {
115 | this.setState({exception: message});
116 | }
117 |
118 | render() {
119 | var exception;
120 | if (this.state.exception !== null) {
121 | exception = (
122 |
133 | {this.state.exception}
134 |
135 | );
136 | }
137 | return (
138 |
139 |
146 | {exception}
147 |
148 | );
149 | }
150 | }
151 | CustomisedTable.defaultProps = {
152 | columns: [
153 | {
154 | name: 'Name',
155 | key: 'name',
156 | },
157 | {
158 | name: 'Age',
159 | key: 'age',
160 | width: 100,
161 | editor: AgeEditor,
162 | },
163 | {
164 | name: 'Favourite HTML Colour',
165 | key: 'favouriteColour',
166 | width: 170,
167 | drawer: ColourDrawer,
168 | },
169 | ],
170 | };
171 |
172 | var mount = document.querySelectorAll('div.demo-mount-customisation');
173 | ReactDom.render(
174 | ,
175 | mount[0]
176 | );
177 |
--------------------------------------------------------------------------------
/src/object-cell.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types'
2 | import React from 'react'
3 | import Clone from 'clone'
4 | import classNames from 'classnames'
5 |
6 | import { cellIsEditable, isDifferent } from './utilities'
7 |
8 | import TextDrawer from './drawers/text.jsx'
9 | import TextEditor from './editors/text.jsx'
10 |
11 | class ObjectCell extends React.Component {
12 | static propTypes = {
13 | column: PropTypes.object,
14 | objectId: PropTypes.oneOfType([
15 | PropTypes.string,
16 | PropTypes.number,
17 | ]),
18 | object: PropTypes.object,
19 | onMouseDownCell: PropTypes.func,
20 | disabled: PropTypes.bool,
21 | beginEdit: PropTypes.func,
22 | selected: PropTypes.bool,
23 | copying: PropTypes.bool,
24 | editing: PropTypes.bool,
25 | value: PropTypes.any,
26 | updateField: PropTypes.func,
27 | abortField: PropTypes.func,
28 | height: PropTypes.number,
29 | editReplace: PropTypes.any,
30 | cellError: PropTypes.func,
31 | editorContext: PropTypes.object,
32 | drawerContext: PropTypes.object,
33 | }
34 |
35 | shouldComponentUpdate(nextProps, nextState) {
36 | const propsExemptions = {
37 | 'onMouseDownCell': true,
38 | 'beginEdit': true,
39 | 'updateField': true,
40 | 'abortField': true,
41 | 'cellError': true,
42 | }
43 | if (isDifferent(this.props, nextProps, propsExemptions)) {
44 | return true
45 | }
46 | if (isDifferent(this.state, nextState)) {
47 | return true
48 | }
49 | return false
50 | }
51 |
52 | getCellRef() {
53 | return {
54 | columnKey: this.props.column.key,
55 | objectId: this.props.objectId,
56 | }
57 | }
58 |
59 | handleMouseDown = (event) => {
60 | const button = event.which || event.button
61 | event.preventDefault()
62 | if (button === 0) {
63 | this.props.onMouseDownCell(this.getCellRef(), event.clientX, event.clientY, event.shiftKey)
64 | }
65 | }
66 | handleDoubleClick = (event) => {
67 | this.beginEdit()
68 | }
69 | editable(object) {
70 | return cellIsEditable(object, this.props.column)
71 | }
72 | beginEdit = (editReplaceOverride) => {
73 | if (!this.props.disabled && this.editable(this.props.object)) {
74 | this.props.beginEdit(this.getCellRef(), editReplaceOverride)
75 | }
76 | }
77 |
78 | render() {
79 | const classes = classNames('', {
80 | 'selected': this.props.selected,
81 | 'copying': this.props.copying,
82 | 'editing': this.props.editing,
83 | })
84 |
85 | if (this.props.editing) {
86 | const editor = this.props.column.editor || TextEditor
87 | const editorProps = Clone(this.props.column.editorProps || {})
88 | editorProps.value = this.props.value
89 | editorProps.update = this.props.updateField
90 | editorProps.abort = this.props.abortField
91 | editorProps.objectId = this.props.objectId
92 | editorProps.column = this.props.column
93 | editorProps.object = this.props.object
94 | editorProps.columnKey = this.props.column.key
95 | editorProps.height = this.props.height
96 | editorProps.editReplace = this.props.editReplace
97 | editorProps.cellError = this.props.cellError
98 | editorProps.context = this.props.editorContext
99 |
100 | return (
101 |
104 |
105 | {React.createElement(
106 | editor.component,
107 | {
108 | ...editorProps,
109 | ref: el => { this.editor = el },
110 | },
111 | null
112 | )}
113 |
114 | |
115 | )
116 | } else {
117 | const drawer = this.props.column.drawer || TextDrawer
118 | const drawerProps = Clone(this.props.column.drawerProps || {})
119 |
120 | drawerProps.value = this.props.value
121 | drawerProps.column = this.props.column
122 | drawerProps.object = this.props.object
123 | drawerProps.beginEdit = this.beginEdit
124 | drawerProps.context = this.props.drawerContext
125 |
126 | let cellProps = {
127 | className: classNames(classes + ' drawer ' + drawer.className, {
128 | uneditable: (!this.editable(this.props.object)),
129 | }),
130 | }
131 | if (!this.props.column.disableInteraction) {
132 | cellProps = {
133 | ...cellProps,
134 | onMouseDown: this.handleMouseDown,
135 | onDoubleClick: this.handleDoubleClick,
136 | }
137 | }
138 |
139 | return (
140 |
143 |
144 | {React.createElement(
145 | drawer.component,
146 | {
147 | ...drawerProps,
148 | ref: el => { this.drawer = el },
149 | },
150 | null
151 | )}
152 |
153 | |
154 | )
155 | }
156 | }
157 | }
158 |
159 | export default ObjectCell
160 |
--------------------------------------------------------------------------------
/src/object-row.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types'
2 | import React from 'react'
3 | import JQuery from 'jquery'
4 | import classNames from 'classnames'
5 |
6 | import { dictCount, isDifferent } from './utilities.js'
7 |
8 | class ObjectRow extends React.Component {
9 | static propTypes = {
10 | id: PropTypes.number,
11 | object: PropTypes.object,
12 | openActions: PropTypes.func,
13 | closeActions: PropTypes.func,
14 | actions: PropTypes.array,
15 | columns: PropTypes.array,
16 | editing: PropTypes.object,
17 | height: PropTypes.number,
18 | editReplace: PropTypes.any,
19 | selectedColumns: PropTypes.object,
20 | copyingColumns: PropTypes.object,
21 | onMouseDownCell: PropTypes.func,
22 | beginEdit: PropTypes.func,
23 | updateField: PropTypes.func,
24 | abortField: PropTypes.func,
25 | cellError: PropTypes.func,
26 | actionsOpen: PropTypes.bool,
27 | cellComponent: PropTypes.func,
28 | cellProps: PropTypes.object,
29 | }
30 |
31 | shouldComponentUpdate(nextProps, nextState) {
32 | const isMissingColumns = function(propsA, propsB, columnsKey) {
33 | for (const key in propsA[columnsKey]) {
34 | if (key in propsB[columnsKey] === false) {
35 | // console.log('key', key, 'does not exist in both')
36 | return true
37 | }
38 | }
39 | return false
40 | }
41 | if (isMissingColumns(nextProps, this.props, 'selectedColumns') || isMissingColumns(this.props, nextProps, 'selectedColumns')) {
42 | return true
43 | }
44 | if (isMissingColumns(nextProps, this.props, 'copyingColumns') || isMissingColumns(this.props, nextProps, 'copyingColumns')) {
45 | return true
46 | }
47 |
48 | const propsExemptions = {
49 | // ignore column we perform above
50 | 'selectedColumns': true,
51 | 'copyingColumns': true,
52 |
53 | // ignore bound methods
54 | 'updateField': true,
55 | 'abortField': true,
56 | 'openActions': true,
57 | 'closeActions': true,
58 | 'onMouseDownCell': true,
59 | 'beginEdit': true,
60 | }
61 | if (isDifferent(this.props, nextProps, propsExemptions)) {
62 | return true
63 | }
64 | if (isDifferent(this.state, nextState)) {
65 | return true
66 | }
67 | return false
68 | }
69 |
70 | colInRanges(column, columns, rows) {
71 | const numRangeColumns = dictCount(columns)
72 | const numRangeRows = dictCount(rows)
73 | if (numRangeColumns === 0 && numRangeRows === 0) {
74 | return false
75 | } else if (columns !== null && rows === null) {
76 | return (typeof columns[column.key] !== 'undefined')
77 | } else if (columns === null && rows !== null) {
78 | return true
79 | }
80 | return (
81 | typeof columns[column.key] !== 'undefined' &&
82 | typeof rows[this.props.object.id] !== 'undefined'
83 | )
84 | }
85 |
86 | openActions = (event) => {
87 | this.props.openActions(this.props.object.id)
88 | }
89 | closeActions = (event) => {
90 | this.props.closeActions()
91 | }
92 | onActionClick = (event) => {
93 | let actionId = JQuery(event.target).data('action')
94 | let action = this.props.actions[actionId]
95 | if (action) {
96 | this.props.actions[actionId].func(this.props.object.id)
97 | if (!action.stayOpen) {
98 | this.props.closeActions()
99 | }
100 | }
101 | }
102 |
103 | renderCells() {
104 | let cells = []
105 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) {
106 | let column = this.props.columns[columnIndex]
107 | let editing = false
108 | if (this.props.editing !== null) {
109 | editing = (
110 | this.props.editing.objectId === this.props.object.id &&
111 | this.props.editing.columnKey === column.key
112 | )
113 | }
114 |
115 | let ref = 'column-' + column.key
116 |
117 | let cellProps = {
118 | key: ref,
119 | ref: ref,
120 |
121 | value: this.props.object[column.key],
122 | objectId: this.props.object.id,
123 | object: this.props.object,
124 |
125 | column: column,
126 | height: this.props.height,
127 | editReplace: this.props.editReplace,
128 | selected: (typeof this.props.selectedColumns[column.key] !== 'undefined'),
129 | copying: (typeof this.props.copyingColumns[column.key] !== 'undefined'),
130 |
131 | onMouseDownCell: this.props.onMouseDownCell,
132 | beginEdit: this.props.beginEdit,
133 |
134 | updateField: this.props.updateField,
135 | abortField: this.props.abortField,
136 | cellError: this.props.cellError,
137 | }
138 |
139 | cellProps.editorContext = null
140 | if (editing && column.editorContext) {
141 | cellProps.editorContext = column.editorContext(this.props.object)
142 | }
143 | if (!editing && column.drawerContext) {
144 | cellProps.drawerContext = column.drawerContext(this.props.object)
145 | }
146 |
147 | cellProps.disabled = (this.props.object.disabled === true)
148 | if (this.props.object.disabled) {
149 | cellProps.editing = false
150 | } else {
151 | cellProps.editing = editing
152 | }
153 | cells.push(
154 |
158 | )
159 | }
160 | if (this.props.actions && this.props.actions.length) {
161 | let cellStyle = {
162 | lineHeight: this.props.height + 'px',
163 | }
164 | if (this.props.actionsOpen && !this.props.object.disabled) {
165 | let actions = []
166 | this.props.actions.map((action, index) => {
167 | let actionEnabled = action.enabled
168 | let tooltip
169 | if (!(actionEnabled === undefined)) {
170 | if (typeof actionEnabled === 'function') actionEnabled = actionEnabled(this.props.object)
171 | if (Array.isArray(actionEnabled)) {
172 | [actionEnabled, tooltip] = actionEnabled
173 | }
174 | } else {
175 | actionEnabled = true
176 | }
177 | actions.push(
178 |
185 | {action.label}
186 |
187 | )
188 | })
189 | cells.push(
190 | { this.actions = el }}
193 | className="actions open"
194 | style={cellStyle}
195 | >
196 | ☰
197 |
200 | |
201 | )
202 | } else {
203 | cells.push(
204 | { this.actions = el }}
207 | className="actions closed"
208 | onClick={this.openActions}
209 | style={cellStyle}
210 | >
211 | ☰
212 | |
213 | )
214 | }
215 | }
216 | return cells
217 | }
218 |
219 | render() {
220 | return (
221 |
227 | {this.renderCells()}
228 |
229 | )
230 | }
231 | }
232 |
233 | export default ObjectRow
234 |
--------------------------------------------------------------------------------
/src/object-table.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types'
2 | import React from 'react'
3 | import ReactDom from 'react-dom'
4 | import JQuery from 'jquery'
5 | import ClassNames from 'classnames'
6 | import Clone from 'clone'
7 |
8 | import { dictCount, dictFirstKey, cellIsEditable } from './utilities.js'
9 | import { stringValue, deserializeCells } from './clipboard.js'
10 | import TextEditor from './editors/text.jsx'
11 | import TextDrawer from './drawers/text.jsx'
12 |
13 | import BaseEditor from './base-editor.js'
14 | import ObjectCell from './object-cell.jsx'
15 | import ObjectRow from './object-row.jsx'
16 |
17 | let _iOSDevice = false
18 | if (typeof navigator !== 'undefined') {
19 | _iOSDevice = !!navigator.platform.match(/iPhone|iPod|iPad/)
20 | }
21 |
22 | class ObjectTable extends React.PureComponent {
23 | static propTypes = {
24 | columns: PropTypes.array,
25 | objects: PropTypes.array,
26 | onUpdateMany: PropTypes.func,
27 | onUpdate: PropTypes.func,
28 | rowHeight: PropTypes.number,
29 | actions: PropTypes.array,
30 | emptyText: PropTypes.string,
31 | onRowError: PropTypes.func,
32 | onCellError: PropTypes.func,
33 | rowComponent: PropTypes.func,
34 | rowProps: PropTypes.object,
35 | cellComponent: PropTypes.func,
36 | cellProps: PropTypes.object,
37 | }
38 |
39 | static defaultProps = {
40 | rowComponent: ObjectRow,
41 | cellComponent: ObjectCell,
42 | rowHeight: 32,
43 | objects: [
44 | {
45 | id: 1, // every object is expected to have a unique identifier
46 | name: 'Product item report',
47 | quantity: '1.0000',
48 | },
49 | ],
50 | columns: [
51 | {
52 | name: 'Description',
53 | key: 'description',
54 | width: 'auto',
55 | drawer: null,
56 | drawerProps: null,
57 | editor: null,
58 | editorProps: null,
59 | },
60 | ],
61 | emptyText: 'No objects',
62 | onRowError: function(row, message) {
63 | console.warn('Unable to update row:', row)
64 | console.warn('As the following error was encountered:', message)
65 | },
66 | onCellError: function(objectId, columnKey, message) {
67 | console.warn('Unable to update row ' + objectId + ' ' + columnKey)
68 | console.warn('As the following error was encountered:', message)
69 | },
70 | }
71 |
72 | state = {
73 | editing: null,
74 | editReplace: null,
75 |
76 | selectionDragStart: null,
77 |
78 | selectedRows: {},
79 | selectedColumns: {},
80 | selectedRowsDown: true,
81 | selectedColumnsRight: true,
82 |
83 | copyingRows: {},
84 | copyingColumns: {},
85 |
86 | openActions: null,
87 | }
88 |
89 | componentDidMount() {
90 | JQuery(document).on('mousemove', this.handleMouseMove)
91 | JQuery(document).on('keypress', this.handleKeyPress)
92 | JQuery(document).on('keydown', this.handleKeyDown)
93 | JQuery(document).on('mouseup', (event) => {
94 | let parentContainer = JQuery(event.target).closest('.object-table-container')
95 | if (parentContainer.length === 1) {
96 | try {
97 | if (parentContainer[0] === ReactDom.findDOMNode(this)) return
98 | } catch (error) {}
99 | }
100 | if (this.state.selectionDragStart === null) {
101 | this.handleClickOutside(event)
102 | }
103 | })
104 | JQuery(document).on('mouseup', this.handleMouseUp)
105 | JQuery(document).on('copy', (event) => {
106 | let theEvent = event
107 | if (Object.keys(this.state.selectedColumns).length > 0 || Object.keys(this.state.selectedRows).length) {
108 | this.handleCopy(theEvent)
109 | }
110 | })
111 | JQuery(document).on('paste', (event) => {
112 | let theEvent = event
113 | let clipboardObjects = deserializeCells(theEvent.originalEvent.clipboardData)
114 | if (clipboardObjects.length) {
115 | this.handlePaste(clipboardObjects)
116 | }
117 | })
118 | }
119 | getEventCellRef(event) {
120 | let cell = JQuery(event.target)
121 | if (!cell.is('td')) cell = cell.closest('td')
122 | let objectId = cell.data('object-id')
123 | let columnKey = cell.data('column-key')
124 | return {
125 | objectId: objectId,
126 | columnKey: columnKey,
127 | }
128 | }
129 | getDraggedColumns(startX, endX, tableBounds) {
130 | let cols = {}
131 |
132 | let tableLeft = tableBounds.left + document.body.scrollLeft
133 |
134 | let lowestX = startX
135 | let highestX = endX
136 | if (lowestX > highestX) {
137 | let tempX = lowestX
138 | lowestX = highestX
139 | highestX = tempX
140 | }
141 | this.props.columns.map(column => {
142 | let colElem = this.refs['header-' + column.key]
143 | let colLeft = tableLeft + colElem.offsetLeft
144 | let colRight = colLeft + colElem.offsetWidth
145 |
146 | let inLeft = (colRight >= lowestX && colLeft <= highestX)
147 | let inRight = (colLeft <= highestX && colRight >= lowestX)
148 | if (inLeft || inRight) cols[column.key] = true
149 | })
150 |
151 | return cols
152 | }
153 | getDraggedRows(startY, endY, tableBounds) {
154 | let rows = {}
155 |
156 | let tableTop = tableBounds.top + document.body.scrollTop
157 |
158 | let lowestY = startY
159 | let highestY = endY
160 | if (lowestY > highestY) {
161 | let tempY = lowestY
162 | lowestY = highestY
163 | highestY = tempY
164 | }
165 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) {
166 | let object = this.props.objects[rowIndex]
167 | let rowElem = ReactDom.findDOMNode(this.getRowFromRefs(object.id))
168 | if (!rowElem) {
169 | continue
170 | }
171 | let rowTop = tableTop + rowElem.offsetTop
172 | let rowBottom = rowTop + rowElem.offsetHeight
173 |
174 | let inTop = (rowBottom >= lowestY && rowTop < highestY)
175 | let inBottom = (rowTop < highestY && rowBottom >= lowestY)
176 | if (inTop || inBottom) rows[object.id] = true
177 | }
178 |
179 | return rows
180 | }
181 | getSelectedFirstVisibleRow(reverse) {
182 | let allRows = Clone(this.props.objects || [])
183 | if (reverse) allRows = allRows.reverse()
184 |
185 | for (let rowIndex = 0; rowIndex < allRows.length; rowIndex++) {
186 | let row = allRows[rowIndex]
187 | if (typeof this.state.selectedRows[row.id] !== 'undefined') {
188 | return row.id
189 | }
190 | }
191 | return null
192 | }
193 | getSelectedFirstVisibleColumn(reverse) {
194 | let allColumns = Clone(this.props.columns)
195 | if (reverse) allColumns = allColumns.reverse()
196 |
197 | for (let columnIndex = 0; columnIndex < allColumns.length; columnIndex++) {
198 | let column = allColumns[columnIndex]
199 | if (typeof this.state.selectedColumns[column.key] !== 'undefined') {
200 | return column.key
201 | }
202 | }
203 | return null
204 | }
205 | getSelectedNextVisibleRow(reverse) {
206 | let allRows = Clone(this.props.objects || [])
207 | if (reverse) allRows = allRows.reverse()
208 |
209 | let couldBeNext = false
210 | let next = allRows.length ? allRows[0].id : null
211 |
212 | for (let rowIndex = 0; rowIndex < allRows.length; rowIndex++) {
213 | let row = allRows[rowIndex]
214 | if (couldBeNext) {
215 | next = row.id
216 | couldBeNext = false
217 | }
218 | if (typeof this.state.selectedRows[row.id] !== 'undefined') {
219 | next = row.id
220 | couldBeNext = true
221 | }
222 | }
223 | return next
224 | }
225 | getSelectedNextVisibleColumn(reverse) {
226 | let allColumns = Clone(this.props.columns)
227 | if (reverse) allColumns = allColumns.reverse()
228 |
229 | let couldBeNext = false
230 | let next = allColumns.length ? allColumns[0].id : null
231 |
232 | for (let columnIndex = 0; columnIndex < allColumns.length; columnIndex++) {
233 | let column = allColumns[columnIndex]
234 | if (couldBeNext) {
235 | next = column.key
236 | couldBeNext = false
237 | }
238 | if (typeof this.state.selectedColumns[column.key] !== 'undefined') {
239 | next = column.key
240 | couldBeNext = true
241 | }
242 | }
243 | return next
244 | }
245 |
246 | getRowFromRefs(rowId) {
247 | // Dumb hack to clean up existing hack. Accesses underlying elements wrapped in React DnD v8 HOCs.
248 | let row = this.refs[`object-${rowId}`]
249 | // Unwrap
250 | while (row.decoratedRef) {
251 | row = row.decoratedRef.current
252 | }
253 | return row
254 | }
255 |
256 | getCellFromRefs(rowId, columnKey) {
257 | // Dumb hack to clean up existing hack. Accesses underlying elements wrapped in React DnD v8 HOCs.
258 | let cell = this.getRowFromRefs(rowId).refs[`column-${columnKey}`]
259 | // Unwrap
260 | while (cell.decoratedRef) {
261 | cell = cell.decoratedRef.current
262 | }
263 | return cell
264 | }
265 |
266 | getColumnFromKey(key) {
267 | const cols = this.props.columns || []
268 | return cols.find(col => col.key === key)
269 | }
270 |
271 | handleKeyPress = (event) => {
272 | if (this.state.editing === null) {
273 | let editRow = this.getSelectedFirstVisibleRow()
274 | let editColumn = this.getSelectedFirstVisibleColumn()
275 | if (editRow !== null && editColumn !== null) {
276 | let editObject
277 | for (let objectIndex = 0; objectIndex < this.props.objects.length; objectIndex++) {
278 | let object = this.props.objects[objectIndex]
279 | if (object.id === editRow) editObject = object
280 | }
281 | switch (event.which) {
282 | // case 'enter':
283 | case 13:
284 | if (cellIsEditable(editRow, this.getColumnFromKey(editColumn)) && editObject && !editObject.disabled) {
285 | this.setState({
286 | editing: {
287 | columnKey: editColumn,
288 | objectId: editRow,
289 | },
290 | editReplace: null,
291 | })
292 | }
293 | event.preventDefault()
294 | break
295 |
296 | default:
297 | if (cellIsEditable(editRow, this.getColumnFromKey(editColumn)) && editObject && !editObject.disabled) {
298 | this.setState({
299 | editing: {
300 | columnKey: editColumn,
301 | objectId: editRow,
302 | },
303 | editReplace: String.fromCharCode(event.which), // keyPressed
304 | })
305 | }
306 | event.preventDefault()
307 | break
308 | }
309 | }
310 | }
311 | }
312 | handleKeyDown = (event) => {
313 | let directionKeys = {
314 | 38: 'arrow_up',
315 | 40: 'arrow_down',
316 | 37: 'arrow_left',
317 | 39: 'arrow_right',
318 | }
319 | let actionKeys = {
320 | 27: 'escape',
321 | 9: 'tab',
322 | 8: 'backspace',
323 | }
324 | if (this.state.editing === null) {
325 | let selectedCells = Object.keys(this.state.selectedRows).length
326 | selectedCells *= Object.keys(this.state.selectedColumns).length
327 | if (selectedCells > 0) {
328 | switch (directionKeys[event.which]) {
329 | case 'arrow_up':
330 | if (event.shiftKey) {
331 | let newRows = Clone(this.state.selectedRows)
332 | if (Object.keys(this.state.selectedRows).length > 1 && this.state.selectedRowsDown) {
333 | delete newRows[this.getSelectedFirstVisibleRow(true)]
334 | } else {
335 | newRows[this.getSelectedNextVisibleRow(true)] = true
336 | }
337 | this.changeSelectionTo(newRows, this.state.selectedColumns)
338 | } else {
339 | this.moveSelectionTo(
340 | this.getSelectedNextVisibleRow(true),
341 | this.getSelectedFirstVisibleColumn()
342 | )
343 | }
344 | break
345 |
346 | case 'arrow_down':
347 | if (event.shiftKey) {
348 | let newRows = Clone(this.state.selectedRows)
349 | if (Object.keys(this.state.selectedRows).length > 1 && !this.state.selectedRowsDown) {
350 | delete newRows[this.getSelectedFirstVisibleRow()]
351 | } else {
352 | newRows[this.getSelectedNextVisibleRow()] = true
353 | }
354 | this.changeSelectionTo(newRows, this.state.selectedColumns)
355 | } else {
356 | this.moveSelectionTo(
357 | this.getSelectedNextVisibleRow(),
358 | this.getSelectedFirstVisibleColumn()
359 | )
360 | }
361 | break
362 |
363 | case 'arrow_left':
364 | if (event.shiftKey) {
365 | let newColumns = Clone(this.state.selectedColumns)
366 | if (Object.keys(this.state.selectedColumns).length > 1 && this.state.selectedColumnsRight) {
367 | delete newColumns[this.getSelectedFirstVisibleColumn(true)]
368 | } else {
369 | newColumns[this.getSelectedNextVisibleColumn(true)] = true
370 | }
371 | this.changeSelectionTo(this.state.selectedRows, newColumns)
372 | } else {
373 | this.moveSelectionTo(
374 | this.getSelectedFirstVisibleRow(),
375 | this.getSelectedNextVisibleColumn(true)
376 | )
377 | }
378 | break
379 |
380 | case 'arrow_right':
381 | if (event.shiftKey) {
382 | let newColumns = Clone(this.state.selectedColumns)
383 | if (Object.keys(this.state.selectedColumns).length > 1 && !this.state.selectedColumnsRight) {
384 | delete newColumns[this.getSelectedFirstVisibleColumn()]
385 | } else {
386 | newColumns[this.getSelectedNextVisibleColumn()] = true
387 | }
388 | this.changeSelectionTo(this.state.selectedRows, newColumns)
389 | } else {
390 | this.moveSelectionTo(
391 | this.getSelectedFirstVisibleRow(),
392 | this.getSelectedNextVisibleColumn()
393 | )
394 | }
395 | break
396 | }
397 | switch (actionKeys[event.which]) {
398 | case 'escape':
399 | if (Object.keys(this.state.copyingColumns).length > 0 || Object.keys(this.state.copyingRows).length > 0) {
400 | this.setState({
401 | copyingColumns: {},
402 | copyingRows: {},
403 | })
404 | }
405 | break
406 |
407 | case 'backspace':
408 | let editColumn = this.getSelectedFirstVisibleColumn()
409 | let editRow = this.getSelectedFirstVisibleRow()
410 | if (selectedCells > 0 && cellIsEditable(editRow, this.getColumnFromKey(editColumn))) {
411 | this.setState({
412 | editing: {
413 | columnKey: editColumn,
414 | objectId: editRow,
415 | },
416 | editReplace: '',
417 | })
418 | }
419 | break
420 |
421 | case 'tab':
422 | if (typeof this.state.selectedColumns[this.getSelectedNextVisibleColumn()] === 'undefined') {
423 | this.moveSelectionTo(
424 | this.getSelectedFirstVisibleRow(),
425 | this.getSelectedNextVisibleColumn()
426 | )
427 | } else {
428 | this.moveSelectionTo(
429 | this.getSelectedNextVisibleRow(),
430 | this.props.columns[0].key
431 | )
432 | }
433 | break
434 | }
435 | if (typeof directionKeys[event.which] !== 'undefined' || typeof actionKeys[event.which] !== 'undefined') {
436 | event.preventDefault()
437 | }
438 | }
439 | }
440 | }
441 | handleClickOutside(event) {
442 | if (this.state.editing) {
443 | this.getCellFromRefs(this.state.editing.objectId, this.state.editing.columnKey).editor.handleBlur()
444 | } else if (Object.keys(this.state.selectedRows).length !== 0 || Object.keys(this.state.selectedColumns).length !== 0) {
445 | this.setState({selectedRows: {}, selectedColumns: {}})
446 | }
447 | if (!JQuery(event.target).closest('ul.actions').length) {
448 | this.closeActions()
449 | }
450 | }
451 | beginEdit = (ref, editReplaceOverride) => {
452 | let editReplace = null
453 | if (typeof editReplaceOverride !== 'undefined') {
454 | editReplace = editReplaceOverride
455 | }
456 | this.setState({editing: ref, editReplace: editReplace})
457 | }
458 | handleMouseDownCell = (ref, clientX, clientY, shift) => {
459 | if (_iOSDevice) {
460 | this.beginEdit(ref)
461 | return
462 | }
463 |
464 | if (this.state.editing !== null) {
465 | this.handleClickOutside({})
466 | return
467 | }
468 |
469 | let mouseX = clientX
470 | let mouseY = clientY
471 | let clickRef = ref
472 | if (this.state.selectionDragStart === null) {
473 | if (shift) {
474 | let currentColumn = this.getSelectedFirstVisibleColumn(!this.state.selectedColumnsRight)
475 | let currentRow = this.getSelectedFirstVisibleRow(!this.state.selectedRowsDown)
476 |
477 | let selectingDown
478 | let selectingRight
479 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) {
480 | let row = this.props.objects[rowIndex]
481 | if (row.id === currentRow) {
482 | selectingDown = true
483 | break
484 | }
485 | if (row.id === ref.objectId) {
486 | selectingDown = false
487 | break
488 | }
489 | }
490 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) {
491 | let column = this.props.columns[columnIndex]
492 | if (column.key === currentColumn) {
493 | selectingRight = true
494 | break
495 | }
496 | if (column.key === ref.columnKey) {
497 | selectingRight = false
498 | break
499 | }
500 | }
501 |
502 | let newSelectionRows = {}
503 | let selecting = false
504 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) {
505 | let row = this.props.objects[rowIndex]
506 | if ((selectingDown && row.id === currentRow) || (!selectingDown && row.id === ref.objectId)) {
507 | selecting = true
508 | }
509 | if (selecting) newSelectionRows[row.id] = true
510 | if ((selectingDown && row.id === ref.objectId) || (!selectingDown && row.id === currentRow)) {
511 | break
512 | }
513 | }
514 | let newSelectionColumns = {}
515 | selecting = false
516 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) {
517 | let column = this.props.columns[columnIndex]
518 | if ((selectingRight && column.key === currentColumn) || (!selectingRight && column.key === ref.columnKey)) {
519 | selecting = true
520 | }
521 | if (selecting) newSelectionColumns[column.key] = true
522 | if ((selectingRight && column.key === ref.columnKey) || (!selectingRight && column.key === currentColumn)) {
523 | break
524 | }
525 | }
526 |
527 | this.setState({
528 | selectedColumns: newSelectionColumns,
529 | selectedRows: newSelectionRows,
530 | selectedRowsDown: selectingDown,
531 | selectedColumnsRight: selectingRight,
532 | })
533 | } else {
534 | this.setState(prevState => {
535 | const stateChanges = {
536 | selectionDragStart: {
537 | x: mouseX + document.body.scrollLeft,
538 | y: mouseY + document.body.scrollTop,
539 | },
540 | selectedRows: prevState.selectedRows,
541 | selectedColumns: prevState.selectedColumns,
542 | }
543 | stateChanges.selectedRows[clickRef.objectId] = true
544 | stateChanges.selectedColumns[clickRef.columnKey] = true
545 | return stateChanges
546 | })
547 | }
548 | }
549 |
550 | this.closeActions()
551 | }
552 | handleMouseMove = (event) => {
553 | if (this.state.selectionDragStart !== null) {
554 | let mouseX = event.clientX + document.body.scrollLeft
555 | let mouseY = event.clientY + document.body.scrollTop
556 | this.setState(prevState => {
557 | let tableBounds = this.table.getBoundingClientRect()
558 | return {
559 | selectedColumns: this.getDraggedColumns(prevState.selectionDragStart.x, mouseX, tableBounds),
560 | selectedRows: this.getDraggedRows(prevState.selectionDragStart.y, mouseY, tableBounds),
561 | selectedColumnsRight: true,
562 | selectedRowsDown: true,
563 | }
564 | })
565 | }
566 | }
567 | handleMouseUp = (event) => {
568 | if (this.state.selectionDragStart !== null) {
569 | let mouseX = event.clientX + document.body.scrollLeft
570 | let mouseY = event.clientY + document.body.scrollTop
571 | this.setState(prevState => {
572 | let tableBounds = this.table.getBoundingClientRect()
573 | return {
574 | selectedColumnsRight: (prevState.selectionDragStart.x < mouseX),
575 | selectedRowsDown: (prevState.selectionDragStart.y < mouseY),
576 | selectedColumns: this.getDraggedColumns(prevState.selectionDragStart.x, mouseX, tableBounds),
577 | selectedRows: this.getDraggedRows(prevState.selectionDragStart.y, mouseY, tableBounds),
578 | selectionDragStart: null,
579 | }
580 | })
581 | }
582 | }
583 | handleCopy(event) {
584 | let clipboardData = event.originalEvent.clipboardData
585 | if (clipboardData) clipboardData.clearData()
586 | let cellsData = []
587 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) {
588 | let row = this.props.objects[rowIndex]
589 | if (Object.keys(this.state.selectedRows).length > 0 && typeof this.state.selectedRows[row.id] === 'undefined') {
590 | continue
591 | }
592 | let cellRow = []
593 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) {
594 | let column = this.props.columns[columnIndex]
595 | if (Object.keys(this.state.selectedColumns).length > 0 && typeof this.state.selectedColumns[column.key] === 'undefined') {
596 | continue
597 | }
598 | cellRow.push(row[column.key])
599 | }
600 | cellsData.push(cellRow)
601 | }
602 |
603 | let longestColumns = []
604 | for (let rowIndex = 0; rowIndex < cellsData.length; rowIndex++) {
605 | for (let columnIndex = 0; columnIndex < cellsData[rowIndex].length; columnIndex++) {
606 | let stringVal = stringValue(cellsData[rowIndex][columnIndex])
607 |
608 | if (typeof longestColumns[columnIndex] === 'undefined' || longestColumns[columnIndex] < stringVal.length) {
609 | longestColumns[columnIndex] = stringVal.length
610 | }
611 | }
612 | }
613 |
614 | let csvData = ''
615 | for (let rowIndex = 0; rowIndex < cellsData.length; rowIndex++) {
616 | for (let columnIndex = 0; columnIndex < cellsData[rowIndex].length; columnIndex++) {
617 | let stringVal = stringValue(cellsData[rowIndex][columnIndex])
618 | // let wrapQuotes = (stringVal.indexOf(',') != -1)
619 | let wrapQuotes = false
620 | if (wrapQuotes) csvData += '"'
621 | csvData += stringVal.replace('\t', ' ')
622 | if (wrapQuotes) csvData += '"'
623 | if (columnIndex !== (cellsData[rowIndex].length - 1)) csvData += '\t'
624 | }
625 | csvData += '\n'
626 | }
627 |
628 | clipboardData.setData('text/plain', csvData)
629 | clipboardData.setData('react/object-grid', JSON.stringify(cellsData))
630 | // clipboardData.setData('application/csv', csvData)
631 | event.preventDefault()
632 | this.setState(prevState => ({
633 | copyingRows: prevState.selectedRows,
634 | copyingColumns: prevState.selectedColumns,
635 | }))
636 | }
637 | handlePaste(pasteData) {
638 | let raiseRowErrors = (errors, row) => {
639 | let numErrors = Object.keys(errors).length
640 | if (numErrors) {
641 | let message
642 | if (numErrors > 1) {
643 | message = 'Invalid values given for '
644 | } else {
645 | message = 'Invalid value given for '
646 | }
647 | for (let columnKey in errors) {
648 | message += columnKey
649 | message += ', '
650 | }
651 | message = message.substring(0, message.length - 2)
652 | message += '.'
653 | this.props.onRowError(row, message)
654 | }
655 | }
656 |
657 | // console.log('handling a paste of', pasteData)
658 | let numSelectedRows = Object.keys(this.state.selectedRows).length
659 | let numSelectedColumns = Object.keys(this.state.selectedColumns).length
660 | if (numSelectedRows === 1 && numSelectedColumns === 1) {
661 | let objectUpdates = []
662 |
663 | let newSelectionColumns = {}
664 | let newSelectionRows = {}
665 |
666 | let pastingRow = false
667 | let pastingRowIndex = 0
668 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) {
669 | let row = this.props.objects[rowIndex]
670 | if (!pastingRow && typeof this.state.selectedRows[row.id] === 'undefined') {
671 | continue
672 | }
673 | pastingRow = true
674 | if (pastingRowIndex < pasteData.length) {
675 | newSelectionRows[row.id] = true
676 | let pastingColumn = false
677 | let pastingColumnIndex = 0
678 | let updates = {}
679 | let errors = {}
680 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) {
681 | let column = this.props.columns[columnIndex]
682 | if (!pastingColumn && typeof this.state.selectedColumns[column.key] === 'undefined') {
683 | continue
684 | }
685 | pastingColumn = true
686 | if (pastingColumnIndex < pasteData[pastingRowIndex].length) {
687 | newSelectionColumns[column.key] = true
688 | if (!row.disabled && cellIsEditable(row.id, column)) {
689 | let editor = column.editor || TextEditor
690 | let validated = editor.validate(
691 | pasteData[pastingRowIndex][pastingColumnIndex],
692 | column.editorProps || {}
693 | )
694 | if (validated.valid) {
695 | updates[column.key] = validated.cleanedValue
696 | } else {
697 | errors[column.key] = true
698 | }
699 | }
700 | pastingColumnIndex++
701 | }
702 | }
703 | if (Object.keys(updates).length) {
704 | objectUpdates.push([row.id, updates])
705 | }
706 | raiseRowErrors(errors, row)
707 | pastingRowIndex++
708 | }
709 | }
710 | this.updateManyObjects(objectUpdates)
711 | this.changeSelectionTo(newSelectionRows, newSelectionColumns)
712 | } else {
713 | let objectUpdates = []
714 |
715 | let pasteRow = 0
716 | let pasteColumn = 0
717 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) {
718 | let row = this.props.objects[rowIndex]
719 | if (typeof this.state.selectedRows[row.id] === 'undefined') {
720 | continue
721 | }
722 | let updates = {}
723 | let errors = {}
724 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) {
725 | let column = this.props.columns[columnIndex]
726 | if (typeof this.state.selectedColumns[column.key] === 'undefined') {
727 | continue
728 | }
729 | if (!row.disabled && cellIsEditable(row.id, column)) {
730 | let editor = column.editor || TextEditor
731 | let validated = editor.validate(
732 | pasteData[pasteRow][pasteColumn],
733 | column.editorProps || {}
734 | )
735 | if (validated.valid) {
736 | updates[column.key] = validated.cleanedValue
737 | } else {
738 | errors[column.key] = true
739 | }
740 | }
741 | pasteColumn++
742 | if (pasteColumn >= pasteData[pasteRow].length) pasteColumn = 0
743 | }
744 | pasteColumn = 0
745 | if (Object.keys(updates).length) {
746 | objectUpdates.push([row.id, updates])
747 | }
748 | raiseRowErrors(errors, row)
749 | pasteRow++
750 | if (pasteRow >= pasteData.length) pasteRow = 0
751 | }
752 |
753 | this.updateManyObjects(objectUpdates)
754 | }
755 | this.setState({copyingColumns: {}, copyingRows: {}})
756 | }
757 |
758 | abortField = (action) => {
759 | this.setState({editing: null})
760 | }
761 | updateField = (objectId, columnKey, newValue, action) => {
762 | let updates = {}
763 | updates[columnKey] = newValue
764 | this.updateObject(objectId, updates)
765 |
766 | let updateAction = action
767 | this.setState(prevState => {
768 | const stateChanges = {editing: null}
769 | if (dictCount(prevState.selectedRows) === 1 && dictCount(prevState.selectedColumns) === 1) {
770 | switch (updateAction) {
771 | case 'nextRow':
772 | stateChanges.selectedRows = {}
773 | stateChanges.selectedRows[this.getSelectedNextVisibleRow()] = true
774 | break
775 |
776 | case 'nextColumn':
777 | stateChanges.selectedColumns = {}
778 | stateChanges.selectedColumns[this.getSelectedNextVisibleColumn()] = true
779 | break
780 | }
781 | }
782 | return stateChanges
783 | })
784 | }
785 | updateManyObjects(updates) {
786 | if (typeof this.props.onUpdateMany === 'function') {
787 | this.props.onUpdateMany(updates)
788 | } else {
789 | for (let updateId = 0; updateId < updates.length; updateId++) {
790 | let update = updates[updateId]
791 | this.updateObject(update[0], update[1])
792 | }
793 | }
794 | }
795 | updateObject(objectId, updates) {
796 | if (typeof this.props.onUpdate === 'function') {
797 | this.props.onUpdate(objectId, updates)
798 | } else {
799 | console.log('If I had a props.onUpdate, I would update object', objectId, 'with', updates)
800 | }
801 | }
802 | openActions = (id) => {
803 | this.setState({openActions: id})
804 | }
805 | closeActions = () => {
806 | if (this.state.openActions === null) {
807 | return
808 | }
809 | this.setState({openActions: null})
810 | }
811 |
812 | moveSelectionTo(row, column) {
813 | let newRows = {}
814 | let newColumns = {}
815 | newRows[row] = true
816 | newColumns[column] = true
817 | this.changeSelectionTo(newRows, newColumns)
818 | }
819 | changeSelectionTo(rows, columns) {
820 | let newRows = rows
821 | let newColumns = columns
822 |
823 | let down
824 | if (Object.keys(this.state.selectedRows).length === 1 && Object.keys(newRows).length > 1) {
825 | down = false
826 | let oldRow = dictFirstKey(this.state.selectedRows)
827 | for (let rowIndex = 0; rowIndex < this.props.objects.length; rowIndex++) {
828 | let row = this.props.objects[rowIndex]
829 | if (row.id === oldRow) {
830 | down = true
831 | break
832 | }
833 | if (typeof newRows[row.id] !== 'undefined') {
834 | break
835 | }
836 | }
837 | }
838 | if (Object.keys(newRows).length <= 1) {
839 | down = true
840 | }
841 |
842 | let right
843 | if (Object.keys(this.state.selectedColumns).length === 1 && Object.keys(newColumns).length > 1) {
844 | right = false
845 | let oldColumn = dictFirstKey(this.state.selectedColumns)
846 | for (let columnIndex = 0; columnIndex < this.props.columns.length; columnIndex++) {
847 | let column = this.props.columns[columnIndex]
848 | if (column.key === oldColumn) {
849 | right = true
850 | break
851 | }
852 | if (typeof newColumns[column.key] !== 'undefined') {
853 | break
854 | }
855 | }
856 | }
857 | if (Object.keys(newColumns).length <= 1) {
858 | right = true
859 | }
860 |
861 | this.setState(() => {
862 | const stateChanges = {
863 | selectedRows: newRows,
864 | selectedColumns: newColumns,
865 | }
866 | if (typeof down !== 'undefined') stateChanges.selectedRowsDown = down
867 | if (typeof right !== 'undefined') stateChanges.selectedColumnsRight = right
868 | return stateChanges
869 | })
870 | }
871 |
872 | renderHeaders() {
873 | let columns = []
874 | this.props.columns.map((column) => {
875 | let headerProps = {
876 | ref: `header-${column.key}`,
877 | key: `header-${column.key}`,
878 | style: {
879 | height: `${this.props.rowHeight}px`,
880 | },
881 | }
882 | if (column.width) headerProps.width = column.width
883 | columns.push(
884 |
888 | {column.name}
889 | |
890 | )
891 | })
892 |
893 | if (this.props.actions && this.props.actions.length) {
894 | columns.push(
895 | { this.actions = el }}
897 | key="actions"
898 | className="actions"
899 | width={25}
900 | />
901 | )
902 | }
903 |
904 | return (
905 | | {columns}
906 | )
907 | }
908 | renderRows() {
909 | let numSelectedRows = Object.keys(this.state.selectedRows).length
910 | let numCopyingRows = Object.keys(this.state.copyingRows).length
911 | let rows = []
912 |
913 | this.props.objects.map((object) => {
914 | let ref = `object-${object.id}`
915 |
916 | let selectedColumns = {}
917 | if (numSelectedRows === 0 || typeof this.state.selectedRows[object.id] !== 'undefined') {
918 | selectedColumns = this.state.selectedColumns
919 | }
920 | let copyingColumns = {}
921 | if (numCopyingRows === 0 || typeof this.state.copyingRows[object.id] !== 'undefined') {
922 | copyingColumns = this.state.copyingColumns
923 | }
924 |
925 | let editing = null
926 | if (this.state.editing !== null && this.state.editing.objectId === object.id) {
927 | editing = this.state.editing
928 | }
929 |
930 | rows.push(
931 |
957 | )
958 | })
959 |
960 | if (!rows.length) {
961 | let numColumns = this.props.columns.length
962 | if (this.props.actions && this.props.actions.length) numColumns += 1
963 | return (
964 |
965 | |
966 | {this.props.emptyText}
967 | |
968 |
969 | )
970 | }
971 | return rows
972 | }
973 | render() {
974 | let classes = ClassNames('', {
975 | 'editing': (this.state.editing !== null),
976 | })
977 | return (
978 |
979 |
{ this.table = el }}
981 | tabIndex="1"
982 | className={classes}
983 | >
984 |
985 | {this.renderHeaders()}
986 |
987 |
988 | {this.renderRows()}
989 |
990 |
991 |
992 | )
993 | }
994 | }
995 |
996 | export default ObjectTable
997 | export { ObjectCell, ObjectRow, BaseEditor, TextEditor, TextDrawer }
998 |
--------------------------------------------------------------------------------
/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/helper-validator-identifier@^7.14.0":
13 | version "7.14.0"
14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
15 | integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
16 |
17 | "@babel/highlight@^7.10.4":
18 | version "7.14.0"
19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
20 | integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==
21 | dependencies:
22 | "@babel/helper-validator-identifier" "^7.14.0"
23 | chalk "^2.0.0"
24 | js-tokens "^4.0.0"
25 |
26 | "@eslint/eslintrc@^0.4.2":
27 | version "0.4.2"
28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"
29 | integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==
30 | dependencies:
31 | ajv "^6.12.4"
32 | debug "^4.1.1"
33 | espree "^7.3.0"
34 | globals "^13.9.0"
35 | ignore "^4.0.6"
36 | import-fresh "^3.2.1"
37 | js-yaml "^3.13.1"
38 | minimatch "^3.0.4"
39 | strip-json-comments "^3.1.1"
40 |
41 | "@nodelib/fs.scandir@2.1.5":
42 | version "2.1.5"
43 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
44 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
45 | dependencies:
46 | "@nodelib/fs.stat" "2.0.5"
47 | run-parallel "^1.1.9"
48 |
49 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
50 | version "2.0.5"
51 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
52 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
53 |
54 | "@nodelib/fs.walk@^1.2.3":
55 | version "1.2.7"
56 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2"
57 | integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==
58 | dependencies:
59 | "@nodelib/fs.scandir" "2.1.5"
60 | fastq "^1.6.0"
61 |
62 | "@types/json-schema@^7.0.7":
63 | version "7.0.7"
64 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
65 | integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
66 |
67 | "@types/json5@^0.0.29":
68 | version "0.0.29"
69 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
70 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
71 |
72 | "@typescript-eslint/eslint-plugin@^4.26.0":
73 | version "4.26.0"
74 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz#12bbd6ebd5e7fabd32e48e1e60efa1f3554a3242"
75 | integrity sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==
76 | dependencies:
77 | "@typescript-eslint/experimental-utils" "4.26.0"
78 | "@typescript-eslint/scope-manager" "4.26.0"
79 | debug "^4.3.1"
80 | functional-red-black-tree "^1.0.1"
81 | lodash "^4.17.21"
82 | regexpp "^3.1.0"
83 | semver "^7.3.5"
84 | tsutils "^3.21.0"
85 |
86 | "@typescript-eslint/experimental-utils@4.26.0":
87 | version "4.26.0"
88 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz#ba7848b3f088659cdf71bce22454795fc55be99a"
89 | integrity sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==
90 | dependencies:
91 | "@types/json-schema" "^7.0.7"
92 | "@typescript-eslint/scope-manager" "4.26.0"
93 | "@typescript-eslint/types" "4.26.0"
94 | "@typescript-eslint/typescript-estree" "4.26.0"
95 | eslint-scope "^5.1.1"
96 | eslint-utils "^3.0.0"
97 |
98 | "@typescript-eslint/parser@^4.26.0":
99 | version "4.26.0"
100 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.0.tgz#31b6b732c9454f757b020dab9b6754112aa5eeaf"
101 | integrity sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==
102 | dependencies:
103 | "@typescript-eslint/scope-manager" "4.26.0"
104 | "@typescript-eslint/types" "4.26.0"
105 | "@typescript-eslint/typescript-estree" "4.26.0"
106 | debug "^4.3.1"
107 |
108 | "@typescript-eslint/scope-manager@4.26.0":
109 | version "4.26.0"
110 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz#60d1a71df162404e954b9d1c6343ff3bee496194"
111 | integrity sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==
112 | dependencies:
113 | "@typescript-eslint/types" "4.26.0"
114 | "@typescript-eslint/visitor-keys" "4.26.0"
115 |
116 | "@typescript-eslint/types@4.26.0":
117 | version "4.26.0"
118 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.0.tgz#7c6732c0414f0a69595f4f846ebe12616243d546"
119 | integrity sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==
120 |
121 | "@typescript-eslint/typescript-estree@4.26.0":
122 | version "4.26.0"
123 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz#aea17a40e62dc31c63d5b1bbe9a75783f2ce7109"
124 | integrity sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==
125 | dependencies:
126 | "@typescript-eslint/types" "4.26.0"
127 | "@typescript-eslint/visitor-keys" "4.26.0"
128 | debug "^4.3.1"
129 | globby "^11.0.3"
130 | is-glob "^4.0.1"
131 | semver "^7.3.5"
132 | tsutils "^3.21.0"
133 |
134 | "@typescript-eslint/visitor-keys@4.26.0":
135 | version "4.26.0"
136 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz#26d2583169222815be4dcd1da4fe5459bc3bcc23"
137 | integrity sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==
138 | dependencies:
139 | "@typescript-eslint/types" "4.26.0"
140 | eslint-visitor-keys "^2.0.0"
141 |
142 | abbrev@1:
143 | version "1.1.1"
144 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
145 |
146 | acorn-jsx@^5.3.1:
147 | version "5.3.1"
148 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
149 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
150 |
151 | acorn@^7.4.0:
152 | version "7.4.1"
153 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
154 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
155 |
156 | ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4:
157 | version "6.12.6"
158 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
159 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
160 | dependencies:
161 | fast-deep-equal "^3.1.1"
162 | fast-json-stable-stringify "^2.0.0"
163 | json-schema-traverse "^0.4.1"
164 | uri-js "^4.2.2"
165 |
166 | ajv@^8.0.1:
167 | version "8.6.0"
168 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720"
169 | integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==
170 | dependencies:
171 | fast-deep-equal "^3.1.1"
172 | json-schema-traverse "^1.0.0"
173 | require-from-string "^2.0.2"
174 | uri-js "^4.2.2"
175 |
176 | amdefine@>=0.0.4:
177 | version "1.0.1"
178 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
179 |
180 | ansi-colors@^4.1.1:
181 | version "4.1.1"
182 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
183 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
184 |
185 | ansi-regex@^2.0.0:
186 | version "2.1.1"
187 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
188 |
189 | ansi-regex@^4.1.0:
190 | version "4.1.0"
191 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
192 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
193 |
194 | ansi-regex@^5.0.0:
195 | version "5.0.0"
196 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
197 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
198 |
199 | ansi-styles@^2.2.1:
200 | version "2.2.1"
201 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
202 |
203 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
204 | version "3.2.1"
205 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
206 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
207 | dependencies:
208 | color-convert "^1.9.0"
209 |
210 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
211 | version "4.3.0"
212 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
213 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
214 | dependencies:
215 | color-convert "^2.0.1"
216 |
217 | aproba@^1.0.3:
218 | version "1.2.0"
219 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
220 |
221 | are-we-there-yet@~1.1.2:
222 | version "1.1.4"
223 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
224 | dependencies:
225 | delegates "^1.0.0"
226 | readable-stream "^2.0.6"
227 |
228 | argparse@^1.0.7:
229 | version "1.0.9"
230 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
231 | dependencies:
232 | sprintf-js "~1.0.2"
233 |
234 | array-find-index@^1.0.1:
235 | version "1.0.2"
236 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
237 |
238 | array-includes@^3.1.2, array-includes@^3.1.3:
239 | version "3.1.3"
240 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"
241 | integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==
242 | dependencies:
243 | call-bind "^1.0.2"
244 | define-properties "^1.1.3"
245 | es-abstract "^1.18.0-next.2"
246 | get-intrinsic "^1.1.1"
247 | is-string "^1.0.5"
248 |
249 | array-union@^2.1.0:
250 | version "2.1.0"
251 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
252 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
253 |
254 | array.prototype.flat@^1.2.4:
255 | version "1.2.4"
256 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
257 | integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
258 | dependencies:
259 | call-bind "^1.0.0"
260 | define-properties "^1.1.3"
261 | es-abstract "^1.18.0-next.1"
262 |
263 | array.prototype.flatmap@^1.2.4:
264 | version "1.2.4"
265 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9"
266 | integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==
267 | dependencies:
268 | call-bind "^1.0.0"
269 | define-properties "^1.1.3"
270 | es-abstract "^1.18.0-next.1"
271 | function-bind "^1.1.1"
272 |
273 | asn1@~0.2.3:
274 | version "0.2.3"
275 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
276 |
277 | assert-plus@1.0.0, assert-plus@^1.0.0:
278 | version "1.0.0"
279 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
280 |
281 | astral-regex@^2.0.0:
282 | version "2.0.0"
283 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
284 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
285 |
286 | async-foreach@^0.1.3:
287 | version "0.1.3"
288 | resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
289 |
290 | asynckit@^0.4.0:
291 | version "0.4.0"
292 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
293 |
294 | aws-sign2@~0.7.0:
295 | version "0.7.0"
296 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
297 |
298 | aws4@^1.8.0:
299 | version "1.11.0"
300 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
301 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
302 |
303 | balanced-match@^1.0.0:
304 | version "1.0.0"
305 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
306 |
307 | bcrypt-pbkdf@^1.0.0:
308 | version "1.0.1"
309 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
310 | dependencies:
311 | tweetnacl "^0.14.3"
312 |
313 | brace-expansion@^1.1.7:
314 | version "1.1.8"
315 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
316 | dependencies:
317 | balanced-match "^1.0.0"
318 | concat-map "0.0.1"
319 |
320 | braces@^3.0.1:
321 | version "3.0.2"
322 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
323 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
324 | dependencies:
325 | fill-range "^7.0.1"
326 |
327 | builtin-modules@^1.0.0:
328 | version "1.1.1"
329 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
330 |
331 | call-bind@^1.0.0, call-bind@^1.0.2:
332 | version "1.0.2"
333 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
334 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
335 | dependencies:
336 | function-bind "^1.1.1"
337 | get-intrinsic "^1.0.2"
338 |
339 | callsites@^3.0.0:
340 | version "3.1.0"
341 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
342 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
343 |
344 | camelcase-keys@^2.0.0:
345 | version "2.1.0"
346 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
347 | dependencies:
348 | camelcase "^2.0.0"
349 | map-obj "^1.0.0"
350 |
351 | camelcase@^2.0.0:
352 | version "2.1.1"
353 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
354 |
355 | camelcase@^5.0.0:
356 | version "5.3.1"
357 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
358 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
359 |
360 | caseless@~0.12.0:
361 | version "0.12.0"
362 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
363 |
364 | chalk@^1.1.1:
365 | version "1.1.3"
366 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
367 | dependencies:
368 | ansi-styles "^2.2.1"
369 | escape-string-regexp "^1.0.2"
370 | has-ansi "^2.0.0"
371 | strip-ansi "^3.0.0"
372 | supports-color "^2.0.0"
373 |
374 | chalk@^2.0.0:
375 | version "2.4.2"
376 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
377 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
378 | dependencies:
379 | ansi-styles "^3.2.1"
380 | escape-string-regexp "^1.0.5"
381 | supports-color "^5.3.0"
382 |
383 | chalk@^4.0.0:
384 | version "4.1.1"
385 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
386 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
387 | dependencies:
388 | ansi-styles "^4.1.0"
389 | supports-color "^7.1.0"
390 |
391 | chownr@^2.0.0:
392 | version "2.0.0"
393 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
394 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
395 |
396 | classnames@^2.3.1:
397 | version "2.3.1"
398 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
399 | integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
400 |
401 | cliui@^5.0.0:
402 | version "5.0.0"
403 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
404 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
405 | dependencies:
406 | string-width "^3.1.0"
407 | strip-ansi "^5.2.0"
408 | wrap-ansi "^5.1.0"
409 |
410 | clone@^2.1.2:
411 | version "2.1.2"
412 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
413 | integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
414 |
415 | code-point-at@^1.0.0:
416 | version "1.1.0"
417 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
418 |
419 | color-convert@^1.9.0:
420 | version "1.9.3"
421 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
422 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
423 | dependencies:
424 | color-name "1.1.3"
425 |
426 | color-convert@^2.0.1:
427 | version "2.0.1"
428 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
429 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
430 | dependencies:
431 | color-name "~1.1.4"
432 |
433 | color-name@1.1.3:
434 | version "1.1.3"
435 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
436 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
437 |
438 | color-name@~1.1.4:
439 | version "1.1.4"
440 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
441 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
442 |
443 | combined-stream@^1.0.6, combined-stream@~1.0.6:
444 | version "1.0.8"
445 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
446 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
447 | dependencies:
448 | delayed-stream "~1.0.0"
449 |
450 | concat-map@0.0.1:
451 | version "0.0.1"
452 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
453 |
454 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
455 | version "1.1.0"
456 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
457 |
458 | core-util-is@1.0.2, core-util-is@~1.0.0:
459 | version "1.0.2"
460 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
461 |
462 | cross-spawn@^7.0.2, cross-spawn@^7.0.3:
463 | version "7.0.3"
464 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
465 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
466 | dependencies:
467 | path-key "^3.1.0"
468 | shebang-command "^2.0.0"
469 | which "^2.0.1"
470 |
471 | currently-unhandled@^0.4.1:
472 | version "0.4.1"
473 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
474 | dependencies:
475 | array-find-index "^1.0.1"
476 |
477 | dashdash@^1.12.0:
478 | version "1.14.1"
479 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
480 | dependencies:
481 | assert-plus "^1.0.0"
482 |
483 | debug@^2.6.9:
484 | version "2.6.9"
485 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
486 | dependencies:
487 | ms "2.0.0"
488 |
489 | debug@^3.2.7:
490 | version "3.2.7"
491 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
492 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
493 | dependencies:
494 | ms "^2.1.1"
495 |
496 | debug@^4.0.1, debug@^4.1.1, debug@^4.3.1:
497 | version "4.3.1"
498 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
499 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
500 | dependencies:
501 | ms "2.1.2"
502 |
503 | decamelize@^1.1.2, decamelize@^1.2.0:
504 | version "1.2.0"
505 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
506 |
507 | deep-is@^0.1.3:
508 | version "0.1.3"
509 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
510 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
511 |
512 | define-properties@^1.1.3:
513 | version "1.1.3"
514 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
515 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
516 | dependencies:
517 | object-keys "^1.0.12"
518 |
519 | delayed-stream@~1.0.0:
520 | version "1.0.0"
521 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
522 |
523 | delegates@^1.0.0:
524 | version "1.0.0"
525 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
526 |
527 | dir-glob@^3.0.1:
528 | version "3.0.1"
529 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
530 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
531 | dependencies:
532 | path-type "^4.0.0"
533 |
534 | doctrine@^2.1.0:
535 | version "2.1.0"
536 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
537 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
538 | dependencies:
539 | esutils "^2.0.2"
540 |
541 | doctrine@^3.0.0:
542 | version "3.0.0"
543 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
544 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
545 | dependencies:
546 | esutils "^2.0.2"
547 |
548 | ecc-jsbn@~0.1.1:
549 | version "0.1.1"
550 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
551 | dependencies:
552 | jsbn "~0.1.0"
553 |
554 | emoji-regex@^7.0.1:
555 | version "7.0.3"
556 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
557 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
558 |
559 | emoji-regex@^8.0.0:
560 | version "8.0.0"
561 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
562 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
563 |
564 | enquirer@^2.3.5:
565 | version "2.3.6"
566 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
567 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
568 | dependencies:
569 | ansi-colors "^4.1.1"
570 |
571 | env-paths@^2.2.0:
572 | version "2.2.1"
573 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
574 | integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
575 |
576 | error-ex@^1.2.0:
577 | version "1.3.1"
578 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
579 | dependencies:
580 | is-arrayish "^0.2.1"
581 |
582 | error-ex@^1.3.1:
583 | version "1.3.2"
584 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
585 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
586 | dependencies:
587 | is-arrayish "^0.2.1"
588 |
589 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:
590 | version "1.18.3"
591 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0"
592 | integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==
593 | dependencies:
594 | call-bind "^1.0.2"
595 | es-to-primitive "^1.2.1"
596 | function-bind "^1.1.1"
597 | get-intrinsic "^1.1.1"
598 | has "^1.0.3"
599 | has-symbols "^1.0.2"
600 | is-callable "^1.2.3"
601 | is-negative-zero "^2.0.1"
602 | is-regex "^1.1.3"
603 | is-string "^1.0.6"
604 | object-inspect "^1.10.3"
605 | object-keys "^1.1.1"
606 | object.assign "^4.1.2"
607 | string.prototype.trimend "^1.0.4"
608 | string.prototype.trimstart "^1.0.4"
609 | unbox-primitive "^1.0.1"
610 |
611 | es-to-primitive@^1.2.1:
612 | version "1.2.1"
613 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
614 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
615 | dependencies:
616 | is-callable "^1.1.4"
617 | is-date-object "^1.0.1"
618 | is-symbol "^1.0.2"
619 |
620 | esbuild-node-externals@^1.2.0:
621 | version "1.2.0"
622 | resolved "https://registry.yarnpkg.com/esbuild-node-externals/-/esbuild-node-externals-1.2.0.tgz#7bdbc370b0e983737c3807dea377d7b08ac55f14"
623 | integrity sha512-miyxgCJrAGp86WZX080EF+3eHsey8vJTfQEOZ3+oCmAm0FrlQSg4SPr2XHSi6kVFQJD/iqaF81ub3hz4WQca2A==
624 | dependencies:
625 | find-up "5.0.0"
626 | tslib "2.1.0"
627 |
628 | esbuild@^0.12.5:
629 | version "0.12.6"
630 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.6.tgz#85bc755c7cf3005d4f34b4f10f98049ce0ee67ce"
631 | integrity sha512-RDvVLvAjsq/kIZJoneMiUOH7EE7t2QaW7T3Q7EdQij14+bZbDq5sndb0tTanmHIFSqZVMBMMyqzVHkS3dJobeA==
632 |
633 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
634 | version "1.0.5"
635 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
636 |
637 | escape-string-regexp@^4.0.0:
638 | version "4.0.0"
639 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
640 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
641 |
642 | eslint-config-standard-react@*:
643 | version "11.0.1"
644 | resolved "https://registry.yarnpkg.com/eslint-config-standard-react/-/eslint-config-standard-react-11.0.1.tgz#1f488e0062c1e21c4c8584551619f11750658f55"
645 | integrity sha512-4WlBynOqBZJRaX81CBcIGDHqUiqxvw4j/DbEIICz8QkMs3xEncoPgAoysiqCSsg71X92uhaBc8sgqB96smaMmg==
646 |
647 | eslint-config-standard@*:
648 | version "16.0.3"
649 | resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"
650 | integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==
651 |
652 | eslint-import-resolver-node@^0.3.4:
653 | version "0.3.4"
654 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
655 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
656 | dependencies:
657 | debug "^2.6.9"
658 | resolve "^1.13.1"
659 |
660 | eslint-module-utils@^2.6.1:
661 | version "2.6.1"
662 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233"
663 | integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==
664 | dependencies:
665 | debug "^3.2.7"
666 | pkg-dir "^2.0.0"
667 |
668 | eslint-plugin-es@^3.0.0:
669 | version "3.0.1"
670 | resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"
671 | integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==
672 | dependencies:
673 | eslint-utils "^2.0.0"
674 | regexpp "^3.0.0"
675 |
676 | eslint-plugin-import@*:
677 | version "2.23.4"
678 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97"
679 | integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==
680 | dependencies:
681 | array-includes "^3.1.3"
682 | array.prototype.flat "^1.2.4"
683 | debug "^2.6.9"
684 | doctrine "^2.1.0"
685 | eslint-import-resolver-node "^0.3.4"
686 | eslint-module-utils "^2.6.1"
687 | find-up "^2.0.0"
688 | has "^1.0.3"
689 | is-core-module "^2.4.0"
690 | minimatch "^3.0.4"
691 | object.values "^1.1.3"
692 | pkg-up "^2.0.0"
693 | read-pkg-up "^3.0.0"
694 | resolve "^1.20.0"
695 | tsconfig-paths "^3.9.0"
696 |
697 | eslint-plugin-node@*:
698 | version "11.1.0"
699 | resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"
700 | integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==
701 | dependencies:
702 | eslint-plugin-es "^3.0.0"
703 | eslint-utils "^2.0.0"
704 | ignore "^5.1.1"
705 | minimatch "^3.0.4"
706 | resolve "^1.10.1"
707 | semver "^6.1.0"
708 |
709 | eslint-plugin-promise@*:
710 | version "5.1.0"
711 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24"
712 | integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng==
713 |
714 | eslint-plugin-react@*:
715 | version "7.24.0"
716 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4"
717 | integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==
718 | dependencies:
719 | array-includes "^3.1.3"
720 | array.prototype.flatmap "^1.2.4"
721 | doctrine "^2.1.0"
722 | has "^1.0.3"
723 | jsx-ast-utils "^2.4.1 || ^3.0.0"
724 | minimatch "^3.0.4"
725 | object.entries "^1.1.4"
726 | object.fromentries "^2.0.4"
727 | object.values "^1.1.4"
728 | prop-types "^15.7.2"
729 | resolve "^2.0.0-next.3"
730 | string.prototype.matchall "^4.0.5"
731 |
732 | eslint-plugin-standard@*:
733 | version "5.0.0"
734 | resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4"
735 | integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg==
736 |
737 | eslint-scope@^5.1.1:
738 | version "5.1.1"
739 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
740 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
741 | dependencies:
742 | esrecurse "^4.3.0"
743 | estraverse "^4.1.1"
744 |
745 | eslint-utils@^2.0.0, eslint-utils@^2.1.0:
746 | version "2.1.0"
747 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
748 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
749 | dependencies:
750 | eslint-visitor-keys "^1.1.0"
751 |
752 | eslint-utils@^3.0.0:
753 | version "3.0.0"
754 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
755 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
756 | dependencies:
757 | eslint-visitor-keys "^2.0.0"
758 |
759 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
760 | version "1.3.0"
761 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
762 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
763 |
764 | eslint-visitor-keys@^2.0.0:
765 | version "2.1.0"
766 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
767 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
768 |
769 | eslint@^7.27.0:
770 | version "7.28.0"
771 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820"
772 | integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==
773 | dependencies:
774 | "@babel/code-frame" "7.12.11"
775 | "@eslint/eslintrc" "^0.4.2"
776 | ajv "^6.10.0"
777 | chalk "^4.0.0"
778 | cross-spawn "^7.0.2"
779 | debug "^4.0.1"
780 | doctrine "^3.0.0"
781 | enquirer "^2.3.5"
782 | escape-string-regexp "^4.0.0"
783 | eslint-scope "^5.1.1"
784 | eslint-utils "^2.1.0"
785 | eslint-visitor-keys "^2.0.0"
786 | espree "^7.3.1"
787 | esquery "^1.4.0"
788 | esutils "^2.0.2"
789 | fast-deep-equal "^3.1.3"
790 | file-entry-cache "^6.0.1"
791 | functional-red-black-tree "^1.0.1"
792 | glob-parent "^5.1.2"
793 | globals "^13.6.0"
794 | ignore "^4.0.6"
795 | import-fresh "^3.0.0"
796 | imurmurhash "^0.1.4"
797 | is-glob "^4.0.0"
798 | js-yaml "^3.13.1"
799 | json-stable-stringify-without-jsonify "^1.0.1"
800 | levn "^0.4.1"
801 | lodash.merge "^4.6.2"
802 | minimatch "^3.0.4"
803 | natural-compare "^1.4.0"
804 | optionator "^0.9.1"
805 | progress "^2.0.0"
806 | regexpp "^3.1.0"
807 | semver "^7.2.1"
808 | strip-ansi "^6.0.0"
809 | strip-json-comments "^3.1.0"
810 | table "^6.0.9"
811 | text-table "^0.2.0"
812 | v8-compile-cache "^2.0.3"
813 |
814 | espree@^7.3.0, espree@^7.3.1:
815 | version "7.3.1"
816 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
817 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
818 | dependencies:
819 | acorn "^7.4.0"
820 | acorn-jsx "^5.3.1"
821 | eslint-visitor-keys "^1.3.0"
822 |
823 | esprima@^4.0.0:
824 | version "4.0.0"
825 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
826 |
827 | esquery@^1.4.0:
828 | version "1.4.0"
829 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
830 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
831 | dependencies:
832 | estraverse "^5.1.0"
833 |
834 | esrecurse@^4.3.0:
835 | version "4.3.0"
836 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
837 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
838 | dependencies:
839 | estraverse "^5.2.0"
840 |
841 | estraverse@^4.1.1:
842 | version "4.2.0"
843 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
844 |
845 | estraverse@^5.1.0, estraverse@^5.2.0:
846 | version "5.2.0"
847 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
848 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
849 |
850 | esutils@^2.0.2:
851 | version "2.0.2"
852 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
853 |
854 | extend@~3.0.2:
855 | version "3.0.2"
856 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
857 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
858 |
859 | extsprintf@1.3.0:
860 | version "1.3.0"
861 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
862 |
863 | extsprintf@^1.2.0:
864 | version "1.4.0"
865 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
866 |
867 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
868 | version "3.1.3"
869 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
870 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
871 |
872 | fast-glob@^3.1.1:
873 | version "3.2.5"
874 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
875 | integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
876 | dependencies:
877 | "@nodelib/fs.stat" "^2.0.2"
878 | "@nodelib/fs.walk" "^1.2.3"
879 | glob-parent "^5.1.0"
880 | merge2 "^1.3.0"
881 | micromatch "^4.0.2"
882 | picomatch "^2.2.1"
883 |
884 | fast-json-stable-stringify@^2.0.0:
885 | version "2.0.0"
886 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
887 |
888 | fast-levenshtein@^2.0.6:
889 | version "2.0.6"
890 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
891 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
892 |
893 | fastq@^1.6.0:
894 | version "1.11.0"
895 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
896 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
897 | dependencies:
898 | reusify "^1.0.4"
899 |
900 | file-entry-cache@^6.0.1:
901 | version "6.0.1"
902 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
903 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
904 | dependencies:
905 | flat-cache "^3.0.4"
906 |
907 | fill-range@^7.0.1:
908 | version "7.0.1"
909 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
910 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
911 | dependencies:
912 | to-regex-range "^5.0.1"
913 |
914 | find-up@5.0.0:
915 | version "5.0.0"
916 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
917 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
918 | dependencies:
919 | locate-path "^6.0.0"
920 | path-exists "^4.0.0"
921 |
922 | find-up@^1.0.0:
923 | version "1.1.2"
924 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
925 | dependencies:
926 | path-exists "^2.0.0"
927 | pinkie-promise "^2.0.0"
928 |
929 | find-up@^2.0.0, find-up@^2.1.0:
930 | version "2.1.0"
931 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
932 | dependencies:
933 | locate-path "^2.0.0"
934 |
935 | find-up@^3.0.0:
936 | version "3.0.0"
937 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
938 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
939 | dependencies:
940 | locate-path "^3.0.0"
941 |
942 | flat-cache@^3.0.4:
943 | version "3.0.4"
944 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
945 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
946 | dependencies:
947 | flatted "^3.1.0"
948 | rimraf "^3.0.2"
949 |
950 | flatted@^3.1.0:
951 | version "3.1.1"
952 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
953 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
954 |
955 | forever-agent@~0.6.1:
956 | version "0.6.1"
957 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
958 |
959 | form-data@~2.3.2:
960 | version "2.3.3"
961 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
962 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
963 | dependencies:
964 | asynckit "^0.4.0"
965 | combined-stream "^1.0.6"
966 | mime-types "^2.1.12"
967 |
968 | fs-minipass@^2.0.0:
969 | version "2.1.0"
970 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
971 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
972 | dependencies:
973 | minipass "^3.0.0"
974 |
975 | fs.realpath@^1.0.0:
976 | version "1.0.0"
977 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
978 |
979 | function-bind@^1.1.1:
980 | version "1.1.1"
981 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
982 |
983 | functional-red-black-tree@^1.0.1:
984 | version "1.0.1"
985 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
986 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
987 |
988 | gauge@~2.7.3:
989 | version "2.7.4"
990 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
991 | dependencies:
992 | aproba "^1.0.3"
993 | console-control-strings "^1.0.0"
994 | has-unicode "^2.0.0"
995 | object-assign "^4.1.0"
996 | signal-exit "^3.0.0"
997 | string-width "^1.0.1"
998 | strip-ansi "^3.0.1"
999 | wide-align "^1.1.0"
1000 |
1001 | gaze@^1.0.0:
1002 | version "1.1.2"
1003 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
1004 | dependencies:
1005 | globule "^1.0.0"
1006 |
1007 | get-caller-file@^2.0.1:
1008 | version "2.0.5"
1009 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
1010 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
1011 |
1012 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
1013 | version "1.1.1"
1014 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
1015 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
1016 | dependencies:
1017 | function-bind "^1.1.1"
1018 | has "^1.0.3"
1019 | has-symbols "^1.0.1"
1020 |
1021 | get-stdin@^4.0.1:
1022 | version "4.0.1"
1023 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
1024 |
1025 | getpass@^0.1.1:
1026 | version "0.1.7"
1027 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
1028 | dependencies:
1029 | assert-plus "^1.0.0"
1030 |
1031 | glob-parent@^5.1.0, glob-parent@^5.1.2:
1032 | version "5.1.2"
1033 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1034 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1035 | dependencies:
1036 | is-glob "^4.0.1"
1037 |
1038 | glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@~7.1.1:
1039 | version "7.1.2"
1040 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
1041 | dependencies:
1042 | fs.realpath "^1.0.0"
1043 | inflight "^1.0.4"
1044 | inherits "2"
1045 | minimatch "^3.0.4"
1046 | once "^1.3.0"
1047 | path-is-absolute "^1.0.0"
1048 |
1049 | glob@^7.1.3, glob@^7.1.4:
1050 | version "7.1.7"
1051 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
1052 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
1053 | dependencies:
1054 | fs.realpath "^1.0.0"
1055 | inflight "^1.0.4"
1056 | inherits "2"
1057 | minimatch "^3.0.4"
1058 | once "^1.3.0"
1059 | path-is-absolute "^1.0.0"
1060 |
1061 | globals@^13.6.0, globals@^13.9.0:
1062 | version "13.9.0"
1063 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb"
1064 | integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==
1065 | dependencies:
1066 | type-fest "^0.20.2"
1067 |
1068 | globby@^11.0.3:
1069 | version "11.0.3"
1070 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
1071 | integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
1072 | dependencies:
1073 | array-union "^2.1.0"
1074 | dir-glob "^3.0.1"
1075 | fast-glob "^3.1.1"
1076 | ignore "^5.1.4"
1077 | merge2 "^1.3.0"
1078 | slash "^3.0.0"
1079 |
1080 | globule@^1.0.0:
1081 | version "1.2.0"
1082 | resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09"
1083 | dependencies:
1084 | glob "~7.1.1"
1085 | lodash "~4.17.4"
1086 | minimatch "~3.0.2"
1087 |
1088 | graceful-fs@^4.1.2:
1089 | version "4.1.11"
1090 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
1091 |
1092 | graceful-fs@^4.2.3:
1093 | version "4.2.6"
1094 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
1095 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
1096 |
1097 | har-schema@^2.0.0:
1098 | version "2.0.0"
1099 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
1100 |
1101 | har-validator@~5.1.3:
1102 | version "5.1.5"
1103 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
1104 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
1105 | dependencies:
1106 | ajv "^6.12.3"
1107 | har-schema "^2.0.0"
1108 |
1109 | has-ansi@^2.0.0:
1110 | version "2.0.0"
1111 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
1112 | dependencies:
1113 | ansi-regex "^2.0.0"
1114 |
1115 | has-bigints@^1.0.1:
1116 | version "1.0.1"
1117 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
1118 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
1119 |
1120 | has-flag@^3.0.0:
1121 | version "3.0.0"
1122 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1123 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
1124 |
1125 | has-flag@^4.0.0:
1126 | version "4.0.0"
1127 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1128 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1129 |
1130 | has-symbols@^1.0.1, has-symbols@^1.0.2:
1131 | version "1.0.2"
1132 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
1133 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
1134 |
1135 | has-unicode@^2.0.0:
1136 | version "2.0.1"
1137 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
1138 |
1139 | has@^1.0.3:
1140 | version "1.0.3"
1141 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1142 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1143 | dependencies:
1144 | function-bind "^1.1.1"
1145 |
1146 | hosted-git-info@^2.1.4:
1147 | version "2.5.0"
1148 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
1149 |
1150 | http-signature@~1.2.0:
1151 | version "1.2.0"
1152 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
1153 | dependencies:
1154 | assert-plus "^1.0.0"
1155 | jsprim "^1.2.2"
1156 | sshpk "^1.7.0"
1157 |
1158 | ignore@^4.0.6:
1159 | version "4.0.6"
1160 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
1161 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
1162 |
1163 | ignore@^5.1.1, ignore@^5.1.4:
1164 | version "5.1.8"
1165 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
1166 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
1167 |
1168 | import-fresh@^3.0.0, import-fresh@^3.2.1:
1169 | version "3.3.0"
1170 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1171 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1172 | dependencies:
1173 | parent-module "^1.0.0"
1174 | resolve-from "^4.0.0"
1175 |
1176 | imurmurhash@^0.1.4:
1177 | version "0.1.4"
1178 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1179 |
1180 | indent-string@^2.1.0:
1181 | version "2.1.0"
1182 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
1183 | dependencies:
1184 | repeating "^2.0.0"
1185 |
1186 | inflight@^1.0.4:
1187 | version "1.0.6"
1188 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1189 | dependencies:
1190 | once "^1.3.0"
1191 | wrappy "1"
1192 |
1193 | inherits@2, inherits@~2.0.3:
1194 | version "2.0.3"
1195 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1196 |
1197 | internal-slot@^1.0.3:
1198 | version "1.0.3"
1199 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
1200 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
1201 | dependencies:
1202 | get-intrinsic "^1.1.0"
1203 | has "^1.0.3"
1204 | side-channel "^1.0.4"
1205 |
1206 | is-arrayish@^0.2.1:
1207 | version "0.2.1"
1208 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1209 |
1210 | is-bigint@^1.0.1:
1211 | version "1.0.2"
1212 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a"
1213 | integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==
1214 |
1215 | is-boolean-object@^1.1.0:
1216 | version "1.1.1"
1217 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8"
1218 | integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==
1219 | dependencies:
1220 | call-bind "^1.0.2"
1221 |
1222 | is-builtin-module@^1.0.0:
1223 | version "1.0.0"
1224 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
1225 | dependencies:
1226 | builtin-modules "^1.0.0"
1227 |
1228 | is-callable@^1.1.4, is-callable@^1.2.3:
1229 | version "1.2.3"
1230 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
1231 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
1232 |
1233 | is-core-module@^2.2.0, is-core-module@^2.4.0:
1234 | version "2.4.0"
1235 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
1236 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
1237 | dependencies:
1238 | has "^1.0.3"
1239 |
1240 | is-date-object@^1.0.1:
1241 | version "1.0.1"
1242 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
1243 |
1244 | is-extglob@^2.1.1:
1245 | version "2.1.1"
1246 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1247 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
1248 |
1249 | is-finite@^1.0.0:
1250 | version "1.0.2"
1251 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1252 | dependencies:
1253 | number-is-nan "^1.0.0"
1254 |
1255 | is-fullwidth-code-point@^1.0.0:
1256 | version "1.0.0"
1257 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1258 | dependencies:
1259 | number-is-nan "^1.0.0"
1260 |
1261 | is-fullwidth-code-point@^2.0.0:
1262 | version "2.0.0"
1263 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
1264 |
1265 | is-fullwidth-code-point@^3.0.0:
1266 | version "3.0.0"
1267 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1268 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1269 |
1270 | is-glob@^4.0.0, is-glob@^4.0.1:
1271 | version "4.0.1"
1272 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
1273 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
1274 | dependencies:
1275 | is-extglob "^2.1.1"
1276 |
1277 | is-negative-zero@^2.0.1:
1278 | version "2.0.1"
1279 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
1280 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
1281 |
1282 | is-number-object@^1.0.4:
1283 | version "1.0.5"
1284 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb"
1285 | integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==
1286 |
1287 | is-number@^7.0.0:
1288 | version "7.0.0"
1289 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1290 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1291 |
1292 | is-regex@^1.1.3:
1293 | version "1.1.3"
1294 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
1295 | integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
1296 | dependencies:
1297 | call-bind "^1.0.2"
1298 | has-symbols "^1.0.2"
1299 |
1300 | is-string@^1.0.5, is-string@^1.0.6:
1301 | version "1.0.6"
1302 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
1303 | integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
1304 |
1305 | is-symbol@^1.0.2, is-symbol@^1.0.3:
1306 | version "1.0.4"
1307 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
1308 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
1309 | dependencies:
1310 | has-symbols "^1.0.2"
1311 |
1312 | is-typedarray@~1.0.0:
1313 | version "1.0.0"
1314 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1315 |
1316 | is-utf8@^0.2.0:
1317 | version "0.2.1"
1318 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
1319 |
1320 | isarray@~1.0.0:
1321 | version "1.0.0"
1322 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1323 |
1324 | isexe@^2.0.0:
1325 | version "2.0.0"
1326 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1327 |
1328 | isstream@~0.1.2:
1329 | version "0.1.2"
1330 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1331 |
1332 | jquery@^3.6.0:
1333 | version "3.6.0"
1334 | resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470"
1335 | integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==
1336 |
1337 | js-base64@^2.1.8:
1338 | version "2.4.2"
1339 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.2.tgz#1896da010ef8862f385d8887648e9b6dc4a7a2e9"
1340 |
1341 | js-tokens@^3.0.0:
1342 | version "3.0.2"
1343 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1344 |
1345 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1346 | version "4.0.0"
1347 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1348 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1349 |
1350 | js-yaml@^3.13.1:
1351 | version "3.14.1"
1352 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
1353 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
1354 | dependencies:
1355 | argparse "^1.0.7"
1356 | esprima "^4.0.0"
1357 |
1358 | jsbn@~0.1.0:
1359 | version "0.1.1"
1360 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1361 |
1362 | json-parse-better-errors@^1.0.1:
1363 | version "1.0.2"
1364 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
1365 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
1366 |
1367 | json-schema-traverse@^0.4.1:
1368 | version "0.4.1"
1369 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1370 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1371 |
1372 | json-schema-traverse@^1.0.0:
1373 | version "1.0.0"
1374 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
1375 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
1376 |
1377 | json-schema@0.2.3:
1378 | version "0.2.3"
1379 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1380 |
1381 | json-stable-stringify-without-jsonify@^1.0.1:
1382 | version "1.0.1"
1383 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1384 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
1385 |
1386 | json-stringify-safe@~5.0.1:
1387 | version "5.0.1"
1388 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1389 |
1390 | json5@^1.0.1:
1391 | version "1.0.1"
1392 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
1393 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
1394 | dependencies:
1395 | minimist "^1.2.0"
1396 |
1397 | jsprim@^1.2.2:
1398 | version "1.4.1"
1399 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
1400 | dependencies:
1401 | assert-plus "1.0.0"
1402 | extsprintf "1.3.0"
1403 | json-schema "0.2.3"
1404 | verror "1.10.0"
1405 |
1406 | "jsx-ast-utils@^2.4.1 || ^3.0.0":
1407 | version "3.2.0"
1408 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
1409 | integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==
1410 | dependencies:
1411 | array-includes "^3.1.2"
1412 | object.assign "^4.1.2"
1413 |
1414 | levn@^0.4.1:
1415 | version "0.4.1"
1416 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1417 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1418 | dependencies:
1419 | prelude-ls "^1.2.1"
1420 | type-check "~0.4.0"
1421 |
1422 | load-json-file@^1.0.0:
1423 | version "1.1.0"
1424 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
1425 | dependencies:
1426 | graceful-fs "^4.1.2"
1427 | parse-json "^2.2.0"
1428 | pify "^2.0.0"
1429 | pinkie-promise "^2.0.0"
1430 | strip-bom "^2.0.0"
1431 |
1432 | load-json-file@^4.0.0:
1433 | version "4.0.0"
1434 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
1435 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
1436 | dependencies:
1437 | graceful-fs "^4.1.2"
1438 | parse-json "^4.0.0"
1439 | pify "^3.0.0"
1440 | strip-bom "^3.0.0"
1441 |
1442 | locate-path@^2.0.0:
1443 | version "2.0.0"
1444 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
1445 | dependencies:
1446 | p-locate "^2.0.0"
1447 | path-exists "^3.0.0"
1448 |
1449 | locate-path@^3.0.0:
1450 | version "3.0.0"
1451 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
1452 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
1453 | dependencies:
1454 | p-locate "^3.0.0"
1455 | path-exists "^3.0.0"
1456 |
1457 | locate-path@^6.0.0:
1458 | version "6.0.0"
1459 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1460 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1461 | dependencies:
1462 | p-locate "^5.0.0"
1463 |
1464 | lodash.clonedeep@^4.5.0:
1465 | version "4.5.0"
1466 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
1467 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
1468 |
1469 | lodash.merge@^4.6.2:
1470 | version "4.6.2"
1471 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1472 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1473 |
1474 | lodash.truncate@^4.4.2:
1475 | version "4.4.2"
1476 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
1477 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
1478 |
1479 | lodash@^4.0.0, lodash@~4.17.4:
1480 | version "4.17.19"
1481 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
1482 |
1483 | lodash@^4.17.15, lodash@^4.17.21:
1484 | version "4.17.21"
1485 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1486 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1487 |
1488 | loose-envify@^1.1.0:
1489 | version "1.3.1"
1490 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
1491 | dependencies:
1492 | js-tokens "^3.0.0"
1493 |
1494 | loose-envify@^1.4.0:
1495 | version "1.4.0"
1496 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1497 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1498 | dependencies:
1499 | js-tokens "^3.0.0 || ^4.0.0"
1500 |
1501 | loud-rejection@^1.0.0:
1502 | version "1.6.0"
1503 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
1504 | dependencies:
1505 | currently-unhandled "^0.4.1"
1506 | signal-exit "^3.0.0"
1507 |
1508 | lru-cache@^6.0.0:
1509 | version "6.0.0"
1510 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1511 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1512 | dependencies:
1513 | yallist "^4.0.0"
1514 |
1515 | map-obj@^1.0.0, map-obj@^1.0.1:
1516 | version "1.0.1"
1517 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
1518 |
1519 | meow@^3.7.0:
1520 | version "3.7.0"
1521 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
1522 | dependencies:
1523 | camelcase-keys "^2.0.0"
1524 | decamelize "^1.1.2"
1525 | loud-rejection "^1.0.0"
1526 | map-obj "^1.0.1"
1527 | minimist "^1.1.3"
1528 | normalize-package-data "^2.3.4"
1529 | object-assign "^4.0.1"
1530 | read-pkg-up "^1.0.1"
1531 | redent "^1.0.0"
1532 | trim-newlines "^1.0.0"
1533 |
1534 | merge2@^1.3.0:
1535 | version "1.4.1"
1536 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1537 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1538 |
1539 | micromatch@^4.0.2:
1540 | version "4.0.4"
1541 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
1542 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
1543 | dependencies:
1544 | braces "^3.0.1"
1545 | picomatch "^2.2.3"
1546 |
1547 | mime-db@1.48.0:
1548 | version "1.48.0"
1549 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d"
1550 | integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==
1551 |
1552 | mime-db@~1.30.0:
1553 | version "1.30.0"
1554 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
1555 |
1556 | mime-types@^2.1.12:
1557 | version "2.1.17"
1558 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
1559 | dependencies:
1560 | mime-db "~1.30.0"
1561 |
1562 | mime-types@~2.1.19:
1563 | version "2.1.31"
1564 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b"
1565 | integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==
1566 | dependencies:
1567 | mime-db "1.48.0"
1568 |
1569 | minimatch@^3.0.4, minimatch@~3.0.2:
1570 | version "3.0.4"
1571 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1572 | dependencies:
1573 | brace-expansion "^1.1.7"
1574 |
1575 | minimist@0.0.8:
1576 | version "0.0.8"
1577 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1578 |
1579 | minimist@^1.1.3, minimist@^1.2.0:
1580 | version "1.2.0"
1581 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1582 |
1583 | minipass@^3.0.0:
1584 | version "3.1.3"
1585 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
1586 | integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
1587 | dependencies:
1588 | yallist "^4.0.0"
1589 |
1590 | minizlib@^2.1.1:
1591 | version "2.1.2"
1592 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
1593 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
1594 | dependencies:
1595 | minipass "^3.0.0"
1596 | yallist "^4.0.0"
1597 |
1598 | mkdirp@^0.5.1:
1599 | version "0.5.1"
1600 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1601 | dependencies:
1602 | minimist "0.0.8"
1603 |
1604 | mkdirp@^1.0.3:
1605 | version "1.0.4"
1606 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
1607 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
1608 |
1609 | ms@2.0.0:
1610 | version "2.0.0"
1611 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1612 |
1613 | ms@2.1.2:
1614 | version "2.1.2"
1615 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1616 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1617 |
1618 | ms@^2.1.1:
1619 | version "2.1.3"
1620 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1621 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1622 |
1623 | nan@^2.13.2:
1624 | version "2.14.2"
1625 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
1626 | integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
1627 |
1628 | natural-compare@^1.4.0:
1629 | version "1.4.0"
1630 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1631 |
1632 | node-gyp@^7.1.0:
1633 | version "7.1.2"
1634 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae"
1635 | integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==
1636 | dependencies:
1637 | env-paths "^2.2.0"
1638 | glob "^7.1.4"
1639 | graceful-fs "^4.2.3"
1640 | nopt "^5.0.0"
1641 | npmlog "^4.1.2"
1642 | request "^2.88.2"
1643 | rimraf "^3.0.2"
1644 | semver "^7.3.2"
1645 | tar "^6.0.2"
1646 | which "^2.0.2"
1647 |
1648 | node-sass@^6.0.0:
1649 | version "6.0.0"
1650 | resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.0.tgz#f30da3e858ad47bfd138bc0e0c6f924ed2f734af"
1651 | integrity sha512-GDzDmNgWNc9GNzTcSLTi6DU6mzSPupVJoStIi7cF3GjwSE9q1cVakbvAAVSt59vzUjV9JJoSZFKoo9krbjKd2g==
1652 | dependencies:
1653 | async-foreach "^0.1.3"
1654 | chalk "^1.1.1"
1655 | cross-spawn "^7.0.3"
1656 | gaze "^1.0.0"
1657 | get-stdin "^4.0.1"
1658 | glob "^7.0.3"
1659 | lodash "^4.17.15"
1660 | meow "^3.7.0"
1661 | mkdirp "^0.5.1"
1662 | nan "^2.13.2"
1663 | node-gyp "^7.1.0"
1664 | npmlog "^4.0.0"
1665 | request "^2.88.0"
1666 | sass-graph "2.2.5"
1667 | stdout-stream "^1.4.0"
1668 | "true-case-path" "^1.0.2"
1669 |
1670 | nopt@^5.0.0:
1671 | version "5.0.0"
1672 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
1673 | integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
1674 | dependencies:
1675 | abbrev "1"
1676 |
1677 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
1678 | version "2.4.0"
1679 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
1680 | dependencies:
1681 | hosted-git-info "^2.1.4"
1682 | is-builtin-module "^1.0.0"
1683 | semver "2 || 3 || 4 || 5"
1684 | validate-npm-package-license "^3.0.1"
1685 |
1686 | npmlog@^4.0.0, npmlog@^4.1.2:
1687 | version "4.1.2"
1688 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1689 | dependencies:
1690 | are-we-there-yet "~1.1.2"
1691 | console-control-strings "~1.1.0"
1692 | gauge "~2.7.3"
1693 | set-blocking "~2.0.0"
1694 |
1695 | number-is-nan@^1.0.0:
1696 | version "1.0.1"
1697 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1698 |
1699 | oauth-sign@~0.9.0:
1700 | version "0.9.0"
1701 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
1702 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
1703 |
1704 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
1705 | version "4.1.1"
1706 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1707 |
1708 | object-inspect@^1.10.3, object-inspect@^1.9.0:
1709 | version "1.10.3"
1710 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
1711 | integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
1712 |
1713 | object-keys@^1.0.12, object-keys@^1.1.1:
1714 | version "1.1.1"
1715 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1716 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1717 |
1718 | object.assign@^4.1.2:
1719 | version "4.1.2"
1720 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
1721 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
1722 | dependencies:
1723 | call-bind "^1.0.0"
1724 | define-properties "^1.1.3"
1725 | has-symbols "^1.0.1"
1726 | object-keys "^1.1.1"
1727 |
1728 | object.entries@^1.1.4:
1729 | version "1.1.4"
1730 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"
1731 | integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==
1732 | dependencies:
1733 | call-bind "^1.0.2"
1734 | define-properties "^1.1.3"
1735 | es-abstract "^1.18.2"
1736 |
1737 | object.fromentries@^2.0.4:
1738 | version "2.0.4"
1739 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8"
1740 | integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==
1741 | dependencies:
1742 | call-bind "^1.0.2"
1743 | define-properties "^1.1.3"
1744 | es-abstract "^1.18.0-next.2"
1745 | has "^1.0.3"
1746 |
1747 | object.values@^1.1.3, object.values@^1.1.4:
1748 | version "1.1.4"
1749 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"
1750 | integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==
1751 | dependencies:
1752 | call-bind "^1.0.2"
1753 | define-properties "^1.1.3"
1754 | es-abstract "^1.18.2"
1755 |
1756 | once@^1.3.0:
1757 | version "1.4.0"
1758 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1759 | dependencies:
1760 | wrappy "1"
1761 |
1762 | optionator@^0.9.1:
1763 | version "0.9.1"
1764 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
1765 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
1766 | dependencies:
1767 | deep-is "^0.1.3"
1768 | fast-levenshtein "^2.0.6"
1769 | levn "^0.4.1"
1770 | prelude-ls "^1.2.1"
1771 | type-check "^0.4.0"
1772 | word-wrap "^1.2.3"
1773 |
1774 | p-limit@^1.1.0:
1775 | version "1.2.0"
1776 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
1777 | dependencies:
1778 | p-try "^1.0.0"
1779 |
1780 | p-limit@^2.0.0:
1781 | version "2.3.0"
1782 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1783 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1784 | dependencies:
1785 | p-try "^2.0.0"
1786 |
1787 | p-limit@^3.0.2:
1788 | version "3.1.0"
1789 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1790 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1791 | dependencies:
1792 | yocto-queue "^0.1.0"
1793 |
1794 | p-locate@^2.0.0:
1795 | version "2.0.0"
1796 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
1797 | dependencies:
1798 | p-limit "^1.1.0"
1799 |
1800 | p-locate@^3.0.0:
1801 | version "3.0.0"
1802 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
1803 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
1804 | dependencies:
1805 | p-limit "^2.0.0"
1806 |
1807 | p-locate@^5.0.0:
1808 | version "5.0.0"
1809 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1810 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1811 | dependencies:
1812 | p-limit "^3.0.2"
1813 |
1814 | p-try@^1.0.0:
1815 | version "1.0.0"
1816 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
1817 |
1818 | p-try@^2.0.0:
1819 | version "2.2.0"
1820 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1821 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1822 |
1823 | parent-module@^1.0.0:
1824 | version "1.0.1"
1825 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1826 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1827 | dependencies:
1828 | callsites "^3.0.0"
1829 |
1830 | parse-json@^2.2.0:
1831 | version "2.2.0"
1832 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1833 | dependencies:
1834 | error-ex "^1.2.0"
1835 |
1836 | parse-json@^4.0.0:
1837 | version "4.0.0"
1838 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
1839 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
1840 | dependencies:
1841 | error-ex "^1.3.1"
1842 | json-parse-better-errors "^1.0.1"
1843 |
1844 | path-exists@^2.0.0:
1845 | version "2.1.0"
1846 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
1847 | dependencies:
1848 | pinkie-promise "^2.0.0"
1849 |
1850 | path-exists@^3.0.0:
1851 | version "3.0.0"
1852 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1853 |
1854 | path-exists@^4.0.0:
1855 | version "4.0.0"
1856 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1857 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1858 |
1859 | path-is-absolute@^1.0.0:
1860 | version "1.0.1"
1861 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1862 |
1863 | path-key@^3.1.0:
1864 | version "3.1.1"
1865 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1866 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1867 |
1868 | path-parse@^1.0.6:
1869 | version "1.0.7"
1870 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1871 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1872 |
1873 | path-type@^1.0.0:
1874 | version "1.1.0"
1875 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
1876 | dependencies:
1877 | graceful-fs "^4.1.2"
1878 | pify "^2.0.0"
1879 | pinkie-promise "^2.0.0"
1880 |
1881 | path-type@^3.0.0:
1882 | version "3.0.0"
1883 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
1884 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
1885 | dependencies:
1886 | pify "^3.0.0"
1887 |
1888 | path-type@^4.0.0:
1889 | version "4.0.0"
1890 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1891 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1892 |
1893 | performance-now@^2.1.0:
1894 | version "2.1.0"
1895 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
1896 |
1897 | picomatch@^2.2.1, picomatch@^2.2.3:
1898 | version "2.3.0"
1899 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
1900 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
1901 |
1902 | pify@^2.0.0:
1903 | version "2.3.0"
1904 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1905 |
1906 | pify@^3.0.0:
1907 | version "3.0.0"
1908 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
1909 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
1910 |
1911 | pinkie-promise@^2.0.0:
1912 | version "2.0.1"
1913 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1914 | dependencies:
1915 | pinkie "^2.0.0"
1916 |
1917 | pinkie@^2.0.0:
1918 | version "2.0.4"
1919 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1920 |
1921 | pkg-dir@^2.0.0:
1922 | version "2.0.0"
1923 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
1924 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
1925 | dependencies:
1926 | find-up "^2.1.0"
1927 |
1928 | pkg-up@^2.0.0:
1929 | version "2.0.0"
1930 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
1931 | integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
1932 | dependencies:
1933 | find-up "^2.1.0"
1934 |
1935 | prelude-ls@^1.2.1:
1936 | version "1.2.1"
1937 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1938 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1939 |
1940 | process-nextick-args@~1.0.6:
1941 | version "1.0.7"
1942 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1943 |
1944 | progress@^2.0.0:
1945 | version "2.0.3"
1946 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1947 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1948 |
1949 | prop-types@^15.6.2, prop-types@^15.7.2:
1950 | version "15.7.2"
1951 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
1952 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
1953 | dependencies:
1954 | loose-envify "^1.4.0"
1955 | object-assign "^4.1.1"
1956 | react-is "^16.8.1"
1957 |
1958 | psl@^1.1.28:
1959 | version "1.8.0"
1960 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
1961 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
1962 |
1963 | punycode@^2.1.0, punycode@^2.1.1:
1964 | version "2.1.1"
1965 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1966 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1967 |
1968 | qs@~6.5.2:
1969 | version "6.5.2"
1970 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
1971 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
1972 |
1973 | queue-microtask@^1.2.2:
1974 | version "1.2.3"
1975 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1976 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1977 |
1978 | react-dom@^16.13.0:
1979 | version "16.14.0"
1980 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
1981 | integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==
1982 | dependencies:
1983 | loose-envify "^1.1.0"
1984 | object-assign "^4.1.1"
1985 | prop-types "^15.6.2"
1986 | scheduler "^0.19.1"
1987 |
1988 | react-is@^16.8.1:
1989 | version "16.13.1"
1990 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1991 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1992 |
1993 | react@^16.13.0:
1994 | version "16.14.0"
1995 | resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
1996 | integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
1997 | dependencies:
1998 | loose-envify "^1.1.0"
1999 | object-assign "^4.1.1"
2000 | prop-types "^15.6.2"
2001 |
2002 | read-pkg-up@^1.0.1:
2003 | version "1.0.1"
2004 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
2005 | dependencies:
2006 | find-up "^1.0.0"
2007 | read-pkg "^1.0.0"
2008 |
2009 | read-pkg-up@^3.0.0:
2010 | version "3.0.0"
2011 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
2012 | integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
2013 | dependencies:
2014 | find-up "^2.0.0"
2015 | read-pkg "^3.0.0"
2016 |
2017 | read-pkg@^1.0.0:
2018 | version "1.1.0"
2019 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
2020 | dependencies:
2021 | load-json-file "^1.0.0"
2022 | normalize-package-data "^2.3.2"
2023 | path-type "^1.0.0"
2024 |
2025 | read-pkg@^3.0.0:
2026 | version "3.0.0"
2027 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
2028 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
2029 | dependencies:
2030 | load-json-file "^4.0.0"
2031 | normalize-package-data "^2.3.2"
2032 | path-type "^3.0.0"
2033 |
2034 | readable-stream@^2.0.1, readable-stream@^2.0.6:
2035 | version "2.3.3"
2036 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
2037 | dependencies:
2038 | core-util-is "~1.0.0"
2039 | inherits "~2.0.3"
2040 | isarray "~1.0.0"
2041 | process-nextick-args "~1.0.6"
2042 | safe-buffer "~5.1.1"
2043 | string_decoder "~1.0.3"
2044 | util-deprecate "~1.0.1"
2045 |
2046 | redent@^1.0.0:
2047 | version "1.0.0"
2048 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
2049 | dependencies:
2050 | indent-string "^2.1.0"
2051 | strip-indent "^1.0.1"
2052 |
2053 | regexp.prototype.flags@^1.3.1:
2054 | version "1.3.1"
2055 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
2056 | integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
2057 | dependencies:
2058 | call-bind "^1.0.2"
2059 | define-properties "^1.1.3"
2060 |
2061 | regexpp@^3.0.0, regexpp@^3.1.0:
2062 | version "3.1.0"
2063 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
2064 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
2065 |
2066 | repeating@^2.0.0:
2067 | version "2.0.1"
2068 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
2069 | dependencies:
2070 | is-finite "^1.0.0"
2071 |
2072 | request@^2.88.0, request@^2.88.2:
2073 | version "2.88.2"
2074 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
2075 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
2076 | dependencies:
2077 | aws-sign2 "~0.7.0"
2078 | aws4 "^1.8.0"
2079 | caseless "~0.12.0"
2080 | combined-stream "~1.0.6"
2081 | extend "~3.0.2"
2082 | forever-agent "~0.6.1"
2083 | form-data "~2.3.2"
2084 | har-validator "~5.1.3"
2085 | http-signature "~1.2.0"
2086 | is-typedarray "~1.0.0"
2087 | isstream "~0.1.2"
2088 | json-stringify-safe "~5.0.1"
2089 | mime-types "~2.1.19"
2090 | oauth-sign "~0.9.0"
2091 | performance-now "^2.1.0"
2092 | qs "~6.5.2"
2093 | safe-buffer "^5.1.2"
2094 | tough-cookie "~2.5.0"
2095 | tunnel-agent "^0.6.0"
2096 | uuid "^3.3.2"
2097 |
2098 | require-directory@^2.1.1:
2099 | version "2.1.1"
2100 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
2101 |
2102 | require-from-string@^2.0.2:
2103 | version "2.0.2"
2104 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
2105 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
2106 |
2107 | require-main-filename@^2.0.0:
2108 | version "2.0.0"
2109 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
2110 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
2111 |
2112 | resolve-from@^4.0.0:
2113 | version "4.0.0"
2114 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
2115 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
2116 |
2117 | resolve@^1.10.1, resolve@^1.13.1, resolve@^1.20.0:
2118 | version "1.20.0"
2119 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
2120 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
2121 | dependencies:
2122 | is-core-module "^2.2.0"
2123 | path-parse "^1.0.6"
2124 |
2125 | resolve@^2.0.0-next.3:
2126 | version "2.0.0-next.3"
2127 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
2128 | integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
2129 | dependencies:
2130 | is-core-module "^2.2.0"
2131 | path-parse "^1.0.6"
2132 |
2133 | reusify@^1.0.4:
2134 | version "1.0.4"
2135 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
2136 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
2137 |
2138 | rimraf@^3.0.2:
2139 | version "3.0.2"
2140 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
2141 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
2142 | dependencies:
2143 | glob "^7.1.3"
2144 |
2145 | run-parallel@^1.1.9:
2146 | version "1.2.0"
2147 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
2148 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
2149 | dependencies:
2150 | queue-microtask "^1.2.2"
2151 |
2152 | safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
2153 | version "5.1.1"
2154 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
2155 |
2156 | safe-buffer@^5.1.2:
2157 | version "5.2.1"
2158 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
2159 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
2160 |
2161 | sass-graph@2.2.5:
2162 | version "2.2.5"
2163 | resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8"
2164 | integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==
2165 | dependencies:
2166 | glob "^7.0.0"
2167 | lodash "^4.0.0"
2168 | scss-tokenizer "^0.2.3"
2169 | yargs "^13.3.2"
2170 |
2171 | scheduler@^0.19.1:
2172 | version "0.19.1"
2173 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
2174 | integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
2175 | dependencies:
2176 | loose-envify "^1.1.0"
2177 | object-assign "^4.1.1"
2178 |
2179 | scss-tokenizer@^0.2.3:
2180 | version "0.2.3"
2181 | resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
2182 | dependencies:
2183 | js-base64 "^2.1.8"
2184 | source-map "^0.4.2"
2185 |
2186 | "semver@2 || 3 || 4 || 5":
2187 | version "5.5.0"
2188 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
2189 |
2190 | semver@^6.1.0:
2191 | version "6.3.0"
2192 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
2193 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
2194 |
2195 | semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
2196 | version "7.3.5"
2197 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
2198 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
2199 | dependencies:
2200 | lru-cache "^6.0.0"
2201 |
2202 | set-blocking@^2.0.0, set-blocking@~2.0.0:
2203 | version "2.0.0"
2204 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2205 |
2206 | shebang-command@^2.0.0:
2207 | version "2.0.0"
2208 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
2209 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
2210 | dependencies:
2211 | shebang-regex "^3.0.0"
2212 |
2213 | shebang-regex@^3.0.0:
2214 | version "3.0.0"
2215 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
2216 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
2217 |
2218 | side-channel@^1.0.4:
2219 | version "1.0.4"
2220 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
2221 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
2222 | dependencies:
2223 | call-bind "^1.0.0"
2224 | get-intrinsic "^1.0.2"
2225 | object-inspect "^1.9.0"
2226 |
2227 | signal-exit@^3.0.0:
2228 | version "3.0.2"
2229 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
2230 |
2231 | slash@^3.0.0:
2232 | version "3.0.0"
2233 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
2234 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
2235 |
2236 | slice-ansi@^4.0.0:
2237 | version "4.0.0"
2238 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
2239 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
2240 | dependencies:
2241 | ansi-styles "^4.0.0"
2242 | astral-regex "^2.0.0"
2243 | is-fullwidth-code-point "^3.0.0"
2244 |
2245 | source-map@^0.4.2:
2246 | version "0.4.4"
2247 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
2248 | dependencies:
2249 | amdefine ">=0.0.4"
2250 |
2251 | spdx-correct@~1.0.0:
2252 | version "1.0.2"
2253 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
2254 | dependencies:
2255 | spdx-license-ids "^1.0.2"
2256 |
2257 | spdx-expression-parse@~1.0.0:
2258 | version "1.0.4"
2259 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
2260 |
2261 | spdx-license-ids@^1.0.2:
2262 | version "1.2.2"
2263 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
2264 |
2265 | sprintf-js@~1.0.2:
2266 | version "1.0.3"
2267 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2268 |
2269 | sshpk@^1.7.0:
2270 | version "1.13.1"
2271 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
2272 | dependencies:
2273 | asn1 "~0.2.3"
2274 | assert-plus "^1.0.0"
2275 | dashdash "^1.12.0"
2276 | getpass "^0.1.1"
2277 | optionalDependencies:
2278 | bcrypt-pbkdf "^1.0.0"
2279 | ecc-jsbn "~0.1.1"
2280 | jsbn "~0.1.0"
2281 | tweetnacl "~0.14.0"
2282 |
2283 | stdout-stream@^1.4.0:
2284 | version "1.4.1"
2285 | resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
2286 | integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==
2287 | dependencies:
2288 | readable-stream "^2.0.1"
2289 |
2290 | string-width@^1.0.1, string-width@^1.0.2:
2291 | version "1.0.2"
2292 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
2293 | dependencies:
2294 | code-point-at "^1.0.0"
2295 | is-fullwidth-code-point "^1.0.0"
2296 | strip-ansi "^3.0.0"
2297 |
2298 | string-width@^3.0.0, string-width@^3.1.0:
2299 | version "3.1.0"
2300 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
2301 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
2302 | dependencies:
2303 | emoji-regex "^7.0.1"
2304 | is-fullwidth-code-point "^2.0.0"
2305 | strip-ansi "^5.1.0"
2306 |
2307 | string-width@^4.2.0:
2308 | version "4.2.2"
2309 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
2310 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
2311 | dependencies:
2312 | emoji-regex "^8.0.0"
2313 | is-fullwidth-code-point "^3.0.0"
2314 | strip-ansi "^6.0.0"
2315 |
2316 | string.prototype.matchall@^4.0.5:
2317 | version "4.0.5"
2318 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"
2319 | integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==
2320 | dependencies:
2321 | call-bind "^1.0.2"
2322 | define-properties "^1.1.3"
2323 | es-abstract "^1.18.2"
2324 | get-intrinsic "^1.1.1"
2325 | has-symbols "^1.0.2"
2326 | internal-slot "^1.0.3"
2327 | regexp.prototype.flags "^1.3.1"
2328 | side-channel "^1.0.4"
2329 |
2330 | string.prototype.trimend@^1.0.4:
2331 | version "1.0.4"
2332 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
2333 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
2334 | dependencies:
2335 | call-bind "^1.0.2"
2336 | define-properties "^1.1.3"
2337 |
2338 | string.prototype.trimstart@^1.0.4:
2339 | version "1.0.4"
2340 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
2341 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
2342 | dependencies:
2343 | call-bind "^1.0.2"
2344 | define-properties "^1.1.3"
2345 |
2346 | string_decoder@~1.0.3:
2347 | version "1.0.3"
2348 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
2349 | dependencies:
2350 | safe-buffer "~5.1.0"
2351 |
2352 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
2353 | version "3.0.1"
2354 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
2355 | dependencies:
2356 | ansi-regex "^2.0.0"
2357 |
2358 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
2359 | version "5.2.0"
2360 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
2361 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
2362 | dependencies:
2363 | ansi-regex "^4.1.0"
2364 |
2365 | strip-ansi@^6.0.0:
2366 | version "6.0.0"
2367 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
2368 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
2369 | dependencies:
2370 | ansi-regex "^5.0.0"
2371 |
2372 | strip-bom@^2.0.0:
2373 | version "2.0.0"
2374 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
2375 | dependencies:
2376 | is-utf8 "^0.2.0"
2377 |
2378 | strip-bom@^3.0.0:
2379 | version "3.0.0"
2380 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
2381 |
2382 | strip-indent@^1.0.1:
2383 | version "1.0.1"
2384 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
2385 | dependencies:
2386 | get-stdin "^4.0.1"
2387 |
2388 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
2389 | version "3.1.1"
2390 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
2391 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
2392 |
2393 | supports-color@^2.0.0:
2394 | version "2.0.0"
2395 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
2396 |
2397 | supports-color@^5.3.0:
2398 | version "5.5.0"
2399 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2400 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2401 | dependencies:
2402 | has-flag "^3.0.0"
2403 |
2404 | supports-color@^7.1.0:
2405 | version "7.2.0"
2406 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2407 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2408 | dependencies:
2409 | has-flag "^4.0.0"
2410 |
2411 | table@^6.0.9:
2412 | version "6.7.1"
2413 | resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
2414 | integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
2415 | dependencies:
2416 | ajv "^8.0.1"
2417 | lodash.clonedeep "^4.5.0"
2418 | lodash.truncate "^4.4.2"
2419 | slice-ansi "^4.0.0"
2420 | string-width "^4.2.0"
2421 | strip-ansi "^6.0.0"
2422 |
2423 | tar@^6.0.2:
2424 | version "6.1.0"
2425 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
2426 | integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==
2427 | dependencies:
2428 | chownr "^2.0.0"
2429 | fs-minipass "^2.0.0"
2430 | minipass "^3.0.0"
2431 | minizlib "^2.1.1"
2432 | mkdirp "^1.0.3"
2433 | yallist "^4.0.0"
2434 |
2435 | text-table@^0.2.0:
2436 | version "0.2.0"
2437 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2438 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
2439 |
2440 | to-regex-range@^5.0.1:
2441 | version "5.0.1"
2442 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2443 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2444 | dependencies:
2445 | is-number "^7.0.0"
2446 |
2447 | tough-cookie@~2.5.0:
2448 | version "2.5.0"
2449 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
2450 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
2451 | dependencies:
2452 | psl "^1.1.28"
2453 | punycode "^2.1.1"
2454 |
2455 | trim-newlines@^1.0.0:
2456 | version "1.0.0"
2457 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
2458 |
2459 | "true-case-path@^1.0.2":
2460 | version "1.0.3"
2461 | resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
2462 | integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
2463 | dependencies:
2464 | glob "^7.1.2"
2465 |
2466 | tsconfig-paths@^3.9.0:
2467 | version "3.9.0"
2468 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
2469 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
2470 | dependencies:
2471 | "@types/json5" "^0.0.29"
2472 | json5 "^1.0.1"
2473 | minimist "^1.2.0"
2474 | strip-bom "^3.0.0"
2475 |
2476 | tslib@2.1.0:
2477 | version "2.1.0"
2478 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
2479 | integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==
2480 |
2481 | tslib@^1.8.1:
2482 | version "1.14.1"
2483 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
2484 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
2485 |
2486 | tsutils@^3.21.0:
2487 | version "3.21.0"
2488 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
2489 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
2490 | dependencies:
2491 | tslib "^1.8.1"
2492 |
2493 | tunnel-agent@^0.6.0:
2494 | version "0.6.0"
2495 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
2496 | dependencies:
2497 | safe-buffer "^5.0.1"
2498 |
2499 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
2500 | version "0.14.5"
2501 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
2502 |
2503 | type-check@^0.4.0, type-check@~0.4.0:
2504 | version "0.4.0"
2505 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
2506 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
2507 | dependencies:
2508 | prelude-ls "^1.2.1"
2509 |
2510 | type-fest@^0.20.2:
2511 | version "0.20.2"
2512 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
2513 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
2514 |
2515 | typescript@^4.3.2:
2516 | version "4.3.2"
2517 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805"
2518 | integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==
2519 |
2520 | unbox-primitive@^1.0.1:
2521 | version "1.0.1"
2522 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
2523 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
2524 | dependencies:
2525 | function-bind "^1.1.1"
2526 | has-bigints "^1.0.1"
2527 | has-symbols "^1.0.2"
2528 | which-boxed-primitive "^1.0.2"
2529 |
2530 | uri-js@^4.2.2:
2531 | version "4.4.1"
2532 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2533 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2534 | dependencies:
2535 | punycode "^2.1.0"
2536 |
2537 | util-deprecate@~1.0.1:
2538 | version "1.0.2"
2539 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2540 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2541 |
2542 | uuid@^3.3.2:
2543 | version "3.4.0"
2544 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
2545 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
2546 |
2547 | v8-compile-cache@^2.0.3:
2548 | version "2.3.0"
2549 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
2550 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
2551 |
2552 | validate-npm-package-license@^3.0.1:
2553 | version "3.0.1"
2554 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
2555 | dependencies:
2556 | spdx-correct "~1.0.0"
2557 | spdx-expression-parse "~1.0.0"
2558 |
2559 | verror@1.10.0:
2560 | version "1.10.0"
2561 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
2562 | dependencies:
2563 | assert-plus "^1.0.0"
2564 | core-util-is "1.0.2"
2565 | extsprintf "^1.2.0"
2566 |
2567 | which-boxed-primitive@^1.0.2:
2568 | version "1.0.2"
2569 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
2570 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
2571 | dependencies:
2572 | is-bigint "^1.0.1"
2573 | is-boolean-object "^1.1.0"
2574 | is-number-object "^1.0.4"
2575 | is-string "^1.0.5"
2576 | is-symbol "^1.0.3"
2577 |
2578 | which-module@^2.0.0:
2579 | version "2.0.0"
2580 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
2581 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
2582 |
2583 | which@^2.0.1, which@^2.0.2:
2584 | version "2.0.2"
2585 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2586 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2587 | dependencies:
2588 | isexe "^2.0.0"
2589 |
2590 | wide-align@^1.1.0:
2591 | version "1.1.2"
2592 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
2593 | dependencies:
2594 | string-width "^1.0.2"
2595 |
2596 | word-wrap@^1.2.3:
2597 | version "1.2.3"
2598 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
2599 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
2600 |
2601 | wrap-ansi@^5.1.0:
2602 | version "5.1.0"
2603 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
2604 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
2605 | dependencies:
2606 | ansi-styles "^3.2.0"
2607 | string-width "^3.0.0"
2608 | strip-ansi "^5.0.0"
2609 |
2610 | wrappy@1:
2611 | version "1.0.2"
2612 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2613 |
2614 | y18n@^4.0.0:
2615 | version "4.0.3"
2616 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
2617 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
2618 |
2619 | yallist@^4.0.0:
2620 | version "4.0.0"
2621 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2622 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2623 |
2624 | yargs-parser@^13.1.2:
2625 | version "13.1.2"
2626 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
2627 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
2628 | dependencies:
2629 | camelcase "^5.0.0"
2630 | decamelize "^1.2.0"
2631 |
2632 | yargs@^13.3.2:
2633 | version "13.3.2"
2634 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
2635 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
2636 | dependencies:
2637 | cliui "^5.0.0"
2638 | find-up "^3.0.0"
2639 | get-caller-file "^2.0.1"
2640 | require-directory "^2.1.1"
2641 | require-main-filename "^2.0.0"
2642 | set-blocking "^2.0.0"
2643 | string-width "^3.0.0"
2644 | which-module "^2.0.0"
2645 | y18n "^4.0.0"
2646 | yargs-parser "^13.1.2"
2647 |
2648 | yocto-queue@^0.1.0:
2649 | version "0.1.0"
2650 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
2651 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
2652 |
--------------------------------------------------------------------------------