done
This commit is contained in:
1795
lib/python3.11/site-packages/dash/dash_table/DataTable.py
Normal file
1795
lib/python3.11/site-packages/dash/dash_table/DataTable.py
Normal file
File diff suppressed because it is too large
Load Diff
287
lib/python3.11/site-packages/dash/dash_table/Format.py
Normal file
287
lib/python3.11/site-packages/dash/dash_table/Format.py
Normal file
@ -0,0 +1,287 @@
|
||||
import collections
|
||||
|
||||
|
||||
def get_named_tuple(name, dict):
|
||||
return collections.namedtuple(name, dict.keys())(*dict.values())
|
||||
|
||||
|
||||
Align = get_named_tuple(
|
||||
"align",
|
||||
{"default": "", "left": "<", "right": ">", "center": "^", "right_sign": "="},
|
||||
)
|
||||
|
||||
Group = get_named_tuple("group", {"no": "", "yes": ","})
|
||||
|
||||
Padding = get_named_tuple("padding", {"no": "", "yes": "0"})
|
||||
|
||||
Prefix = get_named_tuple(
|
||||
"prefix",
|
||||
{
|
||||
"yocto": 10**-24,
|
||||
"zepto": 10**-21,
|
||||
"atto": 10**-18,
|
||||
"femto": 10**-15,
|
||||
"pico": 10**-12,
|
||||
"nano": 10**-9,
|
||||
"micro": 10**-6,
|
||||
"milli": 10**-3,
|
||||
"none": None,
|
||||
"kilo": 10**3,
|
||||
"mega": 10**6,
|
||||
"giga": 10**9,
|
||||
"tera": 10**12,
|
||||
"peta": 10**15,
|
||||
"exa": 10**18,
|
||||
"zetta": 10**21,
|
||||
"yotta": 10**24,
|
||||
},
|
||||
)
|
||||
|
||||
Scheme = get_named_tuple(
|
||||
"scheme",
|
||||
{
|
||||
"default": "",
|
||||
"decimal": "r",
|
||||
"decimal_integer": "d",
|
||||
"decimal_or_exponent": "g",
|
||||
"decimal_si_prefix": "s",
|
||||
"exponent": "e",
|
||||
"fixed": "f",
|
||||
"percentage": "%",
|
||||
"percentage_rounded": "p",
|
||||
"binary": "b",
|
||||
"octal": "o",
|
||||
"lower_case_hex": "x",
|
||||
"upper_case_hex": "X",
|
||||
"unicode": "c",
|
||||
},
|
||||
)
|
||||
|
||||
Sign = get_named_tuple(
|
||||
"sign",
|
||||
{"default": "", "negative": "-", "positive": "+", "parantheses": "(", "space": " "},
|
||||
)
|
||||
|
||||
Symbol = get_named_tuple(
|
||||
"symbol", {"no": "", "yes": "$", "binary": "#b", "octal": "#o", "hex": "#x"}
|
||||
)
|
||||
|
||||
Trim = get_named_tuple("trim", {"no": "", "yes": "~"})
|
||||
|
||||
|
||||
class Format:
|
||||
def __init__(self, **kwargs):
|
||||
self._locale = {}
|
||||
self._nully = ""
|
||||
self._prefix = Prefix.none
|
||||
self._specifier = {
|
||||
"align": Align.default,
|
||||
"fill": "",
|
||||
"group": Group.no,
|
||||
"width": "",
|
||||
"padding": Padding.no,
|
||||
"precision": "",
|
||||
"sign": Sign.default,
|
||||
"symbol": Symbol.no,
|
||||
"trim": Trim.no,
|
||||
"type": Scheme.default,
|
||||
}
|
||||
|
||||
valid_methods = [
|
||||
m for m in dir(self.__class__) if m[0] != "_" and m != "to_plotly_json"
|
||||
]
|
||||
|
||||
for kw, val in kwargs.items():
|
||||
if kw not in valid_methods:
|
||||
raise TypeError(
|
||||
"{0} is not a format method. Expected one of".format(kw),
|
||||
str(list(valid_methods)),
|
||||
)
|
||||
|
||||
getattr(self, kw)(val)
|
||||
|
||||
def _validate_char(self, value):
|
||||
self._validate_string(value)
|
||||
|
||||
if len(value) != 1:
|
||||
raise ValueError("expected value to a string of length one")
|
||||
|
||||
def _validate_non_negative_integer_or_none(self, value):
|
||||
if value is None:
|
||||
return
|
||||
|
||||
if not isinstance(value, int):
|
||||
raise TypeError("expected value to be an integer")
|
||||
|
||||
if value < 0:
|
||||
raise ValueError("expected value to be non-negative", str(value))
|
||||
|
||||
def _validate_named(self, value, named_values):
|
||||
if value not in named_values:
|
||||
raise TypeError("expected value to be one of", str(list(named_values)))
|
||||
|
||||
def _validate_string(self, value):
|
||||
if not isinstance(value, (str, "".__class__)):
|
||||
raise TypeError("expected value to be a string")
|
||||
|
||||
# Specifier
|
||||
def align(self, value):
|
||||
self._validate_named(value, Align)
|
||||
|
||||
self._specifier["align"] = value
|
||||
return self
|
||||
|
||||
def fill(self, value):
|
||||
self._validate_char(value)
|
||||
|
||||
self._specifier["fill"] = value
|
||||
return self
|
||||
|
||||
def group(self, value):
|
||||
if isinstance(value, bool):
|
||||
value = Group.yes if value else Group.no
|
||||
|
||||
self._validate_named(value, Group)
|
||||
|
||||
self._specifier["group"] = value
|
||||
return self
|
||||
|
||||
def padding(self, value):
|
||||
if isinstance(value, bool):
|
||||
value = Padding.yes if value else Padding.no
|
||||
|
||||
self._validate_named(value, Padding)
|
||||
|
||||
self._specifier["padding"] = value
|
||||
return self
|
||||
|
||||
def padding_width(self, value):
|
||||
self._validate_non_negative_integer_or_none(value)
|
||||
|
||||
self._specifier["width"] = value if value is not None else ""
|
||||
return self
|
||||
|
||||
def precision(self, value):
|
||||
self._validate_non_negative_integer_or_none(value)
|
||||
|
||||
self._specifier["precision"] = ".{0}".format(value) if value is not None else ""
|
||||
return self
|
||||
|
||||
def scheme(self, value):
|
||||
self._validate_named(value, Scheme)
|
||||
|
||||
self._specifier["type"] = value
|
||||
return self
|
||||
|
||||
def sign(self, value):
|
||||
self._validate_named(value, Sign)
|
||||
|
||||
self._specifier["sign"] = value
|
||||
return self
|
||||
|
||||
def symbol(self, value):
|
||||
self._validate_named(value, Symbol)
|
||||
|
||||
self._specifier["symbol"] = value
|
||||
return self
|
||||
|
||||
def trim(self, value):
|
||||
if isinstance(value, bool):
|
||||
value = Trim.yes if value else Trim.no
|
||||
|
||||
self._validate_named(value, Trim)
|
||||
|
||||
self._specifier["trim"] = value
|
||||
return self
|
||||
|
||||
# Locale
|
||||
def symbol_prefix(self, value):
|
||||
self._validate_string(value)
|
||||
|
||||
if "symbol" not in self._locale:
|
||||
self._locale["symbol"] = [value, ""]
|
||||
else:
|
||||
self._locale["symbol"][0] = value
|
||||
|
||||
return self
|
||||
|
||||
def symbol_suffix(self, value):
|
||||
self._validate_string(value)
|
||||
|
||||
if "symbol" not in self._locale:
|
||||
self._locale["symbol"] = ["", value]
|
||||
else:
|
||||
self._locale["symbol"][1] = value
|
||||
|
||||
return self
|
||||
|
||||
def decimal_delimiter(self, value):
|
||||
self._validate_char(value)
|
||||
|
||||
self._locale["decimal"] = value
|
||||
return self
|
||||
|
||||
def group_delimiter(self, value):
|
||||
self._validate_char(value)
|
||||
|
||||
self._locale["group"] = value
|
||||
return self
|
||||
|
||||
def groups(self, groups):
|
||||
groups = (
|
||||
groups
|
||||
if isinstance(groups, list)
|
||||
else [groups]
|
||||
if isinstance(groups, int)
|
||||
else None
|
||||
)
|
||||
|
||||
if not isinstance(groups, list):
|
||||
raise TypeError("expected groups to be an integer or a list of integers")
|
||||
if len(groups) == 0:
|
||||
raise ValueError(
|
||||
"expected groups to be an integer or a list of " "one or more integers"
|
||||
)
|
||||
|
||||
for group in groups:
|
||||
if not isinstance(group, int):
|
||||
raise TypeError("expected entry to be an integer")
|
||||
|
||||
if group <= 0:
|
||||
raise ValueError("expected entry to be a non-negative integer")
|
||||
|
||||
self._locale["grouping"] = groups
|
||||
return self
|
||||
|
||||
# Nully
|
||||
def nully(self, value):
|
||||
self._nully = value
|
||||
return self
|
||||
|
||||
# Prefix
|
||||
def si_prefix(self, value):
|
||||
self._validate_named(value, Prefix)
|
||||
|
||||
self._prefix = value
|
||||
return self
|
||||
|
||||
def to_plotly_json(self):
|
||||
f = {}
|
||||
f["locale"] = self._locale.copy()
|
||||
f["nully"] = self._nully
|
||||
f["prefix"] = self._prefix
|
||||
aligned = self._specifier["align"] != Align.default
|
||||
f["specifier"] = "{}{}{}{}{}{}{}{}{}{}".format(
|
||||
self._specifier["fill"] if aligned else "",
|
||||
self._specifier["align"],
|
||||
self._specifier["sign"],
|
||||
self._specifier["symbol"],
|
||||
self._specifier["padding"],
|
||||
self._specifier["width"],
|
||||
self._specifier["group"],
|
||||
self._specifier["precision"],
|
||||
self._specifier["trim"],
|
||||
self._specifier["type"],
|
||||
)
|
||||
|
||||
return f
|
||||
@ -0,0 +1,19 @@
|
||||
from .Format import Format, Group, Scheme, Sign, Symbol
|
||||
|
||||
|
||||
def money(decimals, sign=Sign.default):
|
||||
return Format(
|
||||
group=Group.yes,
|
||||
precision=decimals,
|
||||
scheme=Scheme.fixed,
|
||||
sign=sign,
|
||||
symbol=Symbol.yes,
|
||||
)
|
||||
|
||||
|
||||
def percentage(decimals, rounded=False):
|
||||
if not isinstance(rounded, bool):
|
||||
raise TypeError("expected rounded to be a boolean")
|
||||
|
||||
rounded = Scheme.percentage_rounded if rounded else Scheme.percentage
|
||||
return Format(scheme=rounded, precision=decimals)
|
||||
97
lib/python3.11/site-packages/dash/dash_table/__init__.py
Normal file
97
lib/python3.11/site-packages/dash/dash_table/__init__.py
Normal file
@ -0,0 +1,97 @@
|
||||
# type: ignore
|
||||
|
||||
import os as _os
|
||||
import sys as _sys
|
||||
import json
|
||||
|
||||
import dash as _dash
|
||||
|
||||
if not hasattr(_dash, "__plotly_dash") and not hasattr(_dash, "development"):
|
||||
print(
|
||||
"Dash was not successfully imported. "
|
||||
"Make sure you don't have a file "
|
||||
'named \n"dash.py" in your current directory.',
|
||||
file=_sys.stderr,
|
||||
)
|
||||
_sys.exit(1)
|
||||
|
||||
from ._imports_ import * # noqa: E402, F401, F403
|
||||
from ._imports_ import __all__ as _components
|
||||
from . import Format # noqa: F401, E402
|
||||
from . import FormatTemplate # noqa: F401, E402
|
||||
|
||||
__all__ = _components + ["Format", "FormatTemplate"]
|
||||
|
||||
_basepath = _os.path.dirname(__file__)
|
||||
_filepath = _os.path.abspath(_os.path.join(_basepath, "package-info.json"))
|
||||
with open(_filepath) as f:
|
||||
package = json.load(f)
|
||||
|
||||
package_name = package["name"].replace(" ", "_").replace("-", "_")
|
||||
__version__ = package["version"]
|
||||
|
||||
_current_path = _os.path.dirname(_os.path.abspath(__file__))
|
||||
|
||||
_this_module = _sys.modules[__name__]
|
||||
|
||||
|
||||
async_resources = ["export", "table", "highlight"]
|
||||
|
||||
_js_dist = []
|
||||
|
||||
_js_dist.extend(
|
||||
[
|
||||
{
|
||||
"relative_package_path": "dash_table/async-{}.js".format(async_resource),
|
||||
"external_url": (
|
||||
"https://unpkg.com/dash-table@{}" "/dash_table/async-{}.js"
|
||||
).format(__version__, async_resource),
|
||||
"namespace": "dash",
|
||||
"async": True,
|
||||
}
|
||||
for async_resource in async_resources
|
||||
]
|
||||
)
|
||||
|
||||
_js_dist.extend(
|
||||
[
|
||||
{
|
||||
"relative_package_path": "dash_table/async-{}.js.map".format(
|
||||
async_resource
|
||||
),
|
||||
"external_url": (
|
||||
"https://unpkg.com/dash-table@{}" "/dash_table/async-{}.js.map"
|
||||
).format(__version__, async_resource),
|
||||
"namespace": "dash",
|
||||
"dynamic": True,
|
||||
}
|
||||
for async_resource in async_resources
|
||||
]
|
||||
)
|
||||
|
||||
_js_dist.extend(
|
||||
[
|
||||
{
|
||||
"relative_package_path": "dash_table/bundle.js",
|
||||
"external_url": (
|
||||
"https://unpkg.com/dash-table@{}/dash_table/bundle.js"
|
||||
).format(__version__),
|
||||
"namespace": "dash",
|
||||
},
|
||||
{
|
||||
"relative_package_path": "dash_table/bundle.js.map",
|
||||
"external_url": (
|
||||
"https://unpkg.com/dash-table@{}/dash_table/bundle.js.map"
|
||||
).format(__version__),
|
||||
"namespace": "dash",
|
||||
"dynamic": True,
|
||||
},
|
||||
]
|
||||
)
|
||||
|
||||
_css_dist = []
|
||||
|
||||
|
||||
for _component in __all__:
|
||||
setattr(locals()[_component], "_js_dist", _js_dist)
|
||||
setattr(locals()[_component], "_css_dist", _css_dist)
|
||||
@ -0,0 +1,3 @@
|
||||
from .DataTable import DataTable
|
||||
|
||||
__all__ = ["DataTable"]
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,3 @@
|
||||
/*! cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
|
||||
/*! cputils.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,18 @@
|
||||
/*!
|
||||
Copyright (c) 2018 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
http://jedwatson.github.io/classnames
|
||||
*/
|
||||
|
||||
/*!
|
||||
Copyright (c) 2018 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
http://jedwatson.github.io/react-select
|
||||
*/
|
||||
|
||||
/*!
|
||||
* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
*/
|
||||
|
||||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
||||
File diff suppressed because one or more lines are too long
2
lib/python3.11/site-packages/dash/dash_table/bundle.js
Normal file
2
lib/python3.11/site-packages/dash/dash_table/bundle.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
lib/python3.11/site-packages/dash/dash_table/demo.js
Normal file
2
lib/python3.11/site-packages/dash/dash_table/demo.js
Normal file
File diff suppressed because one or more lines are too long
1
lib/python3.11/site-packages/dash/dash_table/demo.js.map
Normal file
1
lib/python3.11/site-packages/dash/dash_table/demo.js.map
Normal file
File diff suppressed because one or more lines are too long
13
lib/python3.11/site-packages/dash/dash_table/index.html
Normal file
13
lib/python3.11/site-packages/dash/dash_table/index.html
Normal file
@ -0,0 +1,13 @@
|
||||
<!doctype>
|
||||
<html>
|
||||
<head>
|
||||
<title>dash-table</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id='root'></div>
|
||||
<script src='https://unpkg.com/react@16.14.0/umd/react.development.js'></script>
|
||||
<script src='https://unpkg.com/react-dom@16.14.0/umd/react-dom.development.js'></script>
|
||||
|
||||
<script src="./demo.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
124
lib/python3.11/site-packages/dash/dash_table/package-info.json
Normal file
124
lib/python3.11/site-packages/dash/dash_table/package-info.json
Normal file
@ -0,0 +1,124 @@
|
||||
{
|
||||
"name": "dash-table",
|
||||
"version": "6.0.4",
|
||||
"description": "Dash table",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@github.com:plotly/dash.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/plotly/dash/issues"
|
||||
},
|
||||
"homepage": "https://github.com/plotly/dash",
|
||||
"main": "dash_table/bundle.js",
|
||||
"scripts": {
|
||||
"preprivate::test.server": "run-s private::wait_dash*",
|
||||
"private::build": "node --max_old_space_size=4096 node_modules/webpack/bin/webpack --bail",
|
||||
"private::build:js": "run-s \"private::build -- --mode production\"",
|
||||
"private::build:js-test": "run-s \"private::build -- --mode development --config webpack.test.config.js\"",
|
||||
"private::build:js-test-watch": "run-s \"private::build -- --mode development --config webpack.test.config.js --watch\"",
|
||||
"private::build:backends": "dash-generate-components src/dash-table/dash/DataTable.js dash_table -p package-info.json && cp dash_table_base/** dash_table/ && dash-generate-components src/dash-table/dash/DataTable.js dash_table -p package-info.json -k DataTable --r-prefix 'dash' --r-suggests 'dash' --jl-prefix 'dash' && black dash_table",
|
||||
"private::format.ts": "npm run private::lint.ts -- --fix",
|
||||
"private::format.prettier": "prettier --config .prettierrc --write \"{src,tests,demo}/**/*.{js,ts,tsx}\"",
|
||||
"private::format.black": "black dash_table_base tests",
|
||||
"private::lint.ts": "eslint ./src ./tests",
|
||||
"private::lint.flake": "flake8 dash_table_base tests",
|
||||
"private::lint.black": "black --check dash_table_base tests",
|
||||
"private::lint.prettier": "prettier --config .prettierrc \"{src,tests,demo}/**/*.{js,ts,tsx}\" --list-different",
|
||||
"private::test.python": "python -m unittest tests/unit/format_test.py",
|
||||
"private::test.unit": "karma start karma.conf.js --single-run",
|
||||
"build.watch": "webpack serve --disable-host-check --content-base dash_table --mode development --config webpack.dev.config.js",
|
||||
"build": "run-s private::build:js private::build:backends",
|
||||
"postbuild": "es-check es2015 dash_table/bundle.js dash_table/async-*.js",
|
||||
"format": "run-s private::format.*",
|
||||
"lint": "run-s private::lint.*",
|
||||
"test.server": "pytest --nopercyfinalize tests/selenium",
|
||||
"test.unit": "run-s private::test.python private::test.unit",
|
||||
"test.visual": "npm install --package-lock-only=false --no-save @percy/storybook@^3.3.1 @storybook/builder-webpack5@^6.5.13 @storybook/cli@^6.5.13 @storybook/manager-webpack5@^6.5.16 @storybook/react@^6.5.13 @storybook/semver@^7.3.2 && build-storybook && percy-storybook --widths=1280",
|
||||
"test.visual-local": "npm install --package-lock-only=false --no-save @percy/storybook@^3.3.1 @storybook/builder-webpack5@^6.5.13 @storybook/cli@^6.5.13 @storybook/manager-webpack5@^6.5.16 @storybook/react@^6.5.13 @storybook/semver@^7.3.2 && build-storybook"
|
||||
},
|
||||
"author": "Chris Parmer <chris@plotly.com>",
|
||||
"maintainer": "Alex Johnson <alex@plotly.com>",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.28.0",
|
||||
"@babel/core": "^7.28.0",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||
"@babel/plugin-transform-regenerator": "^7.28.1",
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/preset-env": "^7.28.0",
|
||||
"@babel/preset-react": "^7.27.1",
|
||||
"@fortawesome/fontawesome-svg-core": "1.2.36",
|
||||
"@fortawesome/free-regular-svg-icons": "^5.15.4",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.15.4",
|
||||
"@fortawesome/react-fontawesome": "^0.2.2",
|
||||
"@plotly/dash-component-plugins": "^1.2.3",
|
||||
"@plotly/webpack-dash-dynamic-import": "^1.3.0",
|
||||
"@types/chai": "^4.3.5",
|
||||
"@types/d3-format": "^3.0.1",
|
||||
"@types/mocha": "^10.0.1",
|
||||
"@types/papaparse": "^5.3.7",
|
||||
"@types/ramda": "0.30.2",
|
||||
"@types/react": "^16.14.8",
|
||||
"@types/react-dom": "^16.9.13",
|
||||
"@types/react-select": "^4.0.16",
|
||||
"@typescript-eslint/eslint-plugin": "^5.59.7",
|
||||
"@typescript-eslint/parser": "^5.59.7",
|
||||
"babel-loader": "^9.2.1",
|
||||
"chai": "^4.3.7",
|
||||
"css-loader": "^6.8.1",
|
||||
"css.escape": "^1.5.1",
|
||||
"d3-format": "^3.1.0",
|
||||
"es-check": "^7.1.1",
|
||||
"eslint": "^8.41.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"fast-isnumeric": "^1.1.4",
|
||||
"file-loader": "^6.2.0",
|
||||
"highlight.js": "^11.8.0",
|
||||
"karma": "^6.4.2",
|
||||
"karma-chrome-launcher": "^3.2.0",
|
||||
"karma-mocha": "^2.0.1",
|
||||
"karma-typescript": "^5.5.4",
|
||||
"karma-webpack": "^5.0.0",
|
||||
"less": "^4.1.3",
|
||||
"less-loader": "^11.1.0",
|
||||
"mocha": "^10.2.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"papaparse": "^5.4.1",
|
||||
"prettier": "^2.8.8",
|
||||
"ramda": "^0.30.1",
|
||||
"raw-loader": "^4.0.2",
|
||||
"react": "^16.14.0",
|
||||
"react-docgen": "^5.4.3",
|
||||
"react-dom": "^16.14.0",
|
||||
"react-select": "^1.3.0",
|
||||
"regenerator-runtime": "^0.13.11",
|
||||
"remarkable": "^2.0.1",
|
||||
"sheetclip": "^0.3.0",
|
||||
"style-loader": "^3.3.3",
|
||||
"ts-loader": "^9.5.2",
|
||||
"typescript": "^5.8.3",
|
||||
"webpack": "^5.101.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "5.2.2",
|
||||
"webpack-preprocessor": "^0.1.12",
|
||||
"xlsx": "^0.17.5",
|
||||
"rimraf": "^5.0.5"
|
||||
},
|
||||
"files": [
|
||||
"/dash_table/async-*{.js,.map}",
|
||||
"/dash_table/bundle*{.js,.map}"
|
||||
],
|
||||
"peerDependencies": {
|
||||
"prop-types": "^15.7.2",
|
||||
"react": ">=16",
|
||||
"react-dom": ">=16"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.0.0",
|
||||
"npm": ">=6.1.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"last 9 years and not dead"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user