From 544c6067982bfda1ad426c1823f160c37c0b9b6d Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:05:21 +0300 Subject: [PATCH 01/70] chore: trim root package.json metadata, add engines and .nvmrc The root package is private; library metadata lives in packages/react-sketch. Require Node >=22 and pin local development to Node 24 via .nvmrc. --- .nvmrc | 1 + package.json | 24 ++++-------------------- 2 files changed, 5 insertions(+), 20 deletions(-) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..a45fd52c --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 diff --git a/package.json b/package.json index 1068ea3a..b37f140e 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,14 @@ { "name": "react-sketch-project", - "version": "0.5.6", - "description": "Sketch Element for React based applications, backed-up by fabricjs as its core", - "keywords": [ - "react", - "canvas", - "sketch", - "fabricjs", - "fabric.js" - ], - "author": { - "name": "Thomas Bolis", - "email": "thomas.bolis@gmail.com" - }, - "repository": { - "type": "git", - "url": "https://github.com/tbolis/react-sketch.git" - }, - "bugs": { - "url": "https://github.com/tbolis/react-sketch/issues" - }, + "description": "Monorepo for react-sketch, a sketch element for React applications backed by fabric.js", "private": true, "workspaces": [ "packages/*" ], "license": "MIT", + "engines": { + "node": ">=22" + }, "scripts": { "start": "wsrun start", "lint": "eslint --fix ./packages/**/src", From 7f508b25ced69e796f62e715890643f6b58db1f7 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:07:24 +0300 Subject: [PATCH 02/70] Add jest, ts-jest, testing-library and canvas mock as test devDependencies Adds test and test:coverage scripts to react-sketch and test, test:watch and test:coverage to the root, delegating to the react-sketch workspace. --- package.json | 5 +- packages/react-sketch/package.json | 18 +- yarn.lock | 2508 +++++++++++++++++++++++++++- 3 files changed, 2516 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 1068ea3a..2602da42 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,10 @@ "scripts": { "start": "wsrun start", "lint": "eslint --fix ./packages/**/src", - "format": "prettier --write \"./**\"" + "format": "prettier --write \"./**\"", + "test": "yarn workspace react-sketch test", + "test:watch": "yarn workspace react-sketch test --watch", + "test:coverage": "yarn workspace react-sketch test:coverage" }, "devDependencies": { "@types/react": "^17.0.3", diff --git a/packages/react-sketch/package.json b/packages/react-sketch/package.json index f0282331..08a21e37 100644 --- a/packages/react-sketch/package.json +++ b/packages/react-sketch/package.json @@ -26,7 +26,9 @@ "scripts": { "build:typescript": "tsc && webpack --mode production", "build": "webpack --mode production", - "start": "webpack --mode development --watch" + "start": "webpack --mode development --watch", + "test": "jest", + "test:coverage": "jest --coverage" }, "dependencies": { "csstype": "^3.0.7", @@ -38,10 +40,22 @@ "devDependencies": { "@babel/preset-react": "^7.13.13", "@babel/preset-typescript": "^7.13.0", + "@testing-library/dom": "^10.4.2", + "@testing-library/jest-dom": "^7.0.1", + "@testing-library/react": "^16.3.3", "@types/fabric": "^4.2.5", + "@types/jest": "^30.0.0", "@types/node": "^14.14.37", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "clean-webpack-plugin": "^3.0.0", "concurrently": "^6.0.1", - "terser-webpack-plugin": "^5.1.1" + "jest": "^30.5.2", + "jest-canvas-mock": "^2.5.8", + "jest-environment-jsdom": "^30.5.2", + "react": "^19.3.0", + "react-dom": "^19.3.0", + "terser-webpack-plugin": "^5.1.1", + "ts-jest": "^29.4.14" } } diff --git a/yarn.lock b/yarn.lock index c22dc68f..764326f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,22 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.4.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.5.0.tgz#b5b71a25a4d16afa2482592ddfa62fccc60bc7d1" + integrity sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q== + +"@asamuzakjp/css-color@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794" + integrity sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw== + dependencies: + "@csstools/css-calc" "^2.1.3" + "@csstools/css-color-parser" "^3.0.9" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + lru-cache "^10.4.3" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -16,6 +32,41 @@ dependencies: "@babel/highlight" "^7.12.13" +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7" + integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== + dependencies: + "@babel/helper-validator-identifier" "^7.29.7" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.7.tgz#6f0237f0f36d2e51c0570a636faed9d2d0efe629" + integrity sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg== + +"@babel/core@^7.23.9", "@babel/core@^7.27.4": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.7.tgz#80c10b17248082968b57a857b91640971f2070f7" + integrity sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helpers" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@^7.13.9": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" @@ -25,6 +76,17 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.27.5", "@babel/generator@^7.29.7", "@babel/generator@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.8.tgz#4b0b887885422643339e09022148a4c4ebaa4979" + integrity sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg== + dependencies: + "@babel/parser" "^7.29.8" + "@babel/types" "^7.29.8" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" @@ -32,6 +94,17 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-compilation-targets@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz#7a1def704302401c47f64fa85589e974ae217042" + integrity sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g== + dependencies: + "@babel/compat-data" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.13.0": version "7.13.11" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" @@ -59,6 +132,11 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-globals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz#f04a96fbd8473241b1079243f5b3f03a3010ab7b" + integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA== + "@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" @@ -73,6 +151,23 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-module-imports@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz#ef25048a518e828d7393fac5882ddd73921d7396" + integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helper-module-transforms@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz#b062747a5997ba138637201328bbff77960574ae" + integrity sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg== + dependencies: + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -80,6 +175,11 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.29.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz#c0a0766f1a13617d8a17407d7ab8f9d486225ea4" + integrity sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw== + "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" @@ -102,16 +202,39 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== +"@babel/helper-validator-option@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz#cf315be940213b354eb4abcc0bd01ebe3f73bc2a" + integrity sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw== + +"@babel/helpers@^7.29.7": + version "7.29.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.10.tgz#d662b4a2d66cc6cf02bc50e8aced023fbc8649e9" + integrity sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg== + dependencies: + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.8" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" @@ -121,11 +244,67 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.29.7", "@babel/parser@^7.29.8", "@babel/parser@^7.29.9": + version "7.29.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.9.tgz#e7ee0a24f752c5296c6455855ccb72662e67ea96" + integrity sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA== + dependencies: + "@babel/types" "^7.29.8" + "@babel/parser@^7.12.13", "@babel/parser@^7.13.13": version "7.13.13" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz#6115264516e95ead0f35a41710906612e447f605" + integrity sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-jsx@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" @@ -133,6 +312,69 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-jsx@^7.27.1": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz#622c16f9ad63782fe6e83dadc7e40330744b7f1e" + integrity sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" @@ -140,6 +382,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-typescript@^7.27.1": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz#7c29388932313ed58413a0343048d75d92fb5b24" + integrity sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-transform-react-display-name@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" @@ -203,6 +452,11 @@ "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-transform-typescript" "^7.13.0" +"@babel/runtime@^7.12.5": + version "7.29.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.10.tgz#fe9920782f7ee34029165ac6f272984917a1641b" + integrity sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA== + "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" @@ -219,6 +473,15 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" +"@babel/template@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700" + integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + "@babel/traverse@^7.13.0": version "7.13.13" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" @@ -233,6 +496,27 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.29.7": + version "7.29.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.10.tgz#08ab387639b4a67304511259c7da6cf23a82e91c" + integrity sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.8" + "@babel/helper-globals" "^7.29.7" + "@babel/parser" "^7.29.9" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.8" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.29.7", "@babel/types@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.8.tgz#1229eef31d85156d70fa3f4cd859376d0eaf6863" + integrity sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13": version "7.13.14" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" @@ -242,11 +526,66 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@csstools/color-helpers@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" + integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== + +"@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== + +"@csstools/css-color-parser@^3.0.9": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" + integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== + dependencies: + "@csstools/color-helpers" "^5.1.0" + "@csstools/css-calc" "^2.1.4" + +"@csstools/css-parser-algorithms@^3.0.4": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== + +"@csstools/css-tokenizer@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== + "@discoveryjs/json-ext@^0.5.0": version "0.5.2" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== +"@emnapi/core@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.10.0.tgz#380ccc8f2412ea22d1d972df7f8ee23a3b9c7467" + integrity sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw== + dependencies: + "@emnapi/wasi-threads" "1.2.1" + tslib "^2.4.0" + +"@emnapi/runtime@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c" + integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz#28fed21a1ba1ce797c44a070abc94d42f3ae8548" + integrity sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w== + dependencies: + tslib "^2.4.0" + "@emotion/hash@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" @@ -267,6 +606,276 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.6.tgz#8dc9afa2ac1506cb1a58f89940f1c124446c8df3" + integrity sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw== + +"@jest/console@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-30.5.2.tgz#7c5d610e9a3a4edd96ecebbb332a64aaefb030d8" + integrity sha512-e8sQC4pCMHPBrPX7Hk8TJr+DM5dkUnImSTNag8SEWFAFAF6xIz4AJvCKapnrdHnZxep4bxw4PhG+ZbimYBMyKw== + dependencies: + "@jest/types" "30.5.1" + "@types/node" "*" + chalk "^4.1.2" + jest-message-util "30.5.1" + jest-util "30.5.1" + slash "^3.0.0" + +"@jest/core@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-30.5.2.tgz#79ca6ec15ec407380a9202e861aee314c294c9f3" + integrity sha512-/jqvFWoJF7LV1a6AUpYMbMm+2yIYsHJfR474H0SCzr9k8tnO/jl9wRg6zSG6lxgf6EozNlCG4amFzWsbZSvvZA== + dependencies: + "@jest/console" "30.5.2" + "@jest/pattern" "30.5.0" + "@jest/reporters" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + ci-info "^4.2.0" + exit-x "^0.2.2" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.11" + jest-changed-files "30.5.1" + jest-config "30.5.2" + jest-haste-map "30.5.1" + jest-message-util "30.5.1" + jest-regex-util "30.5.0" + jest-resolve "30.5.1" + jest-resolve-dependencies "30.5.2" + jest-runner "30.5.2" + jest-runtime "30.5.2" + jest-snapshot "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" + jest-watcher "30.5.2" + pretty-format "30.5.1" + slash "^3.0.0" + +"@jest/diff-sequences@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.5.0.tgz#b896d470df751cc0c7d1a0c5078f80a67ce108d4" + integrity sha512-OsqBjHXCn8cadasoAZBP6nWYvMsRhpMzGXTpxJ5aO04NlbdhIz+FVe3q49l0AwVhsz/cEmIpBes6gAFl1/dWQg== + +"@jest/environment-jsdom-abstract@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.5.2.tgz#a108d1222cd9f62045fc4dc556f8d07abcd6bd01" + integrity sha512-8/P+8hKv7L4mhFoB6gpYLj/fuzXk8PWrde7TDHh8tJz5pE1ktlMbg0y6hDY/V8MfAnispFlPl/vPifowLy3JGQ== + dependencies: + "@jest/environment" "30.5.2" + "@jest/fake-timers" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + jest-mock "30.5.2" + jest-util "30.5.1" + +"@jest/environment@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-30.5.2.tgz#9f28a93aaa5569dab513c358843bec855c154b6d" + integrity sha512-nwFPOUMbmsjNNRCpnJpB9HbSZu4C07wDDds++5j+j1MezzPLxMPDdbdUVjr2o4RULDOValnDd70taPFI1EtxAg== + dependencies: + "@jest/fake-timers" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + jest-mock "30.5.2" + +"@jest/expect-utils@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-30.5.2.tgz#448c3f7bdc3d8f8afa794c839550cdd72962c0db" + integrity sha512-d/HOLSrJUlBIl6n3LzOa7cjW3xdePm5H5gQw2lixZ/0h157l9sw3mLblzFqnPcTbhDzhRQdBOX3A3KcG73nm5Q== + dependencies: + "@jest/get-type" "30.5.0" + +"@jest/expect@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-30.5.2.tgz#28f85a12a0adc8910cee9d9e98cc147be84a3dd5" + integrity sha512-2E+1Pg6jJxbRjLNLpciC71iri/3qsKJL222/aXJEFwC0VdUSvfS+JZQQLEVjUYYc8t8pQu2MGE3cF2+bNTYRsg== + dependencies: + expect "30.5.2" + jest-snapshot "30.5.2" + +"@jest/fake-timers@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-30.5.2.tgz#ce33f0db5dbd116ac9299c59550f9083f0f8a889" + integrity sha512-GKk0h0tKT5SpDPxDhPg3r9mm5s8/YCBzVNMOGdRiQXwUiMsjU10mVPlMaQstH6/cu50vOb8N9oQUMETHuwwxKw== + dependencies: + "@jest/types" "30.5.1" + "@sinonjs/fake-timers" "^15.4.0" + "@types/node" "*" + jest-message-util "30.5.1" + jest-mock "30.5.2" + jest-util "30.5.1" + +"@jest/get-type@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.5.0.tgz#0fc76dd792523bf05d7715a18041c185f9128cc4" + integrity sha512-9/2VUPitAjmBzbvDvqrxmvB7BzWsBW0WmkkojX1ODuxX1NLGxx9gfaZpHB0z8DtJ9uhGNmZG/VXBhf8uO0OV8Q== + +"@jest/globals@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-30.5.2.tgz#6e89c0b6334fc4b9cd9b18fa4495edc7783e856f" + integrity sha512-62zfS+dL+M5aTNHXCNLyqD+j4oqxTIzDYrZbpqMP8Yn+gvlAGyzC6BSPNb1ZmFOakV1RtFYX/O3FCQXSWmQdgg== + dependencies: + "@jest/environment" "30.5.2" + "@jest/expect" "30.5.2" + "@jest/types" "30.5.1" + jest-mock "30.5.2" + +"@jest/pattern@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.5.0.tgz#9f5dd0596a684b81eba2d7c1dfdca8d09978d326" + integrity sha512-HdNQYSdRTEBNrginaqzQtTjG0HRMfrra/z6Ok7uL3S87vSlarIVohEsJsSj5edu3MiHoHjAkvPROz5ZjoKai+w== + dependencies: + "@types/node" "*" + jest-regex-util "30.5.0" + +"@jest/react-is-18@npm:react-is@^18.3.1": + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +"@jest/react-is-19@npm:react-is@^19.2.5": + version "19.3.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.3.0.tgz#716028d67e9993d23a2d353c6d08a3c1ef2bbeb4" + integrity sha512-UpMYezM4v5/18F28aC66AEsjXIgE02kyEMH6yLdgLXu/UTfa1Ntwck/nNLrbqJsEXW7gPb0coNO9FQse9WTovA== + +"@jest/reporters@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-30.5.2.tgz#bbcf02e1532b9565c0fd90e805ac364df753b81a" + integrity sha512-ev6E9iG73twQcfAfoTnviuYkr3yOrYbzAtMFCimv2fxHXPIp9PBt2u1wNMt0aYWgl8FPwIcS8oqRJg6alnht4Q== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" + "@jridgewell/trace-mapping" "^0.3.31" + "@types/node" "*" + chalk "^4.1.2" + collect-v8-coverage "^1.0.2" + exit-x "^0.2.2" + glob "^13.0.6" + graceful-fs "^4.2.11" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^5.0.0" + istanbul-reports "^3.1.3" + jest-message-util "30.5.1" + jest-util "30.5.1" + jest-worker "30.5.1" + slash "^3.0.0" + string-length "^4.0.2" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.5.0.tgz#781f142de46345b903f43140b15865732abfd356" + integrity sha512-/hunigyNpc4RCjC0VaW3f5RCUZVM2+WQ65qP7z083Gmvac7or2LI50XVNOtE4YPgBpV0yxYiAgorAPGniCoJmg== + dependencies: + "@sinclair/typebox" "^0.34.0" + +"@jest/snapshot-utils@30.5.1": + version "30.5.1" + resolved "https://registry.yarnpkg.com/@jest/snapshot-utils/-/snapshot-utils-30.5.1.tgz#172720d0546ab05d5a7dc7fa3feb74c166c96310" + integrity sha512-V3wnxNtiVmw5PPVg433Cn3VdXnsOeu/ofLw3KC04Bn2y1wIlU5kozXQn48rhrgj/02LrCVtntTEF1yBha0XSUw== + dependencies: + "@jest/types" "30.5.1" + chalk "^4.1.2" + graceful-fs "^4.2.11" + natural-compare "^1.4.0" + +"@jest/source-map@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-30.5.2.tgz#454b15d5709e7b6d81cb5619d68106482b424da0" + integrity sha512-c5CehvkbfHX6yyNg7bMn2ylqlp9AHXuZ/3hPH/Lh5bxD/vefd/lV9HBjMqXef9yQNqkdwyZvkLSVSwB38hy8Qw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.31" + callsites "^3.1.0" + convert-source-map "^2.0.0" + graceful-fs "^4.2.11" + +"@jest/test-result@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-30.5.2.tgz#eac81c284adc34a5be311d877f7f6b18173e38ae" + integrity sha512-eO6YU5rsLfs60ne694e0IAmRgeBnoA8mu0nlxXDbl/1j5km0o2vO9/VbbUIKIH+WRKKEI+ELgwraRGn2Lhep8g== + dependencies: + "@jest/console" "30.5.2" + "@jest/types" "30.5.1" + "@types/istanbul-lib-coverage" "^2.0.6" + collect-v8-coverage "^1.0.2" + +"@jest/test-sequencer@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-30.5.2.tgz#6ddef45f8f8be150482e6e8a58eaae24f114495a" + integrity sha512-bmij8jZyYAC47ExT2GeP7PcrlwSNS+Bp3KeRuBH88gpcxqDv6fljN8PemS4J/lLZ79xb6mpaennQTTq0zUAVVg== + dependencies: + "@jest/test-result" "30.5.2" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" + slash "^3.0.0" + +"@jest/transform@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-30.5.2.tgz#3b4a7d43b3ba4ee1926cfcca8e271eb47d65a5d6" + integrity sha512-LBGwmaE886C41jDZ65eqR1YbXM7642MK3ZhTowZd5+xDlrDLuf4ePuDdDmVSvcr8NTVJ3MqxLkMbUCzuigUaoQ== + dependencies: + "@babel/core" "^7.27.4" + "@jest/types" "30.5.1" + "@jridgewell/trace-mapping" "^0.3.31" + babel-plugin-istanbul "^8.0.0" + chalk "^4.1.2" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" + jest-regex-util "30.5.0" + jest-util "30.5.1" + pirates "^4.0.7" + slash "^3.0.0" + write-file-atomic "^5.0.1" + +"@jest/types@30.5.1": + version "30.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.5.1.tgz#dc08c773401c18ea0d9ca670fb4a10a22c8a4fb5" + integrity sha512-LvVYn83nnXPl+Rg98nvcFgjx6nRMTArhSn6RAX/w3ELn54S8A42TYZvsCMdGUqTM8S0wyXbtlQdU6Hi6dykj9g== + dependencies: + "@jest/pattern" "30.5.0" + "@jest/schemas" "30.5.0" + "@types/istanbul-lib-coverage" "^2.0.6" + "@types/istanbul-reports" "^3.0.4" + "@types/node" "*" + "@types/yargs" "^17.0.33" + chalk "^4.1.2" + "@jest/types@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" @@ -276,6 +885,40 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz#f4c663e862f06dc98ca4d453862c46902789a18d" + integrity sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28", "@jridgewell/trace-mapping@^0.3.31": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@material-ui/core@^4.11.3": version "4.11.3" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.3.tgz#f22e41775b0bd075e36a7a093d43951bf7f63850" @@ -358,6 +1001,13 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" +"@napi-rs/wasm-runtime@^1.1.4": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.5.tgz#8c728c07e2543d80e55ccb34158c4ae9d6bd13e8" + integrity sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA== + dependencies: + "@tybys/wasm-util" "^0.10.3" + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -379,11 +1029,201 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" +"@parcel/watcher-android-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz#99aaa3223d43807c9340af439cad7e9b6d26ada6" + integrity sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA== + +"@parcel/watcher-darwin-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz#024496e586b4744f09ce532bbe89fe38ef02a64e" + integrity sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw== + +"@parcel/watcher-darwin-x64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz#a4621df1359a93d39a332d9bab5ff09016a0608f" + integrity sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw== + +"@parcel/watcher-freebsd-x64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz#7f565ed1a5b3a5e604e6a4799121518265d62a3d" + integrity sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ== + +"@parcel/watcher-linux-arm-glibc@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz#ad7d3825e67b81999165da42593022045abc0889" + integrity sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg== + +"@parcel/watcher-linux-arm-musl@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz#fe7d1cccb2c483215c090e938cf5cf404d2f9a8c" + integrity sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw== + +"@parcel/watcher-linux-arm64-glibc@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz#7e239dcb4646c4c79f006a7131a48238249530da" + integrity sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g== + +"@parcel/watcher-linux-arm64-musl@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz#c58b8d9c6d8d81594be00dd83aab741c1aaf7e0e" + integrity sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA== + +"@parcel/watcher-linux-x64-glibc@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz#5184fa9a770478d86e56875f4ee163a0abdc8791" + integrity sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A== + +"@parcel/watcher-linux-x64-musl@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz#2d1c55aa7246cbc7670e2612058a8a542c9cf246" + integrity sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw== + +"@parcel/watcher-win32-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz#15e09432040fee9e2213aa9c10ed589012526def" + integrity sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ== + +"@parcel/watcher-win32-x64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz#9bee199a2a4accd557b451ac2c1c793f305ae012" + integrity sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A== + +"@parcel/watcher@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.6.0.tgz#99661f6220070b76a766aba6b7e313a087a1be4f" + integrity sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w== + dependencies: + detect-libc "^2.0.3" + is-glob "^4.0.3" + node-addon-api "^7.0.0" + picomatch "^4.0.4" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.6.0" + "@parcel/watcher-darwin-arm64" "2.6.0" + "@parcel/watcher-darwin-x64" "2.6.0" + "@parcel/watcher-freebsd-x64" "2.6.0" + "@parcel/watcher-linux-arm-glibc" "2.6.0" + "@parcel/watcher-linux-arm-musl" "2.6.0" + "@parcel/watcher-linux-arm64-glibc" "2.6.0" + "@parcel/watcher-linux-arm64-musl" "2.6.0" + "@parcel/watcher-linux-x64-glibc" "2.6.0" + "@parcel/watcher-linux-x64-musl" "2.6.0" + "@parcel/watcher-win32-arm64" "2.6.0" + "@parcel/watcher-win32-x64" "2.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/core@^0.3.6": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.3.6.tgz#3569708bd4be4d8870ba32bf1c456dac81600d97" + integrity sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA== + +"@sinclair/typebox@^0.34.0": + version "0.34.52" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.52.tgz#62f8a686e4ab28a8944902e2ad2d648312ef11cb" + integrity sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw== + +"@sinonjs/commons@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^15.4.0": + version "15.4.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz#5d40c151a9e66075fe4520bec40bccfe54931962" + integrity sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA== + dependencies: + "@sinonjs/commons" "^3.0.1" + +"@testing-library/dom@^10.4.2": + version "10.4.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.2.tgz#e996827c4e5e1f13589527293b4b3958de2f709f" + integrity sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + picocolors "1.1.1" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-7.0.1.tgz#649a9a8b2039f28d29f9f7a46eba9a8b727f811e" + integrity sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw== + dependencies: + "@adobe/css-tools" "^4.4.0" + aria-query "^5.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" + picocolors "^1.1.1" + redent "^3.0.0" + +"@testing-library/react@^16.3.3": + version "16.3.3" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.3.tgz#426907e7716f37038dab8aa69d8f0459f9ec24b2" + integrity sha512-Uo193NgQbPMz6lrrhtRQQFcMC6Re/ELLFbbuVL30WDlZxlpZf9/lMHTAVxPRLw1q1iu9OJmR1c2BLiENRstdBg== + dependencies: + "@babel/runtime" "^7.12.5" + +"@tybys/wasm-util@^0.10.3": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.4.tgz#3e85ecb266f9d1722250e89bc69528615720b154" + integrity sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A== + dependencies: + tslib "^2.4.0" + "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + +"@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== + dependencies: + "@babel/types" "^7.28.2" + "@types/eslint-scope@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" @@ -433,6 +1273,11 @@ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== +"@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + "@types/istanbul-lib-report@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" @@ -448,6 +1293,30 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/istanbul-reports@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^30.0.0": + version "30.0.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-30.0.0.tgz#5e85ae568006712e4ad66f25433e9bdac8801f1d" + integrity sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA== + dependencies: + expect "^30.0.0" + pretty-format "^30.0.0" + +"@types/jsdom@^21.1.7": + version "21.1.7" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.7.tgz#9edcb09e0b07ce876e7833922d3274149c898cfa" + integrity sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -495,6 +1364,11 @@ dependencies: "@types/react" "*" +"@types/react-dom@^19.3.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.3.0.tgz#90294a9266efd928a5266f2110d60d5dba5015d2" + integrity sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q== + "@types/react-transition-group@^4.2.0": version "4.4.1" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1" @@ -519,6 +1393,13 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^19.3.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.3.0.tgz#3b3ce8d8c1627fb5ccd4dadd57ef445c5a153b77" + integrity sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg== + dependencies: + csstype "^3.2.2" + "@types/scheduler@*": version "0.16.1" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" @@ -529,11 +1410,21 @@ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== +"@types/stack-utils@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + "@types/tapable@^1": version "1.0.7" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== +"@types/tough-cookie@*": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== + "@types/uglify-js@*": version "3.13.0" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" @@ -574,6 +1465,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.33": + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^4.21.0": version "4.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.21.0.tgz#3fce2bfa76d95c00ac4f33dff369cb593aab8878" @@ -644,6 +1542,125 @@ "@typescript-eslint/types" "4.21.0" eslint-visitor-keys "^2.0.0" +"@ungap/structured-clone@^1.3.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.4.0.tgz#5e2e1374c0a30b5a42e8b083523a225c6945f88a" + integrity sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ== + +"@unrs/resolver-binding-android-arm-eabi@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz#98a9fee62c01f209747a4ab5855f1ced38a6d03a" + integrity sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w== + +"@unrs/resolver-binding-android-arm64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz#46b7e8a1393f907462324f1576e8883529acf066" + integrity sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ== + +"@unrs/resolver-binding-darwin-arm64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz#0ea07b00e2583ab004b853d4c02ec5f0745d490c" + integrity sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w== + +"@unrs/resolver-binding-darwin-x64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz#a2a6901ed58449b91b4438e582f6890cba956049" + integrity sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA== + +"@unrs/resolver-binding-freebsd-x64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz#ebe6fe7f6706b7378ea4a48a024602e9c2f48f89" + integrity sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz#e6040fedaa240124419d35b25b69c5fa15ddb499" + integrity sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz#d217a8fb59f659c131539326c140e7b62e3e3c6a" + integrity sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g== + +"@unrs/resolver-binding-linux-arm64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz#edab13c46a45783a7e01351e113825c04f352e24" + integrity sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg== + +"@unrs/resolver-binding-linux-arm64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz#e5e195db1130f7d3b6aa2fd67b3c9fe1ea4859a0" + integrity sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA== + +"@unrs/resolver-binding-linux-loong64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz#f01d22e091bae13016f4636698d9dcbbda775c3e" + integrity sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q== + +"@unrs/resolver-binding-linux-loong64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz#7d23efcb98adf076bfbcecc27b4212c36aa6697d" + integrity sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz#1f35f1eaa322f33cf2d96dac27f0626a93ffe2f6" + integrity sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz#674faa696f5ce96f214873946a1e2d6ca96723dd" + integrity sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A== + +"@unrs/resolver-binding-linux-riscv64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz#37835fdd0b472ecdcffccd4288f19018454b138c" + integrity sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w== + +"@unrs/resolver-binding-linux-s390x-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz#b6edf13db4bb0accdcd1ad482a4eea0301de9224" + integrity sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw== + +"@unrs/resolver-binding-linux-x64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz#daddad00bf65a405202284da1eb1db8eb83b218f" + integrity sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ== + +"@unrs/resolver-binding-linux-x64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz#dfdff1e0c2bad25420b41c76a746011c3983b9bb" + integrity sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A== + +"@unrs/resolver-binding-openharmony-arm64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz#ce07c4f5e7b42f7bfce45e7629b8659063aefefe" + integrity sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ== + +"@unrs/resolver-binding-wasm32-wasi@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz#82514f0506cfaf65f17fe16095f92d450e487183" + integrity sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A== + dependencies: + "@emnapi/core" "1.10.0" + "@emnapi/runtime" "1.10.0" + "@napi-rs/wasm-runtime" "^1.1.4" + +"@unrs/resolver-binding-win32-arm64-msvc@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz#521427dd59a8f4740ddd1dc7c3bc6af1aa1d260d" + integrity sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g== + +"@unrs/resolver-binding-win32-ia32-msvc@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz#05b63286ff2da37e0ce3083b8390884385efff62" + integrity sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g== + +"@unrs/resolver-binding-win32-x64-msvc@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz#72da0da48d72b1e87831b9c0308931d3f4669027" + integrity sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA== + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" @@ -843,6 +1860,11 @@ acorn@^8.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -891,7 +1913,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.3.0: +ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -923,6 +1945,16 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.2.2: + version "6.4.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.4.0.tgz#69093d6436d30dbb9b04fe7bdcbcfe16c697d8a1" + integrity sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -937,6 +1969,16 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0, ansi-styles@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -945,6 +1987,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -965,6 +2015,18 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +aria-query@^5.0.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1111,11 +2173,76 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +babel-jest@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.5.2.tgz#ee4b3b265baf9dad68e6275bc813ef35d1736e6d" + integrity sha512-ES8WeJ2fNWPEDunyAtUfJ12nHyaWUloCHdkfK2oW5uSoQSUmjNKdWiGaXJITJwvFEWoD/evHEg/QoCXAvLaQqQ== + dependencies: + "@jest/transform" "30.5.2" + "@types/babel__core" "^7.20.5" + babel-plugin-istanbul "^8.0.0" + babel-preset-jest "30.5.0" + chalk "^4.1.2" + graceful-fs "^4.2.11" + slash "^3.0.0" + +babel-plugin-istanbul@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-8.0.0.tgz#8762f542153a52b77e626dd2c033b467de2f2fa2" + integrity sha512-18wCskrN3DgbuBmp1gr7LBGT8xdz5xhQQqFvFhVxbkl8VBCrMKQ2YtqBWtUal1Zrc1HTuX0011+Brjw78TCFkg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-instrument "^6.0.2" + test-exclude "^7.0.1" + +babel-plugin-jest-hoist@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.5.0.tgz#425bf7ee24cffe47bfdcfeeca2885b87b1cf6644" + integrity sha512-gtGo1B+u14jrZQv6TdSWIWkTqclboo7Qn+dFAGUOIuXLFuJKAdg3U5MIWzZnW4vfUb4dX9skmAMiby86e/SF4A== + dependencies: + "@types/babel__core" "^7.20.5" + +babel-preset-current-node-syntax@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-30.5.0.tgz#33162eee375c0066f2b2059cd97a7840ef84c259" + integrity sha512-ZGPn5ClP4lBDpuOK8W1yQIOy359HmbnZv3suucAlIe+SEE9yDsxV4S2PjSbH2Vc97U+WmzYD7vw3kr8NsQ/i6w== + dependencies: + babel-plugin-jest-hoist "30.5.0" + babel-preset-current-node-syntax "^1.2.0" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1129,6 +2256,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +baseline-browser-mapping@^2.11.26: + version "2.11.28" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.28.tgz#784efec0fa3965c28a0bbb755f40604ace1c9db0" + integrity sha512-br0LOmjJqr6Rt4AEkadbcNf67Zpo7EPwKsWbjnRrJIa1QYFHQBqM4C7F2WTbV8ahTEcg1Eo+Y0aWjjORInYFyA== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -1209,6 +2341,20 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.2: + version "2.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.7.tgz#14ea3836731823bb24740225ea43b941b436f9d1" + integrity sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g== + dependencies: + balanced-match "^1.0.0" + +brace-expansion@^5.0.8: + version "5.0.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.12.tgz#995fbb4750a77c4d16a7dc942ff2ca6ef8e675ec" + integrity sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ== + dependencies: + balanced-match "^4.0.2" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -1248,6 +2394,31 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.70" +browserslist@^4.24.0: + version "4.29.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.29.3.tgz#9c8dafe96ab1c8e40e21c1274bdfa05aaee46476" + integrity sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA== + dependencies: + baseline-browser-mapping "^2.11.26" + caniuse-lite "^1.0.30001813" + electron-to-chromium "^1.5.439" + node-releases "^2.0.57" + update-browserslist-db "^1.3.3" + +bs-logger@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.2.tgz#3052372d49a1bc2a25e68c267697af5e823e147a" + integrity sha512-V2o8YS2EhrKMO9AumnkK0ynynfFlsajpYupwq7S46H5mhcanwxDkNTw3K67wPIcKTH1ffkA4vhMOtAc7gRmPZw== + dependencies: + node-int64 "^0.4.0" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1291,7 +2462,7 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -callsites@^3.0.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -1304,7 +2475,7 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase@^5.0.0: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -1314,11 +2485,21 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + caniuse-lite@^1.0.30001181: version "1.0.30001207" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== +caniuse-lite@^1.0.30001813: + version "1.0.30001816" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz#80567cffb179fd8a1702816bc80de8efc9784021" + integrity sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw== + canvas@^2.6.1: version "2.7.0" resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.7.0.tgz#3ce3fe30c69595ccd2bd1232967e681c026be61e" @@ -1359,6 +2540,19 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -1390,6 +2584,16 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" +ci-info@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" + integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== + +cjs-module-lexer@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.3.0.tgz#4eb71c63d5f70f0b1d8a39a595c134a6692493f2" + integrity sha512-lmNyBzi6iYiqyrExTctfmjd8tInx+dHu9PBomTfH5RXS53c27JMFJgzNv5TyAnm3PgGf+MLy0+Ws41/HlVxdKQ== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1453,6 +2657,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -1467,11 +2680,21 @@ clsx@^1.0.4: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collect-v8-coverage@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -1499,7 +2722,7 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: +color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -1603,6 +2826,11 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -1654,6 +2882,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + css-loader@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00" @@ -1713,11 +2950,21 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssfontparser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" + integrity sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg== + cssom@^0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -1735,6 +2982,14 @@ cssstyle@^2.0.0: dependencies: cssom "~0.3.6" +cssstyle@^4.2.1: + version "4.6.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" + integrity sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg== + dependencies: + "@asamuzakjp/css-color" "^3.2.0" + rrweb-cssom "^0.8.0" + csstype@^2.2.0: version "2.5.7" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff" @@ -1750,6 +3005,11 @@ csstype@^3.0.2, csstype@^3.0.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== +csstype@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -1774,6 +3034,14 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== + dependencies: + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + date-fns@^2.16.1: version "2.20.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.20.0.tgz#df00ba9177fbea22d88010b5844ecc91e9e03ceb" @@ -1786,6 +3054,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" +debug@4, debug@^4.3.1, debug@^4.3.4: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -1805,6 +3080,11 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.5.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -1822,6 +3102,11 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +dedent@^1.6.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.2.tgz#34e2264ab538301e27cf7b07bf2369c19baa8dd9" + integrity sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA== + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -1844,6 +3129,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -1909,6 +3199,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -1919,6 +3214,16 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +detect-newline@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + detect-node@^2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" @@ -1965,6 +3270,16 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== + dom-converter@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -2028,6 +3343,11 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2046,6 +3366,16 @@ electron-to-chromium@^1.3.649: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.708.tgz#127970d2fc665ab356be59e668f2914856419176" integrity sha512-+A8ggYZ5riOLMcVAuzHx6bforaPzaiLnW1QOMD2SlMYQVi7QQTyQ/WrlZoebIH9ikmgr+tLJGpNITFFCUiQcPw== +electron-to-chromium@^1.5.439: + version "1.5.454" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.454.tgz#7f6f6cd1c855e1f7fb55fc17798e92e6ea08cb04" + integrity sha512-NqD5GhkXnxJpDQVCmmpc546qjH6kei2VI9m45CTF+sQU7bcS7YeVt7ba0cnjueMH1AXGRu/driZUP9iYVSv7vg== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2056,6 +3386,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -2112,6 +3447,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" @@ -2158,6 +3498,11 @@ es-module-lexer@^0.4.0: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== +es-module-lexer@^2.1.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.2.tgz#311fa4f40168c1975c505477c51b23234d41ad55" + integrity sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -2198,6 +3543,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2208,6 +3558,11 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@^1.11.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -2431,6 +3786,26 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit-x@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exit-x/-/exit-x-0.2.2.tgz#1f9052de3b8d99a696b10dad5bced9bdd5c3aa64" + integrity sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ== + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2444,6 +3819,18 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expect@30.5.2, expect@^30.0.0: + version "30.5.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-30.5.2.tgz#f3fe2eeeb9df5c55e237c6428d37f37204b55f4f" + integrity sha512-0LNuMvs8/5mRYhnCR4k+lGV7fqPMs6Bnksda4S3zsCUmdxBpAn4zU4NNzXdq1pMKe/H4W5t/zVIDSJ/H3e0vDA== + dependencies: + "@jest/expect-utils" "30.5.2" + "@jest/get-type" "30.5.0" + jest-matcher-utils "30.5.2" + jest-message-util "30.5.1" + jest-mock "30.5.2" + jest-util "30.5.1" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -2561,6 +3948,11 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -2590,6 +3982,18 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.4.tgz#2227759ee352e8371b9de30ceda7633ce65ca3be" + integrity sha512-tGQtaoYisPDriJBN0mT5yZSyNETnJGA1gTYxaVRAE5KUO3LI9kPUc9WIu8JXcxaIci+faIKlzXqXyPgrmubtBQ== + dependencies: + bser "2.1.2" + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -2646,7 +4050,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -2677,6 +4081,14 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2752,6 +4164,11 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -2771,6 +4188,11 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2822,6 +4244,27 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@^10.4.1: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^13.0.6: + version "13.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.6.tgz#078666566a425147ccacfbd2e332deb66a2be71d" + integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw== + dependencies: + minimatch "^10.2.2" + minipass "^7.1.3" + path-scurry "^2.0.2" + glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -2886,11 +4329,28 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.2.11: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== +handlebars@^4.7.9: + version "4.7.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.10.tgz#12419ea1b41391b3ffcf003f2164dcbce090c417" + integrity sha512-P5VJMVM7qgBn6vjXMw8WG9uVI+ncf2pi72j4de4yz5ZULLj2RGqLYaKOYGsgyrViQ0tePOVlN1tDCCXXtFqXKg== + dependencies: + minimist "^1.2.8" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -3006,11 +4466,23 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== + dependencies: + whatwg-encoding "^3.1.1" + html-entities@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-minifier-terser@^5.0.1: version "5.1.1" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" @@ -3089,6 +4561,14 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== +http-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -3117,6 +4597,14 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -3144,6 +4632,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + iconv-lite@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" @@ -3197,6 +4692,14 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" +import-local@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3417,6 +4920,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -3431,6 +4939,13 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" @@ -3489,6 +5004,11 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-regex@^1.0.4, is-regex@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" @@ -3571,6 +5091,74 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" + integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== + dependencies: + "@jridgewell/trace-mapping" "^0.3.23" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + +istanbul-reports@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jest-canvas-mock@^2.5.8: + version "2.5.8" + resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.5.8.tgz#f9b44e2957dd6be1e2af11f3ce5cccf97bc13993" + integrity sha512-RUZRaFHCnLjg0/UAodCai5PTsa7kQI1rUXE5wsQu9f2315dh2YSN7/i3fObTycs7PO09DLSiGXiJTALYIw2yuw== + dependencies: + cssfontparser "^1.2.1" + moo-color "^1.0.2" + +jest-changed-files@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-30.5.1.tgz#0f91cc77e6f834fb2e85bd277d9b313e555acd43" + integrity sha512-0+bvMM/ENhDI29Z8q1r4HxiDIi4G5tnBmSw4esfPQoj9q8Nik7KIyuxHkTVnnniJQf05SxpGaKDQ+4h28ynGPg== + dependencies: + execa "^5.1.1" + jest-util "30.5.1" + p-limit "^3.1.0" + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -3580,6 +5168,349 @@ jest-changed-files@^24.9.0: execa "^1.0.0" throat "^4.0.0" +jest-circus@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-30.5.2.tgz#6898ebf43d0bdd683af9461d0756ffff210f5f25" + integrity sha512-vffFgjs5JSJ9q4ds1vNW3klKYPJfYfIY61LT/zaZgvTeASJOWZUt8LBfHgIcV4rwxlPBLl/ePBGccHEclS4PlQ== + dependencies: + "@jest/environment" "30.5.2" + "@jest/expect" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + chalk "^4.1.2" + co "^4.6.0" + dedent "^1.6.0" + is-generator-fn "^2.1.0" + jest-each "30.5.2" + jest-matcher-utils "30.5.2" + jest-message-util "30.5.1" + jest-runtime "30.5.2" + jest-snapshot "30.5.2" + jest-util "30.5.1" + p-limit "^3.1.0" + pretty-format "30.5.1" + pure-rand "^7.0.0" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-cli@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-30.5.2.tgz#9936348acafd63aa5a2cb40021dd7f393e6212c2" + integrity sha512-YYYxUUVjFgPvgEleKNKMaYGIFgR3l3832Cl0kRL/oCiDZ03v7wImUtquHl2OOBCCNgprjZgBN5bczS/JklPBDg== + dependencies: + "@jest/core" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/types" "30.5.1" + chalk "^4.1.2" + exit-x "^0.2.2" + import-local "^3.2.0" + jest-config "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" + yargs "^17.7.2" + +jest-config@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-30.5.2.tgz#57e6b5f5c16a953b037e9a967152ec882118a356" + integrity sha512-U6221OZekabePvGcGPf4raIBKMvYQWFHvhobDJRojOYaFMj2HaGytAdknjDhYc6JTz2fdHW9+6k0wWUDaNeOFQ== + dependencies: + "@babel/core" "^7.27.4" + "@jest/get-type" "30.5.0" + "@jest/pattern" "30.5.0" + "@jest/test-sequencer" "30.5.2" + "@jest/types" "30.5.1" + babel-jest "30.5.2" + chalk "^4.1.2" + ci-info "^4.2.0" + deepmerge "^4.3.1" + glob "^13.0.6" + graceful-fs "^4.2.11" + jest-circus "30.5.2" + jest-docblock "30.5.0" + jest-environment-node "30.5.2" + jest-regex-util "30.5.0" + jest-resolve "30.5.1" + jest-runner "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" + parse-json "^5.2.0" + pretty-format "30.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.5.2.tgz#0d96ecb53aac3949132a6ce2106790d9212edced" + integrity sha512-rBtHnI6BWTiWj3lM7fOLVfChx7R9B0u9VV3PRHawKs79x6ZjW1QoSrKenaigNGWlvhtoi2BqvDbABDie+Os3xQ== + dependencies: + "@jest/diff-sequences" "30.5.0" + "@jest/get-type" "30.5.0" + chalk "^4.1.2" + pretty-format "30.5.1" + +jest-docblock@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-30.5.0.tgz#7cf9d08ba714fde0b68c9cb4bfc0be867a7dd11d" + integrity sha512-NwDqcxtoZi33RhuW+zJS/RVA3rmheQ8BnwpYZuc/Eruaz6seQb7+aoCeDZu/3X7W2XmD8DbSo9Pn72DbKsBFYw== + dependencies: + detect-newline "^3.1.0" + +jest-each@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-30.5.2.tgz#fd905f1ce450ab08fdc8ea8ff2bf740db2380872" + integrity sha512-GRrW+7fmmgmkvyfEBqc1QFdWnF1Ex5yG6Y6AWL4TTxnkWlKIT98dsKh3P3UuWm6v4XsQwVE6DEzXIPMzWJ3ZbA== + dependencies: + "@jest/get-type" "30.5.0" + "@jest/types" "30.5.1" + chalk "^4.1.2" + jest-regex-util "30.5.0" + jest-util "30.5.1" + pretty-format "30.5.1" + +jest-environment-jsdom@^30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-30.5.2.tgz#955498169b52596391e54704bbc5cd82280fc9d6" + integrity sha512-6NOZjEP+WNi4WXjbxb/1ROnfaMxn6Dhqu6uSC22o0H28z+uppejs/jZ9KCVoLepqqoCjcNZujtzQqC9jSV15jg== + dependencies: + "@jest/environment" "30.5.2" + "@jest/environment-jsdom-abstract" "30.5.2" + "@types/jsdom" "^21.1.7" + jsdom "^26.1.0" + +jest-environment-node@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-30.5.2.tgz#64207d64054ccaa30d677dbd99eb95c7f1c72fa1" + integrity sha512-Ciz4KgTGIbojxSKpuFImgWJj5EyqfE8xMq9NxWmOXnQywHHS03H9Mv+vaCB29J5pr3JBrY27WbRV18rBdjh8Dg== + dependencies: + "@jest/environment" "30.5.2" + "@jest/fake-timers" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + jest-mock "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" + +jest-haste-map@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-30.5.1.tgz#a1dbba63564492f53783d754623cdd41bb0328b0" + integrity sha512-VIFgt67jW480YDxKfEv9IYQKrFpYt7bOCMn3VsnjK7AK9qo7p6acpnA1DHwsVOULE3dTaYew/6JaTD/d0VDHoQ== + dependencies: + "@jest/types" "30.5.1" + "@parcel/watcher" "^2.6.0" + "@types/node" "*" + anymatch "^3.1.3" + fb-watchman "^2.0.2" + fdir "^6.5.0" + graceful-fs "^4.2.11" + jest-regex-util "30.5.0" + jest-util "30.5.1" + jest-worker "30.5.1" + picomatch "^4.0.3" + +jest-leak-detector@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-30.5.1.tgz#bca4b6b08d5e3a0b46560e268d28c89b15e7b72e" + integrity sha512-gt4GT2aWgEoCNTcBe4rqS74xTIUJxi+UD9SNSu9aOk5LmTEd6fS5KSTmAKAfitCCktQHNN+upUuL6EkBfFbMDQ== + dependencies: + "@jest/get-type" "30.5.0" + pretty-format "30.5.1" + +jest-matcher-utils@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.5.2.tgz#360433048fea76513dd2ceed6dfaf5f488164ed5" + integrity sha512-lFkB365PTIHOhPzwrb9T6gvlDnPpOZ7/c3ewOKKB7bzztqjVrtlyRL2MkyfJXpyY2u2SKw001JKrTx14fBUFcQ== + dependencies: + "@jest/get-type" "30.5.0" + chalk "^4.1.2" + jest-diff "30.5.2" + pretty-format "30.5.1" + +jest-message-util@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.5.1.tgz#e8d04d7b6d123f5dbfb1497432cd9c2b3d510f90" + integrity sha512-UdQlLdd9wL/Ys7xRErckqwD6wPlSZYueosSWuHc1r2ztGLwlgPvtSJq2+BPEgaEY13WLvfFbmhTj8pba0Sd1jg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@jest/types" "30.5.1" + "@types/stack-utils" "^2.0.3" + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-util "30.5.1" + picomatch "^4.0.3" + pretty-format "30.5.1" + slash "^3.0.0" + stack-utils "^2.0.6" + +jest-mock@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.5.2.tgz#78a8e24589113fa95a96c70d14b3c01c6116c2c2" + integrity sha512-KTHb37Fhj8xY8qPFvTFaFJHcdsumQp+ExsUlgoX232Agmc706gagBs53+CYvulV7MVQo9AgXOUxsqzzVBoJlrA== + dependencies: + "@jest/expect-utils" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + jest-util "30.5.1" + +jest-regex-util@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.5.0.tgz#aedb1932d361d4e701ecacda6ac83acf37299505" + integrity sha512-Mg0WK7A6xRHLSA1udJ8y9f3lM0uUhFTBnLKzwPmqB9AylvpleJ6BLemR8K9dK27DY+cesDryoA7yLZCAHsPG1A== + +jest-resolve-dependencies@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-30.5.2.tgz#d8f45bea3cd6e20f806ef753acd521c104e91ee0" + integrity sha512-GMI0DP5enX9Z2qW2zFy1bOkrCfWAOPRJQ7qHt0pdfrxBPsgWxglMPrRSK2TX/wRWYxcPRSLFg3Z88qPOzHx7FQ== + dependencies: + jest-regex-util "30.5.0" + jest-snapshot "30.5.2" + +jest-resolve@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-30.5.1.tgz#929372ea827696ceb710eed4168999d0dd2152ed" + integrity sha512-wprhLejRtwN6h8ZgaqC0eYjGJ1uMdGPT/+b3eFncbG4NWuuP9QL+vWwRinu9waw7hkOLcpMJGVJAMgBwsPssMQ== + dependencies: + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" + jest-util "30.5.1" + jest-validate "30.5.1" + slash "^3.0.0" + unrs-resolver "^1.12.1" + +jest-runner@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-30.5.2.tgz#48332168938d586a71cd0076405f647e922b90f6" + integrity sha512-/B6px7hiiNhVSRwuv9AGn0nawYvwsHeQZ3ItTd5Gp2diFd0EOKaWVeWqcbw3L88vx1GfpCKjQkxWItZCTl11Rw== + dependencies: + "@jest/console" "30.5.2" + "@jest/environment" "30.5.2" + "@jest/source-map" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + chalk "^4.1.2" + emittery "^0.13.1" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-docblock "30.5.0" + jest-environment-node "30.5.2" + jest-haste-map "30.5.1" + jest-leak-detector "30.5.1" + jest-message-util "30.5.1" + jest-resolve "30.5.1" + jest-runtime "30.5.2" + jest-util "30.5.1" + jest-watcher "30.5.2" + jest-worker "30.5.1" + p-limit "^3.1.0" + +jest-runtime@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-30.5.2.tgz#7391ad9084209d2e38713350ba0e324be8248b3d" + integrity sha512-0paUAHBlheai10A3XSy9Xh+YBG0IROy+/qzcDPzQ/nbbXrznQzeWy5qniICWK6d3W3scaRQCVAbXdcK0ibBq4w== + dependencies: + "@jest/environment" "30.5.2" + "@jest/fake-timers" "30.5.2" + "@jest/globals" "30.5.2" + "@jest/source-map" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + chalk "^4.1.2" + cjs-module-lexer "^2.2.0" + collect-v8-coverage "^1.0.2" + es-module-lexer "^2.1.0" + glob "^13.0.6" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" + jest-message-util "30.5.1" + jest-mock "30.5.2" + jest-regex-util "30.5.0" + jest-resolve "30.5.1" + jest-snapshot "30.5.2" + jest-util "30.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-30.5.2.tgz#494e37565d2201ea725c3582252083ef1b6be85b" + integrity sha512-jKIdes25AnAH73dOCi2qE6J6vHJ6L2vyBS11M89kT50DVJcLTf2AOjvcc+2vVaN8lUbY5v2R83aqXo3Ro9fqYA== + dependencies: + "@babel/core" "^7.27.4" + "@babel/generator" "^7.27.5" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/types" "^7.27.3" + "@jest/expect-utils" "30.5.2" + "@jest/get-type" "30.5.0" + "@jest/snapshot-utils" "30.5.1" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" + babel-preset-current-node-syntax "^1.2.0" + chalk "^4.1.2" + expect "30.5.2" + graceful-fs "^4.2.11" + jest-diff "30.5.2" + jest-matcher-utils "30.5.2" + jest-message-util "30.5.1" + jest-util "30.5.1" + pretty-format "30.5.1" + semver "^7.7.2" + synckit "^0.11.8" + +jest-util@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.5.1.tgz#1e71a1ee24f365c34001c1f8aab6d6f52ceadcb7" + integrity sha512-yKuxmNy2rSbTXw+3SIPanJo+nV4/BS1p26v44IYBFMsswSQySfMMcPHErnOncda7i9HEz0q605rIhSTBVgrZTg== + dependencies: + "@jest/types" "30.5.1" + "@types/node" "*" + chalk "^4.1.2" + ci-info "^4.2.0" + graceful-fs "^4.2.11" + picomatch "^4.0.3" + +jest-validate@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-30.5.1.tgz#0922700fae123c9e1d8403bdf62924b7e3c668de" + integrity sha512-i/buJ56wTpxihE93hQYNMfdOThS87+HGvLZzZJmU4xggPcdTYQq051iwALLCHp3q+SkCGH+EFejQZz5EbBSkkg== + dependencies: + "@jest/get-type" "30.5.0" + "@jest/types" "30.5.1" + camelcase "^6.3.0" + chalk "^4.1.2" + leven "^3.1.0" + pretty-format "30.5.1" + +jest-watcher@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-30.5.2.tgz#899caa0c886ea9c18c9b9cbc7f508f7a8fc8647f" + integrity sha512-rqRgg4R11GA9m1UsEZwQeixHsgZReCn6TOHAHtIH33yXrIvoX0OGPA20Yzzjkz7X40fZvcRSxEpQppYPcWzmcQ== + dependencies: + "@jest/test-result" "30.5.2" + "@jest/types" "30.5.1" + "@types/node" "*" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + emittery "^0.13.1" + jest-util "30.5.1" + string-length "^4.0.2" + +jest-worker@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.5.1.tgz#32a4c17502addef713411ca3bf951796de83e2ba" + integrity sha512-Cbxh5v7AoLuFRmFJSM4/aHdQ68rjXvUWr716EE0Dh3I7T+T/3FgFKhOERGXHcU2Meftq9+9zxPM3TSNyI9D+HA== + dependencies: + "@types/node" "*" + "@ungap/structured-clone" "^1.3.0" + jest-util "30.5.1" + merge-stream "^2.0.0" + supports-color "^8.1.1" + jest-worker@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -3589,6 +5520,16 @@ jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" +jest@^30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-30.5.2.tgz#f70e547083b214a3a8314fcf45f54d559b32d4a1" + integrity sha512-3gnpdBIza8ijCl3iMV9ChE3hSt1+46865qqod863gQtJr1DixOkAU5DoGbi3u+XlRcw++BhZQMu/y4xBdHBvSQ== + dependencies: + "@jest/core" "30.5.2" + "@jest/types" "30.5.1" + import-local "^3.2.0" + jest-cli "30.5.2" + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3639,11 +5580,42 @@ jsdom@^15.2.1: ws "^7.0.0" xml-name-validator "^3.0.0" +jsdom@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-26.1.0.tgz#ab5f1c1cafc04bd878725490974ea5e8bf0c72b3" + integrity sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg== + dependencies: + cssstyle "^4.2.1" + data-urls "^5.0.0" + decimal.js "^10.5.0" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.2" + https-proxy-agent "^7.0.6" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.16" + parse5 "^7.2.1" + rrweb-cssom "^0.8.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^5.1.1" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.1.1" + ws "^8.18.0" + xml-name-validator "^5.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3696,6 +5668,11 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3814,6 +5791,11 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -3919,6 +5901,11 @@ lodash.flatten@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -3991,6 +5978,23 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^10.2.0, lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^11.0.0: + version "11.5.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.5.3.tgz#a7767b4034e35269562d2b9da2b185b5df70c421" + integrity sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -3998,6 +6002,23 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -4110,11 +6131,23 @@ mimic-response@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +minimatch@^10.2.2: + version "10.2.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.6.tgz#fd956bbe0b77241e9f15ac5dccb1c638060968ef" + integrity sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A== + dependencies: + brace-expansion "^5.0.8" + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4122,6 +6155,13 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.4: + version "9.0.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== + dependencies: + brace-expansion "^2.0.2" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -4132,6 +6172,11 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -4140,6 +6185,11 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2, minipass@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -4179,6 +6229,13 @@ mobx@^6.2.0: resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.2.0.tgz#9a5afe3525a0302691c7805d0df6ef60834d79e5" integrity sha512-j5f16JIq2v4flvYCqaAB9tMtJt/y5efR2OO5Xy+w4/MBMeQ1WeGR0T8BtiNgmxM/OQzPFUKb5DTex9Y8a/yk+g== +moo-color@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.3.tgz#d56435f8359c8284d83ac58016df7427febece74" + integrity sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ== + dependencies: + color-name "^1.1.4" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4194,7 +6251,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -4239,6 +6296,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-postinstall@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" + integrity sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4281,11 +6343,21 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + node-pre-gyp@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz#c2fc383276b74c7ffa842925241553e8b40f1087" @@ -4307,6 +6379,11 @@ node-releases@^1.1.70: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^2.0.57: + version "2.0.58" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.58.tgz#bc58566945248a28a1d4ba2a7deeee0a71a73fad" + integrity sha512-BdiKAgbfRlvfMq/XzO/AF9NPmaA8a+YpLAyAFTVFBj3gARrAIfWvNq7Q7NE4se3KgFu0KkrvQMxTS0XVnsGzHg== + nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -4399,6 +6476,11 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nwsapi@^2.2.16: + version "2.2.28" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.28.tgz#f958de0c1ad3fc7c2575a3adb4a802e64587b094" + integrity sha512-IlVB7OS7qrOsVYlpnFIkETjMwT9jwvmocJmmM+GZU/PAB3uGi9Ezd7vcWhWBUnSc0ya4ppmQITOyP1ez9gg8cg== + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -4649,6 +6731,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + param-case@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -4664,7 +6751,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -4679,6 +6766,13 @@ parse5@5.1.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@^7.0.0, parse5@^7.2.1: + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== + dependencies: + entities "^6.0.0" + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4737,6 +6831,22 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-scurry@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" + integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -4752,11 +6862,26 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picocolors@1.1.1, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4: + version "2.3.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" + integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== + picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^4.0.3, picomatch@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" + integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4779,6 +6904,11 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pirates@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -4906,6 +7036,25 @@ pretty-error@^2.1.1: lodash "^4.17.20" renderkid "^2.0.4" +pretty-format@30.5.1, pretty-format@^30.0.0: + version "30.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.5.1.tgz#0dda910a75d12346b771977b1f328517b9e846d4" + integrity sha512-byhRAPguVKMQIj4kjJwJ5lAskVhfuiSdiYl/aLTWpgkGEmic2jYhJh1yE9ih8Ox44Xg9ccCT11/S6QrzSJuNrg== + dependencies: + "@jest/react-is-18" "npm:react-is@^18.3.1" + "@jest/react-is-19" "npm:react-is@^19.2.5" + "@jest/schemas" "30.5.0" + ansi-styles "^5.2.0" + +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" @@ -4969,6 +7118,16 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-7.0.1.tgz#6f53a5a9e3e4a47445822af96821ca509ed37566" + integrity sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -5040,7 +7199,7 @@ react-is@^16.7.0, react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -"react-is@^16.8.0 || ^17.0.0": +"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== @@ -5124,6 +7283,14 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" @@ -5330,6 +7497,11 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rrweb-cssom@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" + integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5378,6 +7550,13 @@ saxes@^3.1.9: dependencies: xmlchars "^2.1.1" +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" @@ -5431,6 +7610,11 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -5438,6 +7622,11 @@ semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: dependencies: lru-cache "^6.0.0" +semver@^7.5.3, semver@^7.5.4, semver@^7.7.2, semver@^7.8.5: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -5567,6 +7756,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -5809,6 +8003,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stack-utils@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -5832,6 +8033,23 @@ string-argv@0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-length@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -5867,6 +8085,24 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" @@ -5919,6 +8155,13 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -5947,6 +8190,25 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== + dependencies: + ansi-regex "^6.2.2" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -5957,6 +8219,13 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -5996,7 +8265,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.1.0: +supports-color@^8.1.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -6008,11 +8277,18 @@ symbol-observable@1.2.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -symbol-tree@^3.2.2: +symbol-tree@^3.2.2, symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +synckit@^0.11.8: + version "0.11.13" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.13.tgz#062a5ea57d81befc35892f8254de5c567e97c80a" + integrity sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg== + dependencies: + "@pkgr/core" "^0.3.6" + table@^6.0.4: version "6.0.9" resolved "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb" @@ -6081,6 +8357,15 @@ terser@^5.5.1: source-map "~0.7.2" source-map-support "~0.5.19" +test-exclude@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-7.0.2.tgz#482392077630bc57d5630c13abe908bb910dfc65" + integrity sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^10.4.1" + minimatch "^10.2.2" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -6106,6 +8391,18 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tldts-core@^6.1.86: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" + integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA== + +tldts@^6.1.32: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7" + integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ== + dependencies: + tldts-core "^6.1.86" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -6165,6 +8462,13 @@ tough-cookie@^3.0.1: psl "^1.1.28" punycode "^2.1.1" +tough-cookie@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" + integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== + dependencies: + tldts "^6.1.32" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -6172,11 +8476,33 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tr46@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" + integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== + dependencies: + punycode "^2.3.1" + tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +ts-jest@^29.4.14: + version "29.4.14" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.14.tgz#cb36c043df0fada861c8b604a5d514f953126180" + integrity sha512-+943G6wCX5E3VpzTQhBGBFntCmdT+QAkTvUlp03edTONFBvqskuXPhpyX16xdUotO4P5HQKyppldSWjocoltLQ== + dependencies: + bs-logger "^0.2.6" + fast-json-stable-stringify "^2.1.0" + handlebars "^4.7.9" + json5 "^2.2.3" + lodash.memoize "^4.1.2" + make-error "^1.3.6" + semver "^7.8.5" + type-fest "^4.41.0" + yargs-parser "^21.1.1" + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -6192,6 +8518,11 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsutils@^3.17.1: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -6225,6 +8556,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -6245,6 +8581,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^4.41.0: + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -6268,6 +8609,11 @@ typescript@^4.2.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + unbox-primitive@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" @@ -6298,6 +8644,36 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unrs-resolver@^1.12.1: + version "1.12.2" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.12.2.tgz#a6c6888396abba5adaac4cab6587df866f1d7afd" + integrity sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ== + dependencies: + napi-postinstall "^0.3.4" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.12.2" + "@unrs/resolver-binding-android-arm64" "1.12.2" + "@unrs/resolver-binding-darwin-arm64" "1.12.2" + "@unrs/resolver-binding-darwin-x64" "1.12.2" + "@unrs/resolver-binding-freebsd-x64" "1.12.2" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.12.2" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.12.2" + "@unrs/resolver-binding-linux-arm64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-arm64-musl" "1.12.2" + "@unrs/resolver-binding-linux-loong64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-loong64-musl" "1.12.2" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-riscv64-musl" "1.12.2" + "@unrs/resolver-binding-linux-s390x-gnu" "1.12.2" + "@unrs/resolver-binding-linux-x64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-x64-musl" "1.12.2" + "@unrs/resolver-binding-openharmony-arm64" "1.12.2" + "@unrs/resolver-binding-wasm32-wasi" "1.12.2" + "@unrs/resolver-binding-win32-arm64-msvc" "1.12.2" + "@unrs/resolver-binding-win32-ia32-msvc" "1.12.2" + "@unrs/resolver-binding-win32-x64-msvc" "1.12.2" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -6311,6 +8687,14 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz#e8bd4596f6900805f9f12c5a5200c83c59c38faf" + integrity sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -6369,6 +8753,15 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -6407,6 +8800,13 @@ w3c-xmlserializer@^1.1.2: webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== + dependencies: + xml-name-validator "^5.0.0" + watchpack@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" @@ -6427,6 +8827,11 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + webpack-cli@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.6.0.tgz#27ae86bfaec0cf393fcfd58abdc5a229ad32fd16" @@ -6581,11 +8986,31 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +whatwg-url@^14.0.0, whatwg-url@^14.1.1: + version "14.2.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" + integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== + dependencies: + tr46 "^5.1.0" + webidl-conversions "^7.0.0" + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -6642,6 +9067,20 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -6669,11 +9108,28 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" @@ -6686,6 +9142,11 @@ ws@^7.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== +ws@^8.18.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.22.0.tgz#40f16e1d7588ac0575041be5c49b8eb261c28e73" + integrity sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg== + wsrun@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.2.4.tgz#6eb6c3ccd3327721a8df073a5e3578fb0dea494e" @@ -6706,7 +9167,12 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlchars@^2.1.1: +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + +xmlchars@^2.1.1, xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== @@ -6721,7 +9187,7 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -6749,6 +9215,11 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs@^13.0.0, yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" @@ -6778,6 +9249,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.7.2: + version "17.7.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.3.tgz#779dffe6bcafec596a7172e983289a588647faaa" + integrity sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 84801ecfcab079f7ca34374a3c28fa57e7b971b1 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:07:38 +0300 Subject: [PATCH 03/70] chore(lint): migrate to ESLint 9 flat config with typescript-eslint 8 Replace .eslintrc with eslint.config.js: typescript-eslint, eslint-plugin-react (version detect), eslint-plugin-react-hooks and eslint-config-prettier. Lint packages/**/*.{ts,tsx} only (specs get jest globals) and ignore the legacy src/, examples/ and webpack/ folders until they are removed. lint no longer auto-fixes; lint:fix does. --- .eslintrc | 27 - eslint.config.js | 43 + package.json | 16 +- yarn.lock | 2338 +++++++++++++++++++++++++++++++++++----------- 4 files changed, 1863 insertions(+), 561 deletions(-) delete mode 100644 .eslintrc create mode 100644 eslint.config.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 9bfe2888..00000000 --- a/.eslintrc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2020, - "sourceType": "module", - "ecmaFeatures": { - "jsx": true - } - }, - "plugins": ["@typescript-eslint", "react-hooks", "prettier"], - "extends": ["plugin:react/recommended", "plugin:@typescript-eslint/recommended"], - "rules": { - "@typescript-eslint/no-var-requires": 0, - "@typescript-eslint/no-explicit-any": 0, - "@typescript-eslint/ban-types": 0, - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "warn", - "prettier/prettier": "error", - "react/prop-types": "off" - }, - "settings": { - "react": { - "pragma": "React", - "version": "detect" - } - } -} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..5ac6dbae --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,43 @@ +const js = require("@eslint/js"); +const globals = require("globals"); +const tseslint = require("typescript-eslint"); +const react = require("eslint-plugin-react"); +const reactHooks = require("eslint-plugin-react-hooks"); +const prettier = require("eslint-config-prettier/flat"); +const { defineConfig, globalIgnores } = require("eslint/config"); + +module.exports = defineConfig([ + globalIgnores([ + "**/dist/", + "**/coverage/", + "**/node_modules/", + // Temporary: legacy folders, removed once the port to packages/ is complete. + "src/", + "examples/", + "webpack/", + ]), + { + files: ["packages/**/*.{ts,tsx}"], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + react.configs.flat.recommended, + // Target is the automatic JSX runtime (no React import needed). + react.configs.flat["jsx-runtime"], + reactHooks.configs.flat.recommended, + ], + languageOptions: { globals: globals.browser }, + settings: { react: { version: "detect" } }, + rules: { + // Component props are typed with TypeScript. + "react/prop-types": "off", + "no-console": ["error", { allow: ["warn", "error"] }], + }, + }, + { + files: ["packages/**/*.spec.{ts,tsx}"], + languageOptions: { globals: globals.jest }, + }, + // Last: switches off rules that conflict with Prettier. + prettier, +]); diff --git a/package.json b/package.json index b37f140e..7722a5a4 100644 --- a/package.json +++ b/package.json @@ -11,25 +11,27 @@ }, "scripts": { "start": "wsrun start", - "lint": "eslint --fix ./packages/**/src", + "lint": "eslint \"packages/**/*.{ts,tsx}\"", + "lint:fix": "eslint --fix \"packages/**/*.{ts,tsx}\"", "format": "prettier --write \"./**\"" }, "devDependencies": { + "@eslint/js": "^9.39.5", "@types/react": "^17.0.3", "@types/react-dom": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^4.21.0", - "@typescript-eslint/parser": "^4.21.0", "awesome-typescript-loader": "^5.2.1", "css-loader": "^5.2.0", - "eslint": "^7.23.0", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-react": "^7.23.1", - "eslint-plugin-react-hooks": "^4.2.0", + "eslint": "^9.39.5", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", + "globals": "^17.13.0", "husky": "^6.0.0", "lint-staged": "^10.5.4", "prettier": "^2.2.1", "source-map-loader": "^2.0.1", "typescript": "^4.2.3", + "typescript-eslint": "^8.71.2", "webpack": "^5.30.0", "wsrun": "^5.2.4" }, diff --git a/yarn.lock b/yarn.lock index c22dc68f..e257affb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" @@ -16,6 +9,41 @@ dependencies: "@babel/highlight" "^7.12.13" +"@babel/code-frame@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7" + integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== + dependencies: + "@babel/helper-validator-identifier" "^7.29.7" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.7.tgz#6f0237f0f36d2e51c0570a636faed9d2d0efe629" + integrity sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg== + +"@babel/core@^7.24.4": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.7.tgz#80c10b17248082968b57a857b91640971f2070f7" + integrity sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helpers" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@^7.13.9": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" @@ -25,6 +53,17 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.29.7", "@babel/generator@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.8.tgz#4b0b887885422643339e09022148a4c4ebaa4979" + integrity sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg== + dependencies: + "@babel/parser" "^7.29.8" + "@babel/types" "^7.29.8" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" @@ -32,6 +71,17 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-compilation-targets@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz#7a1def704302401c47f64fa85589e974ae217042" + integrity sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g== + dependencies: + "@babel/compat-data" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.13.0": version "7.13.11" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" @@ -59,6 +109,11 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-globals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz#f04a96fbd8473241b1079243f5b3f03a3010ab7b" + integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA== + "@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" @@ -73,6 +128,23 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-module-imports@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz#ef25048a518e828d7393fac5882ddd73921d7396" + integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helper-module-transforms@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz#b062747a5997ba138637201328bbff77960574ae" + integrity sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg== + dependencies: + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -102,17 +174,40 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": +"@babel/helper-validator-option@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz#cf315be940213b354eb4abcc0bd01ebe3f73bc2a" + integrity sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw== + +"@babel/helpers@^7.29.7": + version "7.29.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.10.tgz#d662b4a2d66cc6cf02bc50e8aced023fbc8649e9" + integrity sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg== + dependencies: + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.8" + +"@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== @@ -126,6 +221,13 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== +"@babel/parser@^7.24.4", "@babel/parser@^7.29.7", "@babel/parser@^7.29.8", "@babel/parser@^7.29.9": + version "7.29.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.9.tgz#e7ee0a24f752c5296c6455855ccb72662e67ea96" + integrity sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA== + dependencies: + "@babel/types" "^7.29.8" + "@babel/plugin-syntax-jsx@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" @@ -219,6 +321,15 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" +"@babel/template@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700" + integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + "@babel/traverse@^7.13.0": version "7.13.13" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" @@ -233,6 +344,19 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.29.7": + version "7.29.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.10.tgz#08ab387639b4a67304511259c7da6cf23a82e91c" + integrity sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.8" + "@babel/helper-globals" "^7.29.7" + "@babel/parser" "^7.29.9" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.8" + debug "^4.3.1" + "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13": version "7.13.14" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" @@ -242,6 +366,14 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.29.7", "@babel/types@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.8.tgz#1229eef31d85156d70fa3f4cd859376d0eaf6863" + integrity sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@discoveryjs/json-ext@^0.5.0": version "0.5.2" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" @@ -252,21 +384,105 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@eslint/eslintrc@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" - integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== +"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": + version "4.10.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz#8911bd72b2c3640a543609e0400b8c4d2e7e7cb6" + integrity sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg== dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/config-array@^0.21.2": + version "0.21.2" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.2.tgz#f29e22057ad5316cf23836cee9a34c81fffcb7e6" + integrity sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw== + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.5" + +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" + +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.6": + version "3.3.7" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.7.tgz#76d3dedec4a30ea32df797bf8a0085c1311b7316" + integrity sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw== + dependencies: + ajv "^6.14.0" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.3.2" + minimatch "^3.1.5" strip-json-comments "^3.1.1" +"@eslint/js@9.39.5", "@eslint/js@^9.39.5": + version "9.39.5" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.5.tgz#6f2fbcff75500d229d535e0a949ae13472c84787" + integrity sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A== + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" + +"@humanfs/core@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.2.tgz#a8272ca03b2acf492670222b2320b6c421bfde60" + integrity sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA== + dependencies: + "@humanfs/types" "^0.15.0" + +"@humanfs/node@^0.16.6": + version "0.16.8" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.8.tgz#8f800cccc13f4f8cd3116e2d9c0a94939da3e3ed" + integrity sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ== + dependencies: + "@humanfs/core" "^0.19.2" + "@humanfs/types" "^0.15.0" + "@humanwhocodes/retry" "^0.4.0" + +"@humanfs/types@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@humanfs/types/-/types-0.15.0.tgz#f2a09f62012390b2bff3fc6fb248ddec8c09a090" + integrity sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q== + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + "@jest/types@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" @@ -276,6 +492,40 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz#f4c663e862f06dc98ca4d453862c46902789a18d" + integrity sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@material-ui/core@^4.11.3": version "4.11.3" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.3.tgz#f22e41775b0bd075e36a7a093d43951bf7f63850" @@ -358,27 +608,6 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== - dependencies: - "@nodelib/fs.stat" "2.0.4" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== - dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" - "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -410,6 +639,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== +"@types/estree@^1.0.6": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" + integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== + "@types/fabric@^4.2.5": version "4.2.5" resolved "https://registry.yarnpkg.com/@types/fabric/-/fabric-4.2.5.tgz#095e412b49c896e2fa0d441bd2fceb6690074c4d" @@ -448,11 +682,16 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": +"@types/json-schema@*", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/minimatch@*": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" @@ -574,75 +813,101 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.21.0": - version "4.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.21.0.tgz#3fce2bfa76d95c00ac4f33dff369cb593aab8878" - integrity sha512-FPUyCPKZbVGexmbCFI3EQHzCZdy2/5f+jv6k2EDljGdXSRc0cKvbndd2nHZkSLqCNOPk0jB6lGzwIkglXcYVsQ== - dependencies: - "@typescript-eslint/experimental-utils" "4.21.0" - "@typescript-eslint/scope-manager" "4.21.0" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - lodash "^4.17.15" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@4.21.0": - version "4.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.21.0.tgz#0b0bb7c15d379140a660c003bdbafa71ae9134b6" - integrity sha512-cEbgosW/tUFvKmkg3cU7LBoZhvUs+ZPVM9alb25XvR0dal4qHL3SiUqHNrzoWSxaXA9gsifrYrS1xdDV6w/gIA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.21.0" - "@typescript-eslint/types" "4.21.0" - "@typescript-eslint/typescript-estree" "4.21.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^4.21.0": - version "4.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.21.0.tgz#a227fc2af4001668c3e3f7415d4feee5093894c1" - integrity sha512-eyNf7QmE5O/l1smaQgN0Lj2M/1jOuNg2NrBm1dqqQN0sVngTLyw8tdCbih96ixlhbF1oINoN8fDCyEH9SjLeIA== - dependencies: - "@typescript-eslint/scope-manager" "4.21.0" - "@typescript-eslint/types" "4.21.0" - "@typescript-eslint/typescript-estree" "4.21.0" - debug "^4.1.1" - -"@typescript-eslint/scope-manager@4.21.0": - version "4.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.21.0.tgz#c81b661c4b8af1ec0c010d847a8f9ab76ab95b4d" - integrity sha512-kfOjF0w1Ix7+a5T1knOw00f7uAP9Gx44+OEsNQi0PvvTPLYeXJlsCJ4tYnDj5PQEYfpcgOH5yBlw7K+UEI9Agw== - dependencies: - "@typescript-eslint/types" "4.21.0" - "@typescript-eslint/visitor-keys" "4.21.0" - -"@typescript-eslint/types@4.21.0": - version "4.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.21.0.tgz#abdc3463bda5d31156984fa5bc316789c960edef" - integrity sha512-+OQaupjGVVc8iXbt6M1oZMwyKQNehAfLYJJ3SdvnofK2qcjfor9pEM62rVjBknhowTkh+2HF+/KdRAc/wGBN2w== - -"@typescript-eslint/typescript-estree@4.21.0": - version "4.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.21.0.tgz#3817bd91857beeaeff90f69f1f112ea58d350b0a" - integrity sha512-ZD3M7yLaVGVYLw4nkkoGKumb7Rog7QID9YOWobFDMQKNl+vPxqVIW/uDk+MDeGc+OHcoG2nJ2HphwiPNajKw3w== - dependencies: - "@typescript-eslint/types" "4.21.0" - "@typescript-eslint/visitor-keys" "4.21.0" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/visitor-keys@4.21.0": - version "4.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.21.0.tgz#990a9acdc124331f5863c2cf21c88ba65233cd8d" - integrity sha512-dH22dROWGi5Z6p+Igc8bLVLmwy7vEe8r+8c+raPQU0LxgogPUrRAtRGtvBWmlr9waTu3n+QLt/qrS/hWzk1x5w== - dependencies: - "@typescript-eslint/types" "4.21.0" - eslint-visitor-keys "^2.0.0" +"@typescript-eslint/eslint-plugin@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.2.tgz#fdaac18e9fe84b78652ae4befd2693bdd815fe04" + integrity sha512-K72/pvT7qpm8q3k8G5u93NCSN1RcLxX5h7Gw0bQpbMXviBHeY6Nx1WEwmk9wP+eKTSQ8ecxvcgt/ZX/rB938xQ== + dependencies: + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.71.2" + "@typescript-eslint/type-utils" "8.71.2" + "@typescript-eslint/utils" "8.71.2" + "@typescript-eslint/visitor-keys" "8.71.2" + ignore "^7.0.5" + natural-compare "^1.4.0" + ts-api-utils "^2.5.0" + +"@typescript-eslint/parser@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.71.2.tgz#f12dc1d3b26432144319d384273b9c4b6f5c1e99" + integrity sha512-aTtmZjp/x3gsGHkDs04/1I8kNogBJkpQaeGaN0PfiG43NzDEmW2n+OP5im9wfsvyX0yP1UZWBrAGtDBfH9jEVw== + dependencies: + "@typescript-eslint/scope-manager" "8.71.2" + "@typescript-eslint/types" "8.71.2" + "@typescript-eslint/typescript-estree" "8.71.2" + "@typescript-eslint/visitor-keys" "8.71.2" + debug "^4.4.3" + +"@typescript-eslint/project-service@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.71.2.tgz#b0f89f4eec94bbdde598b8d27a446553172ada84" + integrity sha512-Pd68GsLVh5ZXlcEccFPdhSOvtHZ/2WU0XsA8zmXOS3F158lVlcTLhfQ6qvtL1RzbMie0Kp8xtbVwAg4nejKPHw== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.71.2" + "@typescript-eslint/types" "^8.71.2" + debug "^4.4.3" + +"@typescript-eslint/scope-manager@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.71.2.tgz#ddb35569150c9aab76d1324d7f6c1a1b68ac60d9" + integrity sha512-YF4wgg5iUX5Obywoac27B56FhozMNFhdJSbh11H5GBAwmBtfyRhmgTQqW9tRNNmHDvsZ2CX6UGzoz+YfYn2Leg== + dependencies: + "@typescript-eslint/types" "8.71.2" + "@typescript-eslint/visitor-keys" "8.71.2" + +"@typescript-eslint/tsconfig-utils@8.71.2", "@typescript-eslint/tsconfig-utils@^8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.2.tgz#0f12d2abbc8aca1a7cf2d0898a7c81b950622f61" + integrity sha512-jz49TAWokm/7yWD9/o837nYax9DyALxIPOImdImvVzo6canBCZYzin8zJyqNR5k1j9K1DE0bVvr0XYB+99uAdg== + +"@typescript-eslint/type-utils@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.71.2.tgz#b7a615036ed59898ed1628ed74fe0b129ba0032f" + integrity sha512-cC8UaalCViJkb3rH/xLIvidEwoFRtMZMUqDjjJMGEKaTFwYRHYBcoczlEGHuvkHEO8svRDrgZ0yQgOArFmwang== + dependencies: + "@typescript-eslint/types" "8.71.2" + "@typescript-eslint/typescript-estree" "8.71.2" + "@typescript-eslint/utils" "8.71.2" + debug "^4.4.3" + ts-api-utils "^2.5.0" + +"@typescript-eslint/types@8.71.2", "@typescript-eslint/types@^8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.71.2.tgz#c2629dcd4056c71b02cf172d109a59a757c2cce9" + integrity sha512-y5Ukl3oVp7e/VGxqIoEXoeb/Roj71PAJ4WG/N/RGj+eeDvKRLM15kGr9MijLbN0i03S52zxu31Z98E5gWChJKw== + +"@typescript-eslint/typescript-estree@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.2.tgz#7ef01d376f6c1da20e173c3483f446127c88c24a" + integrity sha512-DgNOEsl4pdYzwSL+N/Cl33tX1Hlw3FvId73LnKXfq7jnrF2viOEn7X+P7RBkkSWCVm92gnWd28GIC5vJuLREeA== + dependencies: + "@typescript-eslint/project-service" "8.71.2" + "@typescript-eslint/tsconfig-utils" "8.71.2" + "@typescript-eslint/types" "8.71.2" + "@typescript-eslint/visitor-keys" "8.71.2" + debug "^4.4.3" + minimatch "^10.2.2" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.5.0" + +"@typescript-eslint/utils@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.71.2.tgz#7c01b239b7cea1310f1793bbb5a02b5f8b74a6b9" + integrity sha512-RyKa1G1M9rKHDhrk+HJtiF1MvLD5Ux2JW3TSkzw+02pRALdpJb+QzG1Y5em+LvCgzGwgg8H7mBRFKljNz7ImPw== + dependencies: + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.71.2" + "@typescript-eslint/types" "8.71.2" + "@typescript-eslint/typescript-estree" "8.71.2" + +"@typescript-eslint/visitor-keys@8.71.2": + version "8.71.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.2.tgz#3a71f8e833aa812670a31107236b9077f4e08fe0" + integrity sha512-zozlN0UA32bSG2zkKAgQyRYSbEISVoyU6vvkKYo2aSny74D8Jh4e+POkJ6Lk0dlezZi5x7TtD+88Xb06IB8nhg== + dependencies: + "@typescript-eslint/types" "8.71.2" + eslint-visitor-keys "^5.0.0" "@webassemblyjs/ast@1.11.0": version "1.11.0" @@ -818,10 +1083,10 @@ acorn-globals@^4.3.2: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^6.0.1: version "6.2.0" @@ -833,7 +1098,7 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.4.0: +acorn@^7.1.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -843,6 +1108,11 @@ acorn@^8.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== +acorn@^8.15.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.19.0.tgz#6b26fd97ce1cc9dc50bdf7ad305e9f1384d4f28a" + integrity sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -861,7 +1131,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.12.3, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -871,14 +1141,14 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.0.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.0.5.tgz#f07d6fdeffcdbb80485570ce3f1bc845fcc812b9" - integrity sha512-RkiLa/AeJx7+9OvniQ/qeWu0w74A8DiPPBclQ6ji3ZQkv5KamO+QGpqmi7O4JIw3rHGUXZ6CoP9tsAkn3gyazg== +ajv@^6.14.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492" + integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== dependencies: fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" uri-js "^4.2.2" ansi-colors@^3.0.0: @@ -958,12 +1228,10 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== arr-diff@^4.0.0: version "4.0.0" @@ -980,6 +1248,14 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -995,7 +1271,7 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.2, array-includes@^3.1.3: +array-includes@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== @@ -1006,6 +1282,20 @@ array-includes@^3.1.2, array-includes@^3.1.3: get-intrinsic "^1.1.1" is-string "^1.0.5" +array-includes@^3.1.8: + version "3.2.0" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.2.0.tgz#18771e6837351aa139c3b58873371d0afa64964a" + integrity sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.2" + es-object-atoms "^1.1.2" + es-shim-unscopables "^1.1.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -1013,11 +1303,6 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -1028,15 +1313,51 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" asn1@~0.2.3: version "0.2.4" @@ -1065,6 +1386,11 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -1087,6 +1413,13 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + awesome-typescript-loader@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" @@ -1116,6 +1449,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1129,6 +1467,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +baseline-browser-mapping@^2.11.26: + version "2.11.28" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.28.tgz#784efec0fa3965c28a0bbb755f40604ace1c9db0" + integrity sha512-br0LOmjJqr6Rt4AEkadbcNf67Zpo7EPwKsWbjnRrJIa1QYFHQBqM4C7F2WTbV8ahTEcg1Eo+Y0aWjjORInYFyA== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -1209,6 +1552,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^5.0.8: + version "5.0.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.12.tgz#995fbb4750a77c4d16a7dc942ff2ca6ef8e675ec" + integrity sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ== + dependencies: + balanced-match "^4.0.2" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -1248,6 +1598,17 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.70" +browserslist@^4.24.0: + version "4.29.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.29.3.tgz#9c8dafe96ab1c8e40e21c1274bdfa05aaee46476" + integrity sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA== + dependencies: + baseline-browser-mapping "^2.11.26" + caniuse-lite "^1.0.30001813" + electron-to-chromium "^1.5.439" + node-releases "^2.0.57" + update-browserslist-db "^1.3.3" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1283,6 +1644,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -1291,6 +1660,24 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.7, call-bind@^1.0.8, call-bind@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" + integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + get-intrinsic "^1.3.0" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1319,6 +1706,11 @@ caniuse-lite@^1.0.30001181: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== +caniuse-lite@^1.0.30001813: + version "1.0.30001816" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz#80567cffb179fd8a1702816bc80de8efc9784021" + integrity sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw== + canvas@^2.6.1: version "2.7.0" resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.7.0.tgz#3ce3fe30c69595ccd2bd1232967e681c026be61e" @@ -1603,6 +1995,11 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -1645,7 +2042,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1654,6 +2051,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + css-loader@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00" @@ -1774,6 +2180,33 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-fns@^2.16.1: version "2.20.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.20.0.tgz#df00ba9177fbea22d88010b5844ecc91e9e03ceb" @@ -1793,13 +2226,20 @@ debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: +debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" +debug@^4.3.1, debug@^4.3.2, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1852,6 +2292,15 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1859,6 +2308,15 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -1924,13 +2382,6 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -1958,13 +2409,6 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - dom-converter@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -2028,6 +2472,15 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2046,6 +2499,11 @@ electron-to-chromium@^1.3.649: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.708.tgz#127970d2fc665ab356be59e668f2914856419176" integrity sha512-+A8ggYZ5riOLMcVAuzHx6bforaPzaiLnW1QOMD2SlMYQVi7QQTyQ/WrlZoebIH9ikmgr+tLJGpNITFFCUiQcPw== +electron-to-chromium@^1.5.439: + version "1.5.454" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.454.tgz#7f6f6cd1c855e1f7fb55fc17798e92e6ea08cb04" + integrity sha512-NqD5GhkXnxJpDQVCmmpc546qjH6kei2VI9m45CTF+sQU7bcS7YeVt7ba0cnjueMH1AXGRu/driZUP9iYVSv7vg== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2095,7 +2553,7 @@ enhanced-resolve@^5.7.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -2131,7 +2589,77 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: +es-abstract-get@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-abstract-get/-/es-abstract-get-1.0.0.tgz#1eae87101f42bedeb6a740e8c5051271aef89088" + integrity sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg== + dependencies: + es-errors "^1.3.0" + es-object-atoms "^1.1.2" + is-callable "^1.2.7" + object-inspect "^1.13.4" + +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.2: + version "1.24.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.2.tgz#2dbd38c180735ee983f77585140a2706a963ed9a" + integrity sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-abstract@^1.18.0-next.2: version "1.18.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== @@ -2153,11 +2681,67 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz#2b4635ee3e8db2285378a47a1ea8f8dd34adb653" + integrity sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.2" + es-errors "^1.3.0" + es-set-tostringtag "^2.1.0" + function-bind "^1.1.2" + get-intrinsic "^1.3.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.5" + math-intrinsics "^1.1.0" + es-module-lexer@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1, es-object-atoms@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz#a2d0b373205724dfa525d23b0c3e1b1ca582c99b" + integrity sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -2167,6 +2751,18 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.4.tgz#0c854291cf0d7b439d6b9e5771ea837ffaf1f991" + integrity sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw== + dependencies: + es-abstract-get "^1.0.0" + es-define-property "^1.0.1" + es-errors "^1.3.0" + is-callable "^1.2.7" + is-date-object "^1.1.0" + is-symbol "^1.1.1" + es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" @@ -2198,6 +2794,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2208,6 +2809,11 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@^1.11.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -2220,37 +2826,47 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-plugin-prettier@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" - integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-react-hooks@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" - integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== - -eslint-plugin-react@^7.23.1: - version "7.23.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz#f1a2e844c0d1967c822388204a8bc4dee8415b11" - integrity sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ== - dependencies: - array-includes "^3.1.3" - array.prototype.flatmap "^1.2.4" +eslint-config-prettier@^10.1.8: + version "10.1.8" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" + integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== + +eslint-plugin-react-hooks@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz#e6742cad75d970c0a3f30d7d3fa80a4784f55927" + integrity sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g== + dependencies: + "@babel/core" "^7.24.4" + "@babel/parser" "^7.24.4" + hermes-parser "^0.25.1" + zod "^3.25.0 || ^4.0.0" + zod-validation-error "^3.5.0 || ^4.0.0" + +eslint-plugin-react@^7.37.5: + version "7.37.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - has "^1.0.3" + es-iterator-helpers "^1.2.1" + estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" - object.entries "^1.1.3" - object.fromentries "^2.0.4" - object.values "^1.1.3" - prop-types "^15.7.2" - resolve "^2.0.0-next.3" - string.prototype.matchall "^4.0.4" - -eslint-scope@^5.0.0, eslint-scope@^5.1.1: + minimatch "^3.1.2" + object.entries "^1.1.9" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" + +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -2258,84 +2874,87 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@^7.23.0: - version "7.23.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.23.0.tgz#8d029d252f6e8cf45894b4bee08f5493f8e94325" - integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.0" - ajv "^6.10.0" +eslint-visitor-keys@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" + integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== + +eslint@^9.39.5: + version "9.39.5" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.5.tgz#2a4e3c8b0f753196efae943c8ffaa8730fc6a3fa" + integrity sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.2" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.6" + "@eslint/js" "9.39.5" + "@eslint/plugin-kit" "^0.4.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + ajv "^6.14.0" chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" esutils "^2.0.2" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.21" - minimatch "^3.0.4" + lodash.merge "^4.6.2" + minimatch "^3.1.5" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.4" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" + optionator "^0.9.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.5.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== dependencies: estraverse "^5.1.0" @@ -2361,6 +2980,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2539,28 +3163,11 @@ fabric@^4.4.0: canvas "^2.6.1" jsdom "^15.2.1" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -2576,13 +3183,6 @@ fastest-levenshtein@^1.0.12: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - faye-websocket@^0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" @@ -2590,6 +3190,11 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -2597,12 +3202,12 @@ figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" file-uri-to-path@1.0.0: version "1.0.0" @@ -2654,24 +3259,39 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" + locate-path "^6.0.0" + path-exists "^4.0.0" -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.4.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.4.tgz#aeeca2a506303f0cee61c59e6c9f2a88d2f29fc6" + integrity sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q== follow-redirects@^1.0.0: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2733,10 +3353,30 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.2.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.2.0.tgz#758f3e84fa542672454bd5e14cb081a5ce07f70c" + integrity sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + es-define-property "^1.0.1" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + hasown "^2.0.4" + is-callable "^1.2.7" + is-document.all "^1.0.0" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@~2.7.3: version "2.7.4" @@ -2752,12 +3392,22 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -2766,11 +3416,35 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2790,6 +3464,15 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -2810,12 +3493,12 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - is-glob "^4.0.1" + is-glob "^4.0.3" glob-to-regexp@^0.4.1: version "0.4.1" @@ -2839,31 +3522,23 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globals@^13.6.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" - integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== - dependencies: - type-fest "^0.20.2" +globals@^17.13.0: + version "17.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-17.13.0.tgz#ab2134b5ededbf2fbe2831dd0acc36f4f1ddeac5" + integrity sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg== -globby@^11.0.1: - version "11.0.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^6.1.0: version "6.1.0" @@ -2876,6 +3551,11 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + graceful-fs@^4.1.11, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" @@ -2909,6 +3589,11 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2919,6 +3604,20 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" @@ -2929,6 +3628,18 @@ has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2972,11 +3683,30 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.2, hasown@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" + integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== + dependencies: + function-bind "^1.1.2" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hermes-estree@0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.25.1.tgz#6aeec17d1983b4eabf69721f3aa3eb705b17f480" + integrity sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw== + +hermes-parser@^0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.25.1.tgz#5be0e487b2090886c62bd8a11724cd766d5f54d1" + integrity sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA== + dependencies: + hermes-estree "0.25.1" + hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -3163,17 +3893,17 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^7.0.5: + version "7.0.12" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.12.tgz#36048ce2e8d8e0f97fd87863a1cb595ea0a5c69f" + integrity sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3250,14 +3980,14 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" interpret@^2.2.0: version "2.2.0" @@ -3305,16 +4035,43 @@ is-arguments@^1.0.4: dependencies: call-bind "^1.0.0" +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + is-bigint@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -3329,6 +4086,14 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.0" +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3339,6 +4104,18 @@ is-callable@^1.1.4, is-callable@^1.2.3: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.16.2: + version "2.17.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.17.0.tgz#75c1c76236c9f7e38ddbfff292e127dc13b21027" + integrity sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA== + dependencies: + hasown "^2.0.4" + is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -3360,11 +4137,28 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== +is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -3383,6 +4177,13 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-document.all@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-document.all/-/is-document.all-1.0.0.tgz#163a4bfb362c6ed7b118ce46cdecc4e37dee3195" + integrity sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g== + dependencies: + call-bound "^1.0.4" + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3400,6 +4201,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -3417,6 +4225,17 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-function@^1.0.10: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== + dependencies: + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -3424,28 +4243,53 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + is-number-object@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3497,11 +4341,33 @@ is-regex@^1.0.4, is-regex@^1.1.2: call-bind "^1.0.2" has-symbols "^1.0.1" +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3517,6 +4383,14 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -3524,6 +4398,22 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.1" +is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -3534,6 +4424,26 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -3549,6 +4459,11 @@ isarray@1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -3571,6 +4486,18 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +iterator.prototype@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -3594,13 +4521,12 @@ jest-worker@^26.6.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.2.tgz#8e44fb14a2643c59726bb15787b5f1512cb3d3fb" + integrity sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" jsbn@~0.1.0: version "0.1.1" @@ -3644,6 +4570,16 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3659,11 +4595,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -3696,6 +4627,11 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3785,6 +4721,13 @@ jss@10.6.0, jss@^10.5.1: array-includes "^3.1.2" object.assign "^4.1.2" +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -3909,27 +4852,24 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3991,6 +4931,13 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -4010,6 +4957,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -4041,11 +4993,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -4115,6 +5062,13 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +minimatch@^10.2.2: + version "10.2.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.6.tgz#fd956bbe0b77241e9f15ac5dccb1c638060968ef" + integrity sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A== + dependencies: + brace-expansion "^5.0.8" + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4122,6 +5076,13 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^3.1.2, minimatch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== + dependencies: + brace-expansion "^1.1.7" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -4194,7 +5155,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -4281,6 +5242,16 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-exports-info@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/node-exports-info/-/node-exports-info-1.6.2.tgz#243a3105677d6781cd26e6a72350fd928a5cb46f" + integrity sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag== + dependencies: + array.prototype.flatmap "^1.3.3" + es-errors "^1.3.0" + object.entries "^1.1.9" + semver "^6.3.1" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -4307,6 +5278,11 @@ node-releases@^1.1.70: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^2.0.57: + version "2.0.58" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.58.tgz#bc58566945248a28a1d4ba2a7deeee0a71a73fad" + integrity sha512-BdiKAgbfRlvfMq/XzO/AF9NPmaA8a+YpLAyAFTVFBj3gARrAIfWvNq7Q7NE4se3KgFu0KkrvQMxTS0XVnsGzHg== + nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -4418,6 +5394,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -4468,25 +5449,37 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" - integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" -object.fromentries@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== +object.entries@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.pick@^1.3.0: version "1.3.0" @@ -4495,15 +5488,15 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -4555,17 +5548,17 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" + word-wrap "^1.2.5" original@^1.0.0: version "1.0.2" @@ -4592,6 +5585,16 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +own-keys@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.2.tgz#31448ec1f781ecb1447f6f6aa0d6534222af59de" + integrity sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg== + dependencies: + call-bound "^1.0.4" + get-intrinsic "^1.3.0" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -4604,7 +5607,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.1.0: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -4625,6 +5628,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -4737,6 +5747,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -4752,11 +5767,21 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.5, picomatch@^2.2.1: +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.5: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" + integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4824,6 +5849,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +possible-typed-array-names@^1.0.0, possible-typed-array-names@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + postcss-modules-extract-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" @@ -4886,13 +5916,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - prettier@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" @@ -4911,11 +5934,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" @@ -4933,6 +5951,15 @@ prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -4989,11 +6016,6 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -5035,7 +6057,7 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" -react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -5124,6 +6146,20 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +reflect.getprototypeof@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" @@ -5137,7 +6173,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -5145,10 +6181,17 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" relateurl@^0.2.7: version "0.2.7" @@ -5228,11 +6271,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -5285,13 +6323,17 @@ resolve@^1.10.0, resolve@^1.9.0: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== +resolve@^2.0.0-next.5: + version "2.0.0-next.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.7.tgz#ba3b035d4b1ee7c522426eee73cabcb0fd5515dd" + integrity sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + es-errors "^1.3.0" + is-core-module "^2.16.2" + node-exports-info "^1.6.0" + object-keys "^1.1.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" @@ -5311,11 +6353,6 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -5323,20 +6360,6 @@ rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - rxjs@^6.6.3, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" @@ -5344,6 +6367,17 @@ rxjs@^6.6.3, rxjs@^6.6.7: dependencies: tslib "^1.9.0" +safe-array-concat@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.4.tgz#a54cc9b61a57f33b42abad3cbdda3a2b38cc5719" + integrity sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + get-intrinsic "^1.3.0" + has-symbols "^1.1.0" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -5354,6 +6388,23 @@ safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -5431,13 +6482,23 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +semver@^7.7.3: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -5492,6 +6553,37 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" @@ -5553,14 +6645,45 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel-list@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" + integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + es-errors "^1.3.0" + object-inspect "^1.13.4" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0, side-channel@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab" + integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.4" + side-channel-list "^1.0.1" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" @@ -5581,11 +6704,6 @@ simple-get@^3.0.3: once "^1.3.1" simple-concat "^1.0.0" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" @@ -5789,11 +6907,6 @@ split@^1.0.1: dependencies: through "2" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -5827,6 +6940,14 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -5867,18 +6988,46 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.matchall@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" - integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== +string.prototype.matchall@^4.0.12: + version "4.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz#8d854b2318fc596fc0877cfc6c4bcc50d0455b8e" + integrity sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.2" + es-errors "^1.3.0" + es-object-atoms "^1.1.2" + get-intrinsic "^1.3.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.4" + set-function-name "^2.0.2" + side-channel "^1.1.1" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== dependencies: - call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has-symbols "^1.0.1" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" - side-channel "^1.0.4" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.11" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz#e6bd19cda3985d05a42dda31f3ddf4d35d3430e3" + integrity sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.24.2" + es-object-atoms "^1.1.2" + has-property-descriptors "^1.0.2" + safe-regex-test "^1.1.0" string.prototype.trimend@^1.0.4: version "1.0.4" @@ -5888,6 +7037,16 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimend@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz#be6bcf4f3fe0460bdeccdb2cf4f971b310f8346e" + integrity sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.2" + string.prototype.trimstart@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" @@ -5896,6 +7055,15 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -5957,7 +7125,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -6003,6 +7171,11 @@ supports-color@^8.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + symbol-observable@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -6013,21 +7186,6 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.4: - version "6.0.9" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb" - integrity sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ== - dependencies: - ajv "^8.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - lodash.clonedeep "^4.5.0" - lodash.flatten "^4.4.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - tapable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" @@ -6081,11 +7239,6 @@ terser@^5.5.1: source-map "~0.7.2" source-map-support "~0.5.19" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - throat@^4.0.0, throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -6106,6 +7259,14 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinyglobby@^0.2.15: + version "0.2.17" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631" + integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.4" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -6177,10 +7338,10 @@ tree-kill@^1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +ts-api-utils@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1" + integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== tslib@^1.9.0: version "1.9.3" @@ -6192,13 +7353,6 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== -tsutils@^3.17.1: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6225,11 +7379,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -6240,11 +7389,6 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -6263,6 +7407,60 @@ type@^2.0.0: resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz#c076d6a0db563933154b3c442204b614bf0d7b15" + integrity sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.9" + for-each "^0.3.5" + gopd "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.10" + +typed-array-length@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.8.tgz#0b70e982c9e9dafe2def6d6458ff4b3f2d2b6d70" + integrity sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g== + dependencies: + call-bind "^1.0.9" + for-each "^0.3.5" + gopd "^1.2.0" + is-typed-array "^1.1.15" + possible-typed-array-names "^1.1.0" + reflect.getprototypeof "^1.0.10" + +typescript-eslint@^8.71.2: + version "8.71.2" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.71.2.tgz#3084e83f6061d778077b275f905e5942443bd4be" + integrity sha512-Rz4effbMy2g9wnvOJZG6SbVavX313Lap1vNEbk1RUochzickvzP8P4HB+bkNg5e50eVz1hQGjh9K1omI1xB4Bw== + dependencies: + "@typescript-eslint/eslint-plugin" "8.71.2" + "@typescript-eslint/parser" "8.71.2" + "@typescript-eslint/typescript-estree" "8.71.2" + "@typescript-eslint/utils" "8.71.2" + typescript@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" @@ -6278,6 +7476,16 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -6311,6 +7519,14 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz#e8bd4596f6900805f9f12c5a5200c83c59c38faf" + integrity sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -6364,7 +7580,7 @@ uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: +v8-compile-cache@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== @@ -6606,11 +7822,64 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.24" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.24.tgz#211f5877c29e6213d50e8f2dce4ac9ca2d0008cf" + integrity sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.9" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -6637,7 +7906,12 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -6721,7 +7995,7 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -6782,3 +8056,13 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +"zod-validation-error@^3.5.0 || ^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-4.0.2.tgz#bc605eba49ce0fcd598c127fee1c236be3f22918" + integrity sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ== + +"zod@^3.25.0 || ^4.0.0": + version "4.6.7" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.6.7.tgz#e806cf64a7f4e37635ce9f2f52c04c3766f75e5b" + integrity sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg== From 87e7ff99adb448903cef029dae3ae1fe5adc3951 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:11:50 +0300 Subject: [PATCH 04/70] Add jest config for react-sketch (jsdom, ts-jest, canvas mock) ts-jest type-checks spec files against tsconfig.spec.json; production sources are type-checked by tsc, not by the test run. jest-canvas-mock is required because fabric calls getContext("2d") while it is being imported. --- packages/react-sketch/jest.config.js | 29 ++++++++++++++++++++++++ packages/react-sketch/jest.setup.ts | 4 ++++ packages/react-sketch/tsconfig.spec.json | 15 ++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 packages/react-sketch/jest.config.js create mode 100644 packages/react-sketch/jest.setup.ts create mode 100644 packages/react-sketch/tsconfig.spec.json diff --git a/packages/react-sketch/jest.config.js b/packages/react-sketch/jest.config.js new file mode 100644 index 00000000..e63f9b2d --- /dev/null +++ b/packages/react-sketch/jest.config.js @@ -0,0 +1,29 @@ +/** @type {import('jest').Config} */ +module.exports = { + testEnvironment: "jsdom", + roots: ["/src"], + testMatch: ["/src/**/*.spec.ts?(x)"], + moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json"], + transform: { + "^.+\\.tsx?$": [ + "ts-jest", + { + tsconfig: "/tsconfig.spec.json", + // Type errors fail the build for spec files only. Type-checking the + // production sources is the job of tsc, not of the test run. + diagnostics: { exclude: ["**", "!**/*.spec.ts", "!**/*.spec.tsx"] }, + }, + ], + }, + setupFilesAfterEnv: ["/jest.setup.ts"], + collectCoverageFrom: [ + "src/**/*.{ts,tsx}", + "!src/**/*.spec.{ts,tsx}", + "!src/**/*.d.ts", + // pure re-export barrels (history/index.ts and tools/index.ts hold code and stay in) + "!src/index.ts", + "!src/components/SketchField/index.ts", + "!src/components/SketchField/tools/*/index.ts", + ], + coverageDirectory: "coverage", +}; diff --git a/packages/react-sketch/jest.setup.ts b/packages/react-sketch/jest.setup.ts new file mode 100644 index 00000000..ec778a21 --- /dev/null +++ b/packages/react-sketch/jest.setup.ts @@ -0,0 +1,4 @@ +// jest matchers for the DOM (toBeInTheDocument, toHaveStyle, ...) +import "@testing-library/jest-dom"; +// jsdom has no 2D canvas implementation; fabric needs getContext("2d") to work +import "jest-canvas-mock"; diff --git a/packages/react-sketch/tsconfig.spec.json b/packages/react-sketch/tsconfig.spec.json new file mode 100644 index 00000000..0fc1c0fe --- /dev/null +++ b/packages/react-sketch/tsconfig.spec.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "commonjs", + "jsx": "react-jsx", + "lib": ["dom", "dom.iterable", "esnext"], + "types": ["jest", "node"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "noEmit": true + }, + "include": ["src", "jest.setup.ts"] +} From ba67ff85b3079fc70487c0fa0ad8e5bcc750b7e7 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:11:50 +0300 Subject: [PATCH 05/70] Fix History spec: use named UndoHistory import and drop @ts-nocheck --- .../SketchField/history/History.spec.ts | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/history/History.spec.ts b/packages/react-sketch/src/components/SketchField/history/History.spec.ts index 69d115ba..bc25ebb8 100644 --- a/packages/react-sketch/src/components/SketchField/history/History.spec.ts +++ b/packages/react-sketch/src/components/SketchField/history/History.spec.ts @@ -1,23 +1,15 @@ -// @ts-nocheck -/* eslint no-console: 0 */ -/* eslint-env node, mocha */ - -import History from "./index"; - -describe("History", () => { - it("Loads Normally", () => { - require("./index"); - }); +import { UndoHistory } from "./index"; +describe("UndoHistory", () => { it("Undo limit is set", () => { - const instance = new History(); - const instanceWithCustomUndoSteps = new History(15); + const instance = new UndoHistory(); + const instanceWithCustomUndoSteps = new UndoHistory(15); expect(instance.getUndoLimit()).toEqual(10); expect(instanceWithCustomUndoSteps.getUndoLimit()).toEqual(15); }); it("Informs if can undo", () => { - const instance = new History(); + const instance = new UndoHistory(); expect(instance.canUndo()).toBeFalsy(); instance.keep("1"); expect(instance.canUndo()).toBeTruthy(); @@ -26,7 +18,9 @@ describe("History", () => { }); it("Can undo/redo object", () => { - const instance = new History(15, true); + // debug = true prints the history on every operation + const log = jest.spyOn(console, "log").mockImplementation(() => undefined); + const instance = new UndoHistory(15, true); instance.keep("1"); instance.keep("2"); expect(instance.canUndo()).toBeTruthy(); @@ -36,10 +30,12 @@ describe("History", () => { expect(instance.getCurrent()).toBeNull(); expect(instance.redo()).toEqual("1"); expect(instance.getCurrent()).toEqual("1"); + expect(log).toHaveBeenCalled(); + log.mockRestore(); }); it("Multiple undo/redo of objects", () => { - const instance = new History(); + const instance = new UndoHistory(); instance.keep("1"); instance.keep("2"); instance.keep("3"); @@ -60,7 +56,7 @@ describe("History", () => { }); it("Redo is reset after a keep of a new object", () => { - const instance = new History(); + const instance = new UndoHistory(); instance.keep("1"); instance.keep("2"); instance.keep("3"); @@ -74,7 +70,7 @@ describe("History", () => { }); it("Can clear history", () => { - const instance = new History(); + const instance = new UndoHistory(); instance.keep("1"); instance.keep("2"); instance.keep("3"); From 443e70d6ea53f94a6537757bf0ad0a4afb6182c1 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:11:50 +0300 Subject: [PATCH 06/70] Add SketchField smoke tests (mount, style, unmount, tool switch) --- .../SketchField/SketchField.spec.tsx | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx b/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx index e69de29b..81c702c5 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx @@ -0,0 +1,35 @@ +import { render } from "@testing-library/react"; +import SketchField from "./SketchField"; +import { Tool } from "../../types"; + +describe("SketchField", () => { + it("renders a canvas inside a container div with default props", () => { + const { container } = render(); + const sketch = container.firstElementChild; + + expect(sketch).toBeInstanceOf(HTMLDivElement); + expect(sketch?.querySelector("canvas")).toBeInTheDocument(); + }); + + it("applies width and height to the container style", () => { + const { container } = render(); + + expect(container.firstElementChild).toHaveStyle({ + width: "320px", + height: "240px", + }); + }); + + it("unmounts without throwing", () => { + const { unmount } = render(); + + expect(() => unmount()).not.toThrow(); + }); + + it("switches the tool between pencil and line without throwing", () => { + const { rerender } = render(); + + expect(() => rerender()).not.toThrow(); + expect(() => rerender()).not.toThrow(); + }); +}); From 37a91665852e4a1319d6e3a457c703f0f69c089d Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:11:56 +0300 Subject: [PATCH 07/70] Remove legacy root jest config and .babelrc The root jest.config.js pointed at the legacy src/ with enzyme for React 16. Tests now live in packages/react-sketch with their own jest config. .babelrc was only used by that setup and the legacy webpack/*.cfg.js files, which no script references. --- .babelrc | 4 ---- jest.config.js | 20 -------------------- jest.setup.js | 8 -------- 3 files changed, 32 deletions(-) delete mode 100644 .babelrc delete mode 100644 jest.config.js delete mode 100644 jest.setup.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index b611bbc8..00000000 --- a/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["@babel/env", "@babel/react", "@babel/preset-typescript"], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 03de6683..00000000 --- a/jest.config.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - roots: ["src"], - - // "automock": false, - // "testEnvironment": "jest-environment-jsdom", - // "testRegex": "./src/.spec.jsx?$", - - transform: { - "^.+\\.(j|t)sx?$": "babel-jest", - "^.+\\.svg$": "jest-svg-transformer", - }, - moduleNameMapper: { - "\\.(css)$": "identity-obj-proxy", - }, - moduleDirectories: ["node_modules"], - setupFilesAfterEnv: ["./jest.setup.js"], - // setupTestFrameworkScriptFile: "./jest.setup.js", - - moduleFileExtensions: ["js", "json", "jsx"], -}; diff --git a/jest.setup.js b/jest.setup.js deleted file mode 100644 index 724ebf69..00000000 --- a/jest.setup.js +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies, no-multi-assign, no-undef */ -import "jest-enzyme"; -import Enzyme from "enzyme"; -import Adapter from "enzyme-adapter-react-16"; - -Enzyme.configure({ - adapter: new Adapter(), -}); From 9c25c87d7a62aed7db9521aa683d7be84fc9716f Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:14:52 +0300 Subject: [PATCH 08/70] Upgrade TypeScript to 5.9 and fix tsconfig layout Shared packages/tsconfig.packages.json now holds only compiler options (jsx react-jsx, module esnext, strict) with a react-sketch path that resolves relative to that file. include/exclude live in each package, and a new react-sketch tsconfig.build.json emits declarations only and skips spec files and dist. Stale baseUrl/typeRoots/composite settings removed. --- package.json | 2 +- packages/react-sketch/tsconfig.build.json | 11 +++++++ packages/react-sketch/tsconfig.json | 6 +--- packages/showcase/tsconfig.json | 34 ++------------------- packages/tsconfig.packages.json | 25 +++++++++------- tsconfig.json | 36 +++-------------------- yarn.lock | 8 ++--- 7 files changed, 37 insertions(+), 85 deletions(-) create mode 100644 packages/react-sketch/tsconfig.build.json diff --git a/package.json b/package.json index 1068ea3a..fded2a86 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "lint-staged": "^10.5.4", "prettier": "^2.2.1", "source-map-loader": "^2.0.1", - "typescript": "^4.2.3", + "typescript": "^5.9.3", "webpack": "^5.30.0", "wsrun": "^5.2.4" }, diff --git a/packages/react-sketch/tsconfig.build.json b/packages/react-sketch/tsconfig.build.json new file mode 100644 index 00000000..e637c9fd --- /dev/null +++ b/packages/react-sketch/tsconfig.build.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "rootDir": "src", + "outDir": "dist" + }, + "include": ["src"], + "exclude": ["dist", "node_modules", "**/*.spec.ts", "**/*.spec.tsx"] +} diff --git a/packages/react-sketch/tsconfig.json b/packages/react-sketch/tsconfig.json index bc72df58..336527e1 100644 --- a/packages/react-sketch/tsconfig.json +++ b/packages/react-sketch/tsconfig.json @@ -1,8 +1,4 @@ { "extends": "../tsconfig.packages.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "lib": ["dom", "dom.iterable", "esnext"] - } + "include": ["src"] } diff --git a/packages/showcase/tsconfig.json b/packages/showcase/tsconfig.json index f2cbb48d..336527e1 100644 --- a/packages/showcase/tsconfig.json +++ b/packages/showcase/tsconfig.json @@ -1,34 +1,4 @@ { - "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "skipLibCheck": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "preserveConstEnums": true, - "noImplicitAny": false /* Raise error on expressions and declarations with an implied 'any' type. */, - "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - "sourceMap": true /* Generates corresponding '.map' file. */, - "target": "es2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, - "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */, - "types": ["react"] /* Type declaration files to be included in compilation. */, - "module": "esNext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, - "declaration": false /* Generates corresponding '.d.ts' file. */, - "removeComments": true /* Do not emit comments to output. */, - "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, - "noUnusedLocals": false /* Report errors on unused locals. */, - "strict": true /* Enable all strict type-checking options. */, - "outDir": "dist" /* Redirect output structure to the directory. "outDir": "./build/", */, - "baseUrl": "src" /* Base directory to resolve non-absolute module names. */, - "typeRoots": [ - "./types", - "node_modules/@types" - ] /* List of folders to include type definitions from. */, - "strictNullChecks": true /* Enable strict null checks. */, - "allowJs": true /* Allow javascript files to be compiled. */ - } + "extends": "../tsconfig.packages.json", + "include": ["src"] } diff --git a/packages/tsconfig.packages.json b/packages/tsconfig.packages.json index a2dcf8cc..665d247c 100644 --- a/packages/tsconfig.packages.json +++ b/packages/tsconfig.packages.json @@ -1,17 +1,20 @@ { "compilerOptions": { - "jsx": "react", + "jsx": "react-jsx", "target": "es2015", - "module": "commonjs", - "declaration": true, - "declarationMap": true, - "sourceMap": true, + "module": "esnext", + "moduleResolution": "node", + "lib": ["dom", "dom.iterable", "esnext"], "strict": true, - "composite": true, + "noImplicitReturns": true, "esModuleInterop": true, - "moduleResolution": "node", - "typeRoots": ["./types", "node_modules/@types"], - "lib": ["es2015", "dom"] - }, - "exclude": ["dist", "node_modules", "types"] + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "sourceMap": true, + "paths": { + "react-sketch": ["./react-sketch/src/index.ts"] + } + } } diff --git a/tsconfig.json b/tsconfig.json index 5aff797b..774b32cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,36 +1,8 @@ { + "extends": "./packages/tsconfig.packages.json", "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "skipLibCheck": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "preserveConstEnums": true, - "noImplicitAny": false /* Raise error on expressions and declarations with an implied 'any' type. */, - "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - "sourceMap": true /* Generates corresponding '.map' file. */, - "target": "es2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, - "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */, - "types": ["react"] /* Type declaration files to be included in compilation. */, - "module": "esNext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */, - "declaration": false /* Generates corresponding '.d.ts' file. */, - "removeComments": true /* Do not emit comments to output. */, - "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, - "noUnusedLocals": false /* Report errors on unused locals. */, - "strict": true /* Enable all strict type-checking options. */, - "outDir": "dist" /* Redirect output structure to the directory. "outDir": "./build/", */, - "baseUrl": "src" /* Base directory to resolve non-absolute module names. */, - "typeRoots": [ - "./types", - "node_modules/@types" - ] /* List of folders to include type definitions from. */, - "strictNullChecks": true /* Enable strict null checks. */, - "allowJs": true /* Allow javascript files to be compiled. */ + "noEmit": true }, - "exclude": ["lib", "node_modules", "types", "examples"], - "include": ["packages/**/*.tsx"] + "include": ["packages/*/src"], + "exclude": ["node_modules", "**/dist", "**/build"] } diff --git a/yarn.lock b/yarn.lock index c22dc68f..e4f70706 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6263,10 +6263,10 @@ type@^2.0.0: resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== -typescript@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" - integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== +typescript@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== unbox-primitive@^1.0.0: version "1.0.1" From 22445600d6bd97fe4af6b0519d38845292400c5d Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:15 +0300 Subject: [PATCH 09/70] Build react-sketch with ts-loader and publish typings Replace awesome-typescript-loader, CleanWebpackPlugin and the explicit terser plugin with ts-loader, output.clean and webpack's own production minification. react, react/jsx-runtime and fabric are externals, react moves to peerDependencies (^17 || ^18 || ^19) with React 19 dev dependencies. build runs webpack, then tsc emits dist/index.d.ts, and files/prepublishOnly/repository.directory are set. webpack and webpack-cli are declared once at the repo root. The root @types/react 17 and @types/react-dom are dropped so only one @types/react is installed, and csstype is bumped to match @types/react 19. types is set to [] so stray @types packages do not leak globals. --- package.json | 5 +- packages/react-sketch/package.json | 34 +- packages/react-sketch/webpack.config.js | 32 +- packages/tsconfig.packages.json | 1 + yarn.lock | 1207 ++++++++++------------- 5 files changed, 541 insertions(+), 738 deletions(-) diff --git a/package.json b/package.json index fded2a86..aa8cfefe 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,6 @@ "format": "prettier --write \"./**\"" }, "devDependencies": { - "@types/react": "^17.0.3", - "@types/react-dom": "^17.0.3", "@typescript-eslint/eslint-plugin": "^4.21.0", "@typescript-eslint/parser": "^4.21.0", "awesome-typescript-loader": "^5.2.1", @@ -46,7 +44,8 @@ "prettier": "^2.2.1", "source-map-loader": "^2.0.1", "typescript": "^5.9.3", - "webpack": "^5.30.0", + "webpack": "^5.111.1", + "webpack-cli": "^7.2.3", "wsrun": "^5.2.4" }, "husky": { diff --git a/packages/react-sketch/package.json b/packages/react-sketch/package.json index f0282331..5007833c 100644 --- a/packages/react-sketch/package.json +++ b/packages/react-sketch/package.json @@ -15,7 +15,8 @@ }, "repository": { "type": "git", - "url": "https://github.com/tbolis/react-sketch.git" + "url": "https://github.com/tbolis/react-sketch.git", + "directory": "packages/react-sketch" }, "bugs": { "url": "https://github.com/tbolis/react-sketch/issues" @@ -23,25 +24,30 @@ "license": "MIT", "main": "./dist/index.js", "types": "./dist/index.d.ts", + "files": [ + "dist" + ], "scripts": { - "build:typescript": "tsc && webpack --mode production", - "build": "webpack --mode production", - "start": "webpack --mode development --watch" + "build": "webpack --mode production && tsc -p tsconfig.build.json", + "start": "webpack --mode development --watch", + "typecheck": "tsc --noEmit", + "prepublishOnly": "yarn build" }, "dependencies": { - "csstype": "^3.0.7", + "csstype": "^3.2.3", "fabric": "^4.4.0", - "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2" + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "devDependencies": { - "@babel/preset-react": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", "@types/fabric": "^4.2.5", - "@types/node": "^14.14.37", - "clean-webpack-plugin": "^3.0.0", - "concurrently": "^6.0.1", - "terser-webpack-plugin": "^5.1.1" + "@types/node": "^22.20.5", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "react": "^19.3.0", + "react-dom": "^19.3.0", + "ts-loader": "^9.6.2" } } diff --git a/packages/react-sketch/webpack.config.js b/packages/react-sketch/webpack.config.js index 225680ba..f466d0e6 100644 --- a/packages/react-sketch/webpack.config.js +++ b/packages/react-sketch/webpack.config.js @@ -1,35 +1,43 @@ const path = require("path"); -const TerserPlugin = require("terser-webpack-plugin"); -const { CleanWebpackPlugin } = require("clean-webpack-plugin"); + +const umdExternal = (name, root) => ({ + commonjs: name, + commonjs2: name, + amd: name, + root, +}); module.exports = { entry: { index: "./src/index.ts", }, - performance: { - hints: false, - }, - optimization: { - minimize: true, - minimizer: [new TerserPlugin()], + // react and fabric are provided by the consumer, never bundled. + externals: { + react: umdExternal("react", "React"), + "react/jsx-runtime": umdExternal("react/jsx-runtime", "ReactJSXRuntime"), + fabric: umdExternal("fabric", "fabric"), }, output: { filename: "[name].js", - library: "ReactSketch", - libraryTarget: "umd", + library: { name: "ReactSketch", type: "umd" }, + globalObject: "this", path: path.resolve(__dirname, "dist"), + clean: true, }, resolve: { extensions: [".ts", ".tsx", ".js"], }, devtool: "source-map", - plugins: [new CleanWebpackPlugin()], module: { rules: [ { test: /\.tsx?$/, - loader: "awesome-typescript-loader", + loader: "ts-loader", exclude: /node_modules/, + options: { + configFile: path.resolve(__dirname, "tsconfig.json"), + onlyCompileBundledFiles: true, + }, }, ], }, diff --git a/packages/tsconfig.packages.json b/packages/tsconfig.packages.json index 665d247c..bb6b9874 100644 --- a/packages/tsconfig.packages.json +++ b/packages/tsconfig.packages.json @@ -5,6 +5,7 @@ "module": "esnext", "moduleResolution": "node", "lib": ["dom", "dom.iterable", "esnext"], + "types": [], "strict": true, "noImplicitReturns": true, "esModuleInterop": true, diff --git a/yarn.lock b/yarn.lock index e4f70706..847550df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,109 +9,18 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": +"@babel/code-frame@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: "@babel/highlight" "^7.12.13" -"@babel/generator@^7.13.9": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== - dependencies: - "@babel/types" "^7.13.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-create-class-features-plugin@^7.13.0": - version "7.13.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" - integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.0" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-replace-supers@^7.13.0": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" @@ -121,88 +30,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.13", "@babel/parser@^7.13.13": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" - integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== - -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" - integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-react-display-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" - integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-react-jsx-development@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" - integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.17" - -"@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" - integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" - -"@babel/plugin-transform-react-pure-annotations@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" - integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typescript@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" - integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-typescript" "^7.12.13" - -"@babel/preset-react@^7.13.13": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" - integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.13.12" - "@babel/plugin-transform-react-jsx-development" "^7.12.17" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" - -"@babel/preset-typescript@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a" - integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-transform-typescript" "^7.13.0" - "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" @@ -210,43 +37,16 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.13.0": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" - integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.13.13" - "@babel/types" "^7.13.13" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" - integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - "@discoveryjs/json-ext@^0.5.0": version "0.5.2" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== +"@discoveryjs/json-ext@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-1.1.0.tgz#44b5ce3485e95235aca06e628eeaaa3c816bc4cc" + integrity sha512-Xc3VhU02wqZ1HvHRJUwL09HkZSTvidqY5Ya0NXBSYOxAp+Ln9dcJr9fySI+CkONzP3PekQo9WdzCv0PGER/mOA== + "@emotion/hash@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" @@ -276,6 +76,40 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" + integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz#f4c663e862f06dc98ca4d453862c46902789a18d" + integrity sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.31": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@material-ui/core@^4.11.3": version "4.11.3" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.3.tgz#f22e41775b0bd075e36a7a093d43951bf7f63850" @@ -379,36 +213,10 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@types/anymatch@*": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== - -"@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.8.tgz#45cd802380fcc352e5680e1781d43c50916f12ee" - integrity sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== - -"@types/estree@^0.0.46": - version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" - integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== +"@types/estree@^1.0.8": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" + integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== "@types/fabric@^4.2.5": version "4.2.5" @@ -448,7 +256,12 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== @@ -463,20 +276,17 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.3.tgz#3918b73ceed484e58367be5acb79d1775239e393" integrity sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg== -"@types/node@^14.14.37": - version "14.14.37" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" - integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== - "@types/node@^14.14.41": version "14.14.41" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615" integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/node@^22.20.5": + version "22.20.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.20.5.tgz#afa7bde6da81b8b83ea4e2f020487e9b148c11fd" + integrity sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA== + dependencies: + undici-types "~6.21.0" "@types/parse-json@^4.0.0": version "4.0.0" @@ -488,12 +298,10 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.6.tgz#9c03d3fed70a8d517c191b7734da2879b50ca26c" integrity sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ== -"@types/react-dom@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.3.tgz#7fdf37b8af9d6d40127137865bb3fff8871d7ee1" - integrity sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w== - dependencies: - "@types/react" "*" +"@types/react-dom@^19.3.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.3.0.tgz#90294a9266efd928a5266f2110d60d5dba5015d2" + integrity sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q== "@types/react-transition-group@^4.2.0": version "4.4.1" @@ -510,57 +318,12 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/react@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" - integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== +"@types/react@^19.3.0": + version "19.3.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.3.0.tgz#3b3ce8d8c1627fb5ccd4dadd57ef445c5a153b77" + integrity sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" - integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== - -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - -"@types/tapable@^1": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" - integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== - -"@types/uglify-js@*": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" - integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== - dependencies: - source-map "^0.6.1" - -"@types/webpack-sources@*": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" - integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4.4.31": - version "4.41.27" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.27.tgz#f47da488c8037e7f1b2dbf2714fbbacb61ec0ffc" - integrity sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA== - dependencies: - "@types/anymatch" "*" - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - source-map "^0.6.0" + csstype "^3.2.2" "@types/yargs-parser@*": version "20.2.0" @@ -644,125 +407,125 @@ "@typescript-eslint/types" "4.21.0" eslint-visitor-keys "^2.0.0" -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: - "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" "@webpack-cli/configtest@^1.0.2": @@ -838,10 +601,10 @@ acorn@^7.1.0, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4: - version "8.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" - integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== +acorn@^8.15.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.19.0.tgz#6b26fd97ce1cc9dc50bdf7ad305e9f1384d4f28a" + integrity sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw== aggregate-error@^3.0.0: version "3.1.0" @@ -856,11 +619,25 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -871,6 +648,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.20.0: + version "8.20.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9" + integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ajv@^8.0.1: version "8.0.5" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.0.5.tgz#f07d6fdeffcdbb80485570ce3f1bc845fcc812b9" @@ -1129,6 +916,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +baseline-browser-mapping@^2.11.26: + version "2.11.28" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.28.tgz#784efec0fa3965c28a0bbb755f40604ace1c9db0" + integrity sha512-br0LOmjJqr6Rt4AEkadbcNf67Zpo7EPwKsWbjnRrJIa1QYFHQBqM4C7F2WTbV8ahTEcg1Eo+Y0aWjjORInYFyA== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -1237,16 +1029,16 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.14.5: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserslist@^4.28.1: + version "4.29.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.29.3.tgz#9c8dafe96ab1c8e40e21c1274bdfa05aaee46476" + integrity sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" - escalade "^3.1.1" - node-releases "^1.1.70" + baseline-browser-mapping "^2.11.26" + caniuse-lite "^1.0.30001813" + electron-to-chromium "^1.5.439" + node-releases "^2.0.57" + update-browserslist-db "^1.3.3" buffer-from@^1.0.0: version "1.1.1" @@ -1314,10 +1106,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001181: - version "1.0.30001207" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" - integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== +caniuse-lite@^1.0.30001813: + version "1.0.30001816" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz#80567cffb179fd8a1702816bc80de8efc9784021" + integrity sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw== canvas@^2.6.1: version "2.7.0" @@ -1412,14 +1204,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" - integrity sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A== - dependencies: - "@types/webpack" "^4.4.31" - del "^4.1.1" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -1444,15 +1228,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -1516,6 +1291,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -1566,21 +1346,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concurrently@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-6.0.1.tgz#b472efd9398bd9f5b117e22f72c3e50bf0a8a651" - integrity sha512-YCF/Wf31a910hXu7eGN9/SyHKD/usw3Shw4IPYuqIsxxC39v92engYlIlOs/zXnBJtX/6aVuhgzfhZeGJkhU4w== - dependencies: - chalk "^4.1.0" - date-fns "^2.16.1" - lodash "^4.17.20" - read-pkg "^5.2.0" - rxjs "^6.6.3" - spawn-command "^0.0.2-1" - supports-color "^8.1.0" - tree-kill "^1.2.2" - yargs "^16.2.0" - connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" @@ -1654,6 +1419,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + css-loader@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00" @@ -1745,11 +1519,16 @@ csstype@^2.5.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39" integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q== -csstype@^3.0.2, csstype@^3.0.7: +csstype@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== +csstype@^3.2.2, csstype@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -1774,11 +1553,6 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@^2.16.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.20.0.tgz#df00ba9177fbea22d88010b5844ecc91e9e03ceb" - integrity sha512-nmA7y6aDH5+fknfJ0G77HQzUSfTPpq4ifq+c9blP9d+X9zs3kNjxC+t3pcbBMGTp262a6PJB3RVjLlxIgoMI+Q== - debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2041,10 +1815,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.649: - version "1.3.708" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.708.tgz#127970d2fc665ab356be59e668f2914856419176" - integrity sha512-+A8ggYZ5riOLMcVAuzHx6bforaPzaiLnW1QOMD2SlMYQVi7QQTyQ/WrlZoebIH9ikmgr+tLJGpNITFFCUiQcPw== +electron-to-chromium@^1.5.439: + version "1.5.454" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.454.tgz#7f6f6cd1c855e1f7fb55fc17798e92e6ea08cb04" + integrity sha512-NqD5GhkXnxJpDQVCmmpc546qjH6kei2VI9m45CTF+sQU7bcS7YeVt7ba0cnjueMH1AXGRu/driZUP9iYVSv7vg== emoji-regex@^7.0.1: version "7.0.3" @@ -2087,13 +1861,13 @@ enhanced-resolve@^4.0.0: memory-fs "^0.5.0" tapable "^1.0.0" -enhanced-resolve@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" - integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== +enhanced-resolve@^5.25.0: + version "5.26.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz#9dfb47d050ed6c87f2c6d43b4d7e30f8c0a91ed7" + integrity sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.3" enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" @@ -2112,6 +1886,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +envinfo@^7.21.0: + version "7.21.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" + integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== + envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" @@ -2153,10 +1932,15 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" -es-module-lexer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" - integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^2.1.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.2.tgz#311fa4f40168c1975c505477c51b23234d41ad55" + integrity sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== es-to-primitive@^1.2.1: version "1.2.1" @@ -2193,10 +1977,10 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" @@ -2539,7 +2323,7 @@ fabric@^4.4.0: canvas "^2.6.1" jsdom "^15.2.1" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -2571,6 +2355,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-uri@^3.0.1: + version "3.1.8" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.8.tgz#f7db8d942e20eead3cfe93b0beeb4eb0169e938b" + integrity sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg== + fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" @@ -2662,6 +2451,11 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" @@ -2733,6 +2527,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -2752,7 +2551,7 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -2817,11 +2616,6 @@ glob-parent@^5.0.0, glob-parent@^5.1.0: dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -2834,11 +2628,6 @@ glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^12.1.0: version "12.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" @@ -2886,6 +2675,11 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.2.11: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -2972,6 +2766,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" + integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== + dependencies: + function-bind "^1.1.2" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -2984,11 +2785,6 @@ hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -3197,6 +2993,14 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" +import-local@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3264,6 +3068,11 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -3339,6 +3148,13 @@ is-callable@^1.1.4, is-callable@^1.2.3: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-core-module@^2.17.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.17.0.tgz#75c1c76236c9f7e38ddbfff292e127dc13b21027" + integrity sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA== + dependencies: + hasown "^2.0.4" + is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -3580,14 +3396,14 @@ jest-changed-files@^24.9.0: execa "^1.0.0" throat "^4.0.0" -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -3639,16 +3455,6 @@ jsdom@^15.2.1: ws "^7.0.0" xml-name-validator "^3.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -3871,11 +3677,6 @@ listr2@^3.2.2: through "^2.3.8" wrap-ansi "^7.0.0" -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" @@ -4083,7 +3884,12 @@ mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.30" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== @@ -4132,6 +3938,16 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimizer-webpack-plugin@^5.7.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.13.0.tgz#3624cd9556b0645aceed66f5e7466586d0635ebe" + integrity sha512-OO1NF2zHj6sf4CNv2AsUWYcS8WEwkVKQDXxxKzlOxx1Xl+WlqYtVC+oNlGNwGkLAOnpj277BSHypWwRtd9w4JQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.31" + jest-worker "^27.4.5" + schema-utils "^4.3.3" + terser "^5.51.0" + minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -4258,11 +4074,6 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -4302,10 +4113,10 @@ node-pre-gyp@^0.15.0: semver "^5.3.0" tar "^4.4.2" -node-releases@^1.1.70: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^2.0.57: + version "2.0.58" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.58.tgz#bc58566945248a28a1d4ba2a7deeee0a71a73fad" + integrity sha512-BdiKAgbfRlvfMq/XzO/AF9NPmaA8a+YpLAyAFTVFBj3gARrAIfWvNq7Q7NE4se3KgFu0KkrvQMxTS0XVnsGzHg== nopt@^4.0.1: version "4.0.3" @@ -4315,16 +4126,6 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -4604,13 +4405,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -4737,6 +4531,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -4752,11 +4551,21 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" + integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4994,13 +4803,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -5035,6 +4837,13 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" +react-dom@^19.3.0: + version "19.3.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.3.0.tgz#a0ff19161d7f4e9be5469a07278b0c06e00f9001" + integrity sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q== + dependencies: + scheduler "^0.28.0" + react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -5063,15 +4872,10 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" +react@^19.3.0: + version "19.3.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.3.0.tgz#e20aa3a14687075ce863351b5878b0608c3fbfb2" + integrity sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog== readable-stream@^2.0.1: version "2.3.6" @@ -5124,6 +4928,13 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" @@ -5277,7 +5088,17 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.9.0: +resolve@^1.20.0: + version "1.22.13" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.13.tgz#d542f97758d768f36091251a6b07540b4343f7b5" + integrity sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA== + dependencies: + es-errors "^1.3.0" + is-core-module "^2.17.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -5337,14 +5158,14 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.3, rxjs@^6.6.7: +rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -safe-buffer@5.1.2, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -5386,6 +5207,11 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.28.0.tgz#03d3ca348aeaf8b7502f64468f217b27523f9695" + integrity sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw== + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -5404,6 +5230,16 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.3.3, schema-utils@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.5.0.tgz#aaf8d588bd2b19511175175a5222baef648c009c" + integrity sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA== + dependencies: + "@types/json-schema" "^7.0.15" + ajv "^8.20.0" + ajv-formats "^3.0.1" + ajv-keywords "^5.1.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -5421,7 +5257,7 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: +semver@^5.3.0, semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -5457,13 +5293,6 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -5655,11 +5484,6 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" -source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - source-map-js@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" @@ -5693,7 +5517,7 @@ source-map-support@^0.5.3: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -5701,12 +5525,20 @@ source-map-support@~0.5.12, source-map-support@~0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -5716,41 +5548,10 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3, source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== +source-map@^0.7.4: + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== spdy-transport@^3.0.0: version "3.0.0" @@ -5989,20 +5790,25 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.1.0: +supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + symbol-observable@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -6033,11 +5839,16 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" integrity sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== +tapable@^2.3.0, tapable@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" + integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== + tar@^4.4.2: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -6051,18 +5862,6 @@ tar@^4.4.2: safe-buffer "^5.1.2" yallist "^3.0.3" -terser-webpack-plugin@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" - integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== - dependencies: - jest-worker "^26.6.2" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.5.1" - terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" @@ -6072,14 +5871,15 @@ terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.5.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" - integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== +terser@^5.51.0: + version "5.51.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.51.2.tgz#555912425a7f2ff7737425c3718fa76c7069f6ef" + integrity sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q== dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.15.0" commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" + source-map-support "~0.5.20" text-table@^0.2.0: version "0.2.0" @@ -6106,11 +5906,6 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -6172,10 +5967,14 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +ts-loader@^9.6.2: + version "9.6.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.6.2.tgz#a08f4935ddb87edbd58ce33b7b2558c2a77fdd47" + integrity sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA== + dependencies: + chalk "^4.1.0" + picomatch "^4.0.0" + source-map "^0.7.4" tslib@^1.8.1: version "1.14.1" @@ -6235,11 +6034,6 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -6278,6 +6072,11 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -6311,6 +6110,14 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz#e8bd4596f6900805f9f12c5a5200c83c59c38faf" + integrity sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -6369,14 +6176,6 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -6407,12 +6206,11 @@ w3c-xmlserializer@^1.1.2: webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" -watchpack@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== +watchpack@^2.5.2: + version "2.6.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.6.1.tgz#fda5ef91ab74cdba7e9105e0bd2b03268b6818aa" + integrity sha512-8mk/LnXpQAiM2xKZhTkxikwly5GhL2Z+DWiLTkMa/E1Nfv9zURhHgiFyWvM4BWqW+LjIgL2AIS7JntEUx6v3vQ== dependencies: - glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" wbuf@^1.1.0, wbuf@^1.7.3: @@ -6447,6 +6245,20 @@ webpack-cli@^4.6.0: v8-compile-cache "^2.2.0" webpack-merge "^5.7.3" +webpack-cli@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-7.2.3.tgz#becafbd777df5ff3e1a35ec398ad2ad54ec4d456" + integrity sha512-vDFU7jrfCctnN7jJQWPl+V26B51GLp11prVZXg50oeonsgeBzSTJEWmXkjHsOjTgMjlPOQM8GWLh33X9RN/0ow== + dependencies: + "@discoveryjs/json-ext" "^1.1.0" + commander "^14.0.3" + cross-spawn "^7.0.6" + envinfo "^7.21.0" + import-local "^3.2.0" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^6.0.1" + webpack-dev-middleware@^3.7.2: version "3.7.3" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" @@ -6523,42 +6335,42 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" - integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.1" -webpack@^5.30.0: - version "5.30.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.30.0.tgz#07d87c182a060e0c2491062f3dc0edc85a29d884" - integrity sha512-Zr9NIri5yzpfmaMea2lSMV1UygbW0zQsSlGLMgKUm63ACXg6alhd1u4v5UBSBjzYKXJN6BNMGVM7w165e7NxYA== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.46" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.0.4" - browserslist "^4.14.5" +webpack-sources@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.6.0.tgz#b2e4a4f1aef1a0d60f3011eb47736c5bf7f1ed7f" + integrity sha512-EIMmPVvNI0CYXyRPp34F2Qk7W37/BZVZIofS6LAUnrNjCVahS+hO4mxwFJDjQjODTGZDtVzLYoN2+1dYkhk9qA== + +webpack@^5.111.1: + version "5.111.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.111.1.tgz#7c12cd014fbb9bfd8509a6cfc6f1c79f4e06cade" + integrity sha512-cNypaz0RP+S4cvQVi1M/3bRUkvNP0xZpL0TjFx+c6jg64VbxD+2weWDgY9UnjRI6dhZgtaj8DU76GGFcJ79xPQ== + dependencies: + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.7.0" - es-module-lexer "^0.4.0" - eslint-scope "^5.1.1" + enhanced-resolve "^5.25.0" + es-module-lexer "^2.1.0" events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.0.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" - watchpack "^2.0.0" - webpack-sources "^2.1.1" + graceful-fs "^4.2.11" + mime-db "^1.54.0" + minimizer-webpack-plugin "^5.7.0" + schema-utils "^4.5.0" + tapable "^2.3.0" + watchpack "^2.5.2" + webpack-sources "^3.5.1" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -6637,6 +6449,11 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== +wildcard@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -6716,11 +6533,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -6744,11 +6556,6 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== - yargs@^13.0.0, yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" @@ -6764,21 +6571,3 @@ yargs@^13.0.0, yargs@^13.3.2: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.2" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From db1731d5efeb2182bfd8ec6253cdb10cd6633d5b Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:39 +0300 Subject: [PATCH 10/70] Port pointerPosition, linearDistance, hexToRgbA and colorNameToHex utils Typed ports of the legacy helpers. hexToRgbA throws a descriptive error, colorNameToHex returns undefined for unknown names (was false) and the indianred, mediumpurple and palevioletred entries are fixed. --- packages/react-sketch/src/utils/index.ts | 218 ++++++++++++++++++++++- 1 file changed, 217 insertions(+), 1 deletion(-) diff --git a/packages/react-sketch/src/utils/index.ts b/packages/react-sketch/src/utils/index.ts index 8282a216..7ccca167 100644 --- a/packages/react-sketch/src/utils/index.ts +++ b/packages/react-sketch/src/utils/index.ts @@ -1,8 +1,47 @@ +interface Point { + x: number; + y: number; +} + +/** + * Determine the mouse (or touch) position relative to the event target, + * excluding the target border + * + * @param event the mouse or touch event + * @returns tuple of position x,y + */ +export const pointerPosition = ( + event: MouseEvent | TouchEvent +): [number, number] => { + const target = event.target as HTMLElement; + const style = window.getComputedStyle(target); + const rect = target.getBoundingClientRect(); + const point = "changedTouches" in event ? event.changedTouches[0] : event; + return [ + point.clientX - parseInt(style.borderLeftWidth, 10) - rect.left, + point.clientY - parseInt(style.borderTopWidth, 10) - rect.top, + ]; +}; + +/** + * Calculate the distance of two x,y points + * + * @param point1 an object with x,y attributes representing the start point + * @param point2 an object with x,y attributes representing the end point + * + * @returns {number} + */ +export const linearDistance = (point1: Point, point2: Point): number => { + const xs = point2.x - point1.x; + const ys = point2.y - point1.y; + return Math.sqrt(xs * xs + ys * ys); +}; + /** * Return a random uuid of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx * @returns {string} */ -export const uuid4 = () => { +export const uuid4 = (): string => { let uuid = "", ii; for (ii = 0; ii < 32; ii += 1) { @@ -26,3 +65,180 @@ export const uuid4 = () => { } return uuid; }; + +/** + * Convert a hex color code to its rgba equivalent (with 0.4 alpha) + * + * @param hex is a color code in the form of #rgb or #rrggbb + * @returns {string} + * @throws Error when the given value is not a valid hex color code + */ +export const hexToRgbA = (hex: string): string => { + if (!/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) { + throw new Error(`Bad hex color: "${hex}"`); + } + let digits = hex.substring(1).split(""); + if (digits.length === 3) { + digits = [digits[0], digits[0], digits[1], digits[1], digits[2], digits[2]]; + } + const value = parseInt(digits.join(""), 16); + const [r, g, b] = [(value >> 16) & 255, (value >> 8) & 255, value & 255]; + return `rgba(${r},${g},${b},0.4)`; +}; + +const COLORS: Record = { + aliceblue: "#f0f8ff", + antiquewhite: "#faebd7", + aqua: "#00ffff", + aquamarine: "#7fffd4", + azure: "#f0ffff", + beige: "#f5f5dc", + bisque: "#ffe4c4", + black: "#000000", + blanchedalmond: "#ffebcd", + blue: "#0000ff", + blueviolet: "#8a2be2", + brown: "#a52a2a", + burlywood: "#deb887", + cadetblue: "#5f9ea0", + chartreuse: "#7fff00", + chocolate: "#d2691e", + coral: "#ff7f50", + cornflowerblue: "#6495ed", + cornsilk: "#fff8dc", + crimson: "#dc143c", + cyan: "#00ffff", + darkblue: "#00008b", + darkcyan: "#008b8b", + darkgoldenrod: "#b8860b", + darkgray: "#a9a9a9", + darkgreen: "#006400", + darkkhaki: "#bdb76b", + darkmagenta: "#8b008b", + darkolivegreen: "#556b2f", + darkorange: "#ff8c00", + darkorchid: "#9932cc", + darkred: "#8b0000", + darksalmon: "#e9967a", + darkseagreen: "#8fbc8f", + darkslateblue: "#483d8b", + darkslategray: "#2f4f4f", + darkturquoise: "#00ced1", + darkviolet: "#9400d3", + deeppink: "#ff1493", + deepskyblue: "#00bfff", + dimgray: "#696969", + dodgerblue: "#1e90ff", + firebrick: "#b22222", + floralwhite: "#fffaf0", + forestgreen: "#228b22", + fuchsia: "#ff00ff", + gainsboro: "#dcdcdc", + ghostwhite: "#f8f8ff", + gold: "#ffd700", + goldenrod: "#daa520", + gray: "#808080", + green: "#008000", + greenyellow: "#adff2f", + honeydew: "#f0fff0", + hotpink: "#ff69b4", + indianred: "#cd5c5c", + indigo: "#4b0082", + ivory: "#fffff0", + khaki: "#f0e68c", + lavender: "#e6e6fa", + lavenderblush: "#fff0f5", + lawngreen: "#7cfc00", + lemonchiffon: "#fffacd", + lightblue: "#add8e6", + lightcoral: "#f08080", + lightcyan: "#e0ffff", + lightgoldenrodyellow: "#fafad2", + lightgrey: "#d3d3d3", + lightgreen: "#90ee90", + lightpink: "#ffb6c1", + lightsalmon: "#ffa07a", + lightseagreen: "#20b2aa", + lightskyblue: "#87cefa", + lightslategray: "#778899", + lightsteelblue: "#b0c4de", + lightyellow: "#ffffe0", + lime: "#00ff00", + limegreen: "#32cd32", + linen: "#faf0e6", + magenta: "#ff00ff", + maroon: "#800000", + mediumaquamarine: "#66cdaa", + mediumblue: "#0000cd", + mediumorchid: "#ba55d3", + mediumpurple: "#9370db", + mediumseagreen: "#3cb371", + mediumslateblue: "#7b68ee", + mediumspringgreen: "#00fa9a", + mediumturquoise: "#48d1cc", + mediumvioletred: "#c71585", + midnightblue: "#191970", + mintcream: "#f5fffa", + mistyrose: "#ffe4e1", + moccasin: "#ffe4b5", + navajowhite: "#ffdead", + navy: "#000080", + oldlace: "#fdf5e6", + olive: "#808000", + olivedrab: "#6b8e23", + orange: "#ffa500", + orangered: "#ff4500", + orchid: "#da70d6", + palegoldenrod: "#eee8aa", + palegreen: "#98fb98", + paleturquoise: "#afeeee", + palevioletred: "#db7093", + papayawhip: "#ffefd5", + peachpuff: "#ffdab9", + peru: "#cd853f", + pink: "#ffc0cb", + plum: "#dda0dd", + powderblue: "#b0e0e6", + purple: "#800080", + rebeccapurple: "#663399", + red: "#ff0000", + rosybrown: "#bc8f8f", + royalblue: "#4169e1", + saddlebrown: "#8b4513", + salmon: "#fa8072", + sandybrown: "#f4a460", + seagreen: "#2e8b57", + seashell: "#fff5ee", + sienna: "#a0522d", + silver: "#c0c0c0", + skyblue: "#87ceeb", + slateblue: "#6a5acd", + slategray: "#708090", + snow: "#fffafa", + springgreen: "#00ff7f", + steelblue: "#4682b4", + tan: "#d2b48c", + teal: "#008080", + thistle: "#d8bfd8", + tomato: "#ff6347", + turquoise: "#40e0d0", + violet: "#ee82ee", + wheat: "#f5deb3", + white: "#ffffff", + whitesmoke: "#f5f5f5", + yellow: "#ffff00", + yellowgreen: "#9acd32", +}; + +/** + * Convert a CSS color name to its hex equivalent + * + * @param color is a color name (case insensitive) + * @returns the hex code, or undefined when the name is unknown + */ +export const colorNameToHex = (color: string): string | undefined => { + const name = color.toLowerCase(); + return Object.prototype.hasOwnProperty.call(COLORS, name) + ? COLORS[name] + : undefined; +}; From e0c45edf40f58eebba4b3cb4e3faffd2f11ddc3d Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:40 +0300 Subject: [PATCH 11/70] Add utils spec Ports the legacy Utils spec with the import fixed and covers the new helpers. --- packages/react-sketch/src/utils/utils.spec.ts | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 packages/react-sketch/src/utils/utils.spec.ts diff --git a/packages/react-sketch/src/utils/utils.spec.ts b/packages/react-sketch/src/utils/utils.spec.ts new file mode 100644 index 00000000..a36bf60d --- /dev/null +++ b/packages/react-sketch/src/utils/utils.spec.ts @@ -0,0 +1,86 @@ +/** + * @jest-environment jsdom + */ +import { + colorNameToHex, + hexToRgbA, + linearDistance, + pointerPosition, + uuid4, +} from "./index"; + +describe("Utils", () => { + it("Generates random uuid", () => { + expect(uuid4()).toMatch( + /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/ + ); + expect(uuid4()).not.toEqual(uuid4()); + }); + + describe("linearDistance", () => { + it("Calculates the distance of two points", () => { + expect(linearDistance({ x: 0, y: 0 }, { x: 3, y: 4 })).toEqual(5); + expect(linearDistance({ x: 3, y: 4 }, { x: 0, y: 0 })).toEqual(5); + expect(linearDistance({ x: 7, y: 7 }, { x: 7, y: 7 })).toEqual(0); + }); + }); + + describe("hexToRgbA", () => { + it("Converts hex codes to rgba", () => { + expect(hexToRgbA("#ff0000")).toEqual("rgba(255,0,0,0.4)"); + expect(hexToRgbA("#0F8")).toEqual("rgba(0,255,136,0.4)"); + }); + + it("Rejects invalid hex codes", () => { + expect(() => hexToRgbA("red")).toThrow("Bad hex color"); + expect(() => hexToRgbA("#12")).toThrow("Bad hex color"); + expect(() => hexToRgbA("#gggggg")).toThrow("Bad hex color"); + }); + }); + + describe("colorNameToHex", () => { + it("Converts color names to hex, ignoring the case", () => { + expect(colorNameToHex("red")).toEqual("#ff0000"); + expect(colorNameToHex("RebeccaPurple")).toEqual("#663399"); + expect(colorNameToHex("indianred")).toEqual("#cd5c5c"); + }); + + it("Returns undefined for unknown names", () => { + expect(colorNameToHex("not-a-color")).toBeUndefined(); + expect(colorNameToHex("constructor")).toBeUndefined(); + }); + }); + + describe("pointerPosition", () => { + let element: HTMLDivElement; + + beforeEach(() => { + element = document.createElement("div"); + element.style.borderLeftWidth = "2px"; + element.style.borderTopWidth = "3px"; + element.getBoundingClientRect = () => ({ left: 10, top: 20 } as DOMRect); + document.body.appendChild(element); + }); + + afterEach(() => { + element.remove(); + }); + + it("Is relative to the target, excluding its border", () => { + let position: [number, number] | undefined; + element.addEventListener("click", (event) => { + position = pointerPosition(event); + }); + element.dispatchEvent(new MouseEvent("click", { clientX: 50, clientY: 70 })); + expect(position).toEqual([38, 47]); + }); + + it("Supports touch events", () => { + const event = ({ + target: element, + changedTouches: [{ clientX: 30, clientY: 40 }], + } as unknown) as TouchEvent; + expect(pointerPosition(event)).toEqual([18, 17]); + }); + }); +}); From 00773814a7f2119dacf44e35312ffd7657148588 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:40 +0300 Subject: [PATCH 12/70] Add RectangleLabel and DefaultTool to the Tool enum Uses the legacy string values rectangle-label and default-tool. --- packages/react-sketch/src/types.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-sketch/src/types.ts b/packages/react-sketch/src/types.ts index 6db8b413..e729fcfa 100644 --- a/packages/react-sketch/src/types.ts +++ b/packages/react-sketch/src/types.ts @@ -11,9 +11,11 @@ export enum Tool { ARROW = "arrow", PENCIL = "pencil", RECTANGLE = "rectangle", + RECTANGLE_LABEL = "rectangle-label", SELECT = "select", PAN = "pan", HIGHLIGHTER = "highlighter", + DEFAULT_TOOL = "default-tool", } interface SketchStyle { From ca252bc7943483184732698a59b13daf6e617aa9 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:40 +0300 Subject: [PATCH 13/70] Share pointer and interactivity helpers in the tool base class pointer() is the single place reading a position from a canvas event and setInteractive() replaces the isDrawingMode/selection/forEachObject block repeated by every tool. Line uses both. --- .../components/SketchField/tools/Line/Line.ts | 11 +++++------ .../src/components/SketchField/tools/index.ts | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/tools/Line/Line.ts b/packages/react-sketch/src/components/SketchField/tools/Line/Line.ts index 8999b5ad..b7964b17 100644 --- a/packages/react-sketch/src/components/SketchField/tools/Line/Line.ts +++ b/packages/react-sketch/src/components/SketchField/tools/Line/Line.ts @@ -15,15 +15,14 @@ export class Line extends FabricCanvasTool { } configureCanvas(props: SketchProperties): void { - this.canvas.isDrawingMode = this.canvas.selection = false; - this.canvas.forEachObject((o) => (o.selectable = o.evented = false)); + this.setInteractive(false); this.width = props.lineWidth ? props.lineWidth : 1; this.color = props.lineColor ? props.lineColor : "black"; } doMouseDown(event: fabric.IEvent): void { this.isDown = true; - const pointer = this.canvas.getPointer(event.e); + const pointer = this.pointer(event); const points = [pointer.x, pointer.y, pointer.x, pointer.y]; this.line = new fabric.Line(points, { strokeWidth: this.width, @@ -39,17 +38,17 @@ export class Line extends FabricCanvasTool { doMouseMove(event: fabric.IEvent): void { if (!this.isDown) return; - const pointer = this.canvas.getPointer(event.e); + const pointer = this.pointer(event); this.line?.set({ x2: pointer.x, y2: pointer.y }); this.line?.setCoords(); this.canvas.renderAll(); } - doMouseUp(event: fabric.IEvent): void { + doMouseUp(): void { this.isDown = false; } - doMouseOut(event: fabric.IEvent): void { + doMouseOut(): void { this.isDown = false; } diff --git a/packages/react-sketch/src/components/SketchField/tools/index.ts b/packages/react-sketch/src/components/SketchField/tools/index.ts index 17884356..6ed904a2 100644 --- a/packages/react-sketch/src/components/SketchField/tools/index.ts +++ b/packages/react-sketch/src/components/SketchField/tools/index.ts @@ -88,4 +88,22 @@ export abstract class FabricCanvasTool { get canvas(): fabric.Canvas { return this._canvas; } + + /** + * Position of the given canvas event, in canvas coordinates + */ + protected pointer(event: IEvent): { x: number; y: number } { + return this.canvas.getPointer(event.e); + } + + /** + * Switch the canvas between "select" mode (objects can be selected and + * moved) and "draw" mode (objects are frozen, so a drag always draws). + * Free drawing is turned off in both. + */ + protected setInteractive(interactive: boolean): void { + this.canvas.isDrawingMode = false; + this.canvas.selection = interactive; + this.canvas.forEachObject((o) => (o.selectable = o.evented = interactive)); + } } From d59ae041549b670247477f0234936a21d1e8b708 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:47 +0300 Subject: [PATCH 14/70] Port the Rectangle tool The rectangle now follows the pointer in every direction, including back across the start point (legacy kept a stale left/top). --- .../SketchField/tools/Rectangle/Rectangle.ts | 74 +++++++++++++++++++ .../SketchField/tools/Rectangle/index.ts | 1 + 2 files changed, 75 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/Rectangle/Rectangle.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/Rectangle/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/Rectangle/Rectangle.ts b/packages/react-sketch/src/components/SketchField/tools/Rectangle/Rectangle.ts new file mode 100644 index 00000000..0e6b7023 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Rectangle/Rectangle.ts @@ -0,0 +1,74 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { SketchProperties, Tool } from "../../../../types"; + +export class Rectangle extends FabricCanvasTool { + private width?: number; + private color?: string; + private fill?: string; + private isDown: boolean; + private startX: number; + private startY: number; + private rect: fabric.Rect | null; + + constructor(canvas: fabric.Canvas) { + super(canvas); + this.isDown = false; + this.startX = 0; + this.startY = 0; + this.rect = null; + } + + configureCanvas(props: SketchProperties): void { + this.setInteractive(false); + this.width = props.lineWidth ? props.lineWidth : 1; + this.color = props.lineColor ? props.lineColor : "black"; + this.fill = props.fillColor ? props.fillColor : "transparent"; + } + + doMouseDown(event: fabric.IEvent): void { + this.isDown = true; + const pointer = this.pointer(event); + this.startX = pointer.x; + this.startY = pointer.y; + this.rect = new fabric.Rect({ + left: this.startX, + top: this.startY, + originX: "left", + originY: "top", + width: 0, + height: 0, + stroke: this.color, + strokeWidth: this.width, + fill: this.fill, + transparentCorners: false, + selectable: false, + evented: false, + strokeUniform: true, + noScaleCache: false, + angle: 0, + }); + this.canvas.add(this.rect); + } + + doMouseMove(event: fabric.IEvent): void { + if (!this.isDown) return; + const pointer = this.pointer(event); + this.rect?.set({ + left: Math.min(this.startX, pointer.x), + top: Math.min(this.startY, pointer.y), + width: Math.abs(this.startX - pointer.x), + height: Math.abs(this.startY - pointer.y), + }); + this.rect?.setCoords(); + this.canvas.renderAll(); + } + + doMouseUp(): void { + this.isDown = false; + } + + type(): Tool { + return Tool.RECTANGLE; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/Rectangle/index.ts b/packages/react-sketch/src/components/SketchField/tools/Rectangle/index.ts new file mode 100644 index 00000000..ad03aa87 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Rectangle/index.ts @@ -0,0 +1 @@ +export { Rectangle } from "./Rectangle"; From 019aa2b22e31a1512da2ab4dc8c577d498f5a35d Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:47 +0300 Subject: [PATCH 15/70] Port the Circle tool --- .../SketchField/tools/Circle/Circle.ts | 72 +++++++++++++++++++ .../SketchField/tools/Circle/index.ts | 1 + 2 files changed, 73 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/Circle/Circle.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/Circle/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/Circle/Circle.ts b/packages/react-sketch/src/components/SketchField/tools/Circle/Circle.ts new file mode 100644 index 00000000..16fa20be --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Circle/Circle.ts @@ -0,0 +1,72 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { SketchProperties, Tool } from "../../../../types"; +import { linearDistance } from "../../../../utils"; + +export class Circle extends FabricCanvasTool { + private width?: number; + private color?: string; + private fill?: string; + private isDown: boolean; + private startX: number; + private startY: number; + private circle: fabric.Circle | null; + + constructor(canvas: fabric.Canvas) { + super(canvas); + this.isDown = false; + this.startX = 0; + this.startY = 0; + this.circle = null; + } + + configureCanvas(props: SketchProperties): void { + this.setInteractive(false); + this.width = props.lineWidth ? props.lineWidth : 1; + this.color = props.lineColor ? props.lineColor : "black"; + this.fill = props.fillColor ? props.fillColor : "transparent"; + } + + doMouseDown(event: fabric.IEvent): void { + this.isDown = true; + const pointer = this.pointer(event); + this.startX = pointer.x; + this.startY = pointer.y; + this.circle = new fabric.Circle({ + left: this.startX, + top: this.startY, + originX: "left", + originY: "center", + strokeWidth: this.width, + stroke: this.color, + fill: this.fill, + selectable: false, + evented: false, + radius: 1, + }); + this.canvas.add(this.circle); + } + + doMouseMove(event: fabric.IEvent): void { + if (!this.isDown) return; + const pointer = this.pointer(event); + // The circle is anchored at its left-center point and rotated towards the + // pointer, so the drag segment is always the circle diameter + this.circle?.set({ + radius: linearDistance({ x: this.startX, y: this.startY }, pointer) / 2, + angle: + (Math.atan2(pointer.y - this.startY, pointer.x - this.startX) * 180) / + Math.PI, + }); + this.circle?.setCoords(); + this.canvas.renderAll(); + } + + doMouseUp(): void { + this.isDown = false; + } + + type(): Tool { + return Tool.CIRCLE; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/Circle/index.ts b/packages/react-sketch/src/components/SketchField/tools/Circle/index.ts new file mode 100644 index 00000000..0e170510 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Circle/index.ts @@ -0,0 +1 @@ +export { Circle } from "./Circle"; From 8ce2a6e8a637484bf00b9ab423b34fa50af5532f Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:48 +0300 Subject: [PATCH 16/70] Port the Arrow tool A release without a preceding press no longer groups the previous arrow a second time. --- .../SketchField/tools/Arrow/Arrow.ts | 95 +++++++++++++++++++ .../SketchField/tools/Arrow/index.ts | 1 + 2 files changed, 96 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/Arrow/Arrow.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/Arrow/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/Arrow/Arrow.ts b/packages/react-sketch/src/components/SketchField/tools/Arrow/Arrow.ts new file mode 100644 index 00000000..28696acc --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Arrow/Arrow.ts @@ -0,0 +1,95 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { SketchProperties, Tool } from "../../../../types"; + +export class Arrow extends FabricCanvasTool { + private width: number; + private color?: string; + private isDown: boolean; + private startX: number; + private startY: number; + private line: fabric.Line | null; + private head: fabric.Triangle | null; + + constructor(canvas: fabric.Canvas) { + super(canvas); + this.width = 1; + this.isDown = false; + this.startX = 0; + this.startY = 0; + this.line = null; + this.head = null; + } + + configureCanvas(props: SketchProperties): void { + this.setInteractive(false); + this.width = props.lineWidth ? props.lineWidth : 1; + this.color = props.lineColor ? props.lineColor : "black"; + } + + doMouseDown(event: fabric.IEvent): void { + this.isDown = true; + const pointer = this.pointer(event); + this.startX = pointer.x; + this.startY = pointer.y; + this.line = new fabric.Line([pointer.x, pointer.y, pointer.x, pointer.y], { + strokeWidth: this.width, + fill: this.color, + stroke: this.color, + originX: "center", + originY: "center", + selectable: false, + evented: false, + }); + this.head = new fabric.Triangle({ + fill: this.color, + left: pointer.x, + top: pointer.y, + originX: "center", + originY: "center", + height: 3 * this.width, + width: 3 * this.width, + selectable: false, + evented: false, + angle: 90, + }); + this.canvas.add(this.line); + this.canvas.add(this.head); + } + + doMouseMove(event: fabric.IEvent): void { + if (!this.isDown) return; + const pointer = this.pointer(event); + this.line?.set({ x2: pointer.x, y2: pointer.y }); + this.line?.setCoords(); + this.head?.set({ + left: pointer.x, + top: pointer.y, + angle: + 90 + + (Math.atan2(pointer.y - this.startY, pointer.x - this.startX) * 180) / + Math.PI, + }); + this.canvas.renderAll(); + } + + /** + * The line and the head are merged into a single group once the arrow is + * drawn (this also runs when the pointer left the canvas while drawing) + */ + doMouseUp(): void { + this.isDown = false; + if (!this.line || !this.head) return; + this.canvas.remove(this.line, this.head); + this.canvas.add(new fabric.Group([this.line, this.head])); + this.line = this.head = null; + } + + doMouseOut(): void { + this.isDown = false; + } + + type(): Tool { + return Tool.ARROW; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/Arrow/index.ts b/packages/react-sketch/src/components/SketchField/tools/Arrow/index.ts new file mode 100644 index 00000000..3f554668 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Arrow/index.ts @@ -0,0 +1 @@ +export { Arrow } from "./Arrow"; From 86604ee4d6a369bb657158f5681f2fc3df039cc0 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:48 +0300 Subject: [PATCH 17/70] Port the Pan tool --- .../components/SketchField/tools/Pan/Pan.ts | 46 +++++++++++++++++++ .../components/SketchField/tools/Pan/index.ts | 1 + 2 files changed, 47 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/Pan/Pan.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/Pan/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/Pan/Pan.ts b/packages/react-sketch/src/components/SketchField/tools/Pan/Pan.ts new file mode 100644 index 00000000..359d416a --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Pan/Pan.ts @@ -0,0 +1,46 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { Tool } from "../../../../types"; + +export class Pan extends FabricCanvasTool { + private isDown: boolean; + private startX: number; + private startY: number; + + constructor(canvas: fabric.Canvas) { + super(canvas); + this.isDown = false; + this.startX = 0; + this.startY = 0; + } + + configureCanvas(): void { + this.setInteractive(false); + // Change the cursor to the move grabber + this.canvas.defaultCursor = "move"; + } + + doMouseDown(event: fabric.IEvent): void { + this.isDown = true; + const pointer = this.pointer(event); + this.startX = pointer.x; + this.startY = pointer.y; + } + + doMouseMove(event: fabric.IEvent): void { + if (!this.isDown) return; + const pointer = this.pointer(event); + this.canvas.relativePan( + new fabric.Point(pointer.x - this.startX, pointer.y - this.startY) + ); + this.canvas.renderAll(); + } + + doMouseUp(): void { + this.isDown = false; + } + + type(): Tool { + return Tool.PAN; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/Pan/index.ts b/packages/react-sketch/src/components/SketchField/tools/Pan/index.ts new file mode 100644 index 00000000..f0f0fb19 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Pan/index.ts @@ -0,0 +1 @@ +export { Pan } from "./Pan"; From 455dd9f72d84f349eba30328aca71b015df6eb2e Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:49 +0300 Subject: [PATCH 18/70] Port the Select tool --- .../SketchField/tools/Select/Select.ts | 17 +++++++++++++++++ .../SketchField/tools/Select/index.ts | 1 + 2 files changed, 18 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/Select/Select.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/Select/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/Select/Select.ts b/packages/react-sketch/src/components/SketchField/tools/Select/Select.ts new file mode 100644 index 00000000..fa688c95 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Select/Select.ts @@ -0,0 +1,17 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { Tool } from "../../../../types"; + +export class Select extends FabricCanvasTool { + constructor(canvas: fabric.Canvas) { + super(canvas); + } + + configureCanvas(): void { + this.setInteractive(true); + } + + type(): Tool { + return Tool.SELECT; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/Select/index.ts b/packages/react-sketch/src/components/SketchField/tools/Select/index.ts new file mode 100644 index 00000000..b6497e64 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Select/index.ts @@ -0,0 +1 @@ +export { Select } from "./Select"; From 94910da0ff13f2cdb53b0352d28c865cddf2f7cd Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:49 +0300 Subject: [PATCH 19/70] Port the DefaultTool --- .../tools/DefaultTool/DefaultTool.ts | 20 +++++++++++++++++++ .../SketchField/tools/DefaultTool/index.ts | 1 + 2 files changed, 21 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/DefaultTool/DefaultTool.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/DefaultTool/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/DefaultTool/DefaultTool.ts b/packages/react-sketch/src/components/SketchField/tools/DefaultTool/DefaultTool.ts new file mode 100644 index 00000000..5da9688a --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/DefaultTool/DefaultTool.ts @@ -0,0 +1,20 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { Tool } from "../../../../types"; + +export class DefaultTool extends FabricCanvasTool { + constructor(canvas: fabric.Canvas) { + super(canvas); + } + + configureCanvas(): void { + this.setInteractive(false); + this.canvas.discardActiveObject(); + this.canvas.defaultCursor = "pointer"; + this.canvas.renderAll(); + } + + type(): Tool { + return Tool.DEFAULT_TOOL; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/DefaultTool/index.ts b/packages/react-sketch/src/components/SketchField/tools/DefaultTool/index.ts new file mode 100644 index 00000000..b0c8e8eb --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/DefaultTool/index.ts @@ -0,0 +1 @@ +export { DefaultTool } from "./DefaultTool"; From 49a077d9c1ddf4ee6757fc4ee336055efcb5e20f Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:50 +0300 Subject: [PATCH 20/70] Port the Highlighter tool Line width and color fall back to 1 and black like the Pencil. --- .../tools/Highlighter/Highlighter.ts | 26 +++++++++++++++++++ .../SketchField/tools/Highlighter/index.ts | 1 + 2 files changed, 27 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/Highlighter/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts b/packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts new file mode 100644 index 00000000..8b9c8d4f --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts @@ -0,0 +1,26 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { SketchProperties, Tool } from "../../../../types"; +import { colorNameToHex, hexToRgbA } from "../../../../utils"; + +export class Highlighter extends FabricCanvasTool { + constructor(canvas: fabric.Canvas) { + super(canvas); + } + + /** + * @throws Error when lineColor is neither a hex code nor a known color name + */ + configureCanvas(props: SketchProperties): void { + const color = props.lineColor ? props.lineColor : "black"; + this.canvas.isDrawingMode = true; + this.canvas.freeDrawingBrush.width = props.lineWidth ? props.lineWidth : 1; + this.canvas.freeDrawingBrush.color = hexToRgbA( + color.startsWith("#") ? color : colorNameToHex(color) ?? color + ); + } + + type(): Tool { + return Tool.HIGHLIGHTER; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/Highlighter/index.ts b/packages/react-sketch/src/components/SketchField/tools/Highlighter/index.ts new file mode 100644 index 00000000..e8b025c4 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/Highlighter/index.ts @@ -0,0 +1 @@ +export { Highlighter } from "./Highlighter"; From d3322a3772ff2152f46724d711e5f99b5b5bb51f Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:50 +0300 Subject: [PATCH 21/70] Port the RectangleLabel tool and its label object Unused legacy state (the text prop, the object list) is not ported. The rectangle follows the pointer upwards too: legacy set left instead of top. --- .../tools/RectangleLabel/RectangleLabel.ts | 119 ++++++++++++++++++ .../RectangleLabel/RectangleLabelObject.ts | 37 ++++++ .../SketchField/tools/RectangleLabel/index.ts | 1 + 3 files changed, 157 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabel.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabelObject.ts create mode 100644 packages/react-sketch/src/components/SketchField/tools/RectangleLabel/index.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabel.ts b/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabel.ts new file mode 100644 index 00000000..b7c72e7e --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabel.ts @@ -0,0 +1,119 @@ +import { fabric } from "fabric"; +import { FabricCanvasTool } from "../index"; +import { RectangleLabelObject } from "./RectangleLabelObject"; +import { SketchProperties, Tool } from "../../../../types"; + +const MAX_FONT_SIZE = 12; + +export class RectangleLabel extends FabricCanvasTool { + private width?: number; + private color?: string; + private fill?: string; + private isDown: boolean; + private startX: number; + private startY: number; + private label: RectangleLabelObject | null; + + constructor(canvas: fabric.Canvas) { + super(canvas); + this.isDown = false; + this.startX = 0; + this.startY = 0; + this.label = null; + } + + configureCanvas(props: SketchProperties): void { + this.setInteractive(false); + this.width = props.lineWidth ? props.lineWidth : 1; + this.color = props.lineColor ? props.lineColor : "black"; + this.fill = props.fillColor ? props.fillColor : "transparent"; + } + + doMouseDown(event: fabric.IEvent): void { + this.isDown = true; + const pointer = this.pointer(event); + this.startX = pointer.x; + this.startY = pointer.y; + const label = new RectangleLabelObject( + this.canvas, + "New drawing", + { + left: this.startX, + top: this.startY, + originX: "left", + originY: "top", + width: 0, + height: 0, + stroke: this.color, + strokeWidth: this.width, + fill: this.fill, + transparentCorners: false, + selectable: false, + evented: false, + strokeUniform: true, + noScaleCache: false, + angle: 0, + }, + { + left: this.startX, + top: this.startY - MAX_FONT_SIZE, + originX: "left", + originY: "top", + width: 0, + fontSize: MAX_FONT_SIZE, + noScaleCache: false, + backgroundColor: this.color, + transparentCorners: true, + hasControls: false, + angle: 0, + } + ); + this.label = label; + + // Shrink the text until it fits the third of the canvas height + const { textbox } = label; + const maxHeight = this.canvas.getHeight() / 3; + while ((textbox.height ?? 0) > maxHeight) { + const fontSize = textbox.fontSize ?? MAX_FONT_SIZE; + textbox.set({ + fontSize: fontSize - 1, + top: this.startY - fontSize - MAX_FONT_SIZE, + }); + } + + this.canvas.add(label.rect); + this.canvas.add(label.textbox); + this.canvas.renderAll(); + } + + doMouseMove(event: fabric.IEvent): void { + if (!this.isDown || !this.label) return; + const pointer = this.pointer(event); + const { rect, textbox } = this.label; + const left = Math.min(this.startX, pointer.x); + rect.set({ + left, + top: Math.min(this.startY, pointer.y), + width: Math.abs(this.startX - pointer.x), + height: Math.abs(this.startY - pointer.y), + }); + // The text sits above the rectangle, unless it is dragged upwards + textbox.set({ + left, + top: Math.min(this.startY - MAX_FONT_SIZE, pointer.y), + width: rect.getScaledWidth(), + }); + textbox.setCoords(); + rect.setCoords(); + this.canvas.renderAll(); + } + + doMouseUp(): void { + this.isDown = false; + this.canvas.renderAll(); + } + + type(): Tool { + return Tool.RECTANGLE_LABEL; + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabelObject.ts b/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabelObject.ts new file mode 100644 index 00000000..bd2e4846 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/RectangleLabelObject.ts @@ -0,0 +1,37 @@ +import { fabric } from "fabric"; + +/** + * A rectangle with a text box on top of it. The text box follows the + * rectangle when it is moved or scaled. + */ +export class RectangleLabelObject { + readonly rect: fabric.Rect; + readonly textbox: fabric.Textbox; + + constructor( + canvas: fabric.Canvas, + text: string, + rectProps: fabric.IRectOptions, + textProps: fabric.ITextboxOptions + ) { + this.rect = new fabric.Rect(rectProps); + this.textbox = new fabric.Textbox(text, textProps); + canvas.on("object:scaling", this.update); + canvas.on("object:moving", this.update); + } + + update = (event: fabric.IEvent): void => { + if (event.target !== this.rect) return; + this.textbox.set({ + width: this.rect.getScaledWidth(), + scaleX: 1, + scaleY: 1, + top: (this.rect.top ?? 0) - this.textbox.getScaledHeight(), + left: this.rect.left, + }); + }; + + setText(text: string): void { + this.textbox.set({ text }); + } +} diff --git a/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/index.ts b/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/index.ts new file mode 100644 index 00000000..f1703555 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/RectangleLabel/index.ts @@ -0,0 +1 @@ +export { RectangleLabel } from "./RectangleLabel"; From 36f91d9c37126f1ff9616224efcb4b3d0a32ad76 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:51 +0300 Subject: [PATCH 22/70] Wire all tools in the factory Unknown tools still fall back to the Pencil. The cursor is reset before a tool is configured, as the legacy component did when the tool changed, so Pan and DefaultTool cursors do not leak into the next tool. --- .../components/SketchField/tools/factory.ts | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/tools/factory.ts b/packages/react-sketch/src/components/SketchField/tools/factory.ts index 6e2c0bf2..f23787b3 100644 --- a/packages/react-sketch/src/components/SketchField/tools/factory.ts +++ b/packages/react-sketch/src/components/SketchField/tools/factory.ts @@ -1,12 +1,20 @@ import { fabric } from "fabric"; import { SketchProperties, Tool } from "../../../types"; import { FabricCanvasTool } from "./index"; -import { Pencil } from "./Pencil"; +import { Arrow } from "./Arrow"; +import { Circle } from "./Circle"; +import { DefaultTool } from "./DefaultTool"; +import { Highlighter } from "./Highlighter"; import { Line } from "./Line"; +import { Pan } from "./Pan"; +import { Pencil } from "./Pencil"; +import { Rectangle } from "./Rectangle"; +import { RectangleLabel } from "./RectangleLabel"; +import { Select } from "./Select"; /** * Factory to create the corresponding tool based on the prop passed to - * the Component + * the Component. Unknown tools fall back to the Pencil. * * @param {fabric.Canvas} canvas the fabric Canvas instance instantiated * @param {SketchProperties} props defined to SketchField @@ -15,35 +23,43 @@ export const create_tool = ( canvas: fabric.Canvas, props: SketchProperties ): FabricCanvasTool => { - const tool = props.tool; - let toolInstance: FabricCanvasTool | null = null; + let toolInstance: FabricCanvasTool; - switch (tool) { - default: - case Tool.PENCIL: - toolInstance = new Pencil(canvas); - break; + switch (props.tool) { case Tool.CIRCLE: + toolInstance = new Circle(canvas); break; case Tool.LINE: toolInstance = new Line(canvas); break; case Tool.ARROW: + toolInstance = new Arrow(canvas); break; case Tool.RECTANGLE: + toolInstance = new Rectangle(canvas); + break; + case Tool.RECTANGLE_LABEL: + toolInstance = new RectangleLabel(canvas); break; case Tool.SELECT: + toolInstance = new Select(canvas); break; case Tool.PAN: + toolInstance = new Pan(canvas); break; case Tool.HIGHLIGHTER: + toolInstance = new Highlighter(canvas); break; + case Tool.DEFAULT_TOOL: + toolInstance = new DefaultTool(canvas); + break; + case Tool.PENCIL: + default: + toolInstance = new Pencil(canvas); } - if (!toolInstance) { - throw new Error(); - } - + // Bring the cursor back to default, in case the previous tool changed it + canvas.defaultCursor = "default"; toolInstance.configureCanvas(props); return toolInstance; }; From 337251c3e994da934415193c7d4ab1ac2ed39840 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:20:51 +0300 Subject: [PATCH 23/70] Add tools spec Covers the factory and simulates mouse down/move/up on a fabric canvas for the geometry tools. Written for Jest, jsdom and jest-canvas-mock. --- .../SketchField/tools/tools.spec.ts | 302 ++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/tools/tools.spec.ts diff --git a/packages/react-sketch/src/components/SketchField/tools/tools.spec.ts b/packages/react-sketch/src/components/SketchField/tools/tools.spec.ts new file mode 100644 index 00000000..ea950445 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/tools/tools.spec.ts @@ -0,0 +1,302 @@ +/** + * @jest-environment jsdom + */ +import "jest-canvas-mock"; +import { fabric } from "fabric"; +import { Tool } from "../../../types"; +import { FabricCanvasTool } from "./index"; +import { create_tool } from "./factory"; + +type Point = [number, number]; + +const mouseEvent = (type: string, [x, y]: Point): fabric.IEvent => ({ + e: new MouseEvent(type, { clientX: x, clientY: y }), +}); + +const down = (tool: FabricCanvasTool, point: Point) => + tool.doMouseDown(mouseEvent("mousedown", point)); +const move = (tool: FabricCanvasTool, point: Point) => + tool.doMouseMove(mouseEvent("mousemove", point)); +const up = (tool: FabricCanvasTool, point: Point) => + tool.doMouseUp(mouseEvent("mouseup", point)); + +/** Press the mouse at `from`, move it to `to` and release it */ +const drag = (tool: FabricCanvasTool, from: Point, to: Point) => { + down(tool, from); + move(tool, to); + up(tool, to); +}; + +describe("Tools", () => { + let canvas: fabric.Canvas; + + beforeEach(() => { + canvas = new fabric.Canvas(document.createElement("canvas")); + }); + + afterEach(() => { + canvas.dispose(); + }); + + describe("factory", () => { + it.each(Object.values(Tool))("creates the %s tool", (name) => { + const tool = create_tool(canvas, { tool: name, lineColor: "red" }); + expect(tool.type()).toEqual(name); + }); + + it("falls back to the pencil for unknown tools", () => { + const tool = create_tool(canvas, { tool: "does-not-exist" }); + expect(tool.type()).toEqual(Tool.PENCIL); + }); + + it("resets the cursor changed by the previous tool", () => { + create_tool(canvas, { tool: Tool.PAN }); + expect(canvas.defaultCursor).toEqual("move"); + create_tool(canvas, { tool: Tool.LINE }); + expect(canvas.defaultCursor).toEqual("default"); + }); + }); + + describe("Line", () => { + it("draws a line following the mouse", () => { + const tool = create_tool(canvas, { + tool: Tool.LINE, + lineColor: "red", + lineWidth: 3, + }); + down(tool, [10, 20]); + move(tool, [60, 80]); + up(tool, [60, 80]); + + const [line] = canvas.getObjects() as fabric.Line[]; + expect(canvas.getObjects()).toHaveLength(1); + expect([line.x1, line.y1, line.x2, line.y2]).toEqual([10, 20, 60, 80]); + expect(line.stroke).toEqual("red"); + expect(line.strokeWidth).toEqual(3); + }); + + it("stops drawing once the mouse is released", () => { + const tool = create_tool(canvas, { tool: Tool.LINE }); + drag(tool, [10, 20], [60, 80]); + move(tool, [5, 5]); + + const [line] = canvas.getObjects() as fabric.Line[]; + expect([line.x2, line.y2]).toEqual([60, 80]); + }); + }); + + describe("Rectangle", () => { + it("draws a rectangle with the given colors", () => { + const tool = create_tool(canvas, { + tool: Tool.RECTANGLE, + lineColor: "red", + lineWidth: 3, + fillColor: "blue", + }); + drag(tool, [10, 20], [110, 70]); + + const [rect] = canvas.getObjects() as fabric.Rect[]; + expect(canvas.getObjects()).toHaveLength(1); + expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ + 10, + 20, + 100, + 50, + ]); + expect(rect.stroke).toEqual("red"); + expect(rect.strokeWidth).toEqual(3); + expect(rect.fill).toEqual("blue"); + }); + + it("is transparent by default", () => { + const tool = create_tool(canvas, { tool: Tool.RECTANGLE }); + down(tool, [10, 20]); + + const [rect] = canvas.getObjects() as fabric.Rect[]; + expect(rect.fill).toEqual("transparent"); + }); + + it("draws towards the top left and back", () => { + const tool = create_tool(canvas, { tool: Tool.RECTANGLE }); + down(tool, [100, 100]); + move(tool, [40, 60]); + + const [rect] = canvas.getObjects() as fabric.Rect[]; + expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ + 40, + 60, + 60, + 40, + ]); + + move(tool, [150, 130]); + expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ + 100, + 100, + 50, + 30, + ]); + }); + }); + + describe("Circle", () => { + it("draws a circle having the drag segment as diameter", () => { + const tool = create_tool(canvas, { + tool: Tool.CIRCLE, + lineColor: "red", + lineWidth: 3, + fillColor: "blue", + }); + drag(tool, [0, 0], [30, 40]); + + const [circle] = canvas.getObjects() as fabric.Circle[]; + expect(canvas.getObjects()).toHaveLength(1); + expect(circle.radius).toEqual(25); + expect(circle.angle).toBeCloseTo(53.13, 2); + expect([circle.left, circle.top]).toEqual([0, 0]); + expect(circle.stroke).toEqual("red"); + expect(circle.strokeWidth).toEqual(3); + expect(circle.fill).toEqual("blue"); + }); + }); + + describe("Arrow", () => { + it("draws a line with a head pointing at the mouse", () => { + const tool = create_tool(canvas, { tool: Tool.ARROW, lineWidth: 3 }); + down(tool, [0, 0]); + move(tool, [100, 0]); + + const [line, head] = canvas.getObjects(); + expect(canvas.getObjects()).toHaveLength(2); + expect(line.type).toEqual("line"); + expect(head.type).toEqual("triangle"); + expect([head.left, head.top, head.angle]).toEqual([100, 0, 90]); + + move(tool, [0, 100]); + expect(head.angle).toEqual(180); + }); + + it("groups the line and the head on release", () => { + const tool = create_tool(canvas, { tool: Tool.ARROW }); + drag(tool, [0, 0], [100, 50]); + + const [group] = canvas.getObjects() as fabric.Group[]; + expect(canvas.getObjects()).toHaveLength(1); + expect(group.type).toEqual("group"); + expect(group.getObjects().map((o) => o.type)).toEqual(["line", "triangle"]); + + // a release without a preceding press adds nothing + up(tool, [100, 50]); + expect(canvas.getObjects()).toHaveLength(1); + }); + }); + + describe("RectangleLabel", () => { + it("draws a rectangle with a label on top of it", () => { + const tool = create_tool(canvas, { + tool: Tool.RECTANGLE_LABEL, + lineColor: "red", + }); + drag(tool, [100, 100], [180, 160]); + + const [rect, text] = canvas.getObjects() as [fabric.Rect, fabric.Textbox]; + expect(canvas.getObjects()).toHaveLength(2); + expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ + 100, + 100, + 80, + 60, + ]); + expect(text.text).toEqual("New drawing"); + expect(text.backgroundColor).toEqual("red"); + }); + + it("moves the label along with the rectangle", () => { + const tool = create_tool(canvas, { tool: Tool.RECTANGLE_LABEL }); + drag(tool, [100, 100], [180, 160]); + + const [rect, text] = canvas.getObjects() as [fabric.Rect, fabric.Textbox]; + rect.set({ left: 200, top: 150 }); + canvas.fire("object:moving", { target: rect }); + + expect(text.left).toEqual(200); + expect(text.top).toEqual(150 - text.getScaledHeight()); + }); + }); + + describe("Pan", () => { + it("moves the viewport while the mouse is pressed", () => { + const tool = create_tool(canvas, { tool: Tool.PAN }); + down(tool, [10, 10]); + move(tool, [30, 25]); + up(tool, [30, 25]); + move(tool, [100, 100]); + + const [, , , , x, y] = canvas.viewportTransform as number[]; + expect([x, y]).toEqual([20, 15]); + }); + }); + + describe("Select and DefaultTool", () => { + it("toggle the interactivity of the existing objects", () => { + const rect = new fabric.Rect({ width: 5, height: 5 }); + canvas.add(rect); + + create_tool(canvas, { tool: Tool.LINE }); + expect([canvas.selection, rect.selectable, rect.evented]).toEqual([ + false, + false, + false, + ]); + + create_tool(canvas, { tool: Tool.SELECT }); + expect([canvas.selection, rect.selectable, rect.evented]).toEqual([ + true, + true, + true, + ]); + + canvas.setActiveObject(rect); + create_tool(canvas, { tool: Tool.DEFAULT_TOOL }); + expect(canvas.getActiveObject()).toBeNull(); + expect([canvas.selection, rect.selectable, rect.evented]).toEqual([ + false, + false, + false, + ]); + expect(canvas.defaultCursor).toEqual("pointer"); + }); + }); + + describe("Pencil and Highlighter", () => { + it("configure the free drawing brush", () => { + create_tool(canvas, { + tool: Tool.PENCIL, + lineColor: "green", + lineWidth: 4, + }); + expect(canvas.isDrawingMode).toBe(true); + expect(canvas.freeDrawingBrush.color).toEqual("green"); + expect(canvas.freeDrawingBrush.width).toEqual(4); + + create_tool(canvas, { + tool: Tool.HIGHLIGHTER, + lineColor: "#ff0000", + lineWidth: 8, + }); + expect(canvas.freeDrawingBrush.color).toEqual("rgba(255,0,0,0.4)"); + expect(canvas.freeDrawingBrush.width).toEqual(8); + }); + + it("highlights with color names", () => { + create_tool(canvas, { tool: Tool.HIGHLIGHTER, lineColor: "Red" }); + expect(canvas.freeDrawingBrush.color).toEqual("rgba(255,0,0,0.4)"); + }); + + it("rejects highlighter colors it cannot convert", () => { + expect(() => + create_tool(canvas, { tool: Tool.HIGHLIGHTER, lineColor: "nope" }) + ).toThrow(/Bad hex color/); + }); + }); +}); From e87aab1c6a05cb534bad1bd81d2ba0cdbe054f22 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:22:38 +0300 Subject: [PATCH 24/70] Clarify jest config comments --- packages/react-sketch/jest.config.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/react-sketch/jest.config.js b/packages/react-sketch/jest.config.js index e63f9b2d..72dc620f 100644 --- a/packages/react-sketch/jest.config.js +++ b/packages/react-sketch/jest.config.js @@ -9,8 +9,9 @@ module.exports = { "ts-jest", { tsconfig: "/tsconfig.spec.json", - // Type errors fail the build for spec files only. Type-checking the - // production sources is the job of tsc, not of the test run. + // Only spec files are type-checked during the test run. Type errors in + // production sources are reported by tsc, so they do not fail tests. + // Remove the line below to type-check every file imported by a test. diagnostics: { exclude: ["**", "!**/*.spec.ts", "!**/*.spec.tsx"] }, }, ], @@ -20,7 +21,8 @@ module.exports = { "src/**/*.{ts,tsx}", "!src/**/*.spec.{ts,tsx}", "!src/**/*.d.ts", - // pure re-export barrels (history/index.ts and tools/index.ts hold code and stay in) + // Re-export barrels only: history/index.ts and tools/index.ts hold code, so + // they stay in the report. "!src/index.ts", "!src/components/SketchField/index.ts", "!src/components/SketchField/tools/*/index.ts", From e0473479dbc9d9d99ad7a2e90c44dd13f9221955 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:24:18 +0300 Subject: [PATCH 25/70] Modernize showcase webpack config for webpack-dev-server 6 Use ts-loader (type checking moves to the typecheck script), css-loader 7, style-loader 4, source-map-loader 5, html-webpack-plugin 5.6 and webpack-dev-server 6 (static.directory, devMiddleware, port 23000), plus output.clean. react-sketch resolves to ../react-sketch/src/index.ts via resolve.alias so the showcase runs without a prebuilt dist. Add build and typecheck scripts, move css-loader/style-loader to devDependencies, and drop the duplicated loaders and awesome-typescript-loader from the root. --- package.json | 3 - packages/showcase/package.json | 21 +- packages/showcase/webpack.config.js | 15 +- yarn.lock | 3615 ++++++++++----------------- 4 files changed, 1404 insertions(+), 2250 deletions(-) diff --git a/package.json b/package.json index aa8cfefe..1d97907c 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,6 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "^4.21.0", "@typescript-eslint/parser": "^4.21.0", - "awesome-typescript-loader": "^5.2.1", - "css-loader": "^5.2.0", "eslint": "^7.23.0", "eslint-plugin-prettier": "^3.3.1", "eslint-plugin-react": "^7.23.1", @@ -42,7 +40,6 @@ "husky": "^6.0.0", "lint-staged": "^10.5.4", "prettier": "^2.2.1", - "source-map-loader": "^2.0.1", "typescript": "^5.9.3", "webpack": "^5.111.1", "webpack-cli": "^7.2.3", diff --git a/packages/showcase/package.json b/packages/showcase/package.json index 8385c3bb..dc64d6f5 100644 --- a/packages/showcase/package.json +++ b/packages/showcase/package.json @@ -3,26 +3,29 @@ "version": "1.0.0", "description": "Sketch Component Showcase", "scripts": { - "start": "webpack serve --mode development --open" + "start": "webpack serve --mode development --open", + "build": "webpack --mode production", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@material-ui/types": "^5.1.0", - "@types/node": "^14.14.41", - "html-webpack-plugin": "^5.3.1", - "source-map-loader": "^2.0.1", - "webpack-cli": "^4.6.0", - "webpack-dev-server": "^3.11.2" + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", + "css-loader": "^7.1.5", + "html-webpack-plugin": "^5.6.8", + "source-map-loader": "^5.0.0", + "style-loader": "^4.0.0", + "ts-loader": "^9.6.2", + "webpack-dev-server": "^6.0.0" }, "dependencies": { "@material-ui/core": "^4.11.3", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.57", - "css-loader": "^5.2.1", "mobx": "^6.2.0", "mobx-react-lite": "^3.2.0", "react": "^17.0.2", "react-dom": "^17.0.2", - "react-sketch": "^1.0.0", - "style-loader": "^2.0.0" + "react-sketch": "^1.0.0" } } diff --git a/packages/showcase/webpack.config.js b/packages/showcase/webpack.config.js index bf5c8fbf..7f0df8c6 100644 --- a/packages/showcase/webpack.config.js +++ b/packages/showcase/webpack.config.js @@ -5,18 +5,22 @@ const port = 23000; module.exports = { target: "web", - mode: "development", entry: "./src/index.tsx", resolve: { extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], + alias: { + // Use the library sources so the showcase runs without a prebuilt dist. + "react-sketch": path.resolve(__dirname, "../react-sketch/src/index.ts"), + }, }, output: { path: path.resolve(__dirname, "build"), filename: "bundle.js", + clean: true, }, devServer: { - contentBase: path.join(__dirname, "src"), - stats: { colors: true }, + static: { directory: path.join(__dirname, "public") }, + devMiddleware: { stats: { colors: true } }, port: port, }, devtool: "source-map", @@ -24,7 +28,10 @@ module.exports = { rules: [ { test: /\.(ts|tsx)$/, - loader: "awesome-typescript-loader", + loader: "ts-loader", + exclude: /node_modules/, + // Types are checked by `yarn typecheck`. + options: { transpileOnly: true }, }, { enforce: "pre", diff --git a/yarn.lock b/yarn.lock index 847550df..da057ffd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,11 +37,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@discoveryjs/json-ext@^0.5.0": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" - integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== - "@discoveryjs/json-ext@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-1.1.0.tgz#44b5ce3485e95235aca06e628eeaaa3c816bc4cc" @@ -110,6 +105,172 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsonjoy.com/base64@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-17.67.0.tgz#7eeda3cb41138d77a90408fd2e42b2aba10576d7" + integrity sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw== + +"@jsonjoy.com/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/buffers@17.67.0", "@jsonjoy.com/buffers@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz#5c58dbcdeea8824ce296bd1cfce006c2eb167b3d" + integrity sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw== + +"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" + integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== + +"@jsonjoy.com/codegen@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz#3635fd8769d77e19b75dc5574bc9756019b2e591" + integrity sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q== + +"@jsonjoy.com/codegen@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" + integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== + +"@jsonjoy.com/fs-core@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.80.0.tgz#6dc91c945dcc25657b9a9839580ac243a4405fef" + integrity sha512-qMKWshnyjbyhm+NbzqGE3w5y1mckFFEMj0aDPU2/JBNh1BzIjVy9esq9lBmRnNVmhMEkxwDzLZ8Gqh5G1P5Dag== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.80.0" + "@jsonjoy.com/fs-node-utils" "4.80.0" + thingies "^2.5.0" + +"@jsonjoy.com/fs-fsa@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.80.0.tgz#f22b948d3fd2fb199b2fd4b9c22c60fd7f9b0fe4" + integrity sha512-ZBEKl7J6dbkRCfmrFV48Re211A/FHqniTUhsWCsaRteNSOqMgkX3qF1UreVgwB9oSPm81JLAwhIi6Lb/NH/PoA== + dependencies: + "@jsonjoy.com/fs-core" "4.80.0" + "@jsonjoy.com/fs-node-builtins" "4.80.0" + "@jsonjoy.com/fs-node-utils" "4.80.0" + thingies "^2.5.0" + +"@jsonjoy.com/fs-node-builtins@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.80.0.tgz#cfcffaae4acae2c1219b42bf222b2f1876141d1b" + integrity sha512-OIOIhqaWiwUySFMny4epIAoviXsyMaQQ63PTc3zH+5HEOvarl5hpUmZIhp2m5+OfyKAh5ylxXnQIgew1OgJDVw== + +"@jsonjoy.com/fs-node-to-fsa@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.80.0.tgz#4c8278a06de7e3c4f1fe626ef351474a6e3cd142" + integrity sha512-ljeaR5xwtX1EyRmB0wvXANUMQZ3mjKcm7z8s2N8D8SLQ04CcAGtUhHFRZQXFb9mhgFyEVMydQGQtSOFS7pcrFQ== + dependencies: + "@jsonjoy.com/fs-fsa" "4.80.0" + "@jsonjoy.com/fs-node-builtins" "4.80.0" + "@jsonjoy.com/fs-node-utils" "4.80.0" + +"@jsonjoy.com/fs-node-utils@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.80.0.tgz#4e9d978a172227201ed06723444c9c1658c1df34" + integrity sha512-xwHeVVi3f+Khg/Fmb8i5qoYVmQ08QznE5TWhQokUmIZjz4KBPzU+zt/+bahBI6G1ghtqajt27lWuAciIxApuzA== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.80.0" + glob-to-regex.js "^1.3.1" + +"@jsonjoy.com/fs-node@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.80.0.tgz#916f29ce9377d1bf2c7ac5a0747f704ab117dbf7" + integrity sha512-yiBlUfkMMRFFGy8CD/h2zd5rPnrM6bjlF+nx2LRAxNV6hOSiuObQIUEE7m7y2VTMisjxCRtzINH94bFGySWL7g== + dependencies: + "@jsonjoy.com/fs-core" "4.80.0" + "@jsonjoy.com/fs-node-builtins" "4.80.0" + "@jsonjoy.com/fs-node-utils" "4.80.0" + "@jsonjoy.com/fs-print" "4.80.0" + "@jsonjoy.com/fs-snapshot" "4.80.0" + glob-to-regex.js "^1.3.1" + thingies "^2.5.0" + +"@jsonjoy.com/fs-print@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.80.0.tgz#5668fa62a84a0c9383b3d3adcd0379702725ef79" + integrity sha512-1ocZLJw/m/xlq0moaIHO7HV9nHRVBUvdc2zMzhsJGkFOrqfwWvexfCv5cYCPPLRhP+9p3yunoi4Ep5YhRORC9Q== + dependencies: + "@jsonjoy.com/fs-node-utils" "4.80.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/fs-snapshot@4.80.0": + version "4.80.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.80.0.tgz#a7ab1eea3addd6c1e23b247100819fd19a92d3c7" + integrity sha512-3AV23Q1H228KTtJKTUE0nNq8FCtxSvtENOLrEat80wkAJCKHuqQEv8yjhpS8Bei2OEFJAnluGXp9Ri2SWBlROw== + dependencies: + "@jsonjoy.com/buffers" "^17.65.0" + "@jsonjoy.com/fs-node-utils" "4.80.0" + "@jsonjoy.com/json-pack" "^17.65.0" + "@jsonjoy.com/util" "^17.65.0" + +"@jsonjoy.com/json-pack@^1.11.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" + integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + dependencies: + "@jsonjoy.com/base64" "^1.1.2" + "@jsonjoy.com/buffers" "^1.2.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/json-pointer" "^1.0.2" + "@jsonjoy.com/util" "^1.9.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pack@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz#8dd8ff65dd999c5d4d26df46c63915c7bdec093a" + integrity sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w== + dependencies: + "@jsonjoy.com/base64" "17.67.0" + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + "@jsonjoy.com/json-pointer" "17.67.0" + "@jsonjoy.com/util" "17.67.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz#74439573dc046e0c9a3a552fb94b391bc75313b8" + integrity sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA== + dependencies: + "@jsonjoy.com/util" "17.67.0" + +"@jsonjoy.com/json-pointer@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" + integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== + dependencies: + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/util" "^1.9.0" + +"@jsonjoy.com/util@17.67.0", "@jsonjoy.com/util@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-17.67.0.tgz#7c4288fc3808233e55c7610101e7bb4590cddd3f" + integrity sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew== + dependencies: + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + +"@jsonjoy.com/util@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" + integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== + dependencies: + "@jsonjoy.com/buffers" "^1.0.0" + "@jsonjoy.com/codegen" "^1.0.0" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + "@material-ui/core@^4.11.3": version "4.11.3" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.3.tgz#f22e41775b0bd075e36a7a093d43951bf7f63850" @@ -192,6 +353,11 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" +"@noble/hashes@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -213,28 +379,204 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" +"@peculiar/asn1-cms@^2.11.0", "@peculiar/asn1-cms@^2.6.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.11.0.tgz#4805485c092cb1c8b2e6bebe98c5764fc517f0e5" + integrity sha512-SlAiDoT/Cd8qaNmbTt78gqyaEvu2fQd6ML6KWJkdjXGrgDKnHHrusVkfQUelkfinL2p665IIADb0JBixtT8W1g== + dependencies: + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/asn1-x509" "^2.11.0" + "@peculiar/asn1-x509-attr" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-csr@^2.6.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.11.0.tgz#074d57c6e3a3a006f4970d4e4ed25653f082d110" + integrity sha512-M/ED0yJ05qMK+UADPKnIa8vhAeewOJALSxTAZB7RQ/batRHhIJZkwznCcWAbFO5saHJ1yEQ+m4lncEcG9RnQSg== + dependencies: + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/asn1-x509" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-ecc@^2.6.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.11.0.tgz#f683a657efa24dbd60246fb67d73fcb8437d6a14" + integrity sha512-jj1alGEKev7/un+cI+exyVK9m31lmP7cCBMCZuCb0wkFQH2zmKmJzNiG4wqXFNzlcP8timHLnzf3lV3OxBpb/Q== + dependencies: + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/asn1-x509" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-pfx@^2.11.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.11.0.tgz#a59415fef398529650052e6cbb2e5208e7971b79" + integrity sha512-ykSAWRu8KkmzU8LRpk9ZQC3zuLmBEtoSMjIv9XHVamD5W7amqreV5wttKqnvtjWOzzSJQxA/HVT8/tHwpEEGSQ== + dependencies: + "@peculiar/asn1-cms" "^2.11.0" + "@peculiar/asn1-pkcs8" "^2.11.0" + "@peculiar/asn1-rsa" "^2.11.0" + "@peculiar/asn1-schema" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs8@^2.11.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.11.0.tgz#a667fc1877a1847b7a67175f1e8b3c803a52b8fe" + integrity sha512-lragjkjQGnQ5luxC+sxoAfAO/jBiQ7hOEGlDKJUk7MC5zY3AzjB2DU0GyPUH1Sswdv10t7DurY0zylOYMLb88w== + dependencies: + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/asn1-x509" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs9@^2.6.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.11.0.tgz#0128e9a91ae1612b6591a663f30ccaa3eeba7a47" + integrity sha512-gDdFjpqV0weJjgNUvueUVf4D8uVbpq+VbG0TsxLAY2QGljAkJyL9qwQ7avol9j0jaYSJ7Ey7v7RZp0M3GTcQSA== + dependencies: + "@peculiar/asn1-cms" "^2.11.0" + "@peculiar/asn1-pfx" "^2.11.0" + "@peculiar/asn1-pkcs8" "^2.11.0" + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/asn1-x509" "^2.11.0" + "@peculiar/asn1-x509-attr" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-rsa@^2.11.0", "@peculiar/asn1-rsa@^2.6.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.11.0.tgz#4bb966bd9c0c81adc0d1ea95f1fcb6ba0527d976" + integrity sha512-S2sBJmbfI09Kzdt9cEhE6pDNjHpVTkURs+811+PxS8AvsTLxC4woMNRhxHYaIbClkkNfAVt0tZxJdINVfUmzuA== + dependencies: + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/asn1-x509" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-schema@^2.11.0", "@peculiar/asn1-schema@^2.6.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.11.0.tgz#701ec588b25ff74f50ebb069dd9ae668957c074e" + integrity sha512-8xh4avo53/vXO6UEv9yaoJ83hY581geaLTygf61NPIXP5AeIZCPjJhpTaYU23IZkG+NpLN/C9FYzWp7hphIT9A== + dependencies: + "@peculiar/utils" "^2.0.2" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-x509-attr@^2.11.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.11.0.tgz#3b6de891ce4aad614d031746e2d035ec20283dfc" + integrity sha512-Fgvnd9REmLxEj/4cbDP54dNUNUXkzUksXLqEHqs1mHBuSRjSTCUSPM/WQIZYSvrdG7ND9CX1AQtPoIBekhgQSA== + dependencies: + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/asn1-x509" "^2.11.0" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/asn1-x509@^2.11.0", "@peculiar/asn1-x509@^2.6.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.11.0.tgz#d7357c86df92e8682edec5c596d1400d4fdb215e" + integrity sha512-J1sHAwGNlk+8J+FeR1eLVc6Gq0T9f9ITc3HWyPYgJraoW6U8AJuQiWVJ3SCEpltfTdpOY7fHdHT5oKAsbK/jww== + dependencies: + "@peculiar/asn1-schema" "^2.11.0" + "@peculiar/utils" "^2.0.2" + asn1js "^3.0.10" + tslib "^2.8.1" + +"@peculiar/utils@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@peculiar/utils/-/utils-2.0.3.tgz#a27ca4c4b73652e110f19a7d16d664f458a5528e" + integrity sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ== + dependencies: + tslib "^2.8.1" + +"@peculiar/x509@^1.14.2": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e" + integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-csr" "^2.6.0" + "@peculiar/asn1-ecc" "^2.6.0" + "@peculiar/asn1-pkcs9" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + pvtsutils "^1.3.6" + reflect-metadata "^0.2.2" + tslib "^2.8.1" + tsyringe "^4.10.0" + +"@types/body-parser@*": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + "@types/estree@^1.0.8": version "1.0.9" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0", "@types/express-serve-static-core@^5.1.1": + version "5.1.3" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.3.tgz#9d34c88c0c9ee62b9a6e4d9f8ab8d7e29688e6b4" + integrity sha512-dPfW8NFiOF4wOHc7+N/QSxlY9cfSsenewGbAz8C8U/MULPd/YZ27LvJUIlzaXie7e6Ove9YunJGgC9tbHD2cKw== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" + integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/serve-static" "^2" + "@types/fabric@^4.2.5": version "4.2.5" resolved "https://registry.yarnpkg.com/@types/fabric/-/fabric-4.2.5.tgz#095e412b49c896e2fa0d441bd2fceb6690074c4d" integrity sha512-nifrrxvgsYRoxNJB+xZUBe6pLWoqGbZdfwJ0y9zzdt3uU89SzP+8L9Whwrxbvu7eIXjPArSZOyuQmbD4zewdZA== -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== -"@types/html-minifier-terser@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" - integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== +"@types/http-errors@*": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.3" @@ -261,26 +603,16 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": +"@types/json-schema@^7.0.3": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== - "@types/node@*": version "10.12.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.3.tgz#3918b73ceed484e58367be5acb79d1775239e393" integrity sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg== -"@types/node@^14.14.41": - version "14.14.41" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615" - integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g== - "@types/node@^22.20.5": version "22.20.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.20.5.tgz#afa7bde6da81b8b83ea4e2f020487e9b148c11fd" @@ -298,6 +630,16 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.6.tgz#9c03d3fed70a8d517c191b7734da2879b50ca26c" integrity sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ== +"@types/qs@*": + version "6.15.1" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.1.tgz#8606884272c63f0db96986bd3548650d8a9388bf" + integrity sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + "@types/react-dom@^19.3.0": version "19.3.0" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.3.0.tgz#90294a9266efd928a5266f2110d60d5dba5015d2" @@ -325,6 +667,35 @@ dependencies: csstype "^3.2.2" +"@types/send@*": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== + dependencies: + "@types/node" "*" + +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== + dependencies: + "@types/express" "*" + +"@types/serve-static@^2", "@types/serve-static@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" + integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + +"@types/ws@^8.18.1": + version "8.18.2" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.2.tgz#25d6321b30ef0fddf6cc7052b4eef9ce4e412b6e" + integrity sha512-67MQl+fpWKVTT1NYdnmo3U4sc/xPo/zQBncVnI74qmQa0z/b+1g6iYqNmGCPbxO+zz2aklb08a0oHfegiVd0/w== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "20.2.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" @@ -528,23 +899,6 @@ "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.2.tgz#2a20812bfb3a2ebb0b27ee26a52eeb3e3f000836" - integrity sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA== - -"@webpack-cli/info@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.3.tgz#ef819d10ace2976b6d134c7c823a3e79ee31a92c" - integrity sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.1.tgz#911d1b3ff4a843304b9c3bacf67bb34672418441" - integrity sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw== - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -555,7 +909,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.0, abab@^2.0.5: +abab@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -565,13 +919,21 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +accepts@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" + integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== + dependencies: + mime-types "^3.0.0" + negotiator "^1.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" acorn-globals@^4.3.2: version "4.3.4" @@ -614,11 +976,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - ajv-formats@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" @@ -626,11 +983,6 @@ ajv-formats@^3.0.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" @@ -638,7 +990,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -668,11 +1020,6 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -685,10 +1032,10 @@ ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^2.0.0: version "2.1.1" @@ -710,6 +1057,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -724,14 +1076,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -752,36 +1096,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-includes@^3.1.2, array-includes@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" @@ -793,28 +1112,11 @@ array-includes@^3.1.2, array-includes@^3.1.3: get-intrinsic "^1.1.1" is-string "^1.0.5" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - array.prototype.flatmap@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" @@ -832,62 +1134,30 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" +asn1js@^3.0.10, asn1js@^3.0.6: + version "3.0.10" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.10.tgz#df26c874c8a8b41ca605efea47b2ad07551013dd" + integrity sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg== + dependencies: + pvtsutils "^1.3.6" + pvutils "^1.1.5" + tslib "^2.8.1" + assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -awesome-typescript-loader@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" - integrity sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g== - dependencies: - chalk "^2.4.1" - enhanced-resolve "^4.0.0" - loader-utils "^1.1.0" - lodash "^4.17.5" - micromatch "^3.1.9" - mkdirp "^0.5.1" - source-map-support "^0.5.3" - webpack-log "^1.2.0" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -903,19 +1173,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - baseline-browser-mapping@^2.11.26: version "2.11.28" resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.28.tgz#784efec0fa3965c28a0bbb755f40604ace1c9db0" @@ -933,62 +1190,35 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - bluebird@^3.5.1: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.3.0.tgz#6d8662f4d8c336028b8ac9aa24251b0ca64ba437" + integrity sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw== + dependencies: + bytes "^3.1.2" + content-type "^2.0.0" + debug "^4.4.3" + http-errors "^2.0.1" + iconv-lite "^0.7.2" + on-finished "^2.4.1" + qs "^6.15.2" + raw-body "^3.0.2" + type-is "^2.1.0" + +bonjour-service@^1.3.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.4.4.tgz#8ff5b85fa0641e0996bf40bcf61fc0c6727b66d3" + integrity sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw== dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -1001,22 +1231,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1024,6 +1238,13 @@ braces@^3.0.1: dependencies: fill-range "^7.0.1" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" @@ -1045,35 +1266,30 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +bundle-name@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.1.tgz#d9ecc7a201aee8e2f5a717a081215c2e2a3827b0" + integrity sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA== + dependencies: + run-applescript "^7.0.0" -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.2, bytes@^3.1.2, bytes@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytestreamjs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" + integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -1083,12 +1299,20 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^4.1.1: +camel-case@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== @@ -1101,11 +1325,6 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - caniuse-lite@^1.0.30001813: version "1.0.30001816" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz#80567cffb179fd8a1702816bc80de8efc9784021" @@ -1134,15 +1353,6 @@ chalk@^2.0.0, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -1151,24 +1361,12 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" +chokidar@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-5.0.0.tgz#949c126a9238a80792be9a0265934f098af369a5" + integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw== + dependencies: + readdirp "^5.0.0" chownr@^1.1.1: version "1.1.4" @@ -1182,20 +1380,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== +clean-css@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== dependencies: source-map "~0.6.0" @@ -1247,14 +1435,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1279,11 +1459,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1301,44 +1476,35 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -compressible@~2.0.16: +compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== +compression@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.2.tgz#781397127ae2da00c0c5f7c76bda5b2a9b32a49f" + integrity sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ== dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" + bytes "3.1.2" + compressible "~2.0.18" debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" + destroy "1.2.0" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" vary "~1.1.2" concat-map@0.0.1: @@ -1346,42 +1512,35 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-disposition@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-2.0.1.tgz#88a75c7a52ef9c407c96035fe83a66939c2a4dc9" + integrity sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog== -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= +content-type@^2.0.0, content-type@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-2.1.0.tgz#d9389c43c0a8cf6a355db464d21e07092a40493a" + integrity sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag== -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie-signature@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" + integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +cookie@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1410,7 +1569,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1428,51 +1587,30 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -css-loader@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00" - integrity sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw== - dependencies: - camelcase "^6.2.0" - cssesc "^3.0.0" - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.8" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.4" - -css-loader@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.1.tgz#15fbd5b6ac4c1b170a098f804c5abd0722f2aa73" - integrity sha512-YCyRzlt/jgG1xanXZDG/DHqAueOtXFHeusP9TS478oP1J++JSKOyEgGW1GHVoCj/rkS+GWOlBwqQJBr9yajQ9w== +css-loader@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.5.tgz#5f6a61c1e528c2dfcc9cbfa1e044e9061c99efce" + integrity sha512-Q7iAfQkU2twNBryKX/vGAlE+GAmkF7quhSzAGNK8fBimxk3+tqg245rH52UPb9dioBolBc8rP0ihmHBaDTJQBA== dependencies: - camelcase "^6.2.0" - cssesc "^3.0.0" icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.8" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" + postcss "^8.4.40" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.4" + postcss-value-parser "^4.2.0" + semver "^7.6.3" -css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" css-vendor@^2.0.8: version "2.0.8" @@ -1482,10 +1620,10 @@ css-vendor@^2.0.8: "@babel/runtime" "^7.8.3" is-in-browser "^1.0.2" -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css-what@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" + integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== cssesc@^3.0.0: version "3.0.0" @@ -1529,14 +1667,6 @@ csstype@^3.2.2, csstype@^3.2.3: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1553,37 +1683,39 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.6: +debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: +debug@^4.0.1, debug@^4.1.1, debug@^4.2.0: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" +debug@^4.4.0, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - decompress-response@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" @@ -1596,18 +1728,6 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -1618,56 +1738,31 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== +default-browser-id@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== + +default-browser@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.5.1.tgz#1790affc52680fbb11e17cab2752d69aa2a37d2c" + integrity sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw== dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1678,26 +1773,26 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@^2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -detect-node@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" - integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1705,25 +1800,12 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: - buffer-indexof "^1.0.0" + "@leichtgewicht/ip-codec" "^2.0.1" doctrine@^2.1.0: version "2.1.0" @@ -1739,7 +1821,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-converter@^0.2: +dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== @@ -1754,24 +1836,25 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" + domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== +domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -1779,20 +1862,21 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: - domelementtype "1" + domelementtype "^2.2.0" -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: - dom-serializer "0" - domelementtype "1" + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" dot-case@^3.0.4: version "3.0.4" @@ -1802,6 +1886,15 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -1830,20 +1923,10 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encodeurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== end-of-stream@^1.1.0: version "1.4.4" @@ -1852,15 +1935,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - enhanced-resolve@^5.25.0: version "5.26.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz#9dfb47d050ed6c87f2c6d43b4d7e30f8c0a91ed7" @@ -1876,11 +1950,6 @@ enquirer@^2.3.5, enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -1891,18 +1960,6 @@ envinfo@^7.21.0: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== -envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -errno@^0.1.3: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1932,6 +1989,11 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" @@ -1942,6 +2004,13 @@ es-module-lexer@^2.1.0: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.2.tgz#311fa4f40168c1975c505477c51b23234d41ad55" integrity sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz#a2d0b373205724dfa525d23b0c3e1b1ca582c99b" + integrity sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== + dependencies: + es-errors "^1.3.0" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -1951,38 +2020,12 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= @@ -2150,28 +2193,16 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: +etag@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -2200,111 +2231,45 @@ execa@^4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" +express@^5.2.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/express/-/express-5.3.0.tgz#ab72dace89c50c8417bd3f865dad0b4fd1ca1c73" + integrity sha512-qCqy1xSoaugxOD4IVHb1ZWdkvCF2W3aE2okKouWj8VwJ+ztskSiXoBnCSJqfKT+cVPJhuJqe9YLbY425+Zh00g== + dependencies: + accepts "^2.0.0" + body-parser "^2.3.0" + content-disposition "^2.0.1" + content-type "^2.0.0" + cookie "^0.7.1" + cookie-signature "^1.2.1" + debug "^4.4.0" + depd "^2.0.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + finalhandler "^2.1.0" + fresh "^2.0.0" + http-errors "^2.0.0" + merge-descriptors "^2.0.0" + mime-types "^3.0.0" + on-finished "^2.4.1" + once "^1.4.0" + parseurl "^1.3.3" + proxy-addr "^2.0.8" + qs "^6.16.0" + range-parser "^1.2.1" + router "^2.2.0" + send "^1.1.0" + serve-static "^2.2.0" + statuses "^2.0.1" + type-is "^2.1.0" + vary "^1.1.2" extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2360,11 +2325,6 @@ fast-uri@^3.0.1: resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.8.tgz#f7db8d942e20eead3cfe93b0beeb4eb0169e938b" integrity sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg== -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== - fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -2372,12 +2332,10 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== figures@^3.2.0: version "3.2.0" @@ -2393,21 +2351,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2415,18 +2358,24 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" + to-regex-range "^5.0.1" + +finalhandler@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" + integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== + dependencies: + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + on-finished "^2.4.1" + parseurl "^1.3.3" + statuses "^2.0.1" find-up@^3.0.0: version "3.0.0" @@ -2461,16 +2410,6 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -follow-redirects@^1.0.0: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2485,22 +2424,15 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== fs-minipass@^1.2.5: version "1.2.7" @@ -2514,14 +2446,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2565,11 +2489,35 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2584,16 +2532,6 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -2601,14 +2539,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@^5.0.0, glob-parent@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -2616,7 +2546,12 @@ glob-parent@^5.0.0, glob-parent@^5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: +glob-to-regex.js@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.3.1.tgz#2f9fe8821218b18e6dcced9bcb4413932162db4b" + integrity sha512-zhWhMRsgnOym+1txhUmYJGD6eUsbUdrZv55gCYKuJX8t2p3+M8My23PD09bEIsreGUs5pnSa/idmcfp2/IlqGg== + +glob@^7.1.2, glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -2654,21 +2589,10 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.1.2: version "4.1.15" @@ -2680,10 +2604,10 @@ graceful-fs@^4.2.11: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== +graceful-fs@^4.2.4: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== har-schema@^2.0.0: version "2.0.0" @@ -2713,52 +2637,21 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2766,7 +2659,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hasown@^2.0.4: +hasown@^2.0.2, hasown@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== @@ -2785,16 +2678,6 @@ hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -2802,107 +2685,72 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" he "^1.2.0" - param-case "^3.0.3" + param-case "^3.0.4" relateurl "^0.2.7" - terser "^4.6.3" + terser "^5.10.0" -html-webpack-plugin@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" - integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== +html-webpack-plugin@^5.6.8: + version "5.6.8" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.8.tgz#5425dbc63eb533ffa59e92342be94894a125fc23" + integrity sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA== dependencies: - "@types/html-minifier-terser" "^5.0.0" - html-minifier-terser "^5.0.1" - lodash "^4.17.20" - pretty-error "^2.1.1" + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" tapable "^2.0.0" -htmlparser2@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= +http-errors@^2.0.0, http-errors@^2.0.1, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: depd "~1.1.2" inherits "2.0.4" - setprototypeof "1.1.1" + setprototypeof "1.2.0" statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + toidentifier "1.0.1" -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== +http-proxy-middleware@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-4.2.0.tgz#f0790fc34eb3c42aeb4e908414bc454dc6aa274d" + integrity sha512-ZA+oNOoM+GLoFTIzhkJptVQov73Srep2LBqhF8hG8CIPKO3nam1jonXVQ/QUH8RbwsmaaVz2SOJdzBNBHNtKbw== dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" + debug "^4.4.3" + httpxy "^0.5.4" + is-glob "^4.0.3" + is-plain-obj "^4.1.0" + micromatch "^4.0.8" http-signature@~1.2.0: version "1.2.0" @@ -2913,21 +2761,26 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +httpxy@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/httpxy/-/httpxy-0.5.5.tgz#250363163cc95858dc36233bb08bf9c98a55faba" + integrity sha512-uDjmnPyp1q4Sgzf3w+J/Fc6UqcCEj0x4Wjp7OqK5dGhNeDgpyrAmnS6ey8QWrX3SWDon2DMKf9sBa5X9+CVyMA== + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - husky@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" @@ -2940,10 +2793,17 @@ iconv-lite@0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.7.2, iconv-lite@~0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.3.tgz#84ee12f963e7de50bc01a13e160a078b3b0f415f" + integrity sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -2977,22 +2837,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - import-local@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" @@ -3018,11 +2862,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3031,12 +2870,12 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@2.0.4, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3, inherits@~2.0.3: +inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= @@ -3046,14 +2885,6 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -3063,11 +2894,6 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -3078,41 +2904,15 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: +ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" +ipaddr.js@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.5.0.tgz#7d4b6c39f9392fb61cf807de6e425e22c10e061f" + integrity sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w== is-arrayish@^0.2.1: version "0.2.1" @@ -3124,13 +2924,6 @@ is-bigint@^1.0.1: resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-boolean-object@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" @@ -3138,11 +2931,6 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" @@ -3162,56 +2950,17 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -3233,13 +2982,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -3247,28 +2989,45 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= +is-in-ssh@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-in-ssh/-/is-in-ssh-1.0.0.tgz#8eb73c1cabba77748d389588eeea132a63057622" + integrity sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw== + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-network-error@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.2.tgz#9460bc30f8419a4bca77114f4de88a3ee5e0c519" + integrity sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA== + is-number-object@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -3279,33 +3038,24 @@ is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" +is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.1.2: +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + +is-regex@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== @@ -3350,17 +3100,14 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f" + integrity sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw== + dependencies: + is-inside-container "^1.0.0" -isarray@1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3370,14 +3117,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= @@ -3485,23 +3225,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3591,35 +3314,19 @@ jss@10.6.0, jss@^10.5.1: array-includes "^3.1.2" object.assign "^4.1.2" -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +launch-editor@^2.14.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.14.2.tgz#d476a1cb09159d9aee6ca225a8c7c6c1d94d6331" + integrity sha512-NHJEb30MGBCkmZXLZwz25t37QR4aY03ZzPYUJXOJaOa92uWwExI9SBQUuIznBYc1xkD7cJNGX7oc3Nl3sq2kQQ== + dependencies: + picocolors "^1.1.1" + shell-quote "^1.10.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -3677,24 +3384,6 @@ listr2@^3.2.2: through "^2.3.8" wrap-ansi "^7.0.0" -loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3730,23 +3419,11 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lodash@^4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== - -log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - log-symbols@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -3765,19 +3442,6 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - -loglevelnext@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" - integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== - dependencies: - es6-symbol "^3.1.1" - object.assign "^4.1.0" - loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -3799,43 +3463,40 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +media-typer@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.1.tgz#6f035400dfe3ab9d5607bc77546ce30cc2f9c6b8" + integrity sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ== + +memfs@^4.68.2: + version "4.80.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.80.0.tgz#aff9c653b1de1a5f21cfc35a420d2b90fb507ae1" + integrity sha512-N70W2isi44XdGn7uPo9NJ4zRukcdkwSFHlnYx42SWOH/+hzqNc8P7+tVoA2up4z7faHvNi1RSNCFjxoYQ71VPQ== + dependencies: + "@jsonjoy.com/fs-core" "4.80.0" + "@jsonjoy.com/fs-fsa" "4.80.0" + "@jsonjoy.com/fs-node" "4.80.0" + "@jsonjoy.com/fs-node-builtins" "4.80.0" + "@jsonjoy.com/fs-node-to-fsa" "4.80.0" + "@jsonjoy.com/fs-node-utils" "4.80.0" + "@jsonjoy.com/fs-print" "4.80.0" + "@jsonjoy.com/fs-snapshot" "4.80.0" + "@jsonjoy.com/json-pack" "^1.11.0" + "@jsonjoy.com/util" "^1.9.0" + glob-to-regex.js "^1.3.1" + thingies "^2.5.0" + tree-dump "^1.0.3" + tslib "^2.0.0" + +merge-descriptors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" + integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== merge-stream@^2.0.0: version "2.0.0" @@ -3847,30 +3508,6 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -3879,32 +3516,49 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": version "1.47.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + mime-db@^1.54.0: version "1.54.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.30" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: mime-db "1.47.0" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime-types@^3.0.0, mime-types@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime-types@~2.1.34, mime-types@~2.1.35: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" @@ -3916,11 +3570,6 @@ mimic-response@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3928,11 +3577,6 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -3963,28 +3607,13 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.0, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@^0.5.0, mkdirp@^0.5.3: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - mobx-react-lite@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-3.2.0.tgz#331d7365a6b053378dfe9c087315b4e41c5df69f" @@ -4000,60 +3629,33 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: - dns-packet "^1.3.1" + dns-packet "^5.2.2" thunky "^1.0.2" -nan@^2.12.1, nan@^2.14.0: +nan@^2.14.0: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@^3.1.22: - version "3.1.22" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" - integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +nanoid@^3.3.20: + version "3.3.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.20.tgz#dfd4444d85aa10111ef66ba85ed72e08ba0855d8" + integrity sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ== natural-compare@^1.4.0: version "1.4.0" @@ -4069,15 +3671,22 @@ needle@^2.5.0: iconv-lite "^0.4.4" sax "^1.2.4" -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +negotiator@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.1.0.tgz#16e003d0db4ac24fd9df168edf871625deeae3df" + integrity sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg== + dependencies: + content-type "^2.1.0" + +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== nice-try@^1.0.4: version "1.0.5" @@ -4092,11 +3701,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - node-pre-gyp@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz#c2fc383276b74c7ffa842925241553e8b40f1087" @@ -4126,13 +3730,6 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -4166,7 +3763,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0, npm-run-path@^4.0.1: +npm-run-path@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -4183,12 +3780,12 @@ npmlog@^4.0.2: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: - boolbase "~1.0.0" + boolbase "^1.0.0" number-is-nan@^1.0.0: version "1.0.1" @@ -4205,34 +3802,22 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== @@ -4242,23 +3827,6 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -4289,13 +3857,6 @@ object.fromentries@^2.0.4: es-abstract "^1.18.0-next.2" has "^1.0.3" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - object.values@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" @@ -4306,22 +3867,17 @@ object.values@^1.1.3: es-abstract "^1.18.0-next.2" has "^1.0.3" -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= +on-finished@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -4330,19 +3886,24 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +open@^11.0.0: + version "11.0.4" + resolved "https://registry.yarnpkg.com/open/-/open-11.0.4.tgz#10d20dfdb558c71e5149b2d789ad6995caf697ca" + integrity sha512-++Zlftm0kVLPmzC06t6epuWmcRMDbI4z5P3NNX979WA/k23+NtSOynEGzsVfZwguKw2mi5umVgnBlJQMwRz4Pg== dependencies: - is-wsl "^1.1.0" + default-browser "^5.5.1" + define-lazy-prop "^3.0.0" + is-in-ssh "^1.0.0" + is-inside-container "^1.0.0" + powershell-utils "^0.2.1" + wsl-utils "^1.0.0" optionator@^0.8.1: version "0.8.3" @@ -4368,13 +3929,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -4419,11 +3973,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -4431,19 +3980,19 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== +p-retry@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-8.0.1.tgz#57c6d66995b0a9e9fe3aab9b574411717c56a242" + integrity sha512-NAigyu8hfvJe7MsS18mnc4is0MZtau3QMdBklaJKK23oBQb6occO3UPM3vHmTckW8KhfyjMZaUOqdTFEYliHgg== dependencies: - retry "^0.12.0" + is-network-error "^1.3.0" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -param-case@^3.0.3: +param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== @@ -4473,7 +4022,7 @@ parse5@5.1.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== -parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@^1.3.3, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -4486,16 +4035,6 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -4511,11 +4050,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -4536,10 +4070,10 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-to-regexp@^8.0.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd" + integrity sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== path-type@^4.0.0: version "4.0.0" @@ -4561,40 +4095,16 @@ picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -picomatch@^4.0.0: +picomatch@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" + integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== + +picomatch@^4.0.0, picomatch@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -4602,6 +4112,18 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkijs@^3.3.3: + version "3.4.1" + resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.4.1.tgz#b42c36b5143bc7ea2584e5d1f5bd4b5ac3ca4bca" + integrity sha512-Oo/NZcSWccq8KyoG7gLE9fnltgHns+pNCjCAp/WmjsUySi+sX7y4z4Xqu4fVb42CDHzRPl33fjzT15V1wvcyhA== + dependencies: + "@noble/hashes" "1.8.0" + asn1js "^3.0.6" + bytestreamjs "^2.0.1" + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -4619,40 +4141,26 @@ popper.js@1.16.1-lts: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== -portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== +postcss-modules-local-by-default@^4.0.5: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== dependencies: icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" + postcss-selector-parser "^7.0.0" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: - postcss-selector-parser "^6.0.4" + postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" @@ -4661,14 +4169,12 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== +postcss-selector-parser@^7.0.0: + version "7.1.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz#45e970f2d93d4547d6754167ed1132f43012c4bf" + integrity sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" postcss-value-parser@^4.1.0: @@ -4676,14 +4182,24 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.2.8: - version "8.2.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.9.tgz#fd95ff37b5cee55c409b3fdd237296ab4096fba3" - integrity sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q== +postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.40: + version "8.5.30" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.30.tgz#f76f192357d2b7026b651fd2c7baa60d05325a9e" + integrity sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA== dependencies: - colorette "^1.2.2" - nanoid "^3.1.22" - source-map "^0.6.1" + nanoid "^3.3.20" + picocolors "^1.1.1" + source-map-js "^1.2.2" + +powershell-utils@^0.2.0, powershell-utils@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/powershell-utils/-/powershell-utils-0.2.1.tgz#0853016f5b3c12d52b9571c8fe8059677d9ddbe2" + integrity sha512-C+y9x90UElAddDZmV4qOx9W53B61PO7cIqWz2dQsWlwswuq4mr8NEwytdGKboYbQlGZ3awrkTeNvcZiZNHnQ8A== prelude-ls@^1.2.1: version "1.2.1" @@ -4707,13 +4223,13 @@ prettier@^2.2.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" - renderkid "^2.0.4" + renderkid "^3.0.0" process-nextick-args@~2.0.0: version "2.0.0" @@ -4742,19 +4258,14 @@ prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== +proxy-addr@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.8.tgz#624e760fd8ab06b1b8320c2f8506d4422cf8e932" + integrity sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -4766,57 +4277,62 @@ pump@^3.0.0: integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + once "^1.3.1" punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +pvtsutils@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" + integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== + dependencies: + tslib "^2.8.1" + +pvutils@^1.1.3, pvutils@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.2.0.tgz#4b5487a9cccd52d275b0538775790a3ca982bc22" + integrity sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg== + +qs@^6.15.2, qs@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.16.0.tgz#c22c723a28a920f3aacdce8289fabd43eccb79fd" + integrity sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA== + dependencies: + es-define-property "^1.0.1" + side-channel "^1.1.1" qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -range-parser@^1.2.1, range-parser@~1.2.1: +range-parser@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== +range-parser@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.3.0.tgz#d7f19be812bb62721472b45d3be219ef09572b47" + integrity sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw== + +raw-body@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" + integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.7.0" + unpipe "~1.0.0" rc@^1.2.7: version "1.2.8" @@ -4877,20 +4393,7 @@ react@^19.3.0: resolved "https://registry.yarnpkg.com/react/-/react-19.3.0.tgz#e20aa3a14687075ce863351b5878b0608c3fbfb2" integrity sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog== -readable-stream@^2.0.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.0.2, readable-stream@^2.0.6: +readable-stream@^2.0.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -4903,30 +4406,10 @@ readable-stream@^2.0.2, readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== - dependencies: - resolve "^1.9.0" +readdirp@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-5.1.1.tgz#520bca06f9d1ae1b96cc0800dbe84b983d19422c" + integrity sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA== rechoir@^0.8.0: version "0.8.0" @@ -4935,20 +4418,17 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" +reflect-metadata@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -4966,31 +4446,16 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" - integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== dependencies: - css-select "^2.0.2" - dom-converter "^0.2" - htmlparser2 "^3.10.1" - lodash "^4.17.20" - strip-ansi "^3.0.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" request-promise-core@1.1.4: version "1.1.4" @@ -5049,18 +4514,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -5068,11 +4521,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -5083,11 +4531,6 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - resolve@^1.20.0: version "1.22.13" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.13.tgz#d542f97758d768f36091251a6b07540b4343f7b5" @@ -5098,14 +4541,6 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.9.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -5122,22 +4557,12 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -5151,6 +4576,22 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +router@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" + integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== + dependencies: + debug "^4.4.0" + depd "^2.0.0" + is-promise "^4.0.0" + parseurl "^1.3.3" + path-to-regexp "^8.0.0" + +run-applescript@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" + integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5165,22 +4606,15 @@ rxjs@^6.6.7: dependencies: tslib "^1.9.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" @@ -5212,24 +4646,6 @@ scheduler@^0.28.0: resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.28.0.tgz#03d3ca348aeaf8b7502f64468f217b27523f9695" integrity sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw== -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - schema-utils@^4.3.3, schema-utils@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.5.0.tgz#aaf8d588bd2b19511175175a5222baef648c009c" @@ -5240,17 +4656,13 @@ schema-utils@^4.3.3, schema-utils@^4.5.0: ajv-formats "^3.0.1" ajv-keywords "^5.1.0" -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.8: - version "1.10.8" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== +selfsigned@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b" + integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew== dependencies: - node-forge "^0.10.0" + "@peculiar/x509" "^1.14.2" + pkijs "^3.3.3" semver-compare@^1.0.0: version "1.0.0" @@ -5262,94 +4674,67 @@ semver@^5.3.0, semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: +semver@^7.2.1, semver@^7.3.2: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= +semver@^7.6.3: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + +send@^1.1.0, send@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed" + integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== + dependencies: + debug "^4.4.3" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.1" + mime-types "^3.0.2" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.2" + +serve-index@^1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.2.tgz#2988e3612106d78a5e4849ddff552ce7bd3d9bcb" + integrity sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ== dependencies: - accepts "~1.3.4" + accepts "~1.3.8" batch "0.6.1" debug "2.6.9" escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" + http-errors "~1.8.0" + mime-types "~2.1.35" + parseurl "~1.3.3" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.1.tgz#7f186a4a4e5f5b663ad7a4294ff1bf37cf0e98a9" + integrity sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" + encodeurl "^2.0.0" + escape-html "^1.0.3" + parseurl "^1.3.3" + send "^1.2.0" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0, setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" @@ -5382,6 +4767,40 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.10.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.12.0.tgz#e98fdfd2e921d8a58ae2820f4fc0f75c39f09675" + integrity sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q== + +side-channel-list@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" + integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.4" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -5391,7 +4810,18 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: +side-channel@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab" + integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.4" + side-channel-list "^1.0.1" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -5433,97 +4863,18 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" - -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== - dependencies: - faye-websocket "^0.11.3" - uuid "^3.4.0" - websocket-driver "^0.7.4" - -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== - -source-map-loader@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-2.0.1.tgz#b4fd0ae7fa7e7d3954300f383f2d6fcc230a4261" - integrity sha512-UzOTTQhoNPeTNzOxwFw220RSRzdGSyH4lpNyWjR7Qm34P4/N0W669YSUFdH07+YNeN75h765XLHmNsF/bm97RQ== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.2" - source-map-js "^0.6.2" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.3: - version "0.5.9" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" - integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" +source-map-js@^1.0.2, source-map-js@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.2.tgz#79fb88d97535a21cb27162cb05d211b67acea4ab" + integrity sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw== -source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +source-map-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" + iconv-lite "^0.6.3" + source-map-js "^1.0.2" source-map-support@~0.5.20: version "0.5.21" @@ -5533,17 +4884,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -5553,36 +4894,6 @@ source-map@^0.7.4: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - split@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -5610,19 +4921,16 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +"statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -5697,13 +5005,6 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -5748,6 +5049,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -5768,13 +5076,10 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" +style-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" + integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== supports-color@^5.3.0: version "5.5.0" @@ -5783,13 +5088,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -5834,11 +5132,6 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" -tapable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" - integrity sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA== - tapable@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" @@ -5862,16 +5155,7 @@ tar@^4.4.2: safe-buffer "^5.1.2" yallist "^3.0.3" -terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -terser@^5.51.0: +terser@^5.10.0, terser@^5.51.0: version "5.51.2" resolved "https://registry.yarnpkg.com/terser/-/terser-5.51.2.tgz#555912425a7f2ff7737425c3718fa76c7069f6ef" integrity sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q== @@ -5886,6 +5170,11 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thingies@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.6.1.tgz#4eb28e2585a75288f1765a0b08f1dfa020357a6f" + integrity sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw== + throat@^4.0.0, throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -5906,20 +5195,13 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= +tinyglobby@^0.2.15: + version "0.2.17" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631" + integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" + fdir "^6.5.0" + picomatch "^4.0.4" to-regex-range@^5.0.1: version "5.0.1" @@ -5928,20 +5210,10 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1, toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" @@ -5967,6 +5239,11 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tree-dump@^1.0.3, tree-dump@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" + integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== + ts-loader@^9.6.2: version "9.6.2" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.6.2.tgz#a08f4935ddb87edbd58ce33b7b2558c2a77fdd47" @@ -5976,7 +5253,7 @@ ts-loader@^9.6.2: picomatch "^4.0.0" source-map "^0.7.4" -tslib@^1.8.1: +tslib@^1.8.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -5986,6 +5263,11 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslib@^2.0.0, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^2.0.3: version "2.2.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" @@ -5998,6 +5280,13 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" +tsyringe@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" + integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== + dependencies: + tslib "^1.9.3" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6039,23 +5328,14 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== +type-is@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.1.0.tgz#71d1a7053293582e16ac9f3ebaf1ab9aa49e5570" + integrity sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA== dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + content-type "^2.0.0" + media-typer "^1.1.0" + mime-types "^3.0.0" typescript@^5.9.3: version "5.9.3" @@ -6077,39 +5357,11 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - update-browserslist-db@^1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz#e8bd4596f6900805f9f12c5a5200c83c59c38faf" @@ -6125,33 +5377,7 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -6161,22 +5387,17 @@ utila@~0.4: resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: +v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -vary@~1.1.2: +vary@^1.1.2, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= @@ -6213,38 +5434,11 @@ watchpack@^2.5.2: dependencies: graceful-fs "^4.1.2" -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-cli@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.6.0.tgz#27ae86bfaec0cf393fcfd58abdc5a229ad32fd16" - integrity sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.2" - "@webpack-cli/info" "^1.2.3" - "@webpack-cli/serve" "^1.3.1" - colorette "^1.2.1" - commander "^7.0.0" - enquirer "^2.3.6" - execa "^5.0.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - v8-compile-cache "^2.2.0" - webpack-merge "^5.7.3" - webpack-cli@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-7.2.3.tgz#becafbd777df5ff3e1a35ec398ad2ad54ec4d456" @@ -6259,81 +5453,47 @@ webpack-cli@^7.2.3: rechoir "^0.8.0" webpack-merge "^6.0.1" -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.11.2: - version "3.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" - integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - loglevelnext "^1.0.1" - uuid "^3.1.0" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== +webpack-dev-middleware@^8.0.3: + version "8.3.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-8.3.0.tgz#509b0dac459efe187d22ae57fb151e6b8be6cf1d" + integrity sha512-jFNNMB29ugmkEUFW9cpWNqcWFQNwuMTMVoRpKVAiz/5nh3gA4x9x6DRPhNHGc/SLre7pEP9yrAPDAmCvdCblKg== dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" + ansi-html-community "^0.0.8" + memfs "^4.68.2" + mime-types "^3.0.2" + range-parser "^1.3.0" + schema-utils "^4.3.3" -webpack-merge@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" - integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" +webpack-dev-server@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-6.0.0.tgz#af30f80cd4bc1c5b2c6224e4c7903adcd9514dcd" + integrity sha512-q9SD4ItOGhZLeU6EGT10caDZdHjF50Pz1DtkRZZOPsfluMXOkacWKKOtSBSLVkPqKiF67eFUC0rI88U/tSFPEw== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^5.0.6" + "@types/express-serve-static-core" "^5.1.1" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^2.2.0" + "@types/ws" "^8.18.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.3.0" + chokidar "^5.0.0" + compression "^1.8.1" + connect-history-api-fallback "^2.0.0" + express "^5.2.1" + graceful-fs "^4.2.11" + http-proxy-middleware "^4.1.1" + ipaddr.js "^2.3.0" + launch-editor "^2.14.1" + open "^11.0.0" + p-retry "^8.0.0" + schema-utils "^4.3.3" + selfsigned "^5.5.0" + serve-index "^1.9.2" + tinyglobby "^0.2.15" + webpack-dev-middleware "^8.0.3" + ws "^8.20.0" webpack-merge@^6.0.1: version "6.0.1" @@ -6372,20 +5532,6 @@ webpack@^5.111.1: watchpack "^2.5.2" webpack-sources "^3.5.1" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -6444,11 +5590,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - wildcard@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" @@ -6491,18 +5632,24 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - ws@^7.0.0: version "7.4.4" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== +ws@^8.20.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.22.0.tgz#40f16e1d7588ac0575041be5c49b8eb261c28e73" + integrity sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg== + +wsl-utils@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-1.0.1.tgz#7caaa5a713e5ed1b625e7ee95e505c53c2e41c80" + integrity sha512-c16PKLIRxBYpR3jSWsdS7SFp0COm5SOQdiFjY818dYFHJbMGuLBszpF07LBWmOS1uzrHa9VGdynsEgoeKy0oOQ== + dependencies: + is-wsl "^3.1.0" + powershell-utils "^0.2.0" + wsrun@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.2.4.tgz#6eb6c3ccd3327721a8df073a5e3578fb0dea494e" @@ -6556,7 +5703,7 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.0.0, yargs@^13.3.2: +yargs@^13.0.0: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== From 4ab1346cf9fae3461f46387cbec9075f971ccc6d Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:24:43 +0300 Subject: [PATCH 26/70] Add root build, start, typecheck and clean scripts Scripts call yarn workspace directly, so wsrun (unmaintained, advisories without a fix) is removed. --- package.json | 8 +- yarn.lock | 310 ++------------------------------------------------- 2 files changed, 13 insertions(+), 305 deletions(-) diff --git a/package.json b/package.json index 1d97907c..6183bff3 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,10 @@ ], "license": "MIT", "scripts": { - "start": "wsrun start", + "start": "yarn workspace showcase start", + "build": "yarn workspace react-sketch build && yarn workspace showcase build", + "typecheck": "yarn workspace react-sketch typecheck && yarn workspace showcase typecheck", + "clean": "node -e \"for (const d of ['packages/react-sketch/dist', 'packages/showcase/build']) require('fs').rmSync(d, { recursive: true, force: true })\"", "lint": "eslint --fix ./packages/**/src", "format": "prettier --write \"./**\"" }, @@ -42,8 +45,7 @@ "prettier": "^2.2.1", "typescript": "^5.9.3", "webpack": "^5.111.1", - "webpack-cli": "^7.2.3", - "wsrun": "^5.2.4" + "webpack-cli": "^7.2.3" }, "husky": { "hooks": { diff --git a/yarn.lock b/yarn.lock index da057ffd..530555cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -62,15 +62,6 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" @@ -578,26 +569,6 @@ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -696,18 +667,6 @@ dependencies: "@types/node" "*" -"@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== - -"@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== - dependencies: - "@types/yargs-parser" "*" - "@typescript-eslint/eslint-plugin@^4.21.0": version "4.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.21.0.tgz#3fce2bfa76d95c00ac4f33dff369cb593aab8878" @@ -1047,11 +1006,6 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -1062,7 +1016,7 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1190,11 +1144,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bluebird@^3.5.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - body-parser@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.3.0.tgz#6d8662f4d8c336028b8ac9aa24251b0ca64ba437" @@ -1320,11 +1269,6 @@ camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - caniuse-lite@^1.0.30001813: version "1.0.30001816" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz#80567cffb179fd8a1702816bc80de8efc9784021" @@ -1344,7 +1288,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0, chalk@^2.3.0: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1407,15 +1351,6 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -1558,17 +1493,6 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -1711,11 +1635,6 @@ debug@^4.4.0, debug@^4.4.3: dependencies: ms "^2.1.3" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - decompress-response@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" @@ -1913,11 +1832,6 @@ electron-to-chromium@^1.5.439: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.454.tgz#7f6f6cd1c855e1f7fb55fc17798e92e6ea08cb04" integrity sha512-NqD5GhkXnxJpDQVCmmpc546qjH6kei2VI9m45CTF+sQU7bcS7YeVt7ba0cnjueMH1AXGRu/driZUP9iYVSv7vg== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2203,19 +2117,6 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -2377,13 +2278,6 @@ finalhandler@^2.1.0: parseurl "^1.3.3" statuses "^2.0.1" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -2475,11 +2369,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -2518,13 +2407,6 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -2551,7 +2433,7 @@ glob-to-regex.js@^1.3.1: resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.3.1.tgz#2f9fe8821218b18e6dcced9bcb4413932162db4b" integrity sha512-zhWhMRsgnOym+1txhUmYJGD6eUsbUdrZv55gCYKuJX8t2p3+M8My23PD09bEIsreGUs5pnSa/idmcfp2/IlqGg== -glob@^7.1.2, glob@^7.1.3: +glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3068,11 +2950,6 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" @@ -3127,15 +3004,6 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== - dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" - jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -3384,14 +3252,6 @@ listr2@^3.2.2: through "^2.3.8" wrap-ansi "^7.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -3419,7 +3279,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3688,11 +3548,6 @@ negotiator@~0.6.4: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -3756,13 +3611,6 @@ npm-packlist@^1.1.6: npm-bundled "^1.0.1" npm-normalize-package-bin "^1.0.1" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - npm-run-path@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -3947,25 +3795,13 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -4035,11 +3871,6 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -4050,11 +3881,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -4499,21 +4325,11 @@ request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -4669,7 +4485,7 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver@^5.3.0, semver@^5.5.0: +semver@^5.3.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -4726,7 +4542,7 @@ serve-static@^2.2.0: parseurl "^1.3.3" send "^1.2.0" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -4743,13 +4559,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4757,11 +4566,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -4894,13 +4698,6 @@ source-map@^0.7.4: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== -split@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4958,15 +4755,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.1.0, string-width@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" @@ -5035,13 +4823,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -5056,11 +4837,6 @@ strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -5175,12 +4951,7 @@ thingies@^2.5.0: resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.6.1.tgz#4eb28e2585a75288f1765a0b08f1dfa020357a6f" integrity sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw== -throat@^4.0.0, throat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -through@2, through@^2.3.8: +through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -5564,18 +5335,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -5600,15 +5359,6 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -5650,21 +5400,6 @@ wsl-utils@^1.0.0: is-wsl "^3.1.0" powershell-utils "^0.2.0" -wsrun@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.2.4.tgz#6eb6c3ccd3327721a8df073a5e3578fb0dea494e" - integrity sha512-akv3WtKBohdHsD/5uqhYRHw6GXeCXe87FsSg28Szq+2cpoqRW2SY4yPfm1D0za1cS6MgNy5hPgzS5SqYJaGUxg== - dependencies: - bluebird "^3.5.1" - chalk "^2.3.0" - glob "^7.1.2" - jest-changed-files "^24.9.0" - lodash "^4.17.4" - minimatch "^3.0.4" - split "^1.0.1" - throat "^4.1.0" - yargs "^13.0.0" - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -5675,11 +5410,6 @@ xmlchars@^2.1.1: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== - yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -5694,27 +5424,3 @@ yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^13.0.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" From 87e8a375ddcd1993806b02ee0ca71c0368802d93 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:25:34 +0300 Subject: [PATCH 27/70] Upgrade TypeScript to 6.0 moduleResolution node (node10) is deprecated in 6.0, so use bundler. baseUrl and typeRoots are already gone and types is explicit (empty). The showcase disables noUncheckedSideEffectImports, which 6.0 enables by default and flags the css imports. ts-loader and webpack work unchanged. --- package.json | 2 +- packages/showcase/tsconfig.json | 3 +++ packages/tsconfig.packages.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 6183bff3..3bf2d35a 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "husky": "^6.0.0", "lint-staged": "^10.5.4", "prettier": "^2.2.1", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "webpack": "^5.111.1", "webpack-cli": "^7.2.3" }, diff --git a/packages/showcase/tsconfig.json b/packages/showcase/tsconfig.json index 336527e1..513ed5f4 100644 --- a/packages/showcase/tsconfig.json +++ b/packages/showcase/tsconfig.json @@ -1,4 +1,7 @@ { "extends": "../tsconfig.packages.json", + "compilerOptions": { + "noUncheckedSideEffectImports": false + }, "include": ["src"] } diff --git a/packages/tsconfig.packages.json b/packages/tsconfig.packages.json index bb6b9874..64d24262 100644 --- a/packages/tsconfig.packages.json +++ b/packages/tsconfig.packages.json @@ -3,7 +3,7 @@ "jsx": "react-jsx", "target": "es2015", "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "lib": ["dom", "dom.iterable", "esnext"], "types": [], "strict": true, diff --git a/yarn.lock b/yarn.lock index 530555cc..e9891b58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5108,10 +5108,10 @@ type-is@^2.1.0: media-typer "^1.1.0" mime-types "^3.0.0" -typescript@^5.9.3: - version "5.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" - integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== +typescript@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.3.tgz#90251dc007916e972786cb94d74d15b185577d21" + integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== unbox-primitive@^1.0.0: version "1.0.1" From 5b0e47489561b3f5efcdf165b223dc521f62f41c Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:11:45 +0300 Subject: [PATCH 28/70] chore(format): upgrade to Prettier 3 and add format:check Keep the existing style: set trailingComma to es5 (Prettier 3 defaults to all) and rename the removed jsxBracketSameLine option to bracketSameLine. .prettierignore now ends with a newline, covers the legacy /src, /examples and /webpack folders (temporary, anchored so packages/*/src stays checked) and no longer skips markdown. --- .prettierignore | 14 +++++--------- .prettierrc | 3 ++- package.json | 5 +++-- yarn.lock | 8 ++++---- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/.prettierignore b/.prettierignore index 8cf73b26..29db2ded 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,14 +3,10 @@ coverage/ dist/ docs/ node_modules/ -*.md -.prettierignore yarn.lock .idea -LICENSE -*.jpg -.DS_Store -.npmignore -.gitignore -*.log -*.ico \ No newline at end of file + +# Temporary: legacy folders, removed once the port to packages/ is complete. +/src/ +/examples/ +/webpack/ diff --git a/.prettierrc b/.prettierrc index 72c28815..3907f1ea 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,5 +6,6 @@ "useTabs": false, "singleQuote": false, "bracketSpacing": true, - "jsxBracketSameLine": true + "bracketSameLine": true, + "trailingComma": "es5" } diff --git a/package.json b/package.json index 7722a5a4..1a68655d 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "start": "wsrun start", "lint": "eslint \"packages/**/*.{ts,tsx}\"", "lint:fix": "eslint --fix \"packages/**/*.{ts,tsx}\"", - "format": "prettier --write \"./**\"" + "format": "prettier --write .", + "format:check": "prettier --check ." }, "devDependencies": { "@eslint/js": "^9.39.5", @@ -28,7 +29,7 @@ "globals": "^17.13.0", "husky": "^6.0.0", "lint-staged": "^10.5.4", - "prettier": "^2.2.1", + "prettier": "^3.9.10", "source-map-loader": "^2.0.1", "typescript": "^4.2.3", "typescript-eslint": "^8.71.2", diff --git a/yarn.lock b/yarn.lock index e257affb..320a35a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5916,10 +5916,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@^3.9.10: + version "3.9.10" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.9.10.tgz#ac378e432f1a7381518f2e080816bbaefa38d585" + integrity sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA== pretty-error@^2.1.1: version "2.1.2" From bc152f3642ff1779fc5aa57597e951dd9758cd0f Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:14:52 +0300 Subject: [PATCH 29/70] chore(hooks): husky 9 and lint-staged 16 pre-commit hook Add the prepare script and .husky/pre-commit (the husky 6 'husky.hooks' block in package.json was ignored). lint-staged now runs eslint --fix and prettier on ts/tsx and prettier on json/css/md/yml; the obsolete 'git add' and jest steps are gone. husky skips itself when HUSKY=0 or .git is missing. lint-staged 17 needs Node >=22.22.1, so stay on 16 to match engines >=22. --- .husky/pre-commit | 1 + package.json | 23 +-- yarn.lock | 489 ++++++++++++++++++---------------------------- 3 files changed, 201 insertions(+), 312 deletions(-) create mode 100755 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..37236231 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +yarn lint-staged diff --git a/package.json b/package.json index 1a68655d..737ea904 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "lint": "eslint \"packages/**/*.{ts,tsx}\"", "lint:fix": "eslint --fix \"packages/**/*.{ts,tsx}\"", "format": "prettier --write .", - "format:check": "prettier --check ." + "format:check": "prettier --check .", + "prepare": "husky" }, "devDependencies": { "@eslint/js": "^9.39.5", @@ -27,8 +28,8 @@ "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.1.1", "globals": "^17.13.0", - "husky": "^6.0.0", - "lint-staged": "^10.5.4", + "husky": "^9.1.7", + "lint-staged": "^16.4.0", "prettier": "^3.9.10", "source-map-loader": "^2.0.1", "typescript": "^4.2.3", @@ -36,21 +37,11 @@ "webpack": "^5.30.0", "wsrun": "^5.2.4" }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, "lint-staged": { - "*.{js,jsx}": [ - "prettier --write", + "*.{ts,tsx}": [ "eslint --fix", - "jest --findRelatedTests", - "git add" + "prettier --write" ], - "*.{html,css,less,ejs,json}": [ - "prettier --write", - "git add" - ] + "*.{json,css,md,yml}": "prettier --write" } } diff --git a/yarn.lock b/yarn.lock index 320a35a7..12dde0f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -717,11 +717,6 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - "@types/prop-types@*": version "15.5.6" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.6.tgz#9c03d3fed70a8d517c191b7734da2879b50ca26c" @@ -1113,14 +1108,6 @@ acorn@^8.15.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.19.0.tgz#6b26fd97ce1cc9dc50bdf7ad305e9f1384d4f28a" integrity sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw== -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1161,12 +1148,12 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== +ansi-escapes@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.3.0.tgz#5395bb74b2150a4a1d6e3c2565f4aeca78d28627" + integrity sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== dependencies: - type-fest "^0.21.3" + environment "^1.0.0" ansi-html@0.0.7: version "0.0.7" @@ -1193,6 +1180,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^6.2.2: + version "6.4.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.4.0.tgz#69093d6436d30dbb9b04fe7bdcbcfe16c697d8a1" + integrity sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1207,6 +1199,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.2.1, ansi-styles@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1376,11 +1373,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -1575,13 +1567,6 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" @@ -1799,11 +1784,6 @@ clean-css@^4.2.3: dependencies: source-map "~0.6.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - clean-webpack-plugin@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" @@ -1812,20 +1792,20 @@ clean-webpack-plugin@^3.0.0: "@types/webpack" "^4.4.31" del "^4.1.1" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: - restore-cursor "^3.1.0" + restore-cursor "^5.0.0" -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== +cli-truncate@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.2.0.tgz#c8e72aaca8339c773d128c36e0a17c6315b694eb" + integrity sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw== dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" + slice-ansi "^8.0.0" + string-width "^8.2.0" cliui@^5.0.0: version "5.0.0" @@ -1901,6 +1881,11 @@ colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1908,6 +1893,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -1918,11 +1908,6 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - commander@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -2020,17 +2005,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2042,7 +2016,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2226,7 +2200,7 @@ debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: +debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -2257,11 +2231,6 @@ decompress-response@^4.2.0: dependencies: mimic-response "^2.0.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -2504,6 +2473,11 @@ electron-to-chromium@^1.5.439: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.454.tgz#7f6f6cd1c855e1f7fb55fc17798e92e6ea08cb04" integrity sha512-NqD5GhkXnxJpDQVCmmpc546qjH6kei2VI9m45CTF+sQU7bcS7YeVt7ba0cnjueMH1AXGRu/driZUP9iYVSv7vg== +emoji-regex@^10.3.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" + integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2575,6 +2549,11 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + errno@^0.1.3: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -3000,6 +2979,11 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" + integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== + events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -3025,21 +3009,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - execa@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" @@ -3195,13 +3164,6 @@ fdir@^6.5.0: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" @@ -3224,13 +3186,6 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -3407,6 +3362,11 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.1, get-east-asian-width@^1.5.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz#7ee99f0bd5ab7c622002deeabba232923726d1d4" + integrity sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q== + get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -3432,11 +3392,6 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@ hasown "^2.0.2" math-intrinsics "^1.1.0" -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" @@ -3452,13 +3407,6 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" @@ -3847,20 +3795,15 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -husky@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" - integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== +husky@^9.1.7: + version "9.1.7" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== hyphenate-style-name@^1.0.3: version "1.0.4" @@ -3939,11 +3882,6 @@ indefinite-observable@^2.0.1: dependencies: symbol-observable "1.2.0" -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -4225,6 +4163,13 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^5.0.0, is-fullwidth-code-point@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98" + integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== + dependencies: + get-east-asian-width "^1.3.1" + is-generator-function@^1.0.10: version "1.1.2" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" @@ -4297,16 +4242,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -4351,11 +4286,6 @@ is-regex@^1.2.1: has-tostringtag "^1.0.2" hasown "^2.0.2" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" @@ -4419,11 +4349,6 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" @@ -4778,41 +4703,29 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@^10.5.4: - version "10.5.4" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665" - integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== - dependencies: - chalk "^4.1.0" - cli-truncate "^2.1.0" - commander "^6.2.0" - cosmiconfig "^7.0.0" - debug "^4.2.0" - dedent "^0.7.0" - enquirer "^2.3.6" - execa "^4.1.0" - listr2 "^3.2.2" - log-symbols "^4.0.0" - micromatch "^4.0.2" - normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "^3.3.0" - -listr2@^3.2.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.6.2.tgz#7260159f9108523eaa430d4a674db65b6c2d08cc" - integrity sha512-B2vlu7Zx/2OAMVUovJ7Tv1kQ2v2oXd0nZKzkSAcRCej269d8gkS/gupDEdNl23KQ3ZjVD8hQmifrrBFbx8F9LA== - dependencies: - chalk "^4.1.0" - cli-truncate "^2.1.0" - figures "^3.2.0" - indent-string "^4.0.0" - log-update "^4.0.0" - p-map "^4.0.0" - rxjs "^6.6.7" - through "^2.3.8" - wrap-ansi "^7.0.0" +lint-staged@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.4.0.tgz#a00b0e3abff59239cef6d7d9341e8f8473308e23" + integrity sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw== + dependencies: + commander "^14.0.3" + listr2 "^9.0.5" + picomatch "^4.0.3" + string-argv "^0.3.2" + tinyexec "^1.0.4" + yaml "^2.8.2" + +listr2@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.5.tgz#92df7c4416a6da630eb9ef46da469b70de97b316" + integrity sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g== + dependencies: + cli-truncate "^5.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.0" loader-runner@^4.2.0: version "4.2.0" @@ -4886,23 +4799,16 @@ log-symbols@^2.1.0: dependencies: chalk "^2.0.1" -log-symbols@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" loglevel@^1.6.8: version "1.7.1" @@ -5017,14 +4923,6 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": version "1.47.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" @@ -5052,6 +4950,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + mimic-response@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" @@ -5341,7 +5244,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0, npm-run-path@^4.0.1: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -5522,13 +5425,20 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -5640,13 +5550,6 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -5757,11 +5660,6 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -5772,12 +5670,7 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -picomatch@^4.0.4: +picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== @@ -5818,13 +5711,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -6335,13 +6221,13 @@ resolve@^2.0.0-next.5: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + onetime "^7.0.0" + signal-exit "^4.1.0" ret@~0.1.10: version "0.1.15" @@ -6353,6 +6239,11 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -6360,7 +6251,7 @@ rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rxjs@^6.6.3, rxjs@^6.6.7: +rxjs@^6.6.3: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -6467,11 +6358,6 @@ selfsigned@^1.10.8: dependencies: node-forge "^0.10.0" -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -6685,11 +6571,16 @@ side-channel@^1.1.0, side-channel@^1.1.1: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.0, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -6704,23 +6595,21 @@ simple-get@^3.0.3: once "^1.3.1" simple-concat "^1.0.0" -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== +slice-ansi@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.2.tgz#adf7be70aa6d72162d907cd0e6d5c11f507b5403" + integrity sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w== dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== +slice-ansi@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-8.0.0.tgz#22d0b66d18bc5c57f488bfcf36cbde3bef731537" + integrity sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg== dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" + ansi-styles "^6.2.3" + is-fullwidth-code-point "^5.1.0" snapdragon-node@^2.0.1: version "2.1.1" @@ -6948,10 +6837,10 @@ stop-iteration-iterator@^1.1.0: es-errors "^1.3.0" internal-slot "^1.1.0" -string-argv@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-argv@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-width@^1.0.1: version "1.0.2" @@ -6988,6 +6877,23 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +string-width@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.3.0.tgz#f1e85ca6d276ed9226c979c3651fb7abf548fbbe" + integrity sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ== + dependencies: + get-east-asian-width "^1.5.0" + strip-ansi "^7.1.2" + string.prototype.matchall@^4.0.12: version "4.1.0" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz#8d854b2318fc596fc0877cfc6c4bcc50d0455b8e" @@ -7078,15 +6984,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -7115,6 +7012,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^7.1.0, strip-ansi@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== + dependencies: + ansi-regex "^6.2.2" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -7244,7 +7148,7 @@ throat@^4.0.0, throat@^4.1.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through@2, through@^2.3.8: +through@2: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -7259,6 +7163,11 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinyexec@^1.0.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.3.1.tgz#16a2e3c6e23fafce72640e678e651db36145b9c6" + integrity sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA== + tinyglobby@^0.2.15: version "0.2.17" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631" @@ -7287,13 +7196,6 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -7379,11 +7281,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -7925,15 +7822,6 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -7943,6 +7831,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" + integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -8005,10 +7902,10 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.8.2: + version "2.9.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.9.1.tgz#c16233fb31944e705cfefaff38795587f57588ce" + integrity sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw== yargs-parser@^13.1.2: version "13.1.2" From 26b77c625ec2f22f0975f2533e590e480e689218 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:15:18 +0300 Subject: [PATCH 30/70] ci: replace Travis with a GitHub Actions workflow Run lint, typecheck, build and test on Node 22 and 24 for pushes and pull requests to master, with the yarn cache and a frozen lockfile. HUSKY=0 keeps the install from touching git hooks. Drop the Node 8-10 .travis.yml. --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++++++++ .travis.yml | 21 --------------------- 2 files changed, 31 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..00e8270f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,31 @@ +name: CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + +permissions: + contents: read + +jobs: + ci: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + node: [22, 24] + env: + HUSKY: "0" + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: ${{ matrix.node }} + cache: yarn + - run: yarn install --frozen-lockfile + - run: yarn lint + - run: yarn typecheck + - run: yarn build + - run: yarn test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 41098692..00000000 --- a/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ -language: node_js -node_js: - - "10" - - "9" - - "8" -cache: - yarn: true - directories: - - node_modules -env: - - CXX=g++-4.8 -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 -before_install: - - sudo apt-get update -qq - - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.9.4 - - sudo apt-get install -y -qq libgif-dev libpng-dev libjpeg8-dev libpango1.0-dev libcairo2-dev From 31450b88baa338b0338cea79e9b1981dae107d27 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:15:43 +0300 Subject: [PATCH 31/70] chore: tidy .gitignore and drop the root .npmignore Stop ignoring every directory named lib, lib-esm or _bundles (nothing builds there), and ignore *.tsbuildinfo. The root package is private and the packages publish through their own files field, so the root .npmignore is not needed. --- .gitignore | 5 +- .npmignore | 201 ----------------------------------------------------- 2 files changed, 1 insertion(+), 205 deletions(-) delete mode 100644 .npmignore diff --git a/.gitignore b/.gitignore index 66f1efd7..7e95ed3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ node_modules -lib -lib-esm -_bundles +*.tsbuildinfo ### Linux template *~ @@ -161,7 +159,6 @@ build/Release # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git node_modules -lib/ build/ dist/ diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 2ec3b23e..00000000 --- a/.npmignore +++ /dev/null @@ -1,201 +0,0 @@ -.* -**/tsconfig.json -**/webpack.config.js -node_modules -src - - -examples/ -test/ -src/ -docs/ -.travis.yml -.babelrc -.eslint -.gitignore -.karma.config.js -webpack.* -yarn.lock -package.lock - - -### Linux template -*~ - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - - -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio - -*.iml - -## Directory-based project format: -.idea/ -# if you remove the above rule, at least ignore the following: - -# User-specific stuff: -# .idea/workspace.xml -# .idea/tasks.xml -# .idea/dictionaries - -# Sensitive or high-churn files: -# .idea/dataSources.ids -# .idea/dataSources.xml -# .idea/sqlDataSources.xml -# .idea/dynamic.xml -# .idea/uiDesigner.xml - -# Gradle: -# .idea/gradle.xml -# .idea/libraries - -# Mongo Explorer plugin: -# .idea/mongoSettings.xml - -## File-based project format: -*.ipr -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties - - -### OSX template -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -### Eclipse template -*.pydevproject -.metadata -.gradle -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath - -# Eclipse Core -.project - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# JDT-specific (Eclipse Java Development Tools) -.classpath - -# Java annotation processor (APT) -.factorypath - -# PDT-specific -.buildpath - -# sbteclipse plugin -.target - -# TeXlipse plugin -.texlipse - - -### Node template -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git -node_modules - -build/ - -### Windows template -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk - From 8ed6c9394f9274e8a8a68c1ad77f645dcb057c1b Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 22:34:18 +0300 Subject: [PATCH 32/70] Make SketchField compile with @types/react 19 (ReactElement return type, block-bodied refs) --- .../src/components/SketchField/SketchField.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/SketchField.tsx b/packages/react-sketch/src/components/SketchField/SketchField.tsx index 6b2e5dc4..2cb82690 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.tsx @@ -103,7 +103,7 @@ class SketchField extends PureComponent { window.removeEventListener("resize", this._resize_listener, true); }; - render = (): JSX.Element => { + render = (): React.ReactElement => { const { className, style, width, height } = this.props; const canvasDivStyle = Object.assign( {}, @@ -116,8 +116,14 @@ class SketchField extends PureComponent { id={uuid4()} className={className} style={canvasDivStyle} - ref={(elem) => (this.containerEl = elem)}> - (this.canvasEl = elem)}> + ref={(elem) => { + this.containerEl = elem; + }}> + { + this.canvasEl = elem; + }}> Sorry, Canvas HTML5 element is not supported by your browser :( From a3f8ec8dbba15fea3ffdc68793c69c56eccd8906 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:00:14 +0300 Subject: [PATCH 33/70] Migrate showcase to React 19, MUI 9 and mobx 7 Replace the deprecated @material-ui v4 packages with @mui/material and @mui/icons-material (emotion based), ReactDOM.render with createRoot, makeStyles with the sx prop, MuiThemeProvider with ThemeProvider and the removed Grid item props with the Grid size prop. mobx 7 and mobx-react-lite 5. ExposureNeg1/ExposurePlus1 icons no longer exist in @mui/icons-material, the line width slider uses Remove/Add instead. --- packages/showcase/package.json | 25 +++++++++------ packages/showcase/src/App.tsx | 28 +++++------------ .../showcase/src/components/Canvas/index.tsx | 27 ++++------------ .../showcase/src/components/Header/index.tsx | 27 ++++++---------- .../src/components/Tools/LineWidth/index.tsx | 24 +++++++------- .../components/Tools/ToolSelector/index.css | 3 -- .../components/Tools/ToolSelector/index.tsx | 29 ++++++++--------- .../showcase/src/components/Tools/index.tsx | 31 +++++++------------ packages/showcase/src/components/theme.tsx | 16 +++++----- packages/showcase/src/index.tsx | 13 +++++--- 10 files changed, 93 insertions(+), 130 deletions(-) delete mode 100644 packages/showcase/src/components/Tools/ToolSelector/index.css diff --git a/packages/showcase/package.json b/packages/showcase/package.json index dc64d6f5..b64663b6 100644 --- a/packages/showcase/package.json +++ b/packages/showcase/package.json @@ -1,14 +1,20 @@ { "name": "showcase", "version": "1.0.0", - "description": "Sketch Component Showcase", + "private": true, + "description": "Demo application for react-sketch: interactive tools panel and the defaultValue, controlled value and addImg usage scenarios", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/tbolis/react-sketch.git", + "directory": "packages/showcase" + }, "scripts": { "start": "webpack serve --mode development --open", "build": "webpack --mode production", "typecheck": "tsc --noEmit" }, "devDependencies": { - "@material-ui/types": "^5.1.0", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "css-loader": "^7.1.5", @@ -19,13 +25,14 @@ "webpack-dev-server": "^6.0.0" }, "dependencies": { - "@material-ui/core": "^4.11.3", - "@material-ui/icons": "^4.11.2", - "@material-ui/lab": "^4.0.0-alpha.57", - "mobx": "^6.2.0", - "mobx-react-lite": "^3.2.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^9.5.0", + "@mui/material": "^9.5.0", + "mobx": "^7.0.6", + "mobx-react-lite": "^5.1.0", + "react": "^19.3.0", + "react-dom": "^19.3.0", "react-sketch": "^1.0.0" } } diff --git a/packages/showcase/src/App.tsx b/packages/showcase/src/App.tsx index 6c4cbe79..13a95e96 100644 --- a/packages/showcase/src/App.tsx +++ b/packages/showcase/src/App.tsx @@ -1,37 +1,25 @@ import "./App.css"; -import * as React from "react"; +import type { ReactElement } from "react"; import { Config } from "./stores/config"; -import Grid from "@material-ui/core/Grid"; +import Grid from "@mui/material/Grid"; import ThemeProvider from "./components/theme"; -import { makeStyles } from "@material-ui/core"; import { Header, SketchCanvas, SketchTools } from "./components"; -const useStyles = makeStyles((theme) => ({ - grid: { - color: theme.palette.text.secondary, - }, - item: { - padding: theme.spacing(1.2), - }, -})); - /** * Export a simple showcase application to demonstrate React SketchField * capabilities */ -export const App = (props: Config): JSX.Element => { - const classes = useStyles(); - +export const App = (props: Config): ReactElement => { return ( - - -
+ + +
- + - + diff --git a/packages/showcase/src/components/Canvas/index.tsx b/packages/showcase/src/components/Canvas/index.tsx index fd4925f0..f74e2420 100644 --- a/packages/showcase/src/components/Canvas/index.tsx +++ b/packages/showcase/src/components/Canvas/index.tsx @@ -1,25 +1,10 @@ -import * as React from "react"; +import type { ReactElement } from "react"; import { SketchField, Types } from "react-sketch"; -import Paper from "@material-ui/core/Paper"; -import { makeStyles } from "@material-ui/core"; -import { teal } from "@material-ui/core/colors"; +import Paper from "@mui/material/Paper"; +import { teal } from "@mui/material/colors"; import { Config } from "../../stores/config"; -const useStyles = makeStyles((theme) => ({ - paper: { - width: "100%", - height: "100%", - padding: theme.spacing(1), - color: theme.palette.text.secondary, - }, - sketch: { - backgroundColor: teal[50], - }, -})); - -const SketchCanvas = (props: Config): JSX.Element => { - const classes = useStyles(); - +const SketchCanvas = (props: Config): ReactElement => { const properties: Types.SketchProperties = { tool: props.selectedTool, lineWidth: props.lineWidth, @@ -27,8 +12,8 @@ const SketchCanvas = (props: Config): JSX.Element => { }; return ( - - + + ); }; diff --git a/packages/showcase/src/components/Header/index.tsx b/packages/showcase/src/components/Header/index.tsx index fd53455a..59dd7608 100644 --- a/packages/showcase/src/components/Header/index.tsx +++ b/packages/showcase/src/components/Header/index.tsx @@ -1,26 +1,17 @@ -import React from "react"; -import { makeStyles } from "@material-ui/core/styles"; -import AppBar from "@material-ui/core/AppBar"; -import Toolbar from "@material-ui/core/Toolbar"; -import Typography from "@material-ui/core/Typography"; -import Avatar from "@material-ui/core/Avatar"; +import type { ReactElement } from "react"; +import AppBar from "@mui/material/AppBar"; +import Toolbar from "@mui/material/Toolbar"; +import Typography from "@mui/material/Typography"; +import Avatar from "@mui/material/Avatar"; import Logo from "./react-sketch-logo.jpg"; -import { Config } from "../../stores/config"; -const useStyles = makeStyles((theme) => ({ - avatar: { - marginRight: theme.spacing(1), - }, -})); - -const Header = (props: Config): JSX.Element => { - const classes = useStyles(); +const Header = (): ReactElement => { return ( - + - - + + Sketch Tool diff --git a/packages/showcase/src/components/Tools/LineWidth/index.tsx b/packages/showcase/src/components/Tools/LineWidth/index.tsx index 14f17497..e0141a62 100644 --- a/packages/showcase/src/components/Tools/LineWidth/index.tsx +++ b/packages/showcase/src/components/Tools/LineWidth/index.tsx @@ -1,29 +1,29 @@ -import React from "react"; -import Slider from "@material-ui/core/Slider"; -import ExposureNeg1Icon from "@material-ui/icons/ExposureNeg1"; -import ExposurePlus1Icon from "@material-ui/icons/ExposurePlus1"; -import Grid from "@material-ui/core/Grid"; +import type { ReactElement } from "react"; +import Slider from "@mui/material/Slider"; +import RemoveIcon from "@mui/icons-material/Remove"; +import AddIcon from "@mui/icons-material/Add"; +import Grid from "@mui/material/Grid"; interface LineWidthProps { width: number; - onChange?: (event: React.ChangeEvent<{}>, value: number | number[]) => void; + onChange?: (event: Event, value: number | number[]) => void; } -const LineWidth = (props: LineWidthProps): JSX.Element => { +const LineWidth = (props: LineWidthProps): ReactElement => { return ( - - + + - + - - + + ); diff --git a/packages/showcase/src/components/Tools/ToolSelector/index.css b/packages/showcase/src/components/Tools/ToolSelector/index.css deleted file mode 100644 index 9c73af9d..00000000 --- a/packages/showcase/src/components/Tools/ToolSelector/index.css +++ /dev/null @@ -1,3 +0,0 @@ -div.canvas-tools { - display: inline-block; -} diff --git a/packages/showcase/src/components/Tools/ToolSelector/index.tsx b/packages/showcase/src/components/Tools/ToolSelector/index.tsx index 640ae6e1..81821c91 100644 --- a/packages/showcase/src/components/Tools/ToolSelector/index.tsx +++ b/packages/showcase/src/components/Tools/ToolSelector/index.tsx @@ -1,20 +1,21 @@ -import "./index.css"; -import React from "react"; -import PenIcon from "@material-ui/icons/Gesture"; -import LineIcon from "@material-ui/icons/Straighten"; -import Chip from "@material-ui/core/Chip"; -import ToggleButton from "@material-ui/lab/ToggleButton"; -import ToggleButtonGroup from "@material-ui/lab/ToggleButtonGroup"; -import Typography from "@material-ui/core/Typography"; -import { Accordion, AccordionSummary, AccordionDetails } from "@material-ui/core"; -import ExpandMoreIcon from "@material-ui/icons/ExpandMore"; +import type { MouseEvent, ReactElement } from "react"; +import PenIcon from "@mui/icons-material/Gesture"; +import LineIcon from "@mui/icons-material/Straighten"; +import Chip from "@mui/material/Chip"; +import ToggleButton from "@mui/material/ToggleButton"; +import ToggleButtonGroup from "@mui/material/ToggleButtonGroup"; +import Typography from "@mui/material/Typography"; +import Accordion from "@mui/material/Accordion"; +import AccordionSummary from "@mui/material/AccordionSummary"; +import AccordionDetails from "@mui/material/AccordionDetails"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; interface ToolSelectorProps { selected: string; - onChange?: (event: React.MouseEvent, value: any) => void; + onChange?: (event: MouseEvent, value: string | null) => void; } -const ToolSelector = (props: ToolSelectorProps): JSX.Element => { +const ToolSelector = (props: ToolSelectorProps): ReactElement => { const toolset = [ @@ -40,12 +41,12 @@ const ToolSelector = (props: ToolSelectorProps): JSX.Element => { label={props.selected} /> - + {toolset} diff --git a/packages/showcase/src/components/Tools/index.tsx b/packages/showcase/src/components/Tools/index.tsx index 5a7bc8e7..9cf5ad68 100644 --- a/packages/showcase/src/components/Tools/index.tsx +++ b/packages/showcase/src/components/Tools/index.tsx @@ -1,39 +1,30 @@ -import * as React from "react"; +import type { MouseEvent, ReactElement } from "react"; import ToolSelector from "./ToolSelector"; -import Paper from "@material-ui/core/Paper"; -import { makeStyles } from "@material-ui/core"; -import { Config } from "../../stores/config"; -import { CONFIG } from "../../stores/config"; +import Paper from "@mui/material/Paper"; +import { CONFIG, type Config } from "../../stores/config"; import LineWidth from "./LineWidth"; -const useStyles = makeStyles((theme) => ({ - paper: { - padding: theme.spacing(1), - color: theme.palette.text.secondary, - }, -})); - /** * Handle the selection of the Sketch tool * * @param {object} event The event source of the callback. - * @param {any} value of the selected buttons. When `exclusive` is true + * @param {string | null} value of the selected buttons, null when the selected one is clicked again */ -const handleSelectTool = (event: React.MouseEvent, value: any) => { - CONFIG.selectedTool = value; +const handleSelectTool = (event: MouseEvent, value: string | null) => { + if (value !== null) { + CONFIG.selectedTool = value; + } }; -const handleLineWidth = (event: React.ChangeEvent<{}>, value: number | number[]) => { +const handleLineWidth = (event: Event, value: number | number[]) => { if (!Array.isArray(value)) { CONFIG.lineWidth = value; } }; -const SketchTools = (props: Config): JSX.Element => { - const classes = useStyles(); - +const SketchTools = (props: Config): ReactElement => { return ( - + diff --git a/packages/showcase/src/components/theme.tsx b/packages/showcase/src/components/theme.tsx index 1059ffdd..16a02537 100644 --- a/packages/showcase/src/components/theme.tsx +++ b/packages/showcase/src/components/theme.tsx @@ -1,16 +1,16 @@ -import * as React from "react"; -import blue from "@material-ui/core/colors/cyan"; -import { createMuiTheme, MuiThemeProvider } from "@material-ui/core/styles"; +import type { ReactNode } from "react"; +import { cyan } from "@mui/material/colors"; +import { createTheme, ThemeProvider } from "@mui/material/styles"; -const theme = createMuiTheme({ +const theme = createTheme({ palette: { - primary: blue, - type: "dark", + primary: cyan, + mode: "dark", }, }); -const ShowcaseTheme = ({ children }): JSX.Element => { - return {children}; +const ShowcaseTheme = ({ children }: { children: ReactNode }) => { + return {children}; }; export default ShowcaseTheme; diff --git a/packages/showcase/src/index.tsx b/packages/showcase/src/index.tsx index 9375d4ed..9e660075 100644 --- a/packages/showcase/src/index.tsx +++ b/packages/showcase/src/index.tsx @@ -1,7 +1,6 @@ import { App } from "./App"; -import * as React from "react"; +import { createRoot } from "react-dom/client"; import { configure } from "mobx"; -import * as ReactDOM from "react-dom"; import { observer } from "mobx-react-lite"; import { createContext, useContext } from "react"; import { Config, CONFIG } from "./stores/config"; @@ -17,9 +16,13 @@ const AppView = observer(() => { return ; }); -ReactDOM.render( +const container = document.getElementById("container"); +if (!container) { + throw new Error("Missing #container element"); +} + +createRoot(container).render( - , - document.getElementById("container") + ); From 46a59d570e1c220bad63b6f73826871ed276f040 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:00:19 +0300 Subject: [PATCH 34/70] Declare css and image modules in the showcase, drop the tsconfig workaround *.css gets an ambient module declaration so noUncheckedSideEffectImports can stay at the TypeScript default. Image modules are typed as string instead of any. --- packages/showcase/src/components/types.d.ts | 25 +++++++++++++++++---- packages/showcase/tsconfig.json | 3 --- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/showcase/src/components/types.d.ts b/packages/showcase/src/components/types.d.ts index 9e28f074..0a3a37dd 100644 --- a/packages/showcase/src/components/types.d.ts +++ b/packages/showcase/src/components/types.d.ts @@ -1,4 +1,21 @@ -declare module "*.jpg"; -declare module "*.png"; -declare module "*.jpeg"; -declare module "*.gif"; +declare module "*.css"; + +declare module "*.jpg" { + const src: string; + export default src; +} + +declare module "*.jpeg" { + const src: string; + export default src; +} + +declare module "*.png" { + const src: string; + export default src; +} + +declare module "*.gif" { + const src: string; + export default src; +} diff --git a/packages/showcase/tsconfig.json b/packages/showcase/tsconfig.json index 513ed5f4..336527e1 100644 --- a/packages/showcase/tsconfig.json +++ b/packages/showcase/tsconfig.json @@ -1,7 +1,4 @@ { "extends": "../tsconfig.packages.json", - "compilerOptions": { - "noUncheckedSideEffectImports": false - }, "include": ["src"] } From c3fcf3b124767f812205084fd69e5415ef43b8e3 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:00:20 +0300 Subject: [PATCH 35/70] Update yarn.lock for the showcase dependency migration --- yarn.lock | 571 +++++++++++++++++++++++++++--------------------------- 1 file changed, 290 insertions(+), 281 deletions(-) diff --git a/yarn.lock b/yarn.lock index 00b1e717..7b745baf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -87,7 +87,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz#f04a96fbd8473241b1079243f5b3f03a3010ab7b" integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA== -"@babel/helper-module-imports@^7.29.7": +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.29.7": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz#ef25048a518e828d7393fac5882ddd73921d7396" integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g== @@ -272,12 +272,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.29.7" -"@babel/runtime@^7.12.5": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3": version "7.29.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.10.tgz#fe9920782f7ee34029165ac6f272984917a1641b" integrity sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA== -"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.29.7 || ^8.0.5": + version "8.0.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-8.0.7.tgz#4f4d0371d27c93c269b57dba49b8427027ddd25e" + integrity sha512-k0hagDDq/6w4v+0Sp4wFvIz/yswH5O7Va6aRTnD7N62Tnborp4X+YB+H3XUcWVSR4aE47WPEXiIIZchBs0GmYg== + +"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== @@ -374,10 +379,112 @@ dependencies: tslib "^2.4.0" -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@emotion/babel-plugin@^11.13.5": + version "11.13.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/serialize" "^1.3.3" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + +"@emotion/is-prop-valid@^1.3.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz#e9ad47adff0b5c94c72db3669ce46de33edf28c0" + integrity sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw== + dependencies: + "@emotion/memoize" "^0.9.0" + +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + +"@emotion/react@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== + dependencies: + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" + csstype "^3.0.2" + +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== + +"@emotion/styled@^11.14.1": + version "11.14.1" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.1.tgz#8c34bed2948e83e1980370305614c20955aacd1c" + integrity sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/is-prop-valid" "^1.3.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== + +"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== + +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== "@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": version "4.10.1" @@ -956,87 +1063,89 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== -"@material-ui/core@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.3.tgz#f22e41775b0bd075e36a7a093d43951bf7f63850" - integrity sha512-Adt40rGW6Uds+cAyk3pVgcErpzU/qxc7KBR94jFHBYretU4AtWZltYcNsbeMn9tXL86jjVL1kuGcIHsgLgFGRw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.11.3" - "@material-ui/system" "^4.11.3" - "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.11.2" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.4" - hoist-non-react-statics "^3.3.2" - popper.js "1.16.1-lts" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - react-transition-group "^4.4.0" - -"@material-ui/icons@^4.11.2": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.2.tgz#b3a7353266519cd743b6461ae9fdfcb1b25eb4c5" - integrity sha512-fQNsKX2TxBmqIGJCSi3tGTO/gZ+eJgWmMJkgDiOfyNaunNaxcklJQFaFogYcFl0qFuaEz1qaXYXboa/bUXVSOQ== - dependencies: - "@babel/runtime" "^7.4.4" - -"@material-ui/lab@^4.0.0-alpha.57": - version "4.0.0-alpha.57" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.57.tgz#e8961bcf6449e8a8dabe84f2700daacfcafbf83a" - integrity sha512-qo/IuIQOmEKtzmRD2E4Aa6DB4A87kmY6h0uYhjUmrrgmEAgbbw9etXpWPVXuRK6AGIQCjFzV6WO2i21m1R4FCw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.2" - clsx "^1.0.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@material-ui/styles@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.3.tgz#1b8d97775a4a643b53478c895e3f2a464e8916f2" - integrity sha512-HzVzCG+PpgUGMUYEJ2rTEmQYeonGh41BYfILNFb/1ueqma+p1meSdu4RX6NjxYBMhf7k+jgfHFTTz+L1SXL/Zg== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.11.2" - clsx "^1.0.4" - csstype "^2.5.2" - hoist-non-react-statics "^3.3.2" - jss "^10.5.1" - jss-plugin-camel-case "^10.5.1" - jss-plugin-default-unit "^10.5.1" - jss-plugin-global "^10.5.1" - jss-plugin-nested "^10.5.1" - jss-plugin-props-sort "^10.5.1" - jss-plugin-rule-value-function "^10.5.1" - jss-plugin-vendor-prefixer "^10.5.1" - prop-types "^15.7.2" - -"@material-ui/system@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.11.3.tgz#466bc14c9986798fd325665927c963eb47cc4143" - integrity sha512-SY7otguNGol41Mu2Sg6KbBP1ZRFIbFLHGK81y4KYbsV2yIcaEPOmsCK6zwWlp+2yTV3J/VwT6oSBARtGIVdXPw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.2" - csstype "^2.5.2" - prop-types "^15.7.2" - -"@material-ui/types@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" - integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== +"@mui/core-downloads-tracker@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-9.5.0.tgz#42d07b201a43020a579f448549462d60fe03db82" + integrity sha512-PErEpl3Lp+1ZqWYKI7GQU8XSiciAFmLbUAZ7IoaUL598HLy1UAFuEUMEJu8yAS1v8vkXYzWprMVZzky4UwXoOA== + +"@mui/icons-material@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-9.5.0.tgz#06bde090e09dec3219e0b1eef31a0e488bd056f0" + integrity sha512-dahtVaqnRUIBgaZ4WC9EdP+LgJ5d2rslASYIX+nDFG6+ssUiM11jQ+Gd1wH8vhUGoNA9ES40MYics5BI8zJFXQ== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.5" + +"@mui/material@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-9.5.0.tgz#914e2ed4013bd33801430d0781bf203263cc3ea7" + integrity sha512-QgqvdVjZoKxP8E8SBxYY6LrdV+kw00moXweZQWBbMMdifPKZAGfUaaXhGKIca6fjKnCL6HJIe/AWWCpqNvyHVw== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/core-downloads-tracker" "^9.5.0" + "@mui/system" "^9.5.0" + "@mui/types" "^9.5.0" + "@mui/utils" "^9.5.0" + "@popperjs/core" "^2.11.8" + "@types/react-transition-group" "^4.4.12" + clsx "^2.1.1" + csstype "^3.2.3" + prop-types "^15.8.1" + react-is "^19.3.0" + react-transition-group "^4.4.5" + +"@mui/private-theming@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-9.5.0.tgz#fe3f6939fdf269438ab74b4a3696d82f72931c7a" + integrity sha512-UHZKySlr4ZJeA5HEhe/Tq1fhsR5573ViKYn7JV80dCVJtgqRQIplRSer1DHPg2Yi22llX7QRhgM0Vtrx4kZHSA== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/utils" "^9.5.0" + prop-types "^15.8.1" -"@material-ui/utils@^4.11.2": - version "4.11.2" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.2.tgz#f1aefa7e7dff2ebcb97d31de51aecab1bb57540a" - integrity sha512-Uul8w38u+PICe2Fg2pDKCaIG7kOyhowZ9vjiC1FsVwPABTW8vPPKfF6OvxRq3IiBaI1faOJmgdvMG7rMJARBhA== +"@mui/styled-engine@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-9.5.0.tgz#bd6efd941a86a720845d4d99188c51cd8ee2e1c4" + integrity sha512-IX1ceHnZ0bJgzJRWO/Ayl4ME1rNmpWVYwV28yb089UAMR17rJkV1qfr7ApsWQXXPi1oi+2JapJrWQAiAnTlJHQ== dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/sheet" "^1.4.0" + csstype "^3.2.3" + prop-types "^15.8.1" + +"@mui/system@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-9.5.0.tgz#43db6b26b0cedefe4c0e452713a5150d0c9470ec" + integrity sha512-OZuAwvoiaaHpvn0a540VH1DUwwmojJubGfNmO2g+nb2ybNDP4/gF7t7aA6AMduELSuJ5yxwlzyFvUO3CfLv1Yg== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/private-theming" "^9.5.0" + "@mui/styled-engine" "^9.5.0" + "@mui/types" "^9.5.0" + "@mui/utils" "^9.5.0" + clsx "^2.1.1" + csstype "^3.2.3" + prop-types "^15.8.1" + +"@mui/types@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-9.5.0.tgz#a317cd2685505ac6194210b03c2c946f3923b5d1" + integrity sha512-O0S6xS80qEQqW2CYNrd4GlBEQ1xpMOHZ5b4zO/DaLu6NZmtthM6smEg0Gz/u9gX5vL+8NB3EiBIxmxSCcG590Q== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.5" + +"@mui/utils@^9.5.0": + version "9.5.0" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-9.5.0.tgz#984e40fbbf2f17ba98a4d9268c5e855330e7041f" + integrity sha512-8m0LfSgE2pj58znY3kZ+anwRKbnBkcu/7AJPA8L/77wEjN0QnpX4/zRAccyplp1VEUnMsUBADeTRin5Mkf7epA== + dependencies: + "@babel/runtime" "^7.29.7 || ^8.0.5" + "@mui/types" "^9.5.0" + "@types/prop-types" "^15.7.15" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.3.0" "@napi-rs/wasm-runtime@^1.1.4": version "1.2.5" @@ -1273,6 +1382,11 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.3.6.tgz#3569708bd4be4d8870ba32bf1c456dac81600d97" integrity sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA== +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + "@sinclair/typebox@^0.34.0": version "0.34.52" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.52.tgz#62f8a686e4ab28a8944902e2ad2d648312ef11cb" @@ -1492,10 +1606,15 @@ dependencies: undici-types "~6.21.0" -"@types/prop-types@*": - version "15.5.6" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.6.tgz#9c03d3fed70a8d517c191b7734da2879b50ca26c" - integrity sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ== +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/prop-types@^15.7.15": + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== "@types/qs@*": version "6.15.1" @@ -1512,20 +1631,10 @@ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.3.0.tgz#90294a9266efd928a5266f2110d60d5dba5015d2" integrity sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q== -"@types/react-transition-group@^4.2.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1" - integrity sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "16.7.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.1.tgz#ae76b653d1d7d26b32186bba33c39745316bcdc4" - integrity sha512-kxde2oP2JvHiEXiAfb8WkL+8Aa9txDRD7L8zb3BipMNRoBbcr32xy/kfpbxmWMus71yXgJDqBgLmWil6UXdLzQ== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" +"@types/react-transition-group@^4.4.12": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== "@types/react@^19.3.0": version "19.3.0" @@ -2315,6 +2424,15 @@ babel-plugin-jest-hoist@30.5.0: dependencies: "@types/babel__core" "^7.20.5" +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + babel-preset-current-node-syntax@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" @@ -2655,10 +2773,10 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clsx@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== co@^4.6.0: version "4.6.0" @@ -2772,6 +2890,11 @@ content-type@^2.0.0, content-type@^2.1.0: resolved "https://registry.yarnpkg.com/content-type/-/content-type-2.1.0.tgz#d9389c43c0a8cf6a355db464d21e07092a40493a" integrity sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag== +convert-source-map@^1.5.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -2792,6 +2915,17 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -2826,14 +2960,6 @@ css-select@^4.1.3: domutils "^2.8.0" nth-check "^2.0.1" -css-vendor@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" - integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== - dependencies: - "@babel/runtime" "^7.8.3" - is-in-browser "^1.0.2" - css-what@^6.0.1: version "6.2.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" @@ -2879,16 +3005,6 @@ cssstyle@^4.2.1: "@asamuzakjp/css-color" "^3.2.0" rrweb-cssom "^0.8.0" -csstype@^2.2.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff" - integrity sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw== - -csstype@^2.5.2: - version "2.6.16" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39" - integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q== - csstype@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" @@ -3808,6 +3924,11 @@ finalhandler@^2.1.0: parseurl "^1.3.3" statuses "^2.0.1" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4211,7 +4332,7 @@ hermes-parser@^0.25.1: dependencies: hermes-estree "0.25.1" -hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -4349,11 +4470,6 @@ hyperdyperid@^1.2.0: resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== -hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== - iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -4418,13 +4534,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indefinite-observable@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-2.0.1.tgz#574af29bfbc17eb5947793797bddc94c9d859400" - integrity sha512-G8vgmork+6H9S8lUAg1gtXEj2JxIQTo0g2PbFiYOdjkziSI0F7UYBiVwhZRuixhBCNGczAls34+5HJPyZysvxQ== - dependencies: - symbol-observable "1.2.0" - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -4651,11 +4760,6 @@ is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-in-browser@^1.0.2, is-in-browser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= - is-in-ssh@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-in-ssh/-/is-in-ssh-1.0.0.tgz#8eb73c1cabba77748d389588eeea132a63057622" @@ -5436,77 +5540,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jss-plugin-camel-case@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.6.0.tgz#93d2cd704bf0c4af70cc40fb52d74b8a2554b170" - integrity sha512-JdLpA3aI/npwj3nDMKk308pvnhoSzkW3PXlbgHAzfx0yHWnPPVUjPhXFtLJzgKZge8lsfkUxvYSQ3X2OYIFU6A== - dependencies: - "@babel/runtime" "^7.3.1" - hyphenate-style-name "^1.0.3" - jss "10.6.0" - -jss-plugin-default-unit@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.6.0.tgz#af47972486819b375f0f3a9e0213403a84b5ef3b" - integrity sha512-7y4cAScMHAxvslBK2JRK37ES9UT0YfTIXWgzUWD5euvR+JR3q+o8sQKzBw7GmkQRfZijrRJKNTiSt1PBsLI9/w== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-global@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.6.0.tgz#3e8011f760f399cbadcca7f10a485b729c50e3ed" - integrity sha512-I3w7ji/UXPi3VuWrTCbHG9rVCgB4yoBQLehGDTmsnDfXQb3r1l3WIdcO8JFp9m0YMmyy2CU7UOV6oPI7/Tmu+w== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-nested@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.6.0.tgz#5f83c5c337d3b38004834e8426957715a0251641" - integrity sha512-fOFQWgd98H89E6aJSNkEh2fAXquC9aZcAVjSw4q4RoQ9gU++emg18encR4AT4OOIFl4lQwt5nEyBBRn9V1Rk8g== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - tiny-warning "^1.0.2" - -jss-plugin-props-sort@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.6.0.tgz#297879f35f9fe21196448579fee37bcde28ce6bc" - integrity sha512-oMCe7hgho2FllNc60d9VAfdtMrZPo9n1Iu6RNa+3p9n0Bkvnv/XX5San8fTPujrTBScPqv9mOE0nWVvIaohNuw== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - -jss-plugin-rule-value-function@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.6.0.tgz#3c1a557236a139d0151e70a82c810ccce1c1c5ea" - integrity sha512-TKFqhRTDHN1QrPTMYRlIQUOC2FFQb271+AbnetURKlGvRl/eWLswcgHQajwuxI464uZk91sPiTtdGi7r7XaWfA== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.6.0" - tiny-warning "^1.0.2" - -jss-plugin-vendor-prefixer@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.6.0.tgz#e1fcd499352846890c38085b11dbd7aa1c4f2c78" - integrity sha512-doJ7MouBXT1lypLLctCwb4nJ6lDYqrTfVS3LtXgox42Xz0gXusXIIDboeh6UwnSmox90QpVnub7au8ybrb0krQ== - dependencies: - "@babel/runtime" "^7.3.1" - css-vendor "^2.0.8" - jss "10.6.0" - -jss@10.6.0, jss@^10.5.1: - version "10.6.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.6.0.tgz#d92ff9d0f214f65ca1718591b68e107be4774149" - integrity sha512-n7SHdCozmxnzYGXBHe0NsO0eUf9TvsHVq2MXvi4JmTn3x5raynodDVE/9VQmBdWFyyj9HpHZ2B4xNZ7MMy7lkw== - dependencies: - "@babel/runtime" "^7.3.1" - csstype "^3.0.2" - indefinite-observable "^2.0.1" - is-in-browser "^1.1.3" - tiny-warning "^1.0.2" - "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.2.0" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" @@ -5630,7 +5663,7 @@ log-update@^6.1.0: strip-ansi "^7.1.0" wrap-ansi "^9.0.0" -loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -5857,15 +5890,15 @@ mkdirp@^0.5.0, mkdirp@^0.5.3: dependencies: minimist "^1.2.5" -mobx-react-lite@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-3.2.0.tgz#331d7365a6b053378dfe9c087315b4e41c5df69f" - integrity sha512-q5+UHIqYCOpBoFm/PElDuOhbcatvTllgRp3M1s+Hp5j0Z6XNgDbgqxawJ0ZAUEyKM8X1zs70PCuhAIzX1f4Q/g== +mobx-react-lite@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-5.1.0.tgz#90ff78031ad36c97b980ae7e708db90656c20e2c" + integrity sha512-++LQTCRr4FJCWuaEvYl5gCtGBwOpOwrnWjm9uhCUDI5nmkzLR8eT1jgMeYfJ8wc88YOYyC/ygjw2KpYPBYGsww== -mobx@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.2.0.tgz#9a5afe3525a0302691c7805d0df6ef60834d79e5" - integrity sha512-j5f16JIq2v4flvYCqaAB9tMtJt/y5efR2OO5Xy+w4/MBMeQ1WeGR0T8BtiNgmxM/OQzPFUKb5DTex9Y8a/yk+g== +mobx@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-7.0.6.tgz#0fbf76274138284b77b9e15f2f89ca5d8fbbdb7c" + integrity sha512-VJwjVS5K/rojqPSOoDYlXaYl38Lj+gDfLOFeJ/3Pbdh5ITbAO4ks9RgL0TeRI0bydRZ7b/7WrtPPb9Onuj/pcA== moo-color@^1.0.2: version "1.0.3" @@ -6309,7 +6342,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.2.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -6385,6 +6418,11 @@ path-to-regexp@^8.0.0: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd" integrity sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -6434,11 +6472,6 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -popper.js@1.16.1-lts: - version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" - integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== - possible-typed-array-names@^1.0.0, possible-typed-array-names@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" @@ -6559,15 +6592,6 @@ prop-types@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" -prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -6660,15 +6684,6 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - react-dom@^19.3.0: version "19.3.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.3.0.tgz#a0ff19161d7f4e9be5469a07278b0c06e00f9001" @@ -6676,34 +6691,31 @@ react-dom@^19.3.0: dependencies: scheduler "^0.28.0" -react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1: +react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-transition-group@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9" - integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw== +react-is@^19.3.0: + version "19.3.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.3.0.tgz#716028d67e9993d23a2d353c6d08a3c1ef2bbeb4" + integrity sha512-UpMYezM4v5/18F28aC66AEsjXIgE02kyEMH6yLdgLXu/UTfa1Ntwck/nNLrbqJsEXW7gPb0coNO9FQse9WTovA== + +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - react@^19.3.0: version "19.3.0" resolved "https://registry.yarnpkg.com/react/-/react-19.3.0.tgz#e20aa3a14687075ce863351b5878b0608c3fbfb2" @@ -6863,7 +6875,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.20.0: +resolve@^1.19.0, resolve@^1.20.0: version "1.22.13" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.13.tgz#d542f97758d768f36091251a6b07540b4343f7b5" integrity sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA== @@ -6988,14 +7000,6 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler@^0.28.0: version "0.28.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.28.0.tgz#03d3ca348aeaf8b7502f64468f217b27523f9695" @@ -7250,6 +7254,11 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -7550,6 +7559,11 @@ style-loader@^4.0.0: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -7576,11 +7590,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-observable@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - symbol-tree@^3.2.2, symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -7645,11 +7654,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - tinyexec@^1.0.4: version "1.3.1" resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.3.1.tgz#16a2e3c6e23fafce72640e678e651db36145b9c6" @@ -8377,6 +8381,11 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yaml@^1.10.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3" + integrity sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA== + yaml@^2.8.2: version "2.9.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.9.1.tgz#c16233fb31944e705cfefaff38795587f57588ce" From 78a9688b4c077abd0d9a1755ba37d60d010536c9 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:05:11 +0300 Subject: [PATCH 36/70] Add showcase sample data, extended config store and ref API stub The sample data (defaultValue, controlled value and image data URL) is copied from the legacy examples. The config store gets the line and fill color, opacity, background, canvas size, text, image URL and scenario state. SketchApi is a typed stub of the ref methods that the library does not export yet (TODO(part2)). --- .../showcase/src/components/Canvas/api.ts | 62 ++ .../src/components/Tools/LineWidth/index.tsx | 32 -- packages/showcase/src/data/controlledValue.ts | 540 ++++++++++++++++++ packages/showcase/src/data/defaultValue.ts | 417 ++++++++++++++ packages/showcase/src/data/imageDataUrl.ts | 1 + packages/showcase/src/stores/config.ts | 51 +- packages/showcase/src/utils/files.ts | 30 + 7 files changed, 1099 insertions(+), 34 deletions(-) create mode 100644 packages/showcase/src/components/Canvas/api.ts delete mode 100644 packages/showcase/src/components/Tools/LineWidth/index.tsx create mode 100644 packages/showcase/src/data/controlledValue.ts create mode 100644 packages/showcase/src/data/defaultValue.ts create mode 100644 packages/showcase/src/data/imageDataUrl.ts create mode 100644 packages/showcase/src/utils/files.ts diff --git a/packages/showcase/src/components/Canvas/api.ts b/packages/showcase/src/components/Canvas/api.ts new file mode 100644 index 00000000..6464e066 --- /dev/null +++ b/packages/showcase/src/components/Canvas/api.ts @@ -0,0 +1,62 @@ +import { createRef } from "react"; +import { CONFIG } from "../../stores/config"; + +/** + * TODO(part2): minimal stub of the ref API of SketchField. These methods are not part of + * the published types yet. Remove this interface and type `sketchRef` with the + * instance type exported by react-sketch once the component API is merged. + */ +export interface SketchApi { + undo(): void; + redo(): void; + canUndo(): boolean; + canRedo(): boolean; + zoom(factor: number): void; + addImg( + dataUrl: string, + options?: { left?: number; top?: number; scale?: number } + ): void; + addText(text: string, options?: object): void; + toDataURL(options?: { + format?: string; + quality?: number; + multiplier?: number; + }): string; + toJSON(propertiesToInclude?: ArrayLike): object; + clear(propertiesToInclude?: ArrayLike): string; + removeSelected(): void; + copy(): void; + paste(): void; + setBackgroundFromDataUrl( + dataUrl: string, + options?: { + stretched?: boolean; + stretchedX?: boolean; + stretchedY?: boolean; + originX?: string; + originY?: string; + } + ): void; +} + +/** + * Holds the mounted SketchField, shared by the canvas and the panels that act on it. + */ +export const sketchRef = createRef(); + +/** + * Run an action on the mounted canvas, does nothing when there is none. + */ +export const withSketch = (action: (sketch: SketchApi) => void): void => { + if (sketchRef.current) { + action(sketchRef.current); + } +}; + +/** + * Copy the undo/redo availability of the canvas into the store + */ +export const syncHistory = (sketch: SketchApi): void => { + CONFIG.canUndo = sketch.canUndo(); + CONFIG.canRedo = sketch.canRedo(); +}; diff --git a/packages/showcase/src/components/Tools/LineWidth/index.tsx b/packages/showcase/src/components/Tools/LineWidth/index.tsx deleted file mode 100644 index e0141a62..00000000 --- a/packages/showcase/src/components/Tools/LineWidth/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import type { ReactElement } from "react"; -import Slider from "@mui/material/Slider"; -import RemoveIcon from "@mui/icons-material/Remove"; -import AddIcon from "@mui/icons-material/Add"; -import Grid from "@mui/material/Grid"; - -interface LineWidthProps { - width: number; - onChange?: (event: Event, value: number | number[]) => void; -} - -const LineWidth = (props: LineWidthProps): ReactElement => { - return ( - - - - - - - - - - - - ); -}; - -export default LineWidth; diff --git a/packages/showcase/src/data/controlledValue.ts b/packages/showcase/src/data/controlledValue.ts new file mode 100644 index 00000000..a0c2465b --- /dev/null +++ b/packages/showcase/src/data/controlledValue.ts @@ -0,0 +1,540 @@ +export default { + objects: [ + { + type: "line", + originX: "center", + originY: "center", + left: 98.41, + top: 133.92, + width: 5, + height: 162, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: -2.5000111045611817, + x2: 2.5000111045611817, + y1: -81.00166757284126, + y2: 81.00166757284126, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 121.41, + top: 130.42, + width: 41, + height: 1, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: -20.500091057401697, + x2: 20.500091057401697, + y1: 0.5000102936595141, + y2: -0.5000102936595141, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 144.41, + top: 121.42, + width: 1, + height: 187, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: -0.5000022209122363, + x2: 0.5000022209122363, + y1: -93.5019249143291, + y2: 93.5019249143291, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 187.41, + top: 182.92, + width: 33, + height: 0, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: -16.5000732901038, + x2: 16.5000732901038, + y1: 0, + y2: 0, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 202.41, + top: 166.42, + width: 3, + height: 33, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: 1.500006662736709, + x2: -1.500006662736709, + y1: 16.500339690763965, + y2: -16.500339690763965, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 184.41, + top: 149.92, + width: 35, + height: 0, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: 17.500077731928272, + x2: -17.500077731928272, + y1: 0, + y2: 0, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 169.91, + top: 182.42, + width: 6, + height: 65, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: -3.000013325473418, + x2: 3.000013325473418, + y1: -32.5006690878684, + y2: 32.5006690878684, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 189.91, + top: 215.42, + width: 34, + height: 1, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: -17.000075511016036, + x2: 17.000075511016036, + y1: -0.5000102936595141, + y2: 0.5000102936595141, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 235.91, + top: 134.92, + width: 10, + height: 156, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: 5.000022209122363, + x2: -5.000022209122363, + y1: 78.00160581088417, + y2: -78.00160581088417, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 260.91, + top: 135.92, + width: 12, + height: 148, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + x1: 6.00002665094685, + x2: -6.00002665094685, + y1: 74.00152346160806, + y2: -74.00152346160806, + }, + { + type: "circle", + originX: "left", + originY: "center", + left: 284.91, + top: 154.92, + width: 57.32, + height: 57.32, + fill: "transparent", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 47.12, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + radius: 28.65783551172888, + startAngle: 0, + endAngle: 6.283185307179586, + }, + { + type: "rect", + originX: "left", + originY: "top", + left: 374.91, + top: 46.91, + width: 14, + height: 123, + fill: "#b0bc00", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + rx: 0, + ry: 0, + }, + { + type: "circle", + originX: "left", + originY: "center", + left: 373.91, + top: 182.92, + width: 21.93, + height: 21.93, + fill: "#b0bc00", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 46.85, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + radius: 10.96599903840613, + startAngle: 0, + endAngle: 6.283185307179586, + }, + { + type: "path", + originX: "left", + originY: "top", + left: 121.99000000000001, + top: 234.25212246173203, + width: 651.02, + height: 174.76, + fill: null, + stroke: "black", + strokeWidth: 10, + strokeDashArray: null, + strokeLineCap: "round", + strokeLineJoin: "round", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + transformMatrix: null, + skewX: 0, + skewY: 0, + pathOffset: { x: 452.5, y: 326.631061230866 }, + path: [ + ["M", 126.99, 270], + ["Q", 127, 270, 131, 270], + ["Q", 135, 270, 185.5, 270], + ["Q", 236, 270, 281.5, 270], + ["Q", 327, 270, 351.5, 268.5], + ["Q", 376, 267, 445.5, 261], + ["Q", 515, 255, 555, 250], + ["Q", 595, 245, 609, 242], + ["Q", 623, 239, 623, 239.5], + ["Q", 623, 240, 618.5, 245], + ["Q", 614, 250, 608, 254.5], + ["Q", 602, 259, 592.5, 264], + ["Q", 583, 269, 575, 273.5], + ["Q", 567, 278, 564.5, 279], + ["Q", 562, 280, 562, 280.5], + ["Q", 562, 281, 570.5, 281], + ["Q", 579, 281, 588.5, 282], + ["Q", 598, 283, 601, 283.5], + ["Q", 604, 284, 604, 286.5], + ["Q", 604, 289, 601.5, 293], + ["Q", 599, 297, 594, 301], + ["Q", 589, 305, 588, 306.5], + ["Q", 587, 308, 590.5, 308], + ["Q", 594, 308, 600.5, 310], + ["Q", 607, 312, 607.5, 313], + ["Q", 608, 314, 608, 317.5], + ["Q", 608, 321, 608, 321.5], + ["Q", 608, 322, 608, 322.5], + ["Q", 608, 323, 608, 323.5], + ["Q", 608, 324, 609.5, 324.5], + ["Q", 611, 325, 616, 327.5], + ["Q", 621, 330, 622.5, 331], + ["Q", 624, 332, 624, 332.5], + ["Q", 624, 333, 624.5, 334], + ["Q", 625, 335, 628.5, 337.5], + ["Q", 632, 340, 643, 345.5], + ["Q", 654, 351, 665.5, 355.5], + ["Q", 677, 360, 679, 364], + ["Q", 681, 368, 681.5, 370], + ["Q", 682, 372, 682.5, 373.5], + ["Q", 683, 375, 691.5, 376], + ["Q", 700, 377, 715.5, 381], + ["Q", 731, 385, 736, 389.5], + ["Q", 741, 394, 741.5, 395], + ["Q", 742, 396, 742, 396.5], + ["Q", 742, 397, 742.5, 398], + ["Q", 743, 399, 745, 399], + ["Q", 747, 399, 750.5, 402], + ["Q", 754, 405, 764, 408.5], + ["Q", 774, 412, 776, 413], + ["L", 778.01, 414.01], + ], + }, + ], +}; diff --git a/packages/showcase/src/data/defaultValue.ts b/packages/showcase/src/data/defaultValue.ts new file mode 100644 index 00000000..c598183b --- /dev/null +++ b/packages/showcase/src/data/defaultValue.ts @@ -0,0 +1,417 @@ +export default { + objects: [ + { + type: "line", + originX: "center", + originY: "center", + left: 98.41, + top: 133.92, + width: 5, + height: 162, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: -2.5000111045611817, + x2: 2.5000111045611817, + y1: -81.00166757284126, + y2: 81.00166757284126, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 121.41, + top: 130.42, + width: 41, + height: 1, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: -20.500091057401697, + x2: 20.500091057401697, + y1: 0.5000102936595141, + y2: -0.5000102936595141, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 144.41, + top: 121.42, + width: 1, + height: 187, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: -0.5000022209122363, + x2: 0.5000022209122363, + y1: -93.5019249143291, + y2: 93.5019249143291, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 187.41, + top: 182.92, + width: 33, + height: 0, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: -16.5000732901038, + x2: 16.5000732901038, + y1: 0, + y2: 0, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 202.41, + top: 166.42, + width: 3, + height: 33, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: 1.500006662736709, + x2: -1.500006662736709, + y1: 16.500339690763965, + y2: -16.500339690763965, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 184.41, + top: 149.92, + width: 35, + height: 0, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: 17.500077731928272, + x2: -17.500077731928272, + y1: 0, + y2: 0, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 169.91, + top: 182.42, + width: 6, + height: 65, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: -3.000013325473418, + x2: 3.000013325473418, + y1: -32.5006690878684, + y2: 32.5006690878684, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 189.91, + top: 215.42, + width: 34, + height: 1, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: -17.000075511016036, + x2: 17.000075511016036, + y1: -0.5000102936595141, + y2: 0.5000102936595141, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 235.91, + top: 134.92, + width: 10, + height: 156, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: 5.000022209122363, + x2: -5.000022209122363, + y1: 78.00160581088417, + y2: -78.00160581088417, + }, + { + type: "line", + originX: "center", + originY: "center", + left: 260.91, + top: 135.92, + width: 12, + height: 148, + fill: "black", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + x1: 6.00002665094685, + x2: -6.00002665094685, + y1: 74.00152346160806, + y2: -74.00152346160806, + }, + { + type: "circle", + originX: "left", + originY: "center", + left: 284.91, + top: 154.92, + width: 57.32, + height: 57.32, + fill: "transparent", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 47.12, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + radius: 28.65783551172888, + startAngle: 0, + endAngle: 6.283185307179586, + }, + { + type: "rect", + originX: "left", + originY: "top", + left: 374.91, + top: 46.91, + width: 14, + height: 123, + fill: "#b0bc00", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 0, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + rx: 0, + ry: 0, + }, + { + type: "circle", + originX: "left", + originY: "center", + left: 373.91, + top: 182.92, + width: 21.93, + height: 21.93, + fill: "#b0bc00", + stroke: "black", + strokeWidth: 2, + strokeDashArray: null, + strokeLineCap: "butt", + strokeLineJoin: "miter", + strokeMiterLimit: 10, + scaleX: 1, + scaleY: 1, + angle: 46.85, + flipX: false, + flipY: false, + opacity: 1, + shadow: null, + visible: true, + clipTo: null, + backgroundColor: "", + fillRule: "nonzero", + globalCompositeOperation: "source-over", + radius: 10.96599903840613, + startAngle: 0, + endAngle: 6.283185307179586, + }, + ], + background: "", +}; diff --git a/packages/showcase/src/data/imageDataUrl.ts b/packages/showcase/src/data/imageDataUrl.ts new file mode 100644 index 00000000..53ffc772 --- /dev/null +++ b/packages/showcase/src/data/imageDataUrl.ts @@ -0,0 +1 @@ +export default "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABgMAAAKhCAYAAAB91t4wAAAgAElEQVR4XuzdP+htV3Yf8OXaBkmNk04SSWkYvcqFixkFk85IchpDwDNiCjsuLImQgCEwFhhcBCPJRUgTZmQIuLIk3IUQjQoXrqSBlGOk6exppAlx7bCefufl9/T+/O696+xz1j73c+Dxrnh377POZ+3fT7C/957zS+EgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDi3wS4e+OhdHgAABAgQIECBAgAABAgQIECBAgAABAgQIhDDAIiBAgAABAgQIECBAgAABAgQIECBAgAABAgcXEAYcvMEujwABAgQIECBAgAABAgQIECBAgAABAgQICAOsAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcHABYcDBG+zyCBAgQIAAAQIECBAgQIAAAQIECBAgQICAMMAaIECAAAECBAgQIECAAAECBAgQIECAAAECBxcQBhy8wS6PAAECBAgQIECAAAECBAgQIECAAAECBAgIA6wBAgQIECBAgAABAgQIECBAgAABAgQIECBwcAFhwMEb7PIIECBAgAABAgQIECBAgAABAgQIECBAgIAwwBogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIHFxAGHLzBLo8AAQIECBAgQIAAAQIECBAgQIAAAQIECAgDrAECBAgQIECAAAECBAgQIECAAAECBAgQIHBwAWHAwRvs8ggQIECAAAECBAgQIECAAAECBAgQIECAgDDAGiBAgAABAgQIECBAgAABAgQIECBAgAABAgcXEAYcvMEujwABAgQIECBAgAABAgQIECBAgAABAgQICAOsAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcHABYcDBG+zyCBAgQIAAAQIECBAgQIAAAQIECBAgQICAMMAaIECAAAECBAgQIECAAAECBAgQIECAAAECBxcQBhy8wS6PAAECBAgQIECAAAECBAgQIECAAAECBAgIA6wBAgQIECBAgAABAgQIECBAgAABAgQIECBwcAFhwMEb7PIIECBAgAABAgQIECBAgAABAgQIECBAgIAwwBogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIHFxAGHLzBLo8AAQIECBAgQIAAAQIECBAgQIAAAQIECAgDrAECBAgQIECAAAECBAgQIECAAAECBAgQIHBwAWHAwRvs8ggQIECAAAECBAgQIECAAAECBAgQIECAgDDAGiBAgAABAgQIECBAgAABAgQIECBAgAABAgcXEAYcvMEujwABAgQIECBAgAABAgQIECBAgAABAgQICAOsgYrAP90Mto4qisYSIECAAAECBAgQIECAAAECBAgQIEBgsIBN3MHAB59eGHDwBrs8AgQIECBAgAABAgQIECBAgAABAgSOISAMOEYf97oKYcBe8s5LgAABAgQIECBAgAABAgQIECBAgACBMwSEAWdgeesjAsIAi4IAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bozQCBAgQIECAAAECBAgQIECAAAECBAgsAsIAa6EiIAyo6BlLgAABAgQIECBAgAABAgQIECBAgACBjQSEARtBH/Q0woCDNtZlESBAgAABAgQIECBAgAABAgQIECBwLAFhwLH6ufXVCAO2Fnc+AgQIECBAgAABAgQIECBAgAABAgQIXCAgDLgAzZAHAsIAi4EAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bozQCBAgQIECAAAECBAgQIECAAAECBAgsAsIAa6EiIAyo6BlLgAABAgQIECBAgAABAgQIECBAgACBjQSEARtBH/Q0woCDNtZlESBAgAABAgQIECBAgAABAgQIECBwLAFhwLH6ufXVCAO2Fnc+AgQIECBAgAABAgQIECBAgAABAgQIXCAgDLgAzZAHAsIAi4EAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bozQCBAgQIECAAAECBAgQIECAAAECBAgsAsIAa6EiIAyo6BlLgAABAgQIECBAgAABAgQIECBAgACBjQSEARtBH/Q0woCDNtZlESBAgAABAgQIECBAgAABAgQIECBwLAFhwLH6ufXVCAO2Fnc+AgQIECBAgAABAgQIECBAgAABAgQIXCAgDLgAzZAHAsIAi4EAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bo7SrF1h+Pi+F8P+HS+WMI0CAAAECBAgQIECAAAECBAg0FLDZ07ApE5UkDJioWUq9OgFhwNW13AUTIECAAAECBAgQIECAAAECBJ4sIAywOioCwoCKnrEExgrc//n88H+ed5JXf/PB+/3/4Tw67yZAgAABAgQIECBAgAABAgQItBaw2dO6Pe2LEwa0b5ECr1hAGHDFzXfpBAgQIECAAAECBAgQIECAAIFvCggDrImKgDCgomcsgbECwoCxvmYnQIAAAQIECBAgQIAAAQIECEwlIAyYql3tihUGtGuJggg8EBAGWAwECBAgQIAAAQIECBAgQIAAAQIPBIQB+y6G2TfTZ69/3+47O4GxAsKAsb5mJ0CAAAECBAgQIECAAAECBAhMJSAM2Ldds2+mz17/vt13dgJjBYQBY33NToAAAQIECBAgQIAAAQIECBCYSkAYsG+7Zt9Mn73+fbvv7ATGCggDxvqanQABAgQIECBAgAABAgQIECAwlYAwYN92zb6ZPnv9+3b/7rO/EBFf3P027yDwWAFhgIVBgAABAgQIECBAgAABAgQIECDwQEAYsO9imH0zffb69+3+08/OtnN35qhNGDBHn1RJgAABAgQIECBAgAABAgQIENhEQBiwCfMTTzL7hu/s9e/bfWFAZ/8j1CYMOEIXXQMBAgQIECBAgAABAgQIECBAYCUBYcBKkBdOM/tm+uz1X9i2TYax3YT50CcRBhy6vS6OAAECBAgQIECAAAECBAgQIHCegDDgPK+13/3jiPh2RNyLiM/WnnyD+WxYj0POZwU8P/HaGCdj5lMFhAGnSnkfAQIECBAgQIAAAQIECBAgQOAKBIQB+zZ5CQNejoh8PdshDBjXsS3WxkuThlDj1I81szDgWP10NQQIECBAgAABAgQIECBAgACBkoAwoMRXHrzFhm+5yKdMIAwYpzt6bejduN51mVkY0KUT6iBAgAABAgQIECBAgAABAgQINBAQBuzbhNEbvqOvzobyOOHRa0PvxvWuy8zCgC6dUAcBAgQIECBAgAABAgQIECBAoIGAMGDfJoze8B19dTaUxwm/GxFvRMRbEZGv1z6+iohnIuLFiMjnEziOJyAMOF5PXREBAgQIECBAgAABAgQIECBA4GIBYcDFdKsMFAaswnjISf44In4QEW9HRL5e+5h97a3tccT5hAFH7KprIkCAAAECBAgQIECAAAECBAhcKCAMuBBupWGzb8j6ZsBKC+Ex0wgDxtley8zCgGvptOskQIAAAQIECBAgQIAAAQIECJwgIAw4AWngW4QBA3Enn3p0GPBhRLwSEa9FRL52HE9AGHC8nroiAgQIECBAgAABAgQIECBAgMDFAsKAi+lWGTj6vvCrFPmUSXwzYJzwqxHxQUR8FBH5eu1jdNiwdr3mO19AGHC+mREECBAgQIAAAQIECBAgQIAAgcMKCAP2be3sG7Kzf7Nh3+4//ezfiYiPI+KTiMjXax+zr721PY44nzDgiF11TQQIECBAgAABAgQIECBAgACBCwWEARfCrTRs9g1ZYcBKC+Ex04wOA96MiHci4r2IyNeO4wkIA47XU1dEgAABAgQIECBAgAABAgQIELhYQBhwMd0qA4UBqzAecpLRYcDo+Q/ZlMkuShgwWcOUS4AAAQIECBAgQIAAAQIECBAYKSAMGKl799zCgLuNrvkdI5/JIAw4/soSBhy/x66QAAECBAgQIECAAAECBAgQIHCygDDgZKohbxQGDGE9zKRbhAGfRcS9w4i5kNsCwgDrgQABAgQIECBAgAABAgQIECBA4IGAMGDfxSAM2Ne/+9lHhgF57aPn7+579PqEAUfvsOsjQIAAAQIECBAgQIAAAQIECJwhIAw4A2vAW4UBA1APNOXozfrR8x+oFVNeijBgyrYpmgABAgQIECBAgAABAgQIECAwRkAYMMb11FlfjYgPIuL9iPjeqYMave/HEfHtiHg5IvK1Y12B0b7CgHX71W02YUC3jqiHAAECBAgQIECAAAECBAgQILCjgDBgR/yImP0hrqM3q/ftzv5nH+07ev79Ba+7AmHAdfff1RMgQIAAAQIECBAgQIAAAQIEHhIQBuy7IIQB+/p3P/vozfrR83f3PXp9woCjd9j1ESBAgAABAgQIECBAgAABAgTOEBAGnIE14K3CgAGoB5py2ax/LSI+HHBdwoABqI2mFAY0aoZSCBAgQIAAAQIECBAgQIAAAQJ7CwgD9u2AMGBf/+5nH/2A6dHzd/c9en3CgKN32PURIECAAAECBAgQIECAAAECBM4QEAacgTXgrcKAAagHmnL0Zv3o+Q/UiikvRRgwZdsUTYAAAQIECBAgQIAAAQIECBAYIyAMGON66qzCgFOlrvN9ozfrR89/nV3rc9XCgD69UAkBAgQIECBAgAABAgQIECBAYHcBYcC+LRAG7Ovf/exvRsQ7EfFeROTrtY9XI+KDiPgkInItOo4lIAw4Vj9dDQECBAgQIECAAAECBAgQIECgJCAMKPGVB78QEZ9HxBcR8WJ5tu0n8ADaseajw6LR84/VMftdAsKAu4T8OwECBAgQIECAAAECBAgQIEDgigSEAfs3+/6GXUTM2AthwNj1M3qzfvT8Y3XMfpeAMOAuIf9OgAABAgQIECBAgAABAgQIELgigRk3oI/WHmHA0Tq63vWM3qx/NiK+jIivIuK59co2UxMBYUCTRiiDAAECBAgQIECAAAECBAgQINBBQBiwfxeEAfv3oGsFL0XEpxHxWUTcG1TkzOtvEMlhphUGHKaVLoQAAQIECBAgQIAAAQIECBAgUBcQBtQNqzPMvBnrNkHV7t89fvT6GD3/3VfoHaMEhAGjZM1LgAABAgQIECBAgAABAgQIEJhQQBiwf9Nm3owVBoxfP6PXR37r4Fs33zzI147jCAgDjtNLV0KAAAECBAgQIECAAAECBAgQKAsIA8qE5QlGb/aWC3zKBMKAkbpfzz16fejh+B7udQZhwF7yzkuAAAECBAgQIECAAAECBAgQaCggDNi/KaM3e0deoY3kkbpfz/1FRDwfES/evF77jHq4tmif+YQBfXqhEgIECBAgQIAAAQIECBAgQIDA7gLCgN1b8GCz97mI+Gr/cs6qwEbyWVwXvXm08Y8i4rsR8XpE5GvHcQSEAcfppSshQIAAAQIECBAgQIAAAQIECJQFhAFlwvIEozd7ywU+ZYKZax/psubco43/OCJ+EBFvR0S+dhxHQBhwnF66EgIECBAgQIAAAQIECBAgQIBAWUAYUCYsTzB6s7dcoDBgJOGdc49eH8KAO1sw7RuEAdO2TuEECBAgQIAAAQIECBAgQIAAgfUFhAHrm5474+jN3nPrOef9M9d+znXu+d7Rt/H5XkT8MCLej4h87TiOgDDgOL10JQQIECBAgAABAgQIECBAgACBsoAwoExYnmDmDfWZay83bqMJRn9y/zsR8XFEfBIR+dpxHAFhwHF66UoIECBAgAABAgQIECBAgAABAmUBYUCZsDzBzBvqM9debtxGEwgDNoI+4GmEAQdsqksiQIAAAQIECBAgQIAAAQIECFwqIAy4VG69cTNvqM9c+3odHDvT6DDghYj4PCK+iIgXx16K2TcWEAZsDO50BAgQIECAAAECBAgQIECAAIHOAsKA/bsz84b6zLXv3/nTKlju6f9RRLx62pCz33V/0zgi/D44m671AGFA6/YojgABAgQIECBAgAABAgQIECCwrYDNv229H3e25QGxr0XEh/uXc1YFwoCzuC568xb39BcGXNSa9oOEAe1bpEACBAgQIECAAAECBAgQIECAwHYCwoDtrJ90ptG3gRl5hcKAkbpfz71FGPBVRDwTEc9FRL52HENAGHCMProKAgQIECBAgAABAgQIECBAgMAqAsKAVRhLkwgDSnyHH7xFGCDUOeYyEgYcs6+uigABAgQIECBAgAABAgQIECBwkYAw4CK2VQcJA1blPNxkz0bElzef2M9P7o84hAEjVPefUxiwfw9UQIAAAQIECBAgQIAAAQIECBBoIyAM2L8VwoD9e9C9gtH39M9nVbwSETM+t6J77/asTxiwp75zEyBAgAABAgQIECBAgAABAgSaCQgD9m+IMGD/HnSvYHQYMPMa7N67PesTBuyp79wECBAgQIAAAQIECBAgQIAAgWYCwoD9GzLzRqzby2yzfoQB2zgf7SzCgKN11PUQIECAAAECBAgQIECAAAECBAoCwoAC3kpDhQErQR54ms8i4lsRcS8i8vXax5sR8U5EvBcR+dpxDAFhwDH66CoIECBAgAABAgQIECBAgAABAqsICANWYSxNMvNGrG8GlFp/8uDRzt+JiI8j4pOIyNeOYwgIA47RR1dBgAABAgQIECBAgAABAgQIEFhFQBiwCmNpkpk3YkdvUpdgDzR4tPPMa/BAbV79UoQBq5OakAABAgQIECBAgAABAgQIECAwr4AwYP/ezbwRO3qTev/u9KhgtPPMa7BHh3pWIQzo2RdVESBAgAABAgQIECBAgAABAgR2ERAG7ML+0Eln3ogdvUm9f3d6VPBuRLwREW9HRD5jYsQx+iHFI2o259MFhAFWCAECBAgQIECAAAECBAgQIECAwAMBYcD+i0EYsH8PulewxUOmhQHdV8H59QkDzjczggABAgQIECBAgAABAgQIECBwWAFhwP6tFQbs34PuFQgDuneoZ33CgJ59URUBAgQIECBAgAABAgQIECBAYBcBYcAu7A+dVBiwfw+6V7BFGOCWT91Xwfn1CQPONzOCAAECBAgQIECAAAECBAgQIHBYAWHA/q0VBuzfg+4VbLFGhAHdV8H59QkDzjczggABAgQIECBAgAABAgQIECBwWAFhwP6tfSkiPo2ITyIiN31nOrb4xPpMHqNqFQaMkj32vMKAY/fX1REgQIAAAQIECBAgQIAAAQIEzhIQBpzFNezNsz68VRgwbEk8NPEWYYBebtPLLc8iDNhS27kIECBAgAABAgQIECBAgAABAs0FhAE9GiQM6NGHrlUsYcBnEXFvUJHCgEGwO04rDNgR36kJECBAgAABAgQIECBAgAABAt0EhAE9OiIM6NGHzlWMXiPCgM7dv6w2YcBlbkYRIECAAAECBAgQIECAAAECBA4pIAzo0dbRG72jrtIG8ijZR+cdvUZejYgPIuKjiMjXjvkFhAHz99AVECBAgAABAgQIECBAgAABAgRWExAGrEZZmmj0Rm+puKcMFgaMkt0+DNjiuQTbaTlTCggDrAMCBAgQIECAAAECBAgQIECAAIEHAsKAHotBGNCjD52r+CoinomI5yIiX699CAPWFt1/PmHA/j1QAQECBAgQIECAAAECBAgQIECgjYAwoEcrhAE9+tC5ih9HxLcj4uWIyNdrH89GxJc3QUMGDo75BYQB8/fQFRAgQIAAAQIECBAgQIAAAQIEVhMQBqxGWZpIGFDiu4rBo8OARJx1HV7FArjgIoUBF6AZQoAAAQIECBAgQIAAAQIECBA4qoAwoEdnt9joHXGlnhkwQvXxc26xRoQB2/VzizMJA7ZQdg4CBAgQIECAAAECBAgQIECAwCQCwoAejdpio3fElQoDRqg+fs4PI+KViHgtIvL1iOOziPhWRNyLiHztmFtAGDB3/1RPgAABAgQIECBAgAABAgQIEFhVQBiwKufFkwkDLqa7moFbBC+zrsOrWQRnXqgw4EwwbydAgAABAgQIECBAgAABAgQIHFlAGNCju7Nuwm6xQd2jQ/tXsYX1rOtw/+70rEAY0LMvqiJAgAABAgQIECBAgAABAgQI7CIgDNiF/ZGTPm4T9oWIeP6E8p6NiJdOeF++5Tsnvi/ny3mfduTa2WKD+sSSD/+2Lax/FBHfjYjXIyJfO+YWEAbM3T/VEyBAgAABAgQIECBAgAABAgRWFRAGrMp58WTfDAOWB7lePOEGA4UBGyDfOsWbEfFORLwfEd8bdOotAodBpZv2MQLCAMuCAAECBAgQIECAAAECBAgQIEDggYAwoMdieFwY8LOI+OKE8r4642GveZ5Tjnx4bM5712Hz+C6h9f49v9XxcUR8csY3PM49u36eK9b7/cKA3v1RHQECBAgQIECAAAECBAgQIEBgUwFhwKbcTzzZrPdqt3m83frZIgzIbxz8cPC3D7YTcyZhgDVAgAABAgQIECBAgAABAgQIECDwQEAY0GMxLJvqb0XEuz1KOqkKYcBJTKu8aYswYItzrIJhkpMEhAEnMXkTAQIECBAgQIAAAQIECBAgQOA6BIQBPfo866b6rHX36Pp5VeQDpT+/uXXUi+cNPfndwoCTqaZ4ozBgijYpkgABAgQIECBAgAABAgQIECCwjYAwYBvnu84y66b6rHXf1Y+u/748WHrUz+0WgUNX2yPWJQw4YlddEwECBAgQIECAAAECBAgQIEDgQoFRm4oXlnO1w2bdVJ+17lkX2ugwIF22OMes/rPVLQyYrWPqJUCAAAECBAgQIECAAAECBAgMFBAGDMQ9Y+pZN9VnrfuM1rR66xYb9VucoxXqgYsRBhy4uS6NAAECBAgQIECAAAECBAgQIHCugDDgXLEx7591U33Wusd0cfysX0TE8xFxLyI+G3S6ryLimYh4LiLytWNeAWHAvL1TOQECBAgQIECAAAECBAgQIEBgdQFhwOqkF00466b6rHVf1KQGg34cEd+OiJcjIl+POLY4x4i6zfmogDDAqiBAgAABAgQIECBAgAABAgQIEHggIAzosRhm3VSfte4eXT+/ii026rc4x/lXbsQlAsKAS9SMIUCAAAECBAgQIECAAAECBAgcVEAY0KOx34mIjyPio4h4tUdJJ1UhDDiJabU3bbFR/2FEvBIRr0VEvnbMKyAMmLd3KidAgAABAgQIECBAgAABAgQIrC4gDFid9KIJlzDgk4jI17McwoBtO/VuRLwREW9FRL4ecejpCNV95hQG7OPurAQIECBAgAABAgQIECBAgACBlgLCgB5tEQb06EP3KrbYqN/iHN2dj1KfMOAonXQdBAgQIECAAAECBAgQIECAAIEVBIQBKyCuMIUwYAXEK5hii436NyPinYh4LyLytWNeAWHAvL1TOQECBAgQIECAAAECBAgQIEBgdQFhwOqkF00oDLiI7eoGbREGzLoWr24xnHDBwoATkLyFAAECBAgQIECAAAECBAgQIHAtAsKAHp2edQN2i83pHh3qUUU+XPqDwQ+annUt9uhQryqEAb36oRoCBAgQIECAAAECBAgQIECAwK4CwoBd+R+cfNYNWGHAtutni3WyxTkuUXslIl6KiBdu/uQct1/nf//4ZuLbf/8sIr645IQHGCMMOEATXQIBAgQIECBAgAABAgQIECBAYC0BYcBakrV5um7A3nVVwoC7hNb9963Wyf1N5IjY8/dDbvRnAJDXnN+IqBwfRkT++SgivqpMNNlYYcBkDVMuAQIECBAgQIAAAQIECBAgQGCkwJ6bfSOva7a5n42IL282Kp+bqPjRYcCyKd2BpMPPyjWEARkC5AOMvxkA/OTmk/+f3fqkf37i//an/tMnj9t/f/sbi2cJBt7vsKgG1yAMGAxsegIECBAgQIAAAQIECBAgQIDATAIdNjhn8hpZa4dPY597fSPDgE5BQLp0+FlZQqPR9eyxFjME+EFEfO9mEf7iZvM/N+/ztj+X3uonzTJYyD/5TYPlyDnfvnVroXPX/gzvFwbM0CU1EiBAgAABAgQIECBAgAABAgQ2EuiwwbnRpbY/zR4bsFWULcKAvddot75sUU9ulOcn6l/eYLM8N+vzmwBLCJBr8r2IyLW19i19lmAg537+ZvH/KCLeGnCu6s/WGuOFAWsomoMAAQIECBAgQIAAAQIECBAgcBCBvTdaD8K4ymVsscm7SqG3JhkZBuTtYL4VEfciIl/vdeQn0nPjeO86luvfYp1sFQbkA4F/ePNg4Ly+vHVPrqlLvwVw6hrJUODNm28i5JgMHTIQyGDgSIcw4EjddC0ECBAgQIAAAQIECBAgQIAAgaKAMKAIuOLwLTZ5Vyz3/lQjw4CtNqTvMulSx9HCgLxtTwYBuTGfzwPI/x4dAnyz13lrogwAlucK5HrOWwcd5RAGHKWTroMAAQIECBAgQIAAAQIECBAgsIKAMGAFxJWmEAY8DNllE75LHYvOFvWMDHnyOvK2QPnJ/Dzy2wD5eu1bAp3zY5m3KMpgIo8MB14/Z3Dj9woDGjdHaQQIECBAgAABAgQIECBAgACBrQWEAVuLP/l8woCHbUZvSJ/a+Xcj4o2bT4xnTXsfs4cBuem+PB8gN9273Jonv5mQtTwTEfnQ4qxtz4BijXUmDFhD0RwECBAgQIAAAQIECBAgQIAAgYMICAP6NFIY0DMM6BJKLDozhwFLsPKLiPjOzs+CeNxPfj7DIH0zEMjnVOQDlGcOBIQBfX6/q4QAAQIECBAgQIAAAQIECBAgsLuAMGD3FjwoYHlg7os73Dv9UoWRG+V565i8ncx7t24pc2mdlXHLNe5dxzfDgNduPsFeubYnjc1PyX8QER/d3Mt/jXPcvhVPbrLnpnvHIwOB/IZAPrx69lsGCQM6rjA1ESBAgAABAgQIECBAgAABAgR2EhAG7AT/mNNu8Ynvta92ZBiQnxz/OCI+ufkU+dq1nzpflzqWekeaL+dY+5pvBwGdbg30pDVw+xsCM9T7pOsQBpz6U+59BAgQIECAAAECBAgQIECAAIErEBAG9GmyMODhXqy9IX1pp7vUMWsYkBvrn94U/1ZE5K2CZoZsui4AACAASURBVDiWACNvE5TfZMhv7sx2CANm65h6CRAgQIAAAQIECBAgQIAAAQIDBYQBA3HPnFoY8DDYCxHx+c09258703LNty+b2V9ERN7Cae9ji28GPBsRX65kn9/uyEDl/VsPDt7b8NTzL884yN7fm/D5AcKAUzvtfQQIECBAgAABAgQIECBAgACBKxAQBvRpsjDg0V50eahylzpSaKtnKaxxzcuzB/KBwRnuzPgw3uVZHjOGGcKAPr/fVUKAAAECBAgQIECAAAECBAgQ2F1AGLB7Cx4UMGMYMHpjeo0N6TU63KWOvJatbltUveb8dkHeHihDgJnvu798QyXtZ3q4d9YrDFjjp98cBAgQIECAAAECBAgQIECAAIGDCAgD+jRyxjBg9Mb08qnsvGd7+ux15G1inr+5Vcze944fbb4YL/Z5e5xLrnm5ndHeD4BeY838KCK+O+GtjoQBa3TfHAQIECBAgAABAgQIECBAgACBgwgIA/o0UhjwaC+6mHSpI4W2CgMq17w8cyDr3TvIWeMnfNZvBwgD1ui+OQgQIECAAAECBAgQIECAAAECBxEQBvRp5PLp45luqTJ6Y3rZkH4tIj7csVWVjfG1y14eaJyf1s9P7Y86Ktf8vYj4YUR8FBH53IAjHDN+O0AYcISV5xoIECBAgAABAgQIECBAgAABAisJCANWglxhmuW2Km9HRL6e4RgdBnQxeTci3oiILr2p3s//lLVVCacyuHll8mcFfNPo9rcDZvm9KQw4ZaV7DwECBAgQIECAAAECBAgQIEDgSgRm2dS6hnZ02fg+x/pawoBuvdkiDLj0mm/fIui5iPjqnAXV/L1dvqlyKpMw4FQp7yNAgAABAgQIECBAgAABAgQIXIGAMKBPky/dfN3zCkaHAcvtZt6PiHy917H05r2IeHOvIm6dt3MYcMRbBC303dbBXUtRGHCXkH8nQIAAAQIECBAgQIAAAQIECFyRgDCgT7OFAY/2YnTYcGr3u9Sx1Juftn8mIl6MiC9OvYgz33dpEHPEWwQtdMs6GP28hjNb9cS3CwPWkjQPAQIECBAgQIAAAQIECBAgQOAAAsKAPk0UBggDTl2NlYf7nnqOSwOQLyMibxV0tFsELW7LtzJmuL6l1lN7/s33+f/DpXLGESBAgAABAgQIECBAgAABAgQaCtjs6dMUYcCjvVjuP5+fhM/N172OlyLi05tP4een8fc+OocBW9zCaE//mZ4bIAzYc6U4NwECBAgQIECAAAECBAgQIECgmYAwoE9DhAGP70WXzeUudaTSFmHACxHx+ZkByBKa/CQi8vURjxl/To/YB9dEgAABAgQIECBAgAABAgQIECBwpoAw4EywgW9f7tHe5SG1p1zqpbeSOWXu5T1dNuG71JEuP4qI70bE6zevz/E8573nXvMW6+Gc+ke8VxgwQtWcBAgQIECAAAECBAgQIECAAAECwwWEAcOJTz7BjBupW9S8xafgT2lSPqj3+Yi4FxH5ANk9j602pM8NA96MiHciYqZA69w+bmV/bl3eT4AAAQIECBAgQIAAAQIECBAgQOCpAsKAPgtki431ta92i5q7hAFd6sgebrUhnc9qeOaMhwFvVdfa6/ic+ZbA4+2bPpwz1nsJECBAgAABAgQIECBAgAABAgQI7CYgDNiN/pETb7GxvvbVblHzhxHxyga3xLnL5hrDgHOv+RrCgC3W/F1r0b8TIECAAAECBAgQIECAAAECBAgQOFtAGHA22bABM24yblFzlw3mdyPijYjo8Inw5fkS70dEvh51CAMeld1izY/qp3kJECBAgAABAgQIECBAgAABAgSuWEAY0Kf5M24yblFzlzCgSx25Yrdwz/Ms38p47eb1XT8t13ALna2CmLus/TsBAgQIECBAgAABAgQIECBAgACBswSEAWdxDX3zVhu8a17EFjUvm68fRcSraxZ/5lxLGNDh4bhbuCfPuQHIVnWd2bpV336uyaonL072bER86xtzfFKc03ACBAgQIECAAAECBAgQIECAAIFJBIQBfRo140bqFjVvcY5TVkGXOrLWrWo5d+N7q7pO6deo9/woIr7b4BkW51xfBmpZc/bnccdnEZHXlbedyodGOwgQIECAAAECBAgQIECAAAECBA4oIAzo09SXIuLTiMiNuXt9ynpqJVts/m5xjlO4u9SRteYnvL+82bh97pTiL3zPctufU78NsRjNtIbPpTn3OQrnzr/m+/ObNO9ExAu3J/21m+8GfP7TiH/8x4dOl0FABkDZbwcBAgQIECBAgAABAgQIECBAgMDBBIQBvRr6TzflzNKXLTbIl43vLp3a+3ZFi8MWa+WS/uaG8jMRkSHFET9lniFMrsnu17c88Dp+9Z9FfP8P4v7fL/7Lh3+Mfv73Ef/7JxH/6398/ffNkc+KeP2g/evye0QdBAgQIECAAAECBAgQIECAAIHNBWbZdN4cZqcTbrHBu+alXbJZfMn5F5dLxq49psvPzBZr5ZL+Lg8dzs3kvPXMkY78hP3nNxfUZR08zne5lVH81m9H/M7vRvzyr9zdhr/8i4j8c3PktzteFgjc7eYdBAgQIECAAAECBAgQIECAAIFZBDpvaM1iuGadW2zwrlnvJZvFl5z/6J82v8Rki7VySX+XWwvl/efzXvVHOma4tuU5D/Enfxax3BLo1CbkrYP+9AcRP/+H+yMyVMhQx0GAAAECBAgQIECAAAECBAgQIHAAAWFAryZuscG75hVfsll8yflnuk/7Jdd3yZj85Hbe/T2fL5GvRx3nrsnl2RdfRMSLo4raad58pkde32sRkd+A6HY8+ObC9/9dxG/9m8vKy9sF/ad//2Bs12u97OKMIkCAAAECBAgQIECAAAECBAhcsYAwoFfzz9143bt6YcB+HdgqILlkTS7f5MgwIEOBIxzLRvsvbp4Z0PGa7q+J/DZAfiugcvy3/xLx1391f4YjhjoVGmMJECBAgAABAgQIECBAgAABAtMKCAN6te6Sjdc9r2CrMGC5B/oR70N/af86hwHLw2uPdKug7rcIevCtgP/+4WnPCHjawvvH/xvx1u89uF2Qn7tLf0qNI0CAAAECBAgQIECAAAECBAg0EhAGNGpGRAgDHt+P5T7ob0dEvnZEbBUGXHKe2w/aPcq3A/LBwXldXW+bcz+sWONbAcsP160HCh8p1PG7gwABAgQIECBAgAABAgQIECBwtQLCgF6tn+1BuVt9M0AY8Og6XT59PzoguSQMyGqXb3McYSN5WX8/uwkEev3W+LqafIbBK7/zuxH5Z43jb//m64cJu1XQGprmIECAAAECBAgQIECAAAECBAjsLyAM2L8Htyu4dON1r6vYKgx4NSI+iIiPIiJfO77+hkRu1XYNA47y7YBnIyK/FZB/vxxffyOj43H/d8cfvR3x67+xTnmf/zTird9/MJf/V6zDahYCBAgQIECAAAECBAgQIECAwG4CNnh2o3/siYUBj+/HVqFDr9Xw9Gq2CgMq51m+HZDrOjfSZzyWa+geRN3/3ZEPDs5bBa11vPqbwoC1LM1DgAABAgQIECBAgAABAgQIENhbQBiwdwcePr8w4OlhwGcRca9Xy3arprJJf07RlfPkp+m/iIhnIuK9iMj72s90LCHULyLipZtr6Vr/6mFAPkT43/7/7+H4f0XXzquLAAECBAgQIECAAAECBAgQIHCigA2eE6E2epsw4MnQsz1cefSS2erbEpUwIA1yE/3TG4yuD999XK/yNkdZdwYao2/FtMZauf+7Y9AzAzo/K2ENO3MQIECAAAECBAgQIECAAAECBK5CQBjQq83CAGHAqStyqzBgjec15DcC3omIfEB2frMjvy3Q+cgA4OObIOOTiEjr7sf90OZf/euIP/yP65T6l38RkX88q2MdT7MQIECAAAECBAgQIECAAAECBPYWEAbs3YGHzy8MeHI/ciM5bzfz4gSbyVusqq3CgLXO82FEvBIReaunfH5A9rPjcTsI+MlNENC11tt+9/v0q/884p3/GvHLv1Knfev3Ij7/u/vzvB4R+ewEBwECBAgQIECAAAECBAgQIECAwMQCwoBezRMGPLkfs9mMXllrbdLfVeda58lN9uxhPt42A4G8ZVDHbwh8EBH5bYiZgoClh+n5/G/9dsT3/+Cutj793//2byL+9Af33/N/cs7G4U3tQo0mQIAAAQIECBAgQIAAAQIECFyRgDCgV7OXT0/nJ6dz47T7sdZG8SnXKQx4VGmL5yjkJv6XN5vBz53SqKe853YgkJ+2z3WewUCHI2vLICDXdD4wOP/uUtupPt+LiB/mm//kzyJ+LWOXC46f/33EW78fkQ8QnuR5CRdcpSEECBAgQIAAAQIECBAgQIAAgesTEAb06nn1Ya1bX82WYUDepuS7EfFWRLy79YU2Pd8WYUBe+prnyU33DL2+fRMwdAgE8iHH+YyArG3WIGBZovcDxRf/RcQfvR2Rtw0697h1e6AZvx1x7uV6PwECBAgQIECAAAECBAgQIEDgagSEAb1aLQx4cj9ms9liZa25Sf+0ekecZwl38rzZ2/d2uhXNG7fCpXxYcN4iaIZnBDypXw++fZHPDfjD/xDx679x2lL8/KcRf/6fHzwnYPZQ5LSL9i4CBAgQIECAAAECBAgQIECAwBUJCAN6NXu2De8tvxkwm80WK2t5qHLevmfkBnbeLidvOnNv5Vvn5Dc8cjM+j7zffX7rIz/ZvsWRazfvip9/55FhxJtbnHiDc9y+HVPkMwTyz5O+JZC3A/rrv4r4y794UJkgYIMmOQUBAgQIECBAgAABAgQIECBAYGsBYcDW4k8/32wb3luGAVueq9eqeHI1Wz1HYeR5sq8ZCix3uM9zvT7w4cIv3NxXfwkBcuM777W/VQix1drKQCBd89Za94/8pkA+RyBvIZTHz/8hIr8N8PnfPVTSEb4dsZWx8xAgQIAAAQIECBAgQIAAAQIEphIQBvRqlzDgyf0QBjxqM3KT/vbZtjhPbsjn5vUzNyfObyPkrYQ+WiEYyI3xfEZB3gIoz5NHhgB5vvwz8lsVe/+GyZ+b/MbDK3cUkiFA/v6Z4cHle5s6PwECBAgQIECAAAECBAgQIEBgSgFhQK+2CQOe3I98yOunN7epydvVOL7euM1N7nwI78hN3OX+/vmJ/Xw96shN+/wZyA37JRTIc2UwkJ/cX64xN67vOtIl10wGAMu3AHLMtYQA3/RJ23RIk9tH3p4pXfNvBwECBAgQIECAAAECBAgQIECAwIEFhAG9misMeHo/RjzIttcKOK+a3CDPT3y/Nvg2N3usy9zEX/7cDgYWofw0f4YEt4/c6M5N78cdGSCkV/6x8X3eOvNuAgQIECBAgAABAgQIECBAgACBAwgIA3o1cY9N14rA1rfuEQY83K2t1stW53nSWsxQIDf6c73lZv/yfIGnrd3c/M9N/+UbBUe+FVDlZ9hYAgQIECBAgAABAgQIECBAgACBKxEQBvRq9Nab69Wr37re3Nx9PiJe9Onu+63bapM+b9vzw4h4/9Y996trpzo+Q4Fv3vImvylg078qazwBAgQIECBAgAABAgQIECBAgMAhBYQBvdq69eZ69eq3rnere+RXXbYav1UYsHWft/JzHgIECBAgQIAAAQIECBAgQIAAAQJXIyAM6NXq2TZdt65XGPDwen0zIt7Z4BP7W/e510+laggQIECAAAECBAgQIECAAAECBAgcQEAY0KuJs226vhARn9/csidv3TP6eDci3oiIt29ukTP6fN3n32q9LH3O+/DnOR0ECBAgQIAAAQIECBAgQIAAAQIECEwmIAzo1bCtNnfXvOotH+q71W1x1vQZOdeM62Wkh7kJECBAgAABAgQIECBAgAABAgQIEHiCgDCg19KYcXN3jzDgvYjIW+Rc+zHjern2nrl+AgQIECBAgAABAgQIECBAgAABArsICAN2YX/iSWfc3N0yDJjRZ+QKc/uekbrmJkCAAAECBAgQIECAAAECBAgQIHAgAWFAr2bOuNktDOi1hlRDgAABAgQIECBAgAABAgQIECBAgACBRwSEAf0WRW6ufxURz/Ur7bEVbRkGvBQRn97h8uM7/v2LmwceP+1td83xsxPmmKR9yiRAgAABAgQIECBAgAABAgQIECBA4BoEhAHX0OVjXeOzEfFlk0vy89OkEcogQIAAAQIECBAgQIAAAQIECBAgQODpAjYzrZCjCeStlp525H3288/TjlPmyFAi/zgIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oTQPl/gAAIABJREFUAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAj8v/bsmAYAAIZhGH/WBZGnhwFUmrwzBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAF8ZnUEAAAJUUlEQVQCBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FBiixdxoC93XVAAAAAElFTkSuQmCC"; diff --git a/packages/showcase/src/stores/config.ts b/packages/showcase/src/stores/config.ts index 817aaa0d..5b6c1a0e 100644 --- a/packages/showcase/src/stores/config.ts +++ b/packages/showcase/src/stores/config.ts @@ -1,17 +1,64 @@ import { Types } from "react-sketch"; -import { makeAutoObservable } from "mobx"; +import { makeAutoObservable, observableRef } from "mobx"; + +/** + * The usage scenarios of the component, each one is shown in its own tab + */ +export type Scenario = + "playground" | "default-value" | "controlled-value" | "add-img"; export interface Config { + scenario: Scenario; selectedTool: Types.Tool | string; + lineColor: string; lineWidth: number; + fillWithColor: boolean; + fillColor: string; + opacity: number; + fillWithBackgroundColor: boolean; + backgroundColor: string; + controlledSize: boolean; + sketchWidth: number; + sketchHeight: number; + stretched: boolean; + stretchedX: boolean; + stretchedY: boolean; + text: string; + imageUrl: string; + controlledValue: object | undefined; + forceValue: boolean; + canUndo: boolean; + canRedo: boolean; + drawings: string[]; } export class ConfigStore implements Config { + public scenario: Scenario = "playground"; public selectedTool = "line"; + public lineColor = "#000000"; public lineWidth = 1; + public fillWithColor = false; + public fillColor = "#68ccca"; + public opacity = 1; + public fillWithBackgroundColor = false; + public backgroundColor = "#ffffff"; + public controlledSize = false; + public sketchWidth = 600; + public sketchHeight = 600; + public stretched = true; + public stretchedX = false; + public stretchedY = false; + public text = "a text, cool!"; + public imageUrl = "https://files.gamebanana.com/img/ico/sprays/4ea2f4dad8d6f.png"; + public controlledValue: object | undefined = undefined; + public forceValue = true; + public canUndo = false; + public canRedo = false; + public drawings: string[] = []; constructor() { - makeAutoObservable(this); + // The controlled value is handed to the canvas as is, do not wrap it in a proxy + makeAutoObservable(this, { controlledValue: observableRef }); } } diff --git a/packages/showcase/src/utils/files.ts b/packages/showcase/src/utils/files.ts new file mode 100644 index 00000000..b4447ca2 --- /dev/null +++ b/packages/showcase/src/utils/files.ts @@ -0,0 +1,30 @@ +/** + * Read a file as a data URL + */ +export const readAsDataUrl = (file: File): Promise => + new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.addEventListener("load", () => resolve(String(reader.result))); + reader.addEventListener("error", () => reject(reader.error)); + reader.readAsDataURL(file); + }); + +/** + * Trigger the browser download of the given url (a data or object url) + */ +export const downloadUrl = (url: string, filename: string): void => { + const link = document.createElement("a"); + link.href = url; + link.download = filename; + link.click(); +}; + +/** + * Trigger the browser download of the given text + */ +export const downloadText = (text: string, filename: string): void => { + const url = URL.createObjectURL(new Blob([text], { type: "application/json" })); + downloadUrl(url, filename); + // Some browsers start the download asynchronously + setTimeout(() => URL.revokeObjectURL(url), 1000); +}; From 4f385eee2024a9f24ae63d642df2d4009ec22df4 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:05:16 +0300 Subject: [PATCH 37/70] Showcase tools panel for all tools and drawing options Tool selector with select, pencil, line, arrow, rectangle, rectangle label, circle, pan and highlighter. Line width and opacity sliders, line and fill color (native color input), controlled canvas width and height, background color and image (file input or drag and drop, stretch X/Y), text and image from URL sections. Panels that only need props are wired; text, image and background image call the ref API stub. --- .../src/components/Tools/Background/index.tsx | 159 ++++++++++++++++++ .../src/components/Tools/CanvasSize/index.tsx | 55 ++++++ .../src/components/Tools/ColorField/index.tsx | 45 +++++ .../components/Tools/ColorSelector/index.tsx | 37 ++++ .../components/Tools/ImageControls/index.tsx | 32 ++++ .../components/Tools/LabeledSlider/index.tsx | 47 ++++++ .../src/components/Tools/Section/index.tsx | 46 +++++ .../components/Tools/TextControls/index.tsx | 33 ++++ .../components/Tools/ToolSelector/index.tsx | 84 ++++----- .../showcase/src/components/Tools/index.tsx | 61 ++++++- 10 files changed, 549 insertions(+), 50 deletions(-) create mode 100644 packages/showcase/src/components/Tools/Background/index.tsx create mode 100644 packages/showcase/src/components/Tools/CanvasSize/index.tsx create mode 100644 packages/showcase/src/components/Tools/ColorField/index.tsx create mode 100644 packages/showcase/src/components/Tools/ColorSelector/index.tsx create mode 100644 packages/showcase/src/components/Tools/ImageControls/index.tsx create mode 100644 packages/showcase/src/components/Tools/LabeledSlider/index.tsx create mode 100644 packages/showcase/src/components/Tools/Section/index.tsx create mode 100644 packages/showcase/src/components/Tools/TextControls/index.tsx diff --git a/packages/showcase/src/components/Tools/Background/index.tsx b/packages/showcase/src/components/Tools/Background/index.tsx new file mode 100644 index 00000000..b0c6c11d --- /dev/null +++ b/packages/showcase/src/components/Tools/Background/index.tsx @@ -0,0 +1,159 @@ +import { useState } from "react"; +import type { DragEvent, ReactElement } from "react"; +import Box from "@mui/material/Box"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import Switch from "@mui/material/Switch"; +import Typography from "@mui/material/Typography"; +import { CONFIG, type Config } from "../../../stores/config"; +import { readAsDataUrl } from "../../../utils/files"; +import { withSketch } from "../../Canvas/api"; +import ColorField from "../ColorField"; +import Section from "../Section"; + +type BackgroundProps = Pick< + Config, + | "fillWithBackgroundColor" + | "backgroundColor" + | "stretched" + | "stretchedX" + | "stretchedY" +>; + +const visuallyHidden = { + position: "absolute", + width: 1, + height: 1, + overflow: "hidden", + clip: "rect(0 0 0 0)", + clipPath: "inset(50%)", + whiteSpace: "nowrap", +} as const; + +/** + * Use the first image of the files as the background of the canvas + */ +const setBackgroundImage = async (files: FileList | null): Promise => { + const image = Array.from(files ?? []).find((file) => + file.type.startsWith("image/") + ); + if (image) { + const dataUrl = await readAsDataUrl(image); + const { stretched, stretchedX, stretchedY } = CONFIG; + // TODO(part2): setBackgroundFromDataUrl is wired to the library ref API + withSketch((sketch) => + sketch.setBackgroundFromDataUrl(dataUrl, { + stretched, + stretchedX, + stretchedY, + originX: "left", + originY: "top", + }) + ); + } +}; + +const DropArea = (): ReactElement => { + const [active, setActive] = useState(false); + + const handleDrop = (event: DragEvent) => { + event.preventDefault(); + setActive(false); + void setBackgroundImage(event.dataTransfer.files); + }; + + return ( + { + event.preventDefault(); + setActive(true); + }} + onDragLeave={() => setActive(false)} + onDrop={handleDrop} + sx={{ + display: "block", + p: 2, + textAlign: "center", + cursor: "pointer", + border: "2px dashed", + borderStyle: active ? "solid" : "dashed", + borderColor: active ? "primary.main" : "text.disabled", + borderRadius: 1, + "&:focus-within": { outline: "2px solid", outlineColor: "primary.main" }, + }}> + + Try dropping an image here, or click to select an image as background. + + { + void setBackgroundImage(event.target.files); + event.target.value = ""; + }} + /> + + ); +}; + +const Background = (props: BackgroundProps): ReactElement => { + return ( +
+ + (CONFIG.fillWithBackgroundColor = event.target.checked) + } + /> + } + /> + (CONFIG.backgroundColor = color)} + /> + + Set Image Background + + (CONFIG.stretched = event.target.checked)} + /> + } + /> + (CONFIG.stretchedX = event.target.checked)} + /> + } + /> + (CONFIG.stretchedY = event.target.checked)} + /> + } + /> + +
+ ); +}; + +export default Background; diff --git a/packages/showcase/src/components/Tools/CanvasSize/index.tsx b/packages/showcase/src/components/Tools/CanvasSize/index.tsx new file mode 100644 index 00000000..8cf64fca --- /dev/null +++ b/packages/showcase/src/components/Tools/CanvasSize/index.tsx @@ -0,0 +1,55 @@ +import type { ReactElement } from "react"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import Switch from "@mui/material/Switch"; +import { CONFIG, type Config } from "../../../stores/config"; +import LabeledSlider from "../LabeledSlider"; +import Section from "../Section"; + +type CanvasSizeProps = Pick< + Config, + "controlledSize" | "sketchWidth" | "sketchHeight" +>; + +/** + * Control the width and the height of the canvas from the outside + */ +const CanvasSize = (props: CanvasSizeProps): ReactElement => { + return ( +
+ (CONFIG.controlledSize = event.target.checked)} + /> + } + /> + (CONFIG.sketchWidth = value)} + /> + (CONFIG.sketchHeight = value)} + /> +
+ ); +}; + +export default CanvasSize; diff --git a/packages/showcase/src/components/Tools/ColorField/index.tsx b/packages/showcase/src/components/Tools/ColorField/index.tsx new file mode 100644 index 00000000..177bd7fd --- /dev/null +++ b/packages/showcase/src/components/Tools/ColorField/index.tsx @@ -0,0 +1,45 @@ +import type { ReactElement } from "react"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; + +interface ColorFieldProps { + label: string; + value: string; + disabled?: boolean; + onChange: (value: string) => void; +} + +/** + * Color picker based on the native color input, the value is a #rrggbb string + */ +const ColorField = ({ + label, + value, + disabled, + onChange, +}: ColorFieldProps): ReactElement => { + return ( + + onChange(event.target.value)} + sx={{ + width: 48, + height: 32, + p: 0, + border: 0, + background: "none", + cursor: "pointer", + }} + /> + {label} + {value} + + ); +}; + +export default ColorField; diff --git a/packages/showcase/src/components/Tools/ColorSelector/index.tsx b/packages/showcase/src/components/Tools/ColorSelector/index.tsx new file mode 100644 index 00000000..e47dfeed --- /dev/null +++ b/packages/showcase/src/components/Tools/ColorSelector/index.tsx @@ -0,0 +1,37 @@ +import type { ReactElement } from "react"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import Switch from "@mui/material/Switch"; +import { CONFIG, type Config } from "../../../stores/config"; +import ColorField from "../ColorField"; +import Section from "../Section"; + +type ColorSelectorProps = Pick; + +const ColorSelector = (props: ColorSelectorProps): ReactElement => { + return ( +
+ (CONFIG.lineColor = color)} + /> + (CONFIG.fillWithColor = event.target.checked)} + /> + } + /> + (CONFIG.fillColor = color)} + /> +
+ ); +}; + +export default ColorSelector; diff --git a/packages/showcase/src/components/Tools/ImageControls/index.tsx b/packages/showcase/src/components/Tools/ImageControls/index.tsx new file mode 100644 index 00000000..9a767295 --- /dev/null +++ b/packages/showcase/src/components/Tools/ImageControls/index.tsx @@ -0,0 +1,32 @@ +import type { ReactElement } from "react"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { CONFIG, type Config } from "../../../stores/config"; +import { withSketch } from "../../Canvas/api"; +import Section from "../Section"; + +const ImageControls = ({ imageUrl }: Pick): ReactElement => { + // TODO(part2): addImg is wired to the library ref API + const addImage = () => withSketch((sketch) => sketch.addImg(CONFIG.imageUrl)); + + return ( +
+ + (CONFIG.imageUrl = event.target.value)} + /> + + +
+ ); +}; + +export default ImageControls; diff --git a/packages/showcase/src/components/Tools/LabeledSlider/index.tsx b/packages/showcase/src/components/Tools/LabeledSlider/index.tsx new file mode 100644 index 00000000..baef28ec --- /dev/null +++ b/packages/showcase/src/components/Tools/LabeledSlider/index.tsx @@ -0,0 +1,47 @@ +import { useId } from "react"; +import type { ReactElement, ReactNode } from "react"; +import Slider from "@mui/material/Slider"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; + +interface LabeledSliderProps { + label: string; + value: number; + min?: number; + max?: number; + step?: number; + disabled?: boolean; + startIcon?: ReactNode; + endIcon?: ReactNode; + onChange: (value: number) => void; +} + +/** + * A single value slider with a label and optional icons at both ends + */ +const LabeledSlider = (props: LabeledSliderProps): ReactElement => { + const labelId = useId(); + const { label, startIcon, endIcon, onChange, ...slider } = props; + + return ( + <> + + {label} + + + {startIcon} + + onChange(Array.isArray(value) ? value[0] : value) + } + /> + {endIcon} + + + ); +}; + +export default LabeledSlider; diff --git a/packages/showcase/src/components/Tools/Section/index.tsx b/packages/showcase/src/components/Tools/Section/index.tsx new file mode 100644 index 00000000..340d1915 --- /dev/null +++ b/packages/showcase/src/components/Tools/Section/index.tsx @@ -0,0 +1,46 @@ +import type { ReactElement, ReactNode } from "react"; +import Accordion from "@mui/material/Accordion"; +import AccordionSummary from "@mui/material/AccordionSummary"; +import AccordionDetails from "@mui/material/AccordionDetails"; +import Chip from "@mui/material/Chip"; +import Typography from "@mui/material/Typography"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; + +interface SectionProps { + id: string; + title: string; + /** Short summary of the current value, shown next to the title */ + chip?: string; + defaultExpanded?: boolean; + children: ReactNode; +} + +/** + * A collapsible panel of the tools + */ +const Section = ({ + id, + title, + chip, + defaultExpanded, + children, +}: SectionProps): ReactElement => { + return ( + + } + aria-controls={`${id}-content`} + id={`${id}-header`}> + + {title}   + + {chip && ( + + )} + + {children} + + ); +}; + +export default Section; diff --git a/packages/showcase/src/components/Tools/TextControls/index.tsx b/packages/showcase/src/components/Tools/TextControls/index.tsx new file mode 100644 index 00000000..30eb74da --- /dev/null +++ b/packages/showcase/src/components/Tools/TextControls/index.tsx @@ -0,0 +1,33 @@ +import type { ReactElement } from "react"; +import AddIcon from "@mui/icons-material/Add"; +import IconButton from "@mui/material/IconButton"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import { CONFIG, type Config } from "../../../stores/config"; +import { withSketch } from "../../Canvas/api"; +import Section from "../Section"; + +const TextControls = ({ text }: Pick): ReactElement => { + // TODO(part2): addText is wired to the library ref API + const addText = () => withSketch((sketch) => sketch.addText(CONFIG.text)); + + return ( +
+ + (CONFIG.text = event.target.value)} + /> + + + + +
+ ); +}; + +export default TextControls; diff --git a/packages/showcase/src/components/Tools/ToolSelector/index.tsx b/packages/showcase/src/components/Tools/ToolSelector/index.tsx index 81821c91..1fb2e569 100644 --- a/packages/showcase/src/components/Tools/ToolSelector/index.tsx +++ b/packages/showcase/src/components/Tools/ToolSelector/index.tsx @@ -1,57 +1,59 @@ import type { MouseEvent, ReactElement } from "react"; +import { Types } from "react-sketch"; +import SelectIcon from "@mui/icons-material/NearMe"; import PenIcon from "@mui/icons-material/Gesture"; import LineIcon from "@mui/icons-material/Straighten"; -import Chip from "@mui/material/Chip"; +import ArrowIcon from "@mui/icons-material/NorthEast"; +import RectangleIcon from "@mui/icons-material/CropSquare"; +import RectangleLabelIcon from "@mui/icons-material/Label"; +import CircleIcon from "@mui/icons-material/RadioButtonUnchecked"; +import PanIcon from "@mui/icons-material/PanTool"; +import HighlighterIcon from "@mui/icons-material/Highlight"; import ToggleButton from "@mui/material/ToggleButton"; import ToggleButtonGroup from "@mui/material/ToggleButtonGroup"; -import Typography from "@mui/material/Typography"; -import Accordion from "@mui/material/Accordion"; -import AccordionSummary from "@mui/material/AccordionSummary"; -import AccordionDetails from "@mui/material/AccordionDetails"; -import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import Section from "../Section"; interface ToolSelectorProps { selected: string; onChange?: (event: MouseEvent, value: string | null) => void; } -const ToolSelector = (props: ToolSelectorProps): ReactElement => { - const toolset = [ - - - , - - - , - ]; +const TOOLS = [ + { value: Types.Tool.SELECT, label: "Select", icon: }, + { value: Types.Tool.PENCIL, label: "Pencil", icon: }, + { value: Types.Tool.LINE, label: "Line", icon: }, + { value: Types.Tool.ARROW, label: "Arrow", icon: }, + { value: Types.Tool.RECTANGLE, label: "Rectangle", icon: }, + { + value: Types.Tool.RECTANGLE_LABEL, + label: "Rectangle label", + icon: , + }, + { value: Types.Tool.CIRCLE, label: "Circle", icon: }, + { value: Types.Tool.PAN, label: "Pan", icon: }, + { value: Types.Tool.HIGHLIGHTER, label: "Highlighter", icon: }, +]; +const ToolSelector = (props: ToolSelectorProps): ReactElement => { return ( - - } - aria-controls="panel1a-content" - id="panel1a-header"> - - Canvas Tool   - - - - - - {toolset} - - - +
+ + {TOOLS.map((tool) => ( + + {tool.icon} + + ))} + +
); }; diff --git a/packages/showcase/src/components/Tools/index.tsx b/packages/showcase/src/components/Tools/index.tsx index 9cf5ad68..7c97e27c 100644 --- a/packages/showcase/src/components/Tools/index.tsx +++ b/packages/showcase/src/components/Tools/index.tsx @@ -1,8 +1,16 @@ import type { MouseEvent, ReactElement } from "react"; -import ToolSelector from "./ToolSelector"; +import AddIcon from "@mui/icons-material/Add"; +import RemoveIcon from "@mui/icons-material/Remove"; import Paper from "@mui/material/Paper"; import { CONFIG, type Config } from "../../stores/config"; -import LineWidth from "./LineWidth"; +import Background from "./Background"; +import CanvasSize from "./CanvasSize"; +import ColorSelector from "./ColorSelector"; +import ImageControls from "./ImageControls"; +import LabeledSlider from "./LabeledSlider"; +import Section from "./Section"; +import TextControls from "./TextControls"; +import ToolSelector from "./ToolSelector"; /** * Handle the selection of the Sketch tool @@ -16,17 +24,52 @@ const handleSelectTool = (event: MouseEvent, value: string | null) } }; -const handleLineWidth = (event: Event, value: number | number[]) => { - if (!Array.isArray(value)) { - CONFIG.lineWidth = value; - } -}; - const SketchTools = (props: Config): ReactElement => { return ( - +
+ } + endIcon={} + onChange={(value) => (CONFIG.lineWidth = value)} + /> + (CONFIG.opacity = value)} + /> +
+ + + + +
); }; From 29c72d23669ac917a24af96518f4075620c048fd Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:05:17 +0300 Subject: [PATCH 38/70] Showcase canvas: scenario tabs, actions toolbar and saved drawings Tabs for the playground and the defaultValue, controlled value with forceValue and addImg scenarios. Toolbar with undo, redo, copy, paste, delete selected, zoom, save, download and clear. Saved drawings are shown below the canvas. Ref based handlers are marked TODO(part2). --- .../components/Canvas/CanvasActions/index.tsx | 142 ++++++++++++++++++ .../src/components/Canvas/Drawings/index.tsx | 46 ++++++ .../src/components/Canvas/Scenarios/index.tsx | 107 +++++++++++++ .../showcase/src/components/Canvas/index.tsx | 46 +++++- 4 files changed, 340 insertions(+), 1 deletion(-) create mode 100644 packages/showcase/src/components/Canvas/CanvasActions/index.tsx create mode 100644 packages/showcase/src/components/Canvas/Drawings/index.tsx create mode 100644 packages/showcase/src/components/Canvas/Scenarios/index.tsx diff --git a/packages/showcase/src/components/Canvas/CanvasActions/index.tsx b/packages/showcase/src/components/Canvas/CanvasActions/index.tsx new file mode 100644 index 00000000..8f0d5c2f --- /dev/null +++ b/packages/showcase/src/components/Canvas/CanvasActions/index.tsx @@ -0,0 +1,142 @@ +import type { ReactElement, ReactNode } from "react"; +import { Types } from "react-sketch"; +import UndoIcon from "@mui/icons-material/Undo"; +import RedoIcon from "@mui/icons-material/Redo"; +import CopyIcon from "@mui/icons-material/ContentCopy"; +import PasteIcon from "@mui/icons-material/ContentPaste"; +import RemoveSelectedIcon from "@mui/icons-material/Delete"; +import ZoomInIcon from "@mui/icons-material/ZoomIn"; +import ZoomOutIcon from "@mui/icons-material/ZoomOut"; +import SaveIcon from "@mui/icons-material/Save"; +import DownloadIcon from "@mui/icons-material/Download"; +import ClearIcon from "@mui/icons-material/DeleteSweep"; +import Divider from "@mui/material/Divider"; +import IconButton from "@mui/material/IconButton"; +import Stack from "@mui/material/Stack"; +import { CONFIG, type Config } from "../../../stores/config"; +import { downloadText, downloadUrl } from "../../../utils/files"; +import { syncHistory, withSketch } from "../api"; + +type CanvasActionsProps = Pick; + +interface ActionProps { + label: string; + disabled?: boolean; + onClick: () => void; + children: ReactNode; +} + +const Action = ({ + label, + disabled, + onClick, + children, +}: ActionProps): ReactElement => ( + + {children} + +); + +// TODO(part2): all the handlers below call the library ref API through withSketch +const undo = () => + withSketch((sketch) => { + sketch.undo(); + syncHistory(sketch); + }); + +const redo = () => + withSketch((sketch) => { + sketch.redo(); + syncHistory(sketch); + }); + +const clear = () => + withSketch((sketch) => { + sketch.clear(); + sketch.setBackgroundFromDataUrl(""); + CONFIG.controlledValue = undefined; + CONFIG.fillWithBackgroundColor = false; + syncHistory(sketch); + }); + +const save = () => + withSketch((sketch) => { + CONFIG.drawings = [...CONFIG.drawings, sketch.toDataURL()]; + }); + +const download = () => + withSketch((sketch) => { + downloadUrl(sketch.toDataURL(), "toPNG.png"); + downloadText(JSON.stringify(sketch.toJSON()), "toDataJSON.json"); + }); + +const CanvasActions = ({ + canUndo, + canRedo, + selectedTool, +}: CanvasActionsProps): ReactElement => { + // Copy, paste and remove act on the selection, which is made with the select tool + const selecting = selectedTool === Types.Tool.SELECT; + + return ( + } + sx={{ flexWrap: "wrap", mb: 1 }}> + + + + + + + + + + withSketch((s) => s.copy())}> + + + withSketch((s) => s.paste())}> + + + withSketch((s) => s.removeSelected())}> + + + + + withSketch((s) => s.zoom(1.25))}> + + + withSketch((s) => s.zoom(0.8))}> + + + + + + + + + + + + + + + + ); +}; + +export default CanvasActions; diff --git a/packages/showcase/src/components/Canvas/Drawings/index.tsx b/packages/showcase/src/components/Canvas/Drawings/index.tsx new file mode 100644 index 00000000..c32bcc19 --- /dev/null +++ b/packages/showcase/src/components/Canvas/Drawings/index.tsx @@ -0,0 +1,46 @@ +import type { ReactElement } from "react"; +import ClearIcon from "@mui/icons-material/Clear"; +import Box from "@mui/material/Box"; +import IconButton from "@mui/material/IconButton"; +import Typography from "@mui/material/Typography"; +import { CONFIG, type Config } from "../../../stores/config"; + +/** + * The drawings saved with the save action + */ +const Drawings = ({ drawings }: Pick): ReactElement | null => { + if (drawings.length === 0) { + return null; + } + + return ( + <> + Saved drawings + + {drawings.map((drawing, index) => ( + + + + (CONFIG.drawings = drawings.filter((_, i) => i !== index)) + }> + + + + ))} + + + ); +}; + +export default Drawings; diff --git a/packages/showcase/src/components/Canvas/Scenarios/index.tsx b/packages/showcase/src/components/Canvas/Scenarios/index.tsx new file mode 100644 index 00000000..bf13c83a --- /dev/null +++ b/packages/showcase/src/components/Canvas/Scenarios/index.tsx @@ -0,0 +1,107 @@ +import type { ReactElement } from "react"; +import Button from "@mui/material/Button"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import Stack from "@mui/material/Stack"; +import Switch from "@mui/material/Switch"; +import Tab from "@mui/material/Tab"; +import Tabs from "@mui/material/Tabs"; +import Typography from "@mui/material/Typography"; +import controlledValue from "../../../data/controlledValue"; +import imageDataUrl from "../../../data/imageDataUrl"; +import { CONFIG, type Config, type Scenario } from "../../../stores/config"; +import { withSketch } from "../api"; + +const SCENARIOS: { value: Scenario; label: string }[] = [ + { value: "playground", label: "Playground" }, + { value: "default-value", label: "defaultValue" }, + { value: "controlled-value", label: "value + forceValue" }, + { value: "add-img", label: "addImg" }, +]; + +const selectScenario = (scenario: Scenario) => { + CONFIG.scenario = scenario; + // Every scenario starts on a fresh canvas + CONFIG.controlledValue = undefined; + CONFIG.canUndo = false; + CONFIG.canRedo = false; +}; + +const ScenarioTabs = ({ scenario }: Pick): ReactElement => ( + selectScenario(value)}> + {SCENARIOS.map(({ value, label }) => ( + + ))} + +); + +/** + * The description and the actions of the selected scenario + */ +const ScenarioControls = ({ + scenario, + forceValue, +}: Pick): ReactElement => { + switch (scenario) { + case "default-value": + return ( + + The canvas starts with the drawing of defaultValue (data.json.js). Later + changes of the drawing are kept. + + ); + case "controlled-value": + return ( + <> + + The drawing is controlled by the value prop (data.json.controlled.js). + With forceValue the value is applied again even when it did not change. + + + + (CONFIG.forceValue = event.target.checked)} + /> + } + /> + + + ); + case "add-img": + return ( + <> + + Add an image to the drawing from a data URL (data.url.js). To add an + image from a URL use the Images section of the tools. + + + + ); + default: + return ( + + Draw with the tools of the panel, no initial value. + + ); + } +}; + +export { ScenarioTabs, ScenarioControls }; diff --git a/packages/showcase/src/components/Canvas/index.tsx b/packages/showcase/src/components/Canvas/index.tsx index f74e2420..de001a5c 100644 --- a/packages/showcase/src/components/Canvas/index.tsx +++ b/packages/showcase/src/components/Canvas/index.tsx @@ -2,18 +2,62 @@ import type { ReactElement } from "react"; import { SketchField, Types } from "react-sketch"; import Paper from "@mui/material/Paper"; import { teal } from "@mui/material/colors"; +import defaultValue from "../../data/defaultValue"; import { Config } from "../../stores/config"; +import { sketchRef, syncHistory, withSketch, type SketchApi } from "./api"; +import CanvasActions from "./CanvasActions"; +import Drawings from "./Drawings"; +import { ScenarioControls, ScenarioTabs } from "./Scenarios"; + +// TODO(part2): SketchField does not expose the ref API in its types yet, remove the cast +const bindSketch = (instance: SketchField | null): void => { + sketchRef.current = instance as unknown as SketchApi | null; +}; const SketchCanvas = (props: Config): ReactElement => { const properties: Types.SketchProperties = { tool: props.selectedTool, + lineColor: props.lineColor, lineWidth: props.lineWidth, + fillColor: props.fillWithColor ? props.fillColor : "transparent", + backgroundColor: props.fillWithBackgroundColor + ? props.backgroundColor + : "transparent", + width: props.controlledSize ? props.sketchWidth : undefined, + height: props.controlledSize ? props.sketchHeight : undefined, autoresize: true, }; + // TODO(part2): these props are not part of Types.SketchProperties yet, move them to + // `properties` once the library types them + const upcoming = { + opacity: props.opacity, + onChange: () => withSketch(syncHistory), + ...(props.scenario === "default-value" && { defaultValue }), + ...(props.scenario === "controlled-value" && { + value: props.controlledValue, + forceValue: props.forceValue, + }), + }; + return ( - + + + + + ); }; From 645ca98db1ba4de15033e73474f979c46ff11f7b Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:11:29 +0300 Subject: [PATCH 39/70] history: type UndoHistory and drop its console debug output UndoHistory is now generic over the kept item. The debug flag and print() are gone: they were the last console.log of the history. --- .../SketchField/history/History.spec.ts | 6 +- .../components/SketchField/history/index.ts | 120 ++++++------------ 2 files changed, 43 insertions(+), 83 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/history/History.spec.ts b/packages/react-sketch/src/components/SketchField/history/History.spec.ts index bc25ebb8..27102bd6 100644 --- a/packages/react-sketch/src/components/SketchField/history/History.spec.ts +++ b/packages/react-sketch/src/components/SketchField/history/History.spec.ts @@ -18,9 +18,7 @@ describe("UndoHistory", () => { }); it("Can undo/redo object", () => { - // debug = true prints the history on every operation - const log = jest.spyOn(console, "log").mockImplementation(() => undefined); - const instance = new UndoHistory(15, true); + const instance = new UndoHistory(15); instance.keep("1"); instance.keep("2"); expect(instance.canUndo()).toBeTruthy(); @@ -30,8 +28,6 @@ describe("UndoHistory", () => { expect(instance.getCurrent()).toBeNull(); expect(instance.redo()).toEqual("1"); expect(instance.getCurrent()).toEqual("1"); - expect(log).toHaveBeenCalled(); - log.mockRestore(); }); it("Multiple undo/redo of objects", () => { diff --git a/packages/react-sketch/src/components/SketchField/history/index.ts b/packages/react-sketch/src/components/SketchField/history/index.ts index db1f3188..1b819e59 100644 --- a/packages/react-sketch/src/components/SketchField/history/index.ts +++ b/packages/react-sketch/src/components/SketchField/history/index.ts @@ -1,36 +1,32 @@ -// @ts-nocheck - -import { EventInput } from "../events"; -import { AbstractEventAware, CanvasEventAware } from "../tools"; - /** - * Maintains the history of an object + * Maintains the history of an object: the undo and redo stacks, limited to + * the given number of steps */ -export class UndoHistory extends AbstractEventAware { - constructor(undoLimit = 10, debug = false) { - super(); +export class UndoHistory { + private readonly undoLimit: number; + private undoList: T[] = []; + private redoList: T[] = []; + private current: T | null = null; + + constructor(undoLimit = 10) { this.undoLimit = undoLimit; - this.undoList = []; - this.redoList = []; - this.current = null; - this.debug = debug; } /** * Get the limit of undo/redo actions * - * @returns {number|*} the undo limit, as it is configured when constructing the history instance + * @returns the undo limit, as it is configured when constructing the history instance */ - getUndoLimit() { + getUndoLimit(): number { return this.undoLimit; } /** * Get Current state * - * @returns {null|*} + * @returns the last kept object, or null when the history is empty */ - getCurrent() { + getCurrent(): T | null { return this.current; } @@ -39,21 +35,17 @@ export class UndoHistory extends AbstractEventAware { * * This method will set the object as current value and will push the previous "current" object to the undo history * - * @param obj + * @param obj the object to keep */ - keep(obj) { - try { - this.redoList = []; - if (this.current) { - this.undoList.push(this.current); - } - if (this.undoList.length > this.undoLimit) { - this.undoList.shift(); - } - this.current = obj; - } finally { - this.print(); + keep(obj: T): void { + this.redoList = []; + if (this.current !== null) { + this.undoList.push(this.current); + } + if (this.undoList.length > this.undoLimit) { + this.undoList.shift(); } + this.current = obj; } /** @@ -61,23 +53,19 @@ export class UndoHistory extends AbstractEventAware { * * @returns the new current value after the undo operation, else null if no undo operation was possible */ - undo() { - try { - if (this.current) { - this.redoList.push(this.current); - if (this.redoList.length > this.undoLimit) { - this.redoList.shift(); - } - if (this.undoList.length === 0) this.current = null; + undo(): T | null { + if (this.current !== null) { + this.redoList.push(this.current); + if (this.redoList.length > this.undoLimit) { + this.redoList.shift(); } - if (this.undoList.length > 0) { - this.current = this.undoList.pop(); - return this.current; - } - return null; - } finally { - this.print(); + if (this.undoList.length === 0) this.current = null; + } + if (this.undoList.length > 0) { + this.current = this.undoList.pop() as T; + return this.current; } + return null; } /** @@ -85,59 +73,35 @@ export class UndoHistory extends AbstractEventAware { * * @returns the new current value after the redo operation, or null if no redo operation was possible */ - redo() { - try { - if (this.redoList.length > 0) { - if (this.current) this.undoList.push(this.current); - this.current = this.redoList.pop(); - return this.current; - } - return null; - } finally { - this.print(); + redo(): T | null { + if (this.redoList.length > 0) { + if (this.current !== null) this.undoList.push(this.current); + this.current = this.redoList.pop() as T; + return this.current; } + return null; } /** * Checks whether we can perform a redo operation - * - * @returns {boolean} */ - canRedo() { + canRedo(): boolean { return this.redoList.length > 0; } /** * Checks whether we can perform an undo operation - * - * @returns {boolean} */ - canUndo() { + canUndo(): boolean { return this.undoList.length > 0 || this.current !== null; } /** * Clears the history maintained, can be undone */ - clear() { + clear(): void { this.undoList = []; this.redoList = []; this.current = null; - this.print(); - } - - print() { - if (this.debug) { - /* eslint-disable no-console */ - console.log( - this.undoList, - " -> " + this.current + " <- ", - this.redoList.slice(0).reverse() - ); - } - } - - public onObjectAdded({ event, tool, props, state }: EventInput): void { - console.log("history added"); } } From 3457abbf22ce8434f9453600ea6ccecae62655e1 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:11:36 +0300 Subject: [PATCH 40/70] history: record added, modified and removed objects, and replay them on undo/redo SketchHistory keeps one entry per action (add, modify with its before/after state, remove) on top of UndoHistory, and applies them in both directions. Replacing the version counters of 0.5.x, this also fixes redo of a removal, and a modification made after an undo restoring a stale state. --- .../SketchField/history/SketchHistory.ts | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/history/SketchHistory.ts diff --git a/packages/react-sketch/src/components/SketchField/history/SketchHistory.ts b/packages/react-sketch/src/components/SketchField/history/SketchHistory.ts new file mode 100644 index 00000000..a3344273 --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/history/SketchHistory.ts @@ -0,0 +1,155 @@ +import { fabric } from "fabric"; +import { UndoHistory } from "./index"; + +/** + * One undoable action of the sketch + */ +type HistoryEntry = + | { action: "add"; object: fabric.Object } + | { action: "remove"; object: fabric.Object } + | { action: "modify"; object: fabric.Object; before: string; after: string }; + +/** State of an object, as JSON string */ +const stateOf = (object: fabric.Object): string => JSON.stringify(object.toJSON()); + +/** + * Records what happens to the objects of a canvas (added, modified, removed) + * and applies undo and redo on them. + */ +export class SketchHistory { + private readonly canvas: fabric.Canvas; + private readonly entries: UndoHistory; + /** Last known state of each object, it is the "before" of its next modification */ + private readonly snapshots = new WeakMap(); + /** The object added since the last mouse up, whose final state is not known yet */ + private pending: fabric.Object | null = null; + private applying = false; + + /** + * @param canvas the canvas to undo/redo on + * @param undoSteps number of steps to maintain + */ + constructor(canvas: fabric.Canvas, undoSteps: number) { + this.canvas = canvas; + this.entries = new UndoHistory(undoSteps); + } + + /** + * True while undo or redo add or remove an object. The additions made then + * are not new actions, so they are neither recorded nor announced. + */ + get replaying(): boolean { + return this.applying; + } + + /** + * Record an object added to the canvas + */ + onObjectAdded(object: fabric.Object): void { + this.snapshots.set(object, stateOf(object)); + this.pending = object; + this.entries.keep({ action: "add", object }); + } + + /** + * Record an object modified on the canvas. Objects which were not added + * through {@link onObjectAdded} (for example a multiple selection) are ignored. + */ + onObjectModified(object: fabric.Object): void { + const before = this.snapshots.get(object); + if (before === undefined) return; + const after = stateOf(object); + this.snapshots.set(object, after); + this.entries.keep({ action: "modify", object, before, after }); + } + + /** + * An object is added while the mouse is down (it is resized by the move of + * the mouse), so its state is only final on mouse up. + */ + onMouseUp(): void { + if (this.pending) { + this.snapshots.set(this.pending, stateOf(this.pending)); + this.pending = null; + } + } + + /** + * Record the removal of the objects and remove them from the canvas + */ + remove(objects: fabric.Object[]): void { + objects.forEach((object) => { + this.entries.keep({ action: "remove", object }); + this.canvas.remove(object); + }); + } + + /** + * Undo the last action + * + * @returns false when there was nothing to undo + */ + undo(): boolean { + const entry = this.entries.getCurrent(); + if (!entry) return false; + this.entries.undo(); + this.apply(entry, false); + return true; + } + + /** + * Redo the last undone action + * + * @returns false when there was nothing to redo + */ + redo(): boolean { + const entry = this.entries.redo(); + if (!entry) return false; + this.apply(entry, true); + return true; + } + + canUndo(): boolean { + return this.entries.canUndo(); + } + + canRedo(): boolean { + return this.entries.canRedo(); + } + + /** + * Forget everything recorded so far + */ + clear(): void { + this.entries.clear(); + this.pending = null; + } + + private apply(entry: HistoryEntry, forward: boolean): void { + const { object } = entry; + this.applying = true; + try { + switch (entry.action) { + case "add": + case "remove": + // redo of an add, and undo of a remove, put the object back + if ((entry.action === "add") === forward) { + this.canvas.add(object); + } else { + this.canvas.remove(object); + } + break; + case "modify": { + const state = forward ? entry.after : entry.before; + object.setOptions(JSON.parse(state)); + object.setCoords(); + this.snapshots.set(object, state); + break; + } + } + this.canvas.renderAll(); + } finally { + this.applying = false; + } + } +} From 8dae0d78cb7982d933ef1027bec01b96ca8ab939 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:11:37 +0300 Subject: [PATCH 41/70] resize: honor widthCorrection and heightCorrection, skip containers without size The corrections were dropped by the port. A hidden container (or no layout, as in jsdom) no longer collapses the objects to a zero scale. --- .../src/components/SketchField/resize.ts | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/resize.ts b/packages/react-sketch/src/components/SketchField/resize.ts index a561c899..163e9688 100644 --- a/packages/react-sketch/src/components/SketchField/resize.ts +++ b/packages/react-sketch/src/components/SketchField/resize.ts @@ -1,49 +1,48 @@ -// @ts-nocheck +import { fabric } from "fabric"; /** - * Track the resize of the window and update our state + * Fit the canvas to the size of its container, and scale the objects of the + * canvas by the same factors, so the drawing keeps its proportions. + * + * Nothing happens when the container has no size to fit to (it is hidden, or + * there is no layout), because the objects would collapse. * * @param canvas the fabric Canvas Instance - * @param container the HTMLDivElement we want to follow the resize with + * @param container the HTMLElement we want to follow the size of + * @param widthCorrection pixels subtracted from the width of the container + * @param heightCorrection pixels subtracted from the height of the container */ -import { fabric } from "fabric"; - export const autoresize = ( - canvas: fabric.Canvas | null, - container: HTMLDivElement | null + canvas: fabric.Canvas, + container: HTMLElement, + widthCorrection = 0, + heightCorrection = 0 ): void => { - const { offsetWidth, clientHeight } = container; + const width = container.offsetWidth - widthCorrection; + const height = container.clientHeight - heightCorrection; const prevWidth = canvas.getWidth(); const prevHeight = canvas.getHeight(); - const wfactor = parseFloat((offsetWidth / prevWidth).toFixed(2)); - const hfactor = parseFloat((clientHeight / prevHeight).toFixed(2)); - canvas.setWidth(offsetWidth); - canvas.setHeight(clientHeight); - if ("backgroundImage" in canvas) { - // Need to scale background images as well - const bi = canvas.backgroundImage; - if (bi instanceof fabric.Image) { - bi.width = bi.width * wfactor; - bi.height = bi.height * hfactor; - } + if (width <= 0 || height <= 0 || !prevWidth || !prevHeight) return; + + const wfactor = parseFloat((width / prevWidth).toFixed(2)); + const hfactor = parseFloat((height / prevHeight).toFixed(2)); + canvas.setWidth(width); + canvas.setHeight(height); + + // Need to scale background images as well + const bi = canvas.backgroundImage; + if (bi instanceof fabric.Image) { + bi.width = (bi.width ?? 0) * wfactor; + bi.height = (bi.height ?? 0) * hfactor; } - const objects = canvas.getObjects(); - for (const i in objects) { - const obj = objects[i]; - const scaleX = obj.scaleX; - const scaleY = obj.scaleY; - const left = obj.left; - const top = obj.top; - const tempScaleX = scaleX * wfactor; - const tempScaleY = scaleY * hfactor; - const tempLeft = left * wfactor; - const tempTop = top * hfactor; - obj.scaleX = tempScaleX; - obj.scaleY = tempScaleY; - obj.left = tempLeft; - obj.top = tempTop; + + canvas.getObjects().forEach((obj) => { + obj.scaleX = (obj.scaleX ?? 1) * wfactor; + obj.scaleY = (obj.scaleY ?? 1) * hfactor; + obj.left = (obj.left ?? 0) * wfactor; + obj.top = (obj.top ?? 0) * hfactor; obj.setCoords(); - } + }); canvas.renderAll(); canvas.calcOffset(); }; From 7b2b52b4b983835f9fffd25bed74cd54cfb098c9 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:11:37 +0300 Subject: [PATCH 42/70] pencil: use the regular pointer instead of the crosshair (#181) --- .../src/components/SketchField/tools/Pencil/Pencil.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/react-sketch/src/components/SketchField/tools/Pencil/Pencil.ts b/packages/react-sketch/src/components/SketchField/tools/Pencil/Pencil.ts index e307f747..ad2aba62 100644 --- a/packages/react-sketch/src/components/SketchField/tools/Pencil/Pencil.ts +++ b/packages/react-sketch/src/components/SketchField/tools/Pencil/Pencil.ts @@ -9,6 +9,8 @@ export class Pencil extends FabricCanvasTool { configureCanvas(config: SketchProperties): void { this.canvas.isDrawingMode = true; + // The regular pointer, not the crosshair of fabric (issue #181) + this.canvas.freeDrawingCursor = "default"; this.canvas.freeDrawingBrush.width = config.lineWidth ? config.lineWidth : 1; this.canvas.freeDrawingBrush.color = config.lineColor ? config.lineColor From edfe5f51467670ee2749337b7c62018a6569a257 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:11:38 +0300 Subject: [PATCH 43/70] chore: drop the unused prop-types dependency of react-sketch Props are typed with TypeScript, nothing imports prop-types any more. --- packages/react-sketch/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-sketch/package.json b/packages/react-sketch/package.json index f511703c..be60ebe7 100644 --- a/packages/react-sketch/package.json +++ b/packages/react-sketch/package.json @@ -37,8 +37,7 @@ }, "dependencies": { "csstype": "^3.2.3", - "fabric": "^4.4.0", - "prop-types": "^15.6.2" + "fabric": "^4.4.0" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || ^19.0.0" From 521472778eff9f9288b296008b13ae4d4d5ce0c7 Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:12:41 +0300 Subject: [PATCH 44/70] SketchField: API parity with 0.5.6, in TypeScript Props (legacy names and defaults: lineWidth 10, undoSteps 25, no-op callbacks, ...), methods (undo, redo, canUndo, canRedo, zoom, addImg, addText, toDataURL, toJSON, fromJSON, clear, copy, paste, removeSelected, hasSelection, clearSelection, setBackgroundFromDataUrl, enable/disableTouchScroll) and the reactivity of componentDidUpdate: tool, lineColor/lineWidth/fillColor (#114), backgroundColor (#87), width/height, controlled value with forceValue. - The events manager hands each canvas event to the tool, the history and the callbacks, in the order of 0.5.x. onChange keeps its legacy semantics. - The default tool is "select" (0.5.x had none: objects can be moved, nothing is drawn). The Highlighter cannot crash the component with a line color it cannot convert. - autoresize is implemented (window resize only, default true). - The resize listener is removed with the arguments it was added with, the canvas is disposed and pending timers are cleared on unmount. - No console output, no @ts-nocheck, no PropTypes, no dead declare module. - Types keep fabric out of the public declarations. - New named export Tools (legacy names). The default export is the component, which also carries SketchField and Tools, so import Sketch from "react-sketch" works for both uses. --- .../components/SketchField/SketchField.tsx | 608 +++++++++++++++--- .../src/components/SketchField/events.ts | 127 ++-- packages/react-sketch/src/index.ts | 13 +- packages/react-sketch/src/types.ts | 373 +++++------ 4 files changed, 784 insertions(+), 337 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/SketchField.tsx b/packages/react-sketch/src/components/SketchField/SketchField.tsx index 2cb82690..dbd19595 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.tsx @@ -1,134 +1,556 @@ import * as React from "react"; -import PropTypes from "prop-types"; import { PureComponent } from "react"; -import { autoresize } from "./resize"; import { fabric } from "fabric"; -import { SketchProperties, SketchState } from "../../types"; -import { create_tool } from "./tools/factory"; -import { EventCallback, FabricCanvasEventsManager } from "./events"; -import { CanvasEventAware, FabricCanvasTool } from "./tools"; +import { + BackgroundOptions, + DataUrlOptions, + ImageOptions, + SketchData, + SketchProperties, + SketchValue, + TextOptions, + Tool, +} from "../../types"; import { uuid4 } from "../../utils"; -import { UndoHistory } from "./history"; +import { FabricCanvasEventsManager, SketchEventAware } from "./events"; +import { SketchHistory } from "./history/SketchHistory"; +import { autoresize } from "./resize"; +import { FabricCanvasTool } from "./tools"; +import { create_tool } from "./tools/factory"; + +/** + * The properties which always have a value, because SketchField provides + * a default for them + */ +type DefaultedProps = Required< + Pick< + SketchProperties, + | "tool" + | "lineColor" + | "lineWidth" + | "fillColor" + | "backgroundColor" + | "opacity" + | "undoSteps" + | "widthCorrection" + | "heightCorrection" + | "forceValue" + | "autoresize" + | "onObjectAdded" + | "onObjectModified" + | "onObjectRemoved" + | "onMouseDown" + | "onMouseMove" + | "onMouseUp" + | "onMouseOut" + | "onObjectMoving" + | "onObjectScaling" + | "onObjectRotating" + > +>; + +const defaultProps: DefaultedProps = { + tool: Tool.SELECT, + lineColor: "black", + lineWidth: 10, + fillColor: "transparent", + backgroundColor: "transparent", + opacity: 1.0, + undoSteps: 25, + widthCorrection: 0, + heightCorrection: 0, + forceValue: false, + autoresize: true, + onObjectAdded: () => undefined, + onObjectModified: () => undefined, + onObjectRemoved: () => undefined, + onMouseDown: () => undefined, + onMouseMove: () => undefined, + onMouseUp: () => undefined, + onMouseOut: () => undefined, + onObjectMoving: () => undefined, + onObjectScaling: () => undefined, + onObjectRotating: () => undefined, +}; /** * Sketch Tool based on FabricJS for React Applications + * + * The methods of the component (undo, redo, toJSON, ...) are available + * through a ref, from the moment the component is mounted. */ -class SketchField extends PureComponent { - private canvas!: fabric.Canvas | null; - private canvasEl!: HTMLCanvasElement | null; - private containerEl!: HTMLDivElement | null; - private tool!: FabricCanvasTool; +class SketchField extends PureComponent { + static defaultProps = defaultProps; - constructor(props: SketchProperties) { - super(props); - } + private canvas!: fabric.Canvas; + private tool!: FabricCanvasTool; + private history!: SketchHistory; + private mounted = false; + private clipboard: fabric.Object | null = null; + private readonly timers = new Set(); + private readonly canvasEl = React.createRef(); + private readonly containerEl = React.createRef(); + private readonly canvasId = uuid4(); - static defaultProps: SketchProperties = { - tool: "pencil", - lineColor: "black", - lineWidth: 1, + /** + * Listener function for the resize of canvas and objects + */ + private readonly _resize_listener = (): void => { + if (this.props.autoresize) this.resize(); }; - state = { - action: true, + /** + * Run the callback after the delay, unless the component is unmounted + * in the meantime + */ + private readonly schedule = (callback: () => void, delay: number): void => { + const id = window.setTimeout(() => { + this.timers.delete(id); + callback(); + }, delay); + this.timers.add(id); }; /** - * Listener function for the resize of canvas and objects - * @param event the UIEvent of resize event + * Whether the canvas is the one of the mounted component. It is not when a + * callback of the canvas runs after the component was unmounted. */ - private _resize_listener = (event: UIEvent): void => { - autoresize(this.canvas, this.containerEl); - }; + private isCurrent(canvas: fabric.Canvas): boolean { + return this.mounted && this.canvas === canvas; + } /** * Bind Canvas events with Component */ - private _bind_canvas_events(eventAware: CanvasEventAware): void { - // Helper declaration for all canvas events - const on = (name: string, callback: EventCallback): void => { - this.canvas?.on(name, (event: fabric.IEvent) => { - callback({ - event: event, - tool: this.tool, - props: this.props, - state: this.state, - }); - }); + private _bind_canvas_events(eventAware: SketchEventAware): void { + const events: Record = { + "mouse:up": "onMouseUp", + "mouse:down": "onMouseDown", + "mouse:move": "onMouseMove", + "mouse:out": "onMouseOut", + "object:added": "onObjectAdded", + "object:moved": "onObjectMoved", + "object:moving": "onObjectMoving", + "object:modified": "onObjectModified", + "object:removed": "onObjectRemoved", + "object:scaling": "onObjectScaling", + "object:rotating": "onObjectRotating", + "text:event:changed": "onTextChanged", + "text:editing:exited": "onTextEditingExited", + "text:editing:entered": "onTextEditingEntered", + "text:selection:changed": "onTextSelectionChanged", }; - // Fabric Events - on("mouse:up", eventAware.onMouseUp); - on("mouse:down", eventAware.onMouseDown); - on("mouse:move", eventAware.onMouseMove); - on("mouse:out", eventAware.onMouseOut); - on("object:moved", eventAware.onObjectMoved); - on("object:moving", eventAware.onObjectMoving); - on("object:modified", eventAware.onObjectModified); - on("object:removed", eventAware.onObjectRemoved); - on("object:scaling", eventAware.onObjectScaling); - on("object:rotating", eventAware.onObjectRotating); - on("text:event:changed", eventAware.onTextChanged); - on("text:editing:exited", eventAware.onTextEditingExited); - on("text:editing:entered", eventAware.onTextEditingEntered); - on("text:selection:changed", eventAware.onTextSelectionChanged); + Object.entries(events).forEach(([name, handler]) => { + this.canvas.on(name, (event: fabric.IEvent) => { + eventAware[handler]({ event, tool: this.tool, props: this.props }); + }); + }); } - componentDidMount = (): void => { - this.canvas = new fabric.Canvas(this.canvasEl); - this.tool = create_tool(this.canvas, this.props); - this.containerEl && autoresize(this.canvas, this.containerEl); - window && window.addEventListener("resize", this._resize_listener); + componentDidMount(): void { + const { backgroundColor, undoSteps, value, defaultValue } = this.props; + + this.mounted = true; + this.canvas = new fabric.Canvas(this.canvasEl.current); + this.selectTool(); + this.setBackground(backgroundColor); + + // Initialize History, with maximum number of undo steps + this.history = new SketchHistory(this.canvas, undoSteps); // Bind Events to Actions - this._bind_canvas_events(new FabricCanvasEventsManager(this.canvas, this)); - this._bind_canvas_events(new UndoHistory(10)); - }; + this._bind_canvas_events( + new FabricCanvasEventsManager(this.history, this.schedule) + ); - componentDidUpdate( - prevProps: Readonly, - prevState: Readonly, - snapshot?: any - ): void { - const props: Readonly = this.props; - const state: Readonly = this.state; + window.addEventListener("resize", this._resize_listener); + this.resize(); - if (prevProps.tool !== props.tool) { - if (this.canvas) { - this.tool = create_tool(this.canvas, props); - } + // initialize canvas with controlled value if exists + this.fromJSON(value || defaultValue); + } + + componentDidUpdate(prevProps: Readonly): void { + const props = this.props; + + if (props.width !== prevProps.width || props.height !== prevProps.height) { + this.resize(); + } + + if (props.tool !== prevProps.tool) { + this.selectTool(); + } else if ( + props.lineColor !== prevProps.lineColor || + props.lineWidth !== prevProps.lineWidth || + props.fillColor !== prevProps.fillColor + ) { + this.configureTool(); + } + + if (props.backgroundColor !== prevProps.backgroundColor) { + this.setBackground(props.backgroundColor); } + + if (props.value !== prevProps.value || (props.value && props.forceValue)) { + this.fromJSON(props.value); + } + } + + componentWillUnmount(): void { + this.mounted = false; + window.removeEventListener("resize", this._resize_listener); + this.timers.forEach((id) => window.clearTimeout(id)); + this.timers.clear(); + this.canvas.dispose(); } - componentWillUnmount = (): void => { - window.removeEventListener("resize", this._resize_listener, true); + /** + * Run the function with the properties of the component. The Highlighter + * throws for a line color it cannot convert (for example "rgb(0, 0, 0)" or + * "transparent"), so in that case the function runs again with the default + * line color instead of breaking the component. + */ + private withToolProps(run: (props: SketchProperties) => void): void { + // The tool used to default to null, which meant no tool at all: the + // objects can be moved, nothing is drawn. That is what "select" does. + const props = { ...this.props, tool: this.props.tool ?? Tool.SELECT }; + try { + run(props); + } catch { + run({ ...props, lineColor: undefined }); + } + } + + /** + * Use the tool of the properties, from now on + */ + private selectTool(): void { + this.withToolProps((props) => { + this.tool = create_tool(this.canvas, props); + }); + } + + /** + * Apply the line and fill properties to the tool in use + */ + private configureTool(): void { + this.withToolProps((props) => this.tool.configureCanvas(props)); + } + + /** + * Fit the canvas to its container + */ + private resize(): void { + const container = this.containerEl.current; + if (!container) return; + const { widthCorrection, heightCorrection } = this.props; + autoresize(this.canvas, container, widthCorrection, heightCorrection); + } + + /** + * Sets the background color for this sketch + * + * @param color in rgba or hex format + */ + private setBackground(color?: string): void { + if (!color) return; + this.canvas.setBackgroundColor(color, () => this.canvas.renderAll()); + } + + /** + * Enable touch Scrolling on Canvas + */ + enableTouchScroll = (): void => { + this.canvas.allowTouchScrolling = true; + }; + + /** + * Disable touch Scrolling on Canvas + */ + disableTouchScroll = (): void => { + this.canvas.allowTouchScrolling = false; }; - render = (): React.ReactElement => { + /** + * Add an image as object to the canvas + * + * @param dataUrl the image url or Data Url + * @param options object to pass and change some options when loading image, the format of the object is: + * + * { + * left: , + * top: , + * scale: + * } + */ + addImg = (dataUrl: string, options: ImageOptions = {}): void => { + const canvas = this.canvas; + fabric.Image.fromURL(dataUrl, (image) => { + if (!this.isCurrent(canvas)) return; + const { left, top, scale } = { + left: Math.random() * (canvas.getWidth() - (image.width ?? 0) * 0.5), + top: Math.random() * (canvas.getHeight() - (image.height ?? 0) * 0.5), + scale: 0.5, + ...options, + }; + image.scale(scale); + image.set({ left, top }); + canvas.add(image); + }); + }; + + /** + * Zoom the drawing by the factor specified + * + * The zoom factor is a percentage with regards the original, for example if factor is set to 2 + * it will double the size whereas if it is set to 0.5 it will half the size + * + * @param factor the zoom factor + */ + zoom = (factor: number): void => { + this.canvas.getObjects().forEach((obj) => { + obj.scaleX = (obj.scaleX ?? 1) * factor; + obj.scaleY = (obj.scaleY ?? 1) * factor; + obj.left = (obj.left ?? 0) * factor; + obj.top = (obj.top ?? 0) * factor; + obj.setCoords(); + }); + this.canvas.renderAll(); + this.canvas.calcOffset(); + }; + + /** + * Perform an undo operation on canvas, if it cannot undo it will leave the canvas intact + */ + undo = (): void => { + if (this.history.undo()) this.props.onChange?.(); + }; + + /** + * Perform a redo operation on canvas, if it cannot redo it will leave the canvas intact + */ + redo = (): void => { + if (this.history.redo()) this.props.onChange?.(); + }; + + /** + * Delegation method to check if we can perform an undo Operation, useful to disable/enable possible buttons + * + * @returns true if we can undo otherwise false + */ + canUndo = (): boolean => this.history.canUndo(); + + /** + * Delegation method to check if we can perform a redo Operation, useful to disable/enable possible buttons + * + * @returns true if we can redo otherwise false + */ + canRedo = (): boolean => this.history.canRedo(); + + /** + * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately + * + * Available Options are + * + * + * + * + * + * + * + * + * + * + * + *
NameTypeArgumentDefaultDescription
format String the imageFormat property, then pngThe format of the output image. Either "jpeg" or "png"
qualityNumber1Quality level (0..1). Only used for jpeg.
multiplierNumber1Multiplier to scale by
leftNumberCropping left offset. Introduced in v1.2.14
topNumberCropping top offset. Introduced in v1.2.14
widthNumberCropping width. Introduced in v1.2.14
heightNumberCropping height. Introduced in v1.2.14
+ * + * @returns URL containing a representation of the object in the format specified by options.format + */ + toDataURL = (options?: DataUrlOptions): string => + this.canvas.toDataURL({ format: this.props.imageFormat, ...options }); + + /** + * Returns JSON representation of canvas + * + * @param propertiesToInclude Array Any properties that you might want to additionally include in the output + * @returns the canvas as a JSON ready object + */ + toJSON = (propertiesToInclude?: string[]): SketchData => + // fabric returns an object, although its typings say it is a string + this.canvas.toJSON(propertiesToInclude) as unknown as SketchData; + + /** + * Populates canvas with data from the specified JSON. + * + * The canvas is populated a moment later, not right away. The history is + * reset, as the objects it knows are replaced. + * + * JSON format must conform to the one of fabric.Canvas#toDatalessJSON + * + * @param json JSON string or object + */ + fromJSON = (json?: SketchValue): void => { + if (!json) return; + const canvas = this.canvas; + this.schedule(() => { + this.history.clear(); + canvas.loadFromJSON(json, () => { + if (!this.isCurrent(canvas)) return; + // Loading a value drops the background color unless the value has one + if (!canvas.backgroundColor) this.setBackground(this.props.backgroundColor); + // The loaded objects follow the tool in use, for example they can't be + // selected when drawing + this.configureTool(); + canvas.renderAll(); + this.props.onChange?.(); + }); + }, 100); + }; + + /** + * Clear the content of the canvas, this will also clear history but will return the canvas content as JSON to be + * used as needed in order to undo the clear if possible + * + * @param propertiesToInclude Array Any properties that you might want to additionally include in the output + * @returns JSON object of the canvas just cleared + */ + clear = (propertiesToInclude?: string[]): SketchData => { + const discarded = this.toJSON(propertiesToInclude); + this.canvas.clear(); + this.history.clear(); + // Clearing a canvas drops its background color + this.setBackground(this.props.backgroundColor); + return discarded; + }; + + hasSelection = (): boolean => !!this.canvas.getActiveObject(); + + clearSelection = (): void => { + this.canvas.discardActiveObject(); + this.canvas.requestRenderAll(); + }; + + /** + * Remove selected object from the canvas + */ + removeSelected = (): void => { + const canvas = this.canvas; + const activeObj = canvas.getActiveObject(); + if (!activeObj) return; + const selected = + activeObj.type === "activeSelection" + ? (activeObj as fabric.ActiveSelection).getObjects() + : [activeObj]; + // Leaving the selection first gives the objects back their own position + canvas.discardActiveObject(); + this.history.remove(selected); + canvas.requestRenderAll(); + }; + + /** + * Copy the selected object, nothing happens when there is no selection + */ + copy = (): void => { + this.canvas.getActiveObject()?.clone((cloned: fabric.Object) => { + this.clipboard = cloned; + }); + }; + + /** + * Paste the copied object, a bit further down and to the right of the + * previous one. Nothing happens when nothing was copied. + */ + paste = (): void => { + const canvas = this.canvas; + const clipboard = this.clipboard; + if (!clipboard) return; + // clone again, so you can do multiple copies. + clipboard.clone((clonedObj: fabric.Object) => { + canvas.discardActiveObject(); + clonedObj.set({ + left: (clonedObj.left ?? 0) + 10, + top: (clonedObj.top ?? 0) + 10, + evented: true, + }); + if (clonedObj.type === "activeSelection") { + const selection = clonedObj as fabric.ActiveSelection; + // active selection needs a reference to the canvas. + selection.canvas = canvas; + selection.forEachObject((obj) => canvas.add(obj)); + selection.setCoords(); + } else { + canvas.add(clonedObj); + } + clipboard.top = (clipboard.top ?? 0) + 10; + clipboard.left = (clipboard.left ?? 0) + 10; + canvas.setActiveObject(clonedObj); + canvas.requestRenderAll(); + }); + }; + + /** + * Sets the background from the dataUrl given + * + * @param dataUrl the dataUrl to be used as a background + * @param options stretched, stretchedX and stretchedY scale the image to the canvas, the other + * options are options of the image + */ + setBackgroundFromDataUrl = ( + dataUrl: string, + options: BackgroundOptions = {} + ): void => { + const canvas = this.canvas; + const img = new Image(); + img.setAttribute("crossOrigin", "anonymous"); + const { stretched, stretchedX, stretchedY, ...imageOptions } = options; + img.onload = () => { + if (!this.isCurrent(canvas)) return; + const imgObj = new fabric.Image(img); + if (stretched || stretchedX) imgObj.scaleToWidth(canvas.getWidth()); + if (stretched || stretchedY) imgObj.scaleToHeight(canvas.getHeight()); + canvas.setBackgroundImage( + imgObj, + () => canvas.renderAll(), + imageOptions as fabric.IImageOptions + ); + }; + img.src = dataUrl; + }; + + /** + * Add a text to the center of the canvas + * + * @param text the text + * @param options options of the text, for example fontSize, fill, left and top. + * The text is centered unless left or top are given. + */ + addText = (text: string, options: TextOptions = {}): void => { + const canvas = this.canvas; + const iText = new fabric.IText(text, options as fabric.ITextOptions); + if (options.left === undefined) { + iText.set("left", (canvas.getWidth() - (iText.width ?? 0)) * 0.5); + } + if (options.top === undefined) { + iText.set("top", (canvas.getHeight() - (iText.height ?? 0)) * 0.5); + } + canvas.add(iText); + }; + + render(): React.ReactElement { const { className, style, width, height } = this.props; - const canvasDivStyle = Object.assign( - {}, - style ? style : {}, - width ? { width: width } : {}, - height ? { height: height } : { height: 512 } - ); + const canvasDivStyle = { + ...style, + ...(width ? { width } : {}), + height: height || 512, + }; return ( -
{ - this.containerEl = elem; - }}> - { - this.canvasEl = elem; - }}> +
+ Sorry, Canvas HTML5 element is not supported by your browser :(
); - }; + } } export default SketchField; diff --git a/packages/react-sketch/src/components/SketchField/events.ts b/packages/react-sketch/src/components/SketchField/events.ts index 47a013a2..47329a2b 100644 --- a/packages/react-sketch/src/components/SketchField/events.ts +++ b/packages/react-sketch/src/components/SketchField/events.ts @@ -1,72 +1,117 @@ import { fabric } from "fabric"; -import { PureComponent } from "react"; -import { SketchProperties, SketchState } from "../../types"; -import { AbstractEventAware, FabricCanvasTool } from "./tools"; +import { SketchEvent, SketchProperties } from "../../types"; +import { SketchHistory } from "./history/SketchHistory"; +import { AbstractEventAware, CanvasEventAware, FabricCanvasTool } from "./tools"; export interface EventInput { event: fabric.IEvent; tool: FabricCanvasTool; props: SketchProperties; - state: SketchState; } -export interface EventCallback { - (input: EventInput): void; + +/** + * The canvas events a tool can react to, plus the ones of the sketch itself + */ +export interface SketchEventAware extends CanvasEventAware { + // Object management + onObjectAdded(input: EventInput): void; } +/** + * The event as given to the callbacks of the component. The canvas event has + * the same shape, but its types come from the canvas library, which the + * component does not expose. + */ +const sketchEvent = (event: fabric.IEvent): SketchEvent => + event as unknown as SketchEvent; + /** * Canvas Events Manager Class + * + * It hands the canvas events to the selected tool, to the history of the + * sketch and to the callbacks given as properties of the component. */ -export class FabricCanvasEventsManager extends AbstractEventAware { - private canvas: fabric.Canvas; - private sketch: PureComponent; +export class FabricCanvasEventsManager + extends AbstractEventAware + implements SketchEventAware +{ + private readonly history: SketchHistory; + private readonly schedule: (callback: () => void, delay: number) => void; + /** + * @param history the history of the sketch + * @param schedule runs the callback after the delay (in milliseconds) + */ constructor( - canvas: fabric.Canvas, - sketch: PureComponent + history: SketchHistory, + schedule: (callback: () => void, delay: number) => void ) { super(); - this.canvas = canvas; - this.sketch = sketch; + this.history = history; + this.schedule = schedule; } /** - * Action when an object is added to the canvas + * Action when an object is added to the canvas. The objects which undo and + * redo add back are not new, so they are not recorded nor announced. */ - public onObjectAdded({ event, tool, props, state }: EventInput): void { - // if (!input.state.action) { - // this.setState({ action: true }); - // return; - // } - // const obj = event.target; - // obj.__version = 1; - // record current object state as json and save as originalState - // const objState = obj.toJSON(); - // obj.__originalState = objState; - // const state = JSON.stringify(objState); - // object, previous state, current state - // this._history.keep([obj, state, state]); - // onObjectAdded(e); + public onObjectAdded({ event, props }: EventInput): void { + if (this.history.replaying) return; + if (event.target) this.history.onObjectAdded(event.target); + props.onObjectAdded?.(sketchEvent(event)); } - public onObjectMoved({ event, tool, props, state }: EventInput): void { - console.log("foo"); + + public onObjectModified({ event, props }: EventInput): void { + if (event.target) this.history.onObjectModified(event.target); + props.onObjectModified?.(sketchEvent(event)); } - public onMouseUp({ event, tool, props, state }: EventInput): void { - tool.doMouseUp(event); + public onObjectRemoved({ event, props }: EventInput): void { + props.onObjectRemoved?.(sketchEvent(event)); + } + + public onObjectMoving({ event, props }: EventInput): void { + props.onObjectMoving?.(sketchEvent(event)); + } + + public onObjectScaling({ event, props }: EventInput): void { + props.onObjectScaling?.(sketchEvent(event)); + } + + public onObjectRotating({ event, props }: EventInput): void { + props.onObjectRotating?.(sketchEvent(event)); } - public onMouseDown({ event, tool, props, state }: EventInput): void { - console.log("down"); + + public onMouseDown({ event, tool, props }: EventInput): void { tool.doMouseDown(event); - // const { onMouseDown } = this.props; - // this._selectedTool.doMouseDown(e); - // onMouseDown(e); + props.onMouseDown?.(sketchEvent(event)); } - public onMouseMove({ event, tool, props, state }: EventInput): void { - console.log("move"); + + public onMouseMove({ event, tool, props }: EventInput): void { tool.doMouseMove(event); + props.onMouseMove?.(sketchEvent(event)); } - public onMouseOut({ event, tool, props, state }: EventInput): void { - console.log("out"); + + public onMouseOut({ event, tool, props }: EventInput): void { tool.doMouseOut(event); + this.notifyChange({ event, tool, props }); + props.onMouseOut?.(sketchEvent(event)); + } + + public onMouseUp({ event, tool, props }: EventInput): void { + tool.doMouseUp(event); + // The drawing is finished, so the state of the new object is final + this.history.onMouseUp(); + this.notifyChange({ event, tool, props }); + props.onMouseUp?.(sketchEvent(event)); + } + + /** + * Tell the application that the sketch may have changed, shortly after + * the mouse was released or left the canvas. + */ + private notifyChange({ event, props }: EventInput): void { + const { onChange } = props; + if (onChange) this.schedule(() => onChange(event.e), 10); } } diff --git a/packages/react-sketch/src/index.ts b/packages/react-sketch/src/index.ts index 60f177a6..c5d14924 100644 --- a/packages/react-sketch/src/index.ts +++ b/packages/react-sketch/src/index.ts @@ -1,7 +1,14 @@ import * as Types from "./types"; +import { Tools } from "./types"; import SketchField from "./components/SketchField"; -export { SketchField }; -export { Types }; +/** + * The default export is the component itself, which also carries `SketchField` + * and `Tools`. That keeps both `` and the 0.5.x use + * (`Sketch.SketchField`, `Sketch.Tools`) working. + */ +const Sketch = Object.assign(SketchField, { SketchField, Tools }); -export default SketchField; +export { SketchField, Tools, Types }; + +export default Sketch; diff --git a/packages/react-sketch/src/types.ts b/packages/react-sketch/src/types.ts index e729fcfa..6c91c04b 100644 --- a/packages/react-sketch/src/types.ts +++ b/packages/react-sketch/src/types.ts @@ -1,5 +1,4 @@ import * as CSS from "csstype"; -import PropTypes from "prop-types"; /** * Enumeration which declares the various tools available for @@ -18,210 +17,184 @@ export enum Tool { DEFAULT_TOOL = "default-tool", } -interface SketchStyle { - className?: string; - style?: CSS.Properties; - autoresize?: boolean; - height?: number; +/** + * The tools by their legacy (0.5.x) names, as in + * `import { Tools } from "react-sketch"`. The values are the ones of {@link Tool}. + */ +export const Tools = { + Select: Tool.SELECT, + Pencil: Tool.PENCIL, + Line: Tool.LINE, + Arrow: Tool.ARROW, + Rectangle: Tool.RECTANGLE, + RectangleLabel: Tool.RECTANGLE_LABEL, + Circle: Tool.CIRCLE, + Pan: Tool.PAN, + DefaultTool: Tool.DEFAULT_TOOL, + Highlighter: Tool.HIGHLIGHTER, +} as const; + +/** + * An object of the sketch, as seen by the event callbacks. This is the + * canvas (fabric) object, with the properties which are the same in every + * version of the underlying library. + */ +export interface SketchObject { + /** Kind of the object, for example "rect", "line", "path", "i-text" */ + type?: string; + /** Any other property of the object, including custom ones set by the application */ + [property: string]: unknown; +} + +/** + * Event passed to the object and mouse callbacks of {@link SketchProperties} + */ +export interface SketchEvent { + /** The original DOM event, when the event was triggered by the user */ + e?: Event; + /** The object the event is about (object events only) */ + target?: SketchObject; + /** Any other property of the canvas event */ + [property: string]: unknown; +} + +/** + * Content of a sketch, as returned by `toJSON` and accepted by `value`, + * `defaultValue` and `fromJSON`: an object, or the same object as JSON string. + */ +export type SketchValue = object | string; + +/** + * Content of a sketch as returned by `toJSON` and `clear` + */ +export type SketchData = Record; + +/** + * Options of `toDataURL` + */ +export interface DataUrlOptions { + /** Format of the image, "png" or "jpeg". Defaults to the `imageFormat` property, then "png" */ + format?: string; + /** Quality level (0..1). Only used for jpeg. Defaults to 1 */ + quality?: number; + /** Multiplier to scale by. Defaults to 1 */ + multiplier?: number; + /** Cropping left offset */ + left?: number; + /** Cropping top offset */ + top?: number; + /** Cropping width */ width?: number; + /** Cropping height */ + height?: number; } -interface SketchTool { - tool: Tool | string; // tool type - lineColor?: string; // the color of the line - lineWidth?: number; // The width of the line - fillColor?: string; // the fill color of the shape when applicable - backgroundColor?: string; // the background color of the sketch +/** + * Options of `addImg` + */ +export interface ImageOptions { + /** Distance from the left of the canvas. Defaults to a random position */ + left?: number; + /** Distance from the top of the canvas. Defaults to a random position */ + top?: number; + /** Initial scale of the image. Defaults to 0.5 */ + scale?: number; } -export interface SketchState { - action: boolean; +/** + * Options of `setBackgroundFromDataUrl` + */ +export interface BackgroundOptions { + /** Scale the image to the width and the height of the canvas */ + stretched?: boolean; + /** Scale the image to the width of the canvas */ + stretchedX?: boolean; + /** Scale the image to the height of the canvas */ + stretchedY?: boolean; + /** Any other option is passed to the canvas as an image option, for example `opacity` */ + [option: string]: unknown; } -export interface SketchProperties extends SketchTool, SketchStyle {} +/** + * Options of `addText`: the options of a canvas text object, for example + * `fontSize`, `fill`, `left`, `top` + */ +export type TextOptions = Record; -// declare module "react-sketch123123" { -// import * as React from "react"; -// -// export class SketchField extends React.PureComponent<{ -// // the color of the line -// lineColor?: string; -// // The width of the line -// lineWidth?: number; -// // the opacity of the object -// opacity?: number; -// // number of undo/redo steps to maintain -// undoSteps?: number; -// // The tool to use, can be pencil, rectangle, circle, brush; -// tool?: string; -// // image format when calling toDataURL -// imageFormat?: string; -// // Sketch data for controlling sketch from -// // outside the component -// value?: object; -// // Set to true if you wish to force load the given value, even if it is the same -// forceValue?: boolean; -// // Specify some width correction which will be applied on auto resize -// widthCorrection?: number; -// // Specify some height correction which will be applied on auto resize -// heightCorrection?: number; -// // Specify action on change -// onChange?: (evt: any) => void; -// // Default initial value -// defaultValue?: {}; -// // Sketch width -// width?: number; -// // Sketch height -// height?: number; -// // Class name to pass to container div of canvas -// className?: string; -// // Style options to pass to container div of canvas -// style?: {}; -// }> { -// /** -// * Enable touch Scrolling on Canvas -// */ -// enableTouchScroll(): void; -// -// /** -// * Disable touch Scrolling on Canvas -// */ -// disableTouchScroll(): void; -// -// /** -// * Add an image as object to the canvas -// * -// * @param dataUrl the image url or Data Url -// * @param options object to pass and change some options when loading image, the format of the object is: -// * -// * { -// * left: , -// * top: , -// * scale: -// * } -// */ -// addImg( -// dataUrl: string, -// options?: { left?: number; top?: number; scale?: number } -// ): void; -// -// /** -// * Zoom the drawing by the factor specified -// * -// * The zoom factor is a percentage with regards the original, for example if factor is set to 2 -// * it will double the size whereas if it is set to 0.5 it will half the size -// * -// * @param factor the zoom factor -// */ -// zoom(factor: number): void; -// -// /** -// * Perform an undo operation on canvas, if it cannot undo it will leave the canvas intact -// */ -// undo(): void; -// -// /** -// * Perform a redo operation on canvas, if it cannot redo it will leave the canvas intact -// */ -// redo(): void; -// -// /** -// * Delegation method to check if we can perform an undo Operation, useful to disable/enable possible buttons -// * -// * @returns {*} true if we can undo otherwise false -// */ -// canUndo(): boolean; -// -// /** -// * Delegation method to check if we can perform a redo Operation, useful to disable/enable possible buttons -// * -// * @returns {*} true if we can redo otherwise false -// */ -// canRedo(): boolean; -// -// /** -// * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately -// * -// * Available Options are -// * -// * -// * -// * -// * -// * -// * -// * -// * -// * -// * -// *
NameTypeArgumentDefaultDescription
format String pngThe format of the output image. Either "jpeg" or "png"
qualityNumber1Quality level (0..1). Only used for jpeg.
multiplierNumber1Multiplier to scale by
leftNumberCropping left offset. Introduced in v1.2.14
topNumberCropping top offset. Introduced in v1.2.14
widthNumberCropping width. Introduced in v1.2.14
heightNumberCropping height. Introduced in v1.2.14
-// * -// * @returns {String} URL containing a representation of the object in the format specified by options.format -// */ -// toDataURL(options?: { -// format?: string; -// quality?: number; -// multiplier?: number; -// left?: number; -// top?: number; -// width?: number; -// height?: number; -// }): string; -// -// /** -// * Returns JSON representation of canvas -// * -// * @param propertiesToInclude Array Any properties that you might want to additionally include in the output -// * @returns {string} JSON string -// */ -// toJSON(propertiesToInclude?: ArrayLike): string; -// -// /** -// * Populates canvas with data from the specified JSON. -// * -// * JSON format must conform to the one of fabric.Canvas#toDatalessJSON -// * -// * @param json JSON string or object -// */ -// fromJSON(json: string): void; -// -// /** -// * Clear the content of the canvas, this will also clear history but will return the canvas content as JSON to be -// * used as needed in order to undo the clear if possible -// * -// * @param propertiesToInclude Array Any properties that you might want to additionally include in the output -// * @returns {string} JSON string of the canvas just cleared -// */ -// clear(propertiesToInclude?: ArrayLike): string; -// -// hasSelection(): boolean; -// clearSelection(): void; -// -// /** -// * Remove selected object from the canvas -// */ -// removeSelected(): void; -// -// copy(): void; -// -// paste(): void; -// -// /** -// * Sets the background from the dataUrl given -// * -// * @param dataUrl the dataUrl to be used as a background -// * @param options -// */ -// setBackgroundFromDataUrl( -// dataUrl: string, -// options?: { -// stretched?: boolean; -// stretchedX?: boolean; -// stretchedY?: boolean; -// [name: string]: any; -// } -// ): void; -// -// addText(text: string, options?: {}): void; -// } -// } +/** + * Properties of the SketchField component + */ +export interface SketchProperties { + /** + * The tool to use. See {@link Tool} (or `Tools`). Defaults to "select" + * (the objects can be moved, nothing is drawn), which is what the + * component did when no tool was given. + */ + tool?: Tool | string; + /** The color of the line. Defaults to "black" */ + lineColor?: string; + /** The width of the line. Defaults to 10 */ + lineWidth?: number; + /** The fill color of the shape when applicable. Defaults to "transparent" */ + fillColor?: string; + /** The background color of the sketch, in rgba or hex format. Defaults to "transparent" */ + backgroundColor?: string; + /** The opacity of the object. Accepted for compatibility, it is not applied (as in 0.5.x). Defaults to 1.0 */ + opacity?: number; + /** Number of undo/redo steps to maintain, read when the component mounts. Defaults to 25 */ + undoSteps?: number; + /** Image format used by `toDataURL` when it is not given in its options, "png" or "jpeg" */ + imageFormat?: string; + /** + * Sketch data for controlling the sketch from outside the component. It is + * loaded again when it changes (or on every update when `forceValue` is set) + */ + value?: SketchValue; + /** Set to true to load the given `value` on every update, even when it did not change. Defaults to false */ + forceValue?: boolean; + /** Initial value of the sketch, loaded when the component mounts */ + defaultValue?: SketchValue; + /** Correction in pixels subtracted from the width of the container when the canvas is resized. Defaults to 0 */ + widthCorrection?: number; + /** Correction in pixels subtracted from the height of the container when the canvas is resized. Defaults to 0 */ + heightCorrection?: number; + /** + * Resize the canvas, and scale its objects, when the window is resized. + * The canvas is always fitted to its container when the component mounts + * and when `width` or `height` change. Defaults to true + */ + autoresize?: boolean; + /** Width of the sketch container, in pixels */ + width?: number; + /** Height of the sketch container, in pixels. Defaults to 512 */ + height?: number; + /** Class name of the container div of the canvas */ + className?: string; + /** Style of the container div of the canvas */ + style?: CSS.Properties; + /** + * Called after a drawing was finished (mouse up, mouse out) and after undo, redo and + * loading a value. The argument is the DOM event of the former, nothing in the latter + */ + onChange?: (event?: Event) => void; + /** Called when an object is added by the user, not when undo or redo add it back */ + onObjectAdded?: (event: SketchEvent) => void; + /** Called when an object is modified by the user (moved, scaled, rotated) */ + onObjectModified?: (event: SketchEvent) => void; + /** Called when an object is removed from the sketch */ + onObjectRemoved?: (event: SketchEvent) => void; + /** Called on mouse down on the canvas */ + onMouseDown?: (event: SketchEvent) => void; + /** Called on mouse move on the canvas */ + onMouseMove?: (event: SketchEvent) => void; + /** Called on mouse up on the canvas */ + onMouseUp?: (event: SketchEvent) => void; + /** Called when the mouse leaves the canvas */ + onMouseOut?: (event: SketchEvent) => void; + /** Called while an object is moved */ + onObjectMoving?: (event: SketchEvent) => void; + /** Called while an object is scaled */ + onObjectScaling?: (event: SketchEvent) => void; + /** Called while an object is rotated */ + onObjectRotating?: (event: SketchEvent) => void; +} From 2f5e88881c9f19046fc18f9267b0634b6b78566f Mon Sep 17 00:00:00 2001 From: tbolis Date: Tue, 13 Oct 2026 23:12:46 +0300 Subject: [PATCH 45/70] test: port the 0.5.x SketchField specs and cover every prop, method and export React Testing Library with a ref to the component. Layout is mocked where the size of the container matters, fabric objects are made by firing canvas events. --- .../SketchField/SketchField.spec.tsx | 1419 ++++++++++++++++- packages/react-sketch/src/index.spec.tsx | 51 + 2 files changed, 1452 insertions(+), 18 deletions(-) create mode 100644 packages/react-sketch/src/index.spec.tsx diff --git a/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx b/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx index 81c702c5..f4c4485b 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx @@ -1,35 +1,1418 @@ +import { createRef, StrictMode } from "react"; import { render } from "@testing-library/react"; +import { fabric } from "fabric"; import SketchField from "./SketchField"; -import { Tool } from "../../types"; +import { SketchProperties, Tool } from "../../types"; + +type Point = [number, number]; +type Identified = fabric.Object & { id?: string }; + +/** The fabric canvas of a mounted SketchField */ +const canvasOf = (sketch: SketchField): fabric.Canvas => sketch["canvas"]; + +/** Mount a SketchField, and give access to its methods and its canvas */ +const mount = (props: SketchProperties = {}) => { + const ref = createRef(); + const view = render(); + const sketch = ref.current as SketchField; + return { + ...view, + sketch, + canvas: canvasOf(sketch), + update: (next: SketchProperties) => + view.rerender(), + }; +}; + +const mouseEvent = (type: string, [x, y]: Point): { e: MouseEvent } => ({ + e: new MouseEvent(type, { clientX: x, clientY: y }), +}); + +/** + * Press the mouse at `from`, move it to `to` and release it. Returns the + * newest object of the canvas, which is the one drawn. + */ +const objectFromDrag = ( + canvas: fabric.Canvas, + from: Point = [0, 0], + to: Point = [10, 10], + id?: string +): Identified => { + canvas.fire("mouse:down", mouseEvent("mousedown", from)); + canvas.fire("mouse:move", mouseEvent("mousemove", to)); + canvas.fire("mouse:up", mouseEvent("mouseup", to)); + const objects = canvas.getObjects(); + const newObj: Identified = objects[objects.length - 1]; + if (id) newObj.id = id; + return newObj; +}; + +const ids = (canvas: fabric.Canvas): (string | undefined)[] => + canvas.getObjects().map((o: Identified) => o.id); + +/** What the browser would lay out for the container of the sketch */ +const layout = (width: number, height: number): void => { + jest.spyOn(HTMLElement.prototype, "offsetWidth", "get").mockReturnValue(width); + jest.spyOn(Element.prototype, "clientHeight", "get").mockReturnValue(height); +}; + +const rect = (left: number, top: number, fill = "red") => ({ + type: "rect", + left, + top, + width: 30, + height: 40, + fill, +}); + +const START: Point = [10, 10]; +const END: Point = [40, 50]; + +afterEach(() => { + jest.useRealTimers(); + jest.restoreAllMocks(); +}); describe("SketchField", () => { - it("renders a canvas inside a container div with default props", () => { - const { container } = render(); - const sketch = container.firstElementChild; + describe("rendering", () => { + it("renders a canvas inside a container div with default props", () => { + const { container } = render(); + const sketch = container.firstElementChild; + + expect(sketch).toBeInstanceOf(HTMLDivElement); + expect(sketch?.querySelector("canvas")).toBeInTheDocument(); + }); + + it("applies width, height, className and style to the container", () => { + const { container } = render( + + ); + + expect(container.firstElementChild).toHaveClass("sketch"); + expect(container.firstElementChild).toHaveStyle({ + width: "320px", + height: "240px", + border: "1px solid red", + }); + }); + + it("is 512 pixels high unless a height is given", () => { + const { container } = render(); + + expect(container.firstElementChild).toHaveStyle({ height: "512px" }); + }); + + it("keeps its canvas id when it renders again", () => { + const { container, rerender } = render(); + const id = container.querySelector("canvas")?.id; + + rerender(); + + expect(id).toBeTruthy(); + expect(container.querySelector("canvas")?.id).toEqual(id); + }); + + it("mounts, unmounts and mounts again in strict mode", () => { + const ref = createRef(); + const { container } = render( + + + + ); + const sketch = ref.current as SketchField; + const canvas = canvasOf(sketch); + + expect(container.querySelectorAll(".canvas-container")).toHaveLength(1); + objectFromDrag(canvas, START, END); + expect(canvas.getObjects()).toHaveLength(1); + sketch.undo(); + expect(canvas.getObjects()).toHaveLength(0); + }); + }); + + describe("default props", () => { + it("has the defaults of 0.5.x", () => { + expect(SketchField.defaultProps).toMatchObject({ + lineColor: "black", + lineWidth: 10, + fillColor: "transparent", + backgroundColor: "transparent", + opacity: 1.0, + undoSteps: 25, + widthCorrection: 0, + heightCorrection: 0, + forceValue: false, + }); + }); + + it("has event callbacks which do nothing", () => { + const callbacks = [ + "onObjectAdded", + "onObjectModified", + "onObjectRemoved", + "onMouseDown", + "onMouseMove", + "onMouseUp", + "onMouseOut", + "onObjectMoving", + "onObjectScaling", + "onObjectRotating", + ] as const; + callbacks.forEach((name) => { + expect(SketchField.defaultProps[name]({})).toBeUndefined(); + }); + }); + + it("selects objects, without drawing, when no tool is given", () => { + const { canvas } = mount(); + + expect(canvas.isDrawingMode).toBe(false); + expect(canvas.selection).toBe(true); + }); + + it("draws with a black line, 10 pixels wide, by default", () => { + const { canvas } = mount({ tool: Tool.PENCIL }); + + expect(canvas.freeDrawingBrush.color).toEqual("black"); + expect(canvas.freeDrawingBrush.width).toEqual(10); + }); + + it("also selects objects when the tool is null, as in 0.5.x", () => { + const { canvas } = mount({ tool: null as unknown as string }); + + expect(canvas.isDrawingMode).toBe(false); + expect(canvas.selection).toBe(true); + }); + }); + + describe("tool", () => { + it("draws with the pencil, using the line color and width", () => { + const { canvas } = mount({ + tool: Tool.PENCIL, + lineColor: "red", + lineWidth: 3, + }); + + expect(canvas.isDrawingMode).toBe(true); + expect(canvas.freeDrawingBrush.color).toEqual("red"); + expect(canvas.freeDrawingBrush.width).toEqual(3); + }); + + it("uses the regular pointer when drawing with the pencil (#181)", () => { + const { canvas } = mount({ tool: Tool.PENCIL }); + + expect(canvas.freeDrawingCursor).toEqual("default"); + }); + + it("recreates the tool when it changes", () => { + const { canvas, update } = mount({ tool: Tool.PENCIL }); + expect(canvas.isDrawingMode).toBe(true); + + update({ tool: Tool.SELECT }); + expect(canvas.isDrawingMode).toBe(false); + expect(canvas.selection).toBe(true); + + update({ tool: Tool.RECTANGLE }); + expect(canvas.selection).toBe(false); + objectFromDrag(canvas, START, END); + expect(canvas.getObjects()[0].type).toEqual("rect"); + + update({ tool: Tool.PAN }); + expect(canvas.defaultCursor).toEqual("move"); + + update({ tool: Tool.LINE }); + expect(canvas.defaultCursor).toEqual("default"); + }); + + it("configures the tool again when the line color or width change (#114)", () => { + const { canvas, update } = mount({ + tool: Tool.PENCIL, + lineColor: "red", + lineWidth: 3, + }); + + update({ tool: Tool.PENCIL, lineColor: "blue", lineWidth: 7 }); + + expect(canvas.freeDrawingBrush.color).toEqual("blue"); + expect(canvas.freeDrawingBrush.width).toEqual(7); + }); + + it("configures the tool again when the fill color changes", () => { + const { canvas, update } = mount({ + tool: Tool.RECTANGLE, + fillColor: "yellow", + }); + expect(objectFromDrag(canvas, START, END).fill).toEqual("yellow"); + + update({ tool: Tool.RECTANGLE, fillColor: "green" }); + + expect(objectFromDrag(canvas, START, END).fill).toEqual("green"); + }); + + it("does not break on a line color the highlighter cannot convert", () => { + ["rgb(255, 0, 0)", "transparent"].forEach((lineColor) => { + const { canvas, unmount } = mount({ tool: Tool.HIGHLIGHTER, lineColor }); + + // the default line color is used instead + expect(canvas.isDrawingMode).toBe(true); + expect(canvas.freeDrawingBrush.color).toEqual("rgba(0,0,0,0.4)"); + unmount(); + }); + }); + + it("converts the line color of the highlighter, and follows its changes", () => { + const { canvas, update } = mount({ + tool: Tool.HIGHLIGHTER, + lineColor: "#ff0000", + }); + expect(canvas.freeDrawingBrush.color).toEqual("rgba(255,0,0,0.4)"); + + expect(() => + update({ tool: Tool.HIGHLIGHTER, lineColor: "rgb(0, 0, 255)" }) + ).not.toThrow(); + expect(canvas.freeDrawingBrush.color).toEqual("rgba(0,0,0,0.4)"); + + update({ tool: Tool.HIGHLIGHTER, lineColor: "blue" }); + expect(canvas.freeDrawingBrush.color).toEqual("rgba(0,0,255,0.4)"); + }); + }); + + describe("background", () => { + it("is transparent by default, and follows backgroundColor (#87)", () => { + const { canvas, update } = mount(); + expect(canvas.backgroundColor).toEqual("transparent"); + + update({ backgroundColor: "red" }); + expect(canvas.backgroundColor).toEqual("red"); + + update({ backgroundColor: "rgba(0, 0, 255, 0.5)" }); + expect(canvas.backgroundColor).toEqual("rgba(0, 0, 255, 0.5)"); + }); + + it("is applied when the component mounts", () => { + const { canvas } = mount({ backgroundColor: "#00ff00" }); + + expect(canvas.backgroundColor).toEqual("#00ff00"); + }); + }); + + describe("size", () => { + it("fits the canvas to its container when it mounts", () => { + layout(400, 300); + + const { canvas } = mount(); + + expect(canvas.getWidth()).toEqual(400); + expect(canvas.getHeight()).toEqual(300); + }); + + it("subtracts widthCorrection and heightCorrection", () => { + layout(400, 300); + + const { canvas } = mount({ widthCorrection: 20, heightCorrection: 50 }); + + expect(canvas.getWidth()).toEqual(380); + expect(canvas.getHeight()).toEqual(250); + }); - expect(sketch).toBeInstanceOf(HTMLDivElement); - expect(sketch?.querySelector("canvas")).toBeInTheDocument(); + it("scales the objects with the canvas", () => { + layout(300, 150); + const { canvas, update } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + + layout(600, 300); + update({ tool: Tool.RECTANGLE, width: 600 }); + + const [object] = canvas.getObjects(); + expect(canvas.getWidth()).toEqual(600); + expect(object.left).toEqual(START[0] * 2); + expect(object.top).toEqual(START[1] * 2); + expect(object.scaleX).toEqual(2); + }); + + it("fits the canvas again when width or height change", () => { + layout(200, 100); + const { canvas, update } = mount({ width: 200, height: 100 }); + expect(canvas.getWidth()).toEqual(200); + + layout(250, 120); + update({ width: 250, height: 120 }); + + expect(canvas.getWidth()).toEqual(250); + expect(canvas.getHeight()).toEqual(120); + }); + + it("leaves the canvas alone when its container has no size", () => { + layout(0, 0); + const { canvas } = mount({ tool: Tool.RECTANGLE }); + const width = canvas.getWidth(); + objectFromDrag(canvas, START, END); + + window.dispatchEvent(new Event("resize")); + + expect(canvas.getWidth()).toEqual(width); + expect(canvas.getObjects()[0].scaleX).toEqual(1); + }); + + it("follows the window when autoresize is on (default)", () => { + layout(400, 300); + const { canvas } = mount(); + + layout(500, 300); + window.dispatchEvent(new Event("resize")); + + expect(canvas.getWidth()).toEqual(500); + }); + + it("does not follow the window when autoresize is off", () => { + layout(400, 300); + const { canvas } = mount({ autoresize: false }); + + layout(500, 300); + window.dispatchEvent(new Event("resize")); + + expect(canvas.getWidth()).toEqual(400); + }); + + it("removes the resize listener, with the arguments it was added with", () => { + const add = jest.spyOn(window, "addEventListener"); + const remove = jest.spyOn(window, "removeEventListener"); + + const { unmount } = mount(); + unmount(); + + // fabric listens to the window too, only the ones of the component count + const resizes = (spy: jest.SpyInstance) => + spy.mock.calls.filter( + ([type, listener]) => + type === "resize" && listener.name === "_resize_listener" + ); + expect(resizes(add)).toHaveLength(1); + expect(resizes(remove)).toEqual(resizes(add)); + }); + + it("disposes the canvas when it unmounts", () => { + const dispose = jest.spyOn(fabric.Canvas.prototype, "dispose"); + + const { unmount } = mount(); + unmount(); + + expect(dispose).toHaveBeenCalledTimes(1); + }); + }); + + describe("drawing", () => { + it("drags to create a rectangle", () => { + const { canvas } = mount({ tool: Tool.RECTANGLE }); + const bounding = { + left: START[0], + top: START[1], + width: END[0] - START[0], + height: END[1] - START[1], + }; + + // From left-top to right-bottom + const rect1 = objectFromDrag(canvas, START, END); + expect(canvas.getObjects()).toHaveLength(1); + expect(rect1.type).toEqual("rect"); + expect({ + left: rect1.left, + top: rect1.top, + width: rect1.width, + height: rect1.height, + }).toEqual(bounding); + + canvas.remove(rect1); + // From right-bottom to left-top + const rect2 = objectFromDrag(canvas, END, START); + expect(rect2.type).toEqual("rect"); + expect({ + left: rect2.left, + top: rect2.top, + width: rect2.width, + height: rect2.height, + }).toEqual(bounding); + }); + + it("draws with the line color, line width and fill color", () => { + const { canvas } = mount({ + tool: Tool.RECTANGLE, + lineColor: "red", + lineWidth: 4, + fillColor: "blue", + }); + + const object = objectFromDrag(canvas, START, END); + + expect(object.stroke).toEqual("red"); + expect(object.strokeWidth).toEqual(4); + expect(object.fill).toEqual("blue"); + }); }); - it("applies width and height to the container style", () => { - const { container } = render(); + describe("history", () => { + it("undoes and redoes multiple rectangles added to the canvas", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END, "rect1"); + objectFromDrag(canvas, START, END, "rect2"); + expect(ids(canvas)).toEqual(["rect1", "rect2"]); + + sketch.undo(); + expect(ids(canvas)).toEqual(["rect1"]); + + sketch.undo(); + expect(ids(canvas)).toEqual([]); + + sketch.redo(); + expect(ids(canvas)).toEqual(["rect1"]); + + objectFromDrag(canvas, START, END, "rect3"); + expect(ids(canvas)).toEqual(["rect1", "rect3"]); + + sketch.undo(); + expect(ids(canvas)).toEqual(["rect1"]); + }); + + it("undoes and redoes multiple modifications of a single rectangle", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + const stateOf = () => canvas.getObjects()[0].toJSON(); + + // [Action1] Add new rectangle object and save its state + const stateStack = []; + const rect1 = objectFromDrag(canvas, START, END); + stateStack.push(rect1.toJSON()); + + // [Action2] Change rectangle dimension and save its state + rect1.set({ width: 50, height: 60 }); + rect1.setCoords(); + canvas.fire("object:modified", { target: rect1 }); + stateStack.push(rect1.toJSON()); + + // [Action3] Change the position and save its state + rect1.set({ left: 20, top: 70 }); + rect1.setCoords(); + canvas.fire("object:modified", { target: rect1 }); + stateStack.push(rect1.toJSON()); + + // Undo Action3 + sketch.undo(); + expect(stateOf()).toEqual(stateStack[1]); + + // Undo Action2 + sketch.undo(); + expect(stateOf()).toEqual(stateStack[0]); + + // Undo Action1, and then redo Action1 + sketch.undo(); + expect(canvas.getObjects()).toHaveLength(0); + sketch.redo(); + expect(stateOf()).toEqual(stateStack[0]); + + // redo Action2 + sketch.redo(); + expect(stateOf()).toEqual(stateStack[1]); + + // redo Action3 + sketch.redo(); + expect(stateOf()).toEqual(stateStack[2]); + }); + + it("modifies from the state it was undone to", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + const rect1 = objectFromDrag(canvas, START, END); + const original = rect1.toJSON(); + rect1.set({ left: 100 }); + canvas.fire("object:modified", { target: rect1 }); + sketch.undo(); + + rect1.set({ left: 200 }); + canvas.fire("object:modified", { target: rect1 }); + sketch.undo(); + + expect(canvas.getObjects()[0].toJSON()).toEqual(original); + }); + + it("ignores the modification of objects it does not know", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + const stranger = new fabric.Rect({ width: 5, height: 5 }); + + canvas.fire("object:modified", { target: stranger }); + + expect(sketch.canUndo()).toBe(false); + }); + + it("tells whether it can undo and redo", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + expect(sketch.canUndo()).toBe(false); + expect(sketch.canRedo()).toBe(false); + + objectFromDrag(canvas, START, END); + expect(sketch.canUndo()).toBe(true); + expect(sketch.canRedo()).toBe(false); + + sketch.undo(); + expect(sketch.canUndo()).toBe(false); + expect(sketch.canRedo()).toBe(true); + + sketch.redo(); + expect(sketch.canUndo()).toBe(true); + expect(sketch.canRedo()).toBe(false); + }); + + it("leaves the canvas intact when there is nothing to undo or redo", () => { + const onChange = jest.fn(); + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE, onChange }); + objectFromDrag(canvas, START, END); + + expect(() => { + sketch.redo(); + sketch.undo(); + sketch.undo(); + sketch.undo(); + }).not.toThrow(); + + expect(canvas.getObjects()).toHaveLength(0); + // once for the undo, nothing for the ones which had no effect + expect(onChange).toHaveBeenCalledTimes(1); + }); + + it("keeps undoSteps steps, and one more for the current one, as in 0.5.x", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE, undoSteps: 2 }); + for (let i = 0; i < 5; i++) objectFromDrag(canvas, START, END); + + let undone = 0; + while (sketch.canUndo()) { + sketch.undo(); + undone++; + } + + expect(undone).toEqual(3); + expect(canvas.getObjects()).toHaveLength(2); + }); + + it("forgets a redo once something new is drawn", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + sketch.undo(); + expect(sketch.canRedo()).toBe(true); + + objectFromDrag(canvas, START, END); + + expect(sketch.canRedo()).toBe(false); + }); + + it("calls onChange, without arguments, after undo and redo", () => { + const onChange = jest.fn(); + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE, onChange }); + objectFromDrag(canvas, START, END); + + sketch.undo(); + expect(onChange).toHaveBeenLastCalledWith(); + + onChange.mockClear(); + sketch.redo(); + expect(onChange).toHaveBeenCalledTimes(1); + expect(onChange).toHaveBeenLastCalledWith(); + }); + }); + + describe("callbacks", () => { + it("calls onChange with the DOM event, a moment after mouse up and mouse out", () => { + jest.useFakeTimers(); + const onChange = jest.fn(); + const { canvas } = mount({ tool: Tool.RECTANGLE, onChange }); + + const up = mouseEvent("mouseup", END); + canvas.fire("mouse:up", up); + expect(onChange).not.toHaveBeenCalled(); + jest.advanceTimersByTime(10); + expect(onChange).toHaveBeenCalledTimes(1); + expect(onChange).toHaveBeenLastCalledWith(up.e); + + const out = mouseEvent("mouseout", END); + canvas.fire("mouse:out", out); + jest.advanceTimersByTime(10); + expect(onChange).toHaveBeenCalledTimes(2); + expect(onChange).toHaveBeenLastCalledWith(out.e); + }); + + it("does not call onChange after the component is unmounted", () => { + jest.useFakeTimers(); + const onChange = jest.fn(); + const { canvas, unmount } = mount({ tool: Tool.RECTANGLE, onChange }); + canvas.fire("mouse:up", mouseEvent("mouseup", END)); + + unmount(); + jest.advanceTimersByTime(1000); + + expect(onChange).not.toHaveBeenCalled(); + }); + + it("calls the mouse callbacks", () => { + const onMouseDown = jest.fn(); + const onMouseMove = jest.fn(); + const onMouseUp = jest.fn(); + const onMouseOut = jest.fn(); + const { canvas } = mount({ + tool: Tool.RECTANGLE, + onMouseDown, + onMouseMove, + onMouseUp, + onMouseOut, + }); + + objectFromDrag(canvas, START, END); + canvas.fire("mouse:out", mouseEvent("mouseout", END)); + + expect(onMouseDown).toHaveBeenCalledTimes(1); + expect(onMouseDown.mock.calls[0][0].e).toBeInstanceOf(MouseEvent); + expect(onMouseMove).toHaveBeenCalledTimes(1); + expect(onMouseUp).toHaveBeenCalledTimes(1); + expect(onMouseOut).toHaveBeenCalledTimes(1); + }); + + it("calls onObjectAdded when the user adds an object, not when undo or redo does", () => { + const onObjectAdded = jest.fn(); + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE, onObjectAdded }); + + const object = objectFromDrag(canvas, START, END); + expect(onObjectAdded).toHaveBeenCalledTimes(1); + expect(onObjectAdded.mock.calls[0][0].target).toBe(object); + + sketch.undo(); + sketch.redo(); + expect(onObjectAdded).toHaveBeenCalledTimes(1); + }); + + it("calls onObjectRemoved when an object is removed, also by undo", () => { + const onObjectRemoved = jest.fn(); + const { sketch, canvas } = mount({ + tool: Tool.RECTANGLE, + onObjectRemoved, + }); + const object = objectFromDrag(canvas, START, END); + + sketch.undo(); - expect(container.firstElementChild).toHaveStyle({ - width: "320px", - height: "240px", + expect(onObjectRemoved).toHaveBeenCalledTimes(1); + expect(onObjectRemoved.mock.calls[0][0].target).toBe(object); + }); + + it("calls onObjectModified, onObjectMoving, onObjectScaling and onObjectRotating", () => { + const onObjectModified = jest.fn(); + const onObjectMoving = jest.fn(); + const onObjectScaling = jest.fn(); + const onObjectRotating = jest.fn(); + const { canvas } = mount({ + tool: Tool.RECTANGLE, + onObjectModified, + onObjectMoving, + onObjectScaling, + onObjectRotating, + }); + const object = objectFromDrag(canvas, START, END); + + canvas.fire("object:modified", { target: object }); + canvas.fire("object:moving", { target: object }); + canvas.fire("object:scaling", { target: object }); + canvas.fire("object:rotating", { target: object }); + + [onObjectModified, onObjectMoving, onObjectScaling, onObjectRotating].forEach( + (callback) => { + expect(callback).toHaveBeenCalledTimes(1); + expect(callback.mock.calls[0][0].target).toBe(object); + } + ); + }); + + it("does not need any callback", () => { + const { canvas } = mount({ + tool: Tool.RECTANGLE, + onMouseDown: null as unknown as undefined, + }); + + expect(() => objectFromDrag(canvas, START, END)).not.toThrow(); }); }); - it("unmounts without throwing", () => { - const { unmount } = render(); + describe("value", () => { + beforeEach(() => jest.useFakeTimers()); + + const load = () => jest.advanceTimersByTime(100); - expect(() => unmount()).not.toThrow(); + it("loads defaultValue when it mounts", () => { + const { canvas } = mount({ + defaultValue: { objects: [rect(10, 10), rect(50, 50)] }, + }); + expect(canvas.getObjects()).toHaveLength(0); + + load(); + + expect(canvas.getObjects()).toHaveLength(2); + }); + + it("loads value when it mounts, rather than defaultValue", () => { + const { canvas } = mount({ + value: { objects: [rect(10, 10)] }, + defaultValue: { objects: [rect(10, 10), rect(50, 50)] }, + }); + + load(); + + expect(canvas.getObjects()).toHaveLength(1); + }); + + it("loads value when it changes, not when it stays the same", () => { + const first = { objects: [rect(10, 10)] }; + const second = { objects: [rect(10, 10), rect(50, 50)] }; + const { canvas, update } = mount({ value: first }); + const loadFromJSON = jest.spyOn(canvas, "loadFromJSON"); + load(); + expect(loadFromJSON).toHaveBeenCalledTimes(1); + + update({ value: second }); + load(); + expect(canvas.getObjects()).toHaveLength(2); + expect(loadFromJSON).toHaveBeenCalledTimes(2); + + update({ value: second, className: "other" }); + load(); + expect(loadFromJSON).toHaveBeenCalledTimes(2); + }); + + it("loads value on every update when forceValue is set", () => { + const value = { objects: [rect(10, 10)] }; + const { canvas, update } = mount({ value, forceValue: true }); + const loadFromJSON = jest.spyOn(canvas, "loadFromJSON"); + load(); + + update({ value, forceValue: true, className: "other" }); + load(); + + expect(loadFromJSON).toHaveBeenCalledTimes(2); + }); + + it("calls onChange, without arguments, once the value is loaded", () => { + const onChange = jest.fn(); + mount({ value: { objects: [rect(10, 10)] }, onChange }); + expect(onChange).not.toHaveBeenCalled(); + + load(); + + expect(onChange).toHaveBeenCalledTimes(1); + expect(onChange).toHaveBeenCalledWith(); + }); + + it("keeps the background color of the sketch when the value has none", () => { + const { canvas, update } = mount({ + backgroundColor: "red", + value: { objects: [rect(10, 10)] }, + }); + load(); + expect(canvas.backgroundColor).toEqual("red"); + + update({ + backgroundColor: "red", + value: { objects: [], background: "blue" }, + }); + load(); + expect(canvas.backgroundColor).toEqual("blue"); + }); + + it("makes the loaded objects follow the tool", () => { + const { canvas } = mount({ + tool: Tool.DEFAULT_TOOL, + value: { objects: [rect(10, 10)] }, + }); + + load(); + + const [object] = canvas.getObjects(); + expect(canvas.selection).toBe(false); + expect(object.selectable).toBe(false); + expect(object.evented).toBe(false); + }); + + it("does not load into a canvas which is gone", () => { + const { canvas, unmount } = mount({ value: { objects: [rect(10, 10)] } }); + const loadFromJSON = jest.spyOn(canvas, "loadFromJSON"); + + unmount(); + load(); + + expect(loadFromJSON).not.toHaveBeenCalled(); + }); }); - it("switches the tool between pencil and line without throwing", () => { - const { rerender } = render(); + describe("methods", () => { + describe("enableTouchScroll and disableTouchScroll", () => { + it("switch the touch scrolling of the canvas", () => { + const { sketch, canvas } = mount(); + expect(canvas.allowTouchScrolling).toBeFalsy(); + + sketch.enableTouchScroll(); + expect(canvas.allowTouchScrolling).toBe(true); + sketch.enableTouchScroll(); + expect(canvas.allowTouchScrolling).toBe(true); + + sketch.disableTouchScroll(); + expect(canvas.allowTouchScrolling).toBe(false); + sketch.disableTouchScroll(); + expect(canvas.allowTouchScrolling).toBe(false); + }); + }); + + describe("addImg", () => { + const stubImages = () => + jest.spyOn(fabric.Image, "fromURL").mockImplementation((_url, callback) => { + const image = new fabric.Image(document.createElement("img"), { + width: 100, + height: 60, + }); + callback?.(image); + return image; + }); + + it("adds the image at the given position and scale", () => { + const fromURL = stubImages(); + const { sketch, canvas } = mount(); + canvas.renderOnAddRemove = false; + + sketch.addImg("data:image/png;base64,00", { + left: 15, + top: 25, + scale: 2, + }); + + const [image] = canvas.getObjects(); + expect(fromURL).toHaveBeenCalledWith( + "data:image/png;base64,00", + expect.any(Function) + ); + expect(image.type).toEqual("image"); + expect([image.left, image.top, image.scaleX]).toEqual([15, 25, 2]); + }); + + it("scales the image to half, and places it at random, by default", () => { + stubImages(); + jest.spyOn(Math, "random").mockReturnValue(0.5); + const { sketch, canvas } = mount(); + canvas.renderOnAddRemove = false; + + sketch.addImg("data:image/png;base64,00"); + + const [image] = canvas.getObjects(); + expect(image.scaleX).toEqual(0.5); + expect(image.left).toEqual(0.5 * (canvas.getWidth() - 100 * 0.5)); + expect(image.top).toEqual(0.5 * (canvas.getHeight() - 60 * 0.5)); + }); + + it("can be undone", () => { + stubImages(); + const { sketch, canvas } = mount(); + canvas.renderOnAddRemove = false; + sketch.addImg("data:image/png;base64,00"); + + sketch.undo(); + + expect(canvas.getObjects()).toHaveLength(0); + }); + + it("adds nothing when the component was unmounted meanwhile", () => { + let finish: () => void = () => undefined; + jest.spyOn(fabric.Image, "fromURL").mockImplementation((_url, callback) => { + const image = new fabric.Image(document.createElement("img")); + finish = () => callback?.(image); + return image; + }); + const { sketch, canvas, unmount } = mount(); + const add = jest.spyOn(canvas, "add"); + sketch.addImg("data:image/png;base64,00"); + + unmount(); + + expect(finish).not.toThrow(); + expect(add).not.toHaveBeenCalled(); + }); + }); + + describe("zoom", () => { + it("scales the objects and their position by the factor", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + + sketch.zoom(2); + const [object] = canvas.getObjects(); + expect([object.left, object.top]).toEqual([20, 20]); + expect([object.scaleX, object.scaleY]).toEqual([2, 2]); + + sketch.zoom(0.5); + expect([object.left, object.top]).toEqual([10, 10]); + expect([object.scaleX, object.scaleY]).toEqual([1, 1]); + }); + }); + + describe("toDataURL", () => { + it("exports the canvas as png", () => { + const { sketch } = mount(); + + expect(sketch.toDataURL()).toMatch(/^data:image\/png;base64,/); + }); + + it("takes the format from the options, then from imageFormat", () => { + const { sketch, update } = mount(); + expect(sketch.toDataURL({ format: "jpeg" })).toMatch( + /^data:image\/jpeg;base64,/ + ); + + update({ imageFormat: "jpeg" }); + expect(sketch.toDataURL()).toMatch(/^data:image\/jpeg;base64,/); + expect(sketch.toDataURL({ format: "png" })).toMatch( + /^data:image\/png;base64,/ + ); + }); + + it("passes the options to the canvas", () => { + const { sketch, canvas } = mount(); + const toDataURL = jest.spyOn(canvas, "toDataURL"); + + sketch.toDataURL({ multiplier: 2, left: 1, top: 2, width: 3, height: 4 }); + + expect(toDataURL).toHaveBeenCalledWith( + expect.objectContaining({ + multiplier: 2, + left: 1, + top: 2, + width: 3, + height: 4, + }) + ); + }); + }); + + describe("toJSON", () => { + it("returns the canvas as an object", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + objectFromDrag(canvas, START, END); + + const json = sketch.toJSON(); + + expect(typeof json).toEqual("object"); + expect(json.objects).toHaveLength(2); + expect(JSON.parse(JSON.stringify(json))).toEqual(json); + }); + + it("includes the properties asked for", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END, "rect1"); + + expect(sketch.toJSON().objects).toEqual([ + expect.not.objectContaining({ id: "rect1" }), + ]); + expect(sketch.toJSON(["id"]).objects).toEqual([ + expect.objectContaining({ id: "rect1" }), + ]); + }); + }); + + describe("fromJSON", () => { + beforeEach(() => jest.useFakeTimers()); + + it("populates the canvas a moment later, from an object or a string", () => { + const { sketch, canvas } = mount(); + + sketch.fromJSON({ objects: [rect(10, 10)] }); + expect(canvas.getObjects()).toHaveLength(0); + jest.advanceTimersByTime(100); + expect(canvas.getObjects()).toHaveLength(1); + + sketch.fromJSON(JSON.stringify({ objects: [rect(10, 10), rect(5, 5)] })); + jest.advanceTimersByTime(100); + expect(canvas.getObjects()).toHaveLength(2); + }); + + it("does nothing without a value", () => { + const { sketch, canvas } = mount(); + const loadFromJSON = jest.spyOn(canvas, "loadFromJSON"); + + sketch.fromJSON(); + sketch.fromJSON(""); + jest.advanceTimersByTime(100); + + expect(loadFromJSON).not.toHaveBeenCalled(); + }); + + it("restores what toJSON returned", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + const saved = sketch.toJSON(); + canvas.clear(); + + sketch.fromJSON(saved); + jest.advanceTimersByTime(100); + + expect(canvas.getObjects()).toHaveLength(1); + expect(canvas.getObjects()[0].type).toEqual("rect"); + }); + + it("starts the history again with the loaded objects", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + const stale = objectFromDrag(canvas, START, END); + + sketch.fromJSON({ objects: [rect(10, 10), rect(50, 50)] }); + jest.advanceTimersByTime(100); + expect(canvas.getObjects()).toHaveLength(2); + + // undo takes the loaded objects back one by one, and never brings + // back the one which was replaced + sketch.undo(); + sketch.undo(); + expect(sketch.canUndo()).toBe(false); + sketch.redo(); + sketch.redo(); + expect(canvas.getObjects()).toHaveLength(2); + expect(canvas.getObjects()).not.toContain(stale); + }); + }); + + describe("clear", () => { + it("empties the canvas and the history, and returns what was on it", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + objectFromDrag(canvas, START, END); + + const discarded = sketch.clear(); + + expect(discarded.objects).toHaveLength(2); + expect(canvas.getObjects()).toHaveLength(0); + expect(sketch.canUndo()).toBe(false); + expect(sketch.canRedo()).toBe(false); + }); + + it("returns the properties asked for", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END, "rect1"); + + expect(sketch.clear(["id"]).objects).toEqual([ + expect.objectContaining({ id: "rect1" }), + ]); + }); + + it("keeps the background color of the sketch", () => { + const { sketch, canvas } = mount({ backgroundColor: "red" }); + + sketch.clear(); + + expect(canvas.backgroundColor).toEqual("red"); + }); + }); + + describe("selection", () => { + it("tells whether there is a selection, and clears it", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + expect(sketch.hasSelection()).toBe(false); + + canvas.setActiveObject(canvas.getObjects()[0]); + expect(sketch.hasSelection()).toBe(true); + + sketch.clearSelection(); + expect(sketch.hasSelection()).toBe(false); + expect(canvas.getObjects()).toHaveLength(1); + }); + + it("removes the selected object, and undo brings it back", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END, "rect1"); + objectFromDrag(canvas, START, END, "rect2"); + canvas.setActiveObject(canvas.getObjects()[0]); + + sketch.removeSelected(); + expect(ids(canvas)).toEqual(["rect2"]); + expect(sketch.hasSelection()).toBe(false); + + sketch.undo(); + expect(ids(canvas)).toEqual(["rect2", "rect1"]); + }); + + it("removes the object again on redo", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END, "rect1"); + canvas.setActiveObject(canvas.getObjects()[0]); + sketch.removeSelected(); + sketch.undo(); + expect(ids(canvas)).toEqual(["rect1"]); + + sketch.redo(); + + expect(ids(canvas)).toEqual([]); + }); + + it("removes every object of a multiple selection, one undo each", () => { + const onObjectRemoved = jest.fn(); + const { sketch, canvas } = mount({ + tool: Tool.RECTANGLE, + onObjectRemoved, + }); + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END, "rect1"); + objectFromDrag(canvas, END, [80, 90], "rect2"); + objectFromDrag(canvas, START, END, "rect3"); + const [first, second] = canvas.getObjects(); + const left = second.left; + canvas.setActiveObject( + new fabric.ActiveSelection([first, second], { canvas }) + ); + + sketch.removeSelected(); + expect(ids(canvas)).toEqual(["rect3"]); + expect(onObjectRemoved).toHaveBeenCalledTimes(2); + + sketch.undo(); + sketch.undo(); + expect(ids(canvas).sort()).toEqual(["rect1", "rect2", "rect3"]); + // the objects come back where they were, not relative to the selection + expect(second.left).toEqual(left); + }); + + it("does nothing without a selection", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + + expect(() => sketch.removeSelected()).not.toThrow(); + + expect(canvas.getObjects()).toHaveLength(1); + }); + }); + + describe("copy and paste", () => { + it("copies the selected object and pastes it, a bit further", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END, "rect1"); + objectFromDrag(canvas, START, END, "rect2"); + canvas.setActiveObject(canvas.getObjects()[0]); + expect(canvas.getObjects()).toHaveLength(2); + + sketch.copy(); + sketch.paste(); + + expect(canvas.getObjects()).toHaveLength(3); + const pasted = canvas.getObjects()[2]; + expect([pasted.left, pasted.top]).toEqual([START[0] + 10, START[1] + 10]); + expect(canvas.getActiveObject()).toBe(pasted); + }); + + it("pastes further down on every paste", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END); + canvas.setActiveObject(canvas.getObjects()[0]); + sketch.copy(); + + sketch.paste(); + sketch.paste(); - expect(() => rerender()).not.toThrow(); - expect(() => rerender()).not.toThrow(); + const [, first, second] = canvas.getObjects(); + expect(first.left).toEqual(START[0] + 10); + expect(second.left).toEqual(START[0] + 20); + }); + + it("pastes a multiple selection", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END); + objectFromDrag(canvas, END, [80, 90]); + canvas.setActiveObject( + new fabric.ActiveSelection(canvas.getObjects(), { canvas }) + ); + + sketch.copy(); + sketch.paste(); + + expect(canvas.getObjects()).toHaveLength(4); + }); + + it("can undo a paste", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + canvas.renderOnAddRemove = false; + objectFromDrag(canvas, START, END); + canvas.setActiveObject(canvas.getObjects()[0]); + sketch.copy(); + sketch.paste(); + + sketch.undo(); + + expect(canvas.getObjects()).toHaveLength(1); + }); + + it("does nothing without a selection to copy, or without a copy to paste", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + objectFromDrag(canvas, START, END); + + expect(() => { + sketch.paste(); + sketch.copy(); + sketch.paste(); + }).not.toThrow(); + + expect(canvas.getObjects()).toHaveLength(1); + }); + }); + + describe("setBackgroundFromDataUrl", () => { + /** An image loads as soon as its source is set */ + const stubImages = () => + jest.spyOn(window, "Image").mockImplementation(() => { + const img = document.createElement("img"); + img.width = 200; + img.height = 100; + Object.defineProperty(img, "src", { + set: () => img.onload?.(new Event("load")), + }); + return img; + }); + + it("sets the image as the background of the canvas", () => { + stubImages(); + const { sketch, canvas } = mount(); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00"); + + const image = canvas.backgroundImage as fabric.Image; + expect(image).toBeInstanceOf(fabric.Image); + expect(image.scaleX).toEqual(1); + expect(image.scaleY).toEqual(1); + }); + + it("stretches the image to the canvas", () => { + stubImages(); + const { sketch, canvas } = mount(); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00", { + stretched: true, + }); + + const image = canvas.backgroundImage as fabric.Image; + expect(image.scaleX).toEqual(canvas.getWidth() / 200); + expect(image.scaleY).toEqual(canvas.getHeight() / 100); + }); + + it("stretches the image to the width, or the height, only", () => { + stubImages(); + const { sketch, canvas } = mount(); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00", { + stretchedX: true, + }); + let image = canvas.backgroundImage as fabric.Image; + expect(image.scaleX).toEqual(canvas.getWidth() / 200); + expect(image.scaleY).toEqual(canvas.getWidth() / 200); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00", { + stretchedY: true, + }); + image = canvas.backgroundImage as fabric.Image; + expect(image.scaleX).toEqual(canvas.getHeight() / 100); + expect(image.scaleY).toEqual(canvas.getHeight() / 100); + }); + + it("passes the other options to the image", () => { + stubImages(); + const { sketch, canvas } = mount(); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00", { + opacity: 0.5, + }); + + expect((canvas.backgroundImage as fabric.Image).opacity).toEqual(0.5); + }); + + it("sets nothing when the component was unmounted meanwhile", () => { + let load: () => void = () => undefined; + jest.spyOn(window, "Image").mockImplementation(() => { + const img = document.createElement("img"); + Object.defineProperty(img, "src", { + set: () => { + load = () => img.onload?.(new Event("load")); + }, + }); + return img; + }); + const { sketch, canvas, unmount } = mount(); + const setBackgroundImage = jest.spyOn(canvas, "setBackgroundImage"); + sketch.setBackgroundFromDataUrl("data:image/png;base64,00"); + + unmount(); + + expect(load).not.toThrow(); + expect(setBackgroundImage).not.toHaveBeenCalled(); + }); + + it("asks for the image anonymously", () => { + const setAttribute = jest.spyOn(HTMLImageElement.prototype, "setAttribute"); + const { sketch } = mount(); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00"); + + expect(setAttribute).toHaveBeenCalledWith("crossOrigin", "anonymous"); + }); + }); + + describe("addText", () => { + it("adds a text at the center of the canvas", () => { + const { sketch, canvas } = mount(); + canvas.renderOnAddRemove = false; + + sketch.addText("hello", { fontSize: 20 }); + + const [text] = canvas.getObjects() as fabric.IText[]; + expect(text.type).toEqual("i-text"); + expect(text.text).toEqual("hello"); + expect(text.fontSize).toEqual(20); + expect(text.left).toEqual((canvas.getWidth() - (text.width ?? 0)) / 2); + expect(text.top).toEqual((canvas.getHeight() - (text.height ?? 0)) / 2); + }); + + it("adds the text where it is asked to", () => { + const { sketch, canvas } = mount(); + canvas.renderOnAddRemove = false; + + sketch.addText("hello", { left: 11, top: 22 }); + + const [text] = canvas.getObjects(); + expect([text.left, text.top]).toEqual([11, 22]); + }); + + it("does not change the options it is given", () => { + const { sketch, canvas } = mount(); + canvas.renderOnAddRemove = false; + const options = { fontSize: 20 }; + + sketch.addText("hello", options); + + expect(options).toEqual({ fontSize: 20 }); + }); + + it("can be undone", () => { + const { sketch, canvas } = mount(); + canvas.renderOnAddRemove = false; + sketch.addText("hello"); + + sketch.undo(); + + expect(canvas.getObjects()).toHaveLength(0); + }); + }); }); }); diff --git a/packages/react-sketch/src/index.spec.tsx b/packages/react-sketch/src/index.spec.tsx new file mode 100644 index 00000000..4121317a --- /dev/null +++ b/packages/react-sketch/src/index.spec.tsx @@ -0,0 +1,51 @@ +import { render } from "@testing-library/react"; +import Sketch, { SketchField, Tools, Types } from "./index"; + +describe("exports", () => { + it("exports the component by name", () => { + expect(SketchField).toBeDefined(); + expect(typeof SketchField).toEqual("function"); + }); + + it("exports Tools with the names and values of 0.5.x", () => { + expect(Tools).toEqual({ + Select: "select", + Pencil: "pencil", + Line: "line", + Arrow: "arrow", + Rectangle: "rectangle", + RectangleLabel: "rectangle-label", + Circle: "circle", + Pan: "pan", + DefaultTool: "default-tool", + Highlighter: "highlighter", + }); + }); + + it("has a tool in Tools for every Tool", () => { + expect(Object.values(Tools).sort()).toEqual(Object.values(Types.Tool).sort()); + }); + + it("exports the types namespace, with the Tool enumeration", () => { + expect(Types.Tool.PENCIL).toEqual("pencil"); + }); + + describe("default export", () => { + it("is the component", () => { + expect(Sketch).toBe(SketchField); + const { container } = render(); + + expect(container.querySelector("canvas")).toBeInTheDocument(); + }); + + it("carries SketchField and Tools, as in 0.5.x", () => { + expect(Sketch.SketchField).toBe(SketchField); + expect(Sketch.Tools).toBe(Tools); + expect(Sketch.Tools.Pencil).toEqual("pencil"); + + const { container } = render(); + + expect(container.querySelector("canvas")).toBeInTheDocument(); + }); + }); +}); From e96993f0acb3bab079e1f1a53f34a970b523bc17 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 09:04:37 +0300 Subject: [PATCH 46/70] docs: update the code of conduct to Contributor Covenant 2.1 --- CODE_OF_CONDUCT.md | 109 ++++++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 51 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 6b43580a..04d05730 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,75 +2,82 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards -Examples of behavior that contributes to creating a positive environment -include: +Examples of behavior that contributes to a positive environment for our community include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community -Examples of unacceptable behavior by participants include: +Examples of unacceptable behavior include: -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting +- The use of sexualized language or imagery, and sexual attention or advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting -## Our Responsibilities +## Enforcement Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. +Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at thomas.bolis@gmail.com. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at thomas.bolis@gmail.com. All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. -[homepage]: https://www.contributor-covenant.org +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq +For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations From d7f9d087e5c7fb1f49530ec607a7afea37771860 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 09:04:58 +0300 Subject: [PATCH 47/70] chore: complete the package metadata of react-sketch and showcase --- packages/react-sketch/package.json | 7 +++++-- packages/showcase/package.json | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/react-sketch/package.json b/packages/react-sketch/package.json index be60ebe7..b974830d 100644 --- a/packages/react-sketch/package.json +++ b/packages/react-sketch/package.json @@ -1,14 +1,17 @@ { "name": "react-sketch", "version": "1.0.0", - "description": "Sketch Element for React based applications, backed-up by fabricjs as its core", + "description": "React component for drawing on an HTML canvas with pencil, line, arrow, rectangle and circle tools, built on fabric.js, with undo/redo, JSON import/export and TypeScript types", "keywords": [ "react", "canvas", "sketch", + "drawing", + "fabric", "fabricjs", - "fabric.js" + "typescript" ], + "homepage": "https://github.com/tbolis/react-sketch#readme", "author": { "name": "Thomas Bolis", "email": "thomas.bolis@gmail.com" diff --git a/packages/showcase/package.json b/packages/showcase/package.json index b64663b6..74a3fa27 100644 --- a/packages/showcase/package.json +++ b/packages/showcase/package.json @@ -3,12 +3,20 @@ "version": "1.0.0", "private": true, "description": "Demo application for react-sketch: interactive tools panel and the defaultValue, controlled value and addImg usage scenarios", + "homepage": "https://github.com/tbolis/react-sketch#readme", + "author": { + "name": "Thomas Bolis", + "email": "thomas.bolis@gmail.com" + }, "license": "MIT", "repository": { "type": "git", "url": "https://github.com/tbolis/react-sketch.git", "directory": "packages/showcase" }, + "bugs": { + "url": "https://github.com/tbolis/react-sketch/issues" + }, "scripts": { "start": "webpack serve --mode development --open", "build": "webpack --mode production", From 7b754b6fbfd9aca243c30cce1185e327767b4d89 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 09:10:05 +0300 Subject: [PATCH 48/70] docs: rewrite the README for the TypeScript package and the workspaces layout --- README.md | 399 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 322 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index 8e1836d7..755a9a43 100644 --- a/README.md +++ b/README.md @@ -1,118 +1,363 @@ # react-sketch -[![GitHub release][github-image]][github-url] +[![CI][ci-image]][ci-url] [![NPM release][npm-image]][npm-url] [![NPM downloads][downloads-image]][downloads-url] -[![Build status][travis-image]][travis-url] - -A Sketch tool for React based applications, backed-up by [FabricJS](http://fabricjs.com/) - -![idea-image] _Please note that this module is still in development! Feel free to send me enhancements and ideas :)_ +A sketch field component for React applications, built on [fabric.js](https://www.fabricjs.com/). +Draw with a pencil, lines, arrows, rectangles and circles, select and move objects, add images and +text, undo and redo, and export the drawing as JSON or as an image. The package includes TypeScript +declarations. ## Installation ```sh -npm install react-sketch --save +yarn add react-sketch ``` -or with yarn +or ```sh -yarn add react-sketch +npm install react-sketch +``` + +`react` (`^17.0.0 || ^18.0.0 || ^19.0.0`) is a peer dependency: install it in your application. +`fabric` is a dependency of `react-sketch` and is installed with it. + +## Usage + +`SketchField` is a class component. The methods of the component (`undo`, `toJSON`, ...) are available +through a `ref`, from the moment the component is mounted until it is unmounted. + +### TypeScript + +```tsx +import { useRef, useState } from "react"; +import { SketchField, Tools } from "react-sketch"; + +export const Drawing = () => { + const sketch = useRef(null); + const [canUndo, setCanUndo] = useState(false); + + return ( + <> + setCanUndo(sketch.current?.canUndo() ?? false)} + /> + + + ); +}; ``` -### Source installation +All types are available in the `Types` namespace, for example `Types.SketchProperties`, +`Types.SketchEvent` and the `Types.Tool` enumeration: -In order to build from source, read the [relevant instructions](http://fabricjs.com/fabric-intro-part-4#node) first. +```tsx +import { SketchField, Types } from "react-sketch"; -Tested with node versions 6,7,8. +const onObjectAdded = (event: Types.SketchEvent) => { + console.log("added a", event.target?.type); +}; -## Usage +export const Highlight = () => ( + +); +``` + +### JavaScript + +```jsx +import { useRef } from "react"; +import { SketchField, Tools } from "react-sketch"; + +export const Drawing = () => { + const sketch = useRef(null); + + return ( +
+ + +
+ ); +}; +``` -Import the relevant SketchField component and use it, you can find more on the examples folder of the project +The default export of 0.5.x keeps working. It is the component, which also carries `SketchField` and +`Tools`: -```javascript -import {SketchField, Tools} from 'react-sketch'; +```jsx +import Sketch from "react-sketch"; + +export const Drawing = () => ; +``` -class SketchFieldDemo extends React.Component { - render() { - return ( - - ) - } -} +### Initial, loaded and saved drawings + +`toJSON()` returns the drawing as an object. `defaultValue` and `value` accept that object, or the same +object as a JSON string. + +- `defaultValue` is loaded when the component mounts, unless `value` is set. +- `value` is loaded when it changes (a different object, compared by identity). Pass a new object, for + example `{ ...saved }`, to load the same drawing again, or set `forceValue` to load `value` on every + update of the component. +- The drawing is loaded 100 ms later, the undo history is reset, and `onChange` is called when the load + is done. +- `value` is not updated while the user draws. Read the drawing with `toJSON()`. Do not store the result + of `toJSON()` in `value` from `onChange`: loading a value calls `onChange`, so the value would be + loaded again and again. + +```tsx +import { useRef, useState } from "react"; +import { SketchField, Tools, Types } from "react-sketch"; + +export const SaveAndLoad = ({ initial }: { initial: Types.SketchValue }) => { + const sketch = useRef(null); + const [saved, setSaved] = useState(); + const [value, setValue] = useState(); + + return ( + <> + + + + + ); +}; +``` +### Images, text and export + +```tsx +import { useRef } from "react"; +import { SketchField, Tools } from "react-sketch"; + +export const Editor = ({ imageUrl }: { imageUrl: string }) => { + const sketch = useRef(null); + + const download = () => { + const link = document.createElement("a"); + link.href = sketch.current?.toDataURL({ format: "png", multiplier: 2 }) ?? ""; + link.download = "sketch.png"; + link.click(); + }; + + return ( + <> + + + + + + + ); +}; ``` -Configuration Options - -| Option | Type | Default | Description | -|--- |--- |--- |--- | -| tool | Enumeration (string) | pencil | The tool to use, can be select, pencil, circle, rectangle, pan | -| lineColor | String | black | The color of the line | -| lineWidth | Number | 1 | The width of the line | -| fillColor | String | transparent | The fill color (hex format) of the shape when applicable (e.g. circle) | -| backgroundColor | String | transparent | The the background color of the sketch in hex or rgba | -| undoSteps | Number | 15 | number of undo/redo steps to maintain | -| imageFormat | String | png | image format when calling toDataURL, can be png or jpeg | -| width | Number | No Value(null)| Set/control the canvas width, if left empty the sketch will scale to parent element | -| height | Number | 512 | Set/control the canvas height, if left empty the sketch will take a reasonable default height | -| value | JSON | | Property to utilize and handle the sketch data as controlled component | -| defaultValue | JSON | | Default initial data, to load. If value is set then value will be loaded instead | -| widthCorrection | Number | 2 | Specify some width correction which will be applied on resize of canvas, this will help to correct some possible border on the canvas style | -| heightCorrection | Number | 0 | Specify some height correction which will be applied on resize of canvas, this will help to correct some possible border on the canvas style | - - -Available tools - -| Tool | Description | -|--- |--- | -| Pencil | Free drawing pencil | -| Line | Gives you the ability to draw lines | -| Rectangle | Create rectangles | -| Circle | Create circles | -| Rectangle | Create Rectangles | -| Select | Disables drawing and gives you the ability to modify existing elements in the canvas | -| Pan | Disables drawing and gives you the ability to move the complete canvas at will, useful to adjust the canvas when zooming in or out (thank you [wmaillard](https://github.com/wmaillard)) | - - -## Examples - -The project includes a webpack server for running the examples, just run: + +## Properties + +All properties are optional. + +| Property | Type | Default | Description | +| ------------------ | ------------------------------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `tool` | `Types.Tool` or `string` | `"select"` | The tool to use, see [Tools](#tools). `null` is treated as `"select"`, an unknown name selects `"pencil"`. | +| `lineColor` | `string` | `"black"` | Color of the line. | +| `lineWidth` | `number` | `10` | Width of the line. | +| `fillColor` | `string` | `"transparent"` | Fill color of the shapes, where applicable (rectangle, rectangle-label, circle). | +| `backgroundColor` | `string` | `"transparent"` | Background color of the sketch, in hex or rgba format. | +| `opacity` | `number` | `1.0` | Accepted and not applied: it has no effect. It had no effect in 0.5.x either. | +| `undoSteps` | `number` | `25` | Number of undo/redo steps to keep. Read when the component mounts, a later change has no effect. | +| `imageFormat` | `string` | | Default format of `toDataURL`, `png` or `jpeg`, used when the options of the call have no `format`. Without it, `png`. | +| `value` | `object` or `string` | | Drawing to load, loaded again when it changes. See [Initial, loaded and saved drawings](#initial-loaded-and-saved-drawings). | +| `forceValue` | `boolean` | `false` | Load `value` on every update of the component, even when it did not change. | +| `defaultValue` | `object` or `string` | | Drawing loaded when the component mounts, unless `value` is set. | +| `widthCorrection` | `number` | `0` | Pixels subtracted from the width of the container when the canvas is resized. Compensates a border or padding of the container. | +| `heightCorrection` | `number` | `0` | Pixels subtracted from the height of the container when the canvas is resized. | +| `autoresize` | `boolean` | `true` | Resize the canvas, and scale its objects, when the window is resized. The canvas is always fitted to its container on mount and when `width` or `height` change. | +| `width` | `number` | undefined | Width of the sketch in pixels. When not set, the sketch takes the width of its parent element. | +| `height` | `number` | `512` | Height of the sketch in pixels. | +| `className` | `string` | | Class name of the container element of the canvas. | +| `style` | `CSS.Properties` | | Style of the container element of the canvas. | +| `onChange` | `(event?: Event) => void` | | Called 10 ms after every mouse up and mouse out on the canvas, whether or not the drawing changed (see [Known limitations](#known-limitations)), and after `undo`, `redo` and the load of a value. The argument is the DOM event after a mouse event, nothing otherwise. | +| `onObjectAdded` | `(event: Types.SketchEvent) => void` | no-op | An object was added by the user. Not called when `undo` or `redo` add an object back. | +| `onObjectModified` | `(event: Types.SketchEvent) => void` | no-op | An object was modified by the user (moved, scaled, rotated). | +| `onObjectRemoved` | `(event: Types.SketchEvent) => void` | no-op | An object was removed from the sketch. | +| `onObjectMoving` | `(event: Types.SketchEvent) => void` | no-op | An object is being moved. | +| `onObjectScaling` | `(event: Types.SketchEvent) => void` | no-op | An object is being scaled. | +| `onObjectRotating` | `(event: Types.SketchEvent) => void` | no-op | An object is being rotated. | +| `onMouseDown` | `(event: Types.SketchEvent) => void` | no-op | Mouse down on the canvas. | +| `onMouseMove` | `(event: Types.SketchEvent) => void` | no-op | Mouse move on the canvas. | +| `onMouseUp` | `(event: Types.SketchEvent) => void` | no-op | Mouse up on the canvas. | +| `onMouseOut` | `(event: Types.SketchEvent) => void` | no-op | The mouse left the canvas. | + +`Types.SketchEvent` is `{ e?: Event; target?: Types.SketchObject; [key: string]: unknown }`: `e` is the +DOM event, `target` is the object the event is about (object events only). `Types.SketchObject` is +`{ type?: string; [key: string]: unknown }`, for example with the type `"path"`, `"line"` or `"rect"`. + +## Methods + +The methods are properties of the component instance, access them through a `ref`. They are valid from +the moment the component is mounted until it is unmounted. Calling one before the component is mounted +throws. + +| Method | Returns | Description | +| --------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `undo()` | `void` | Undo the last action. Does nothing when there is nothing to undo. Calls `onChange` when it undid something. | +| `redo()` | `void` | Redo the last undone action. Does nothing when there is nothing to redo. Calls `onChange` when it redid something. | +| `canUndo()` | `boolean` | Whether `undo()` has something to undo. | +| `canRedo()` | `boolean` | Whether `redo()` has something to redo. | +| `toDataURL(options?)` | `string` | The sketch as a data URL. Options: `format` (`"png"` or `"jpeg"`, default `imageFormat`, then `"png"`), `quality` (0 to 1, jpeg only, default 1), `multiplier` (default 1), and the crop area `left`, `top`, `width`, `height`. | +| `toJSON(propertiesToInclude?)` | `Types.SketchData` | The sketch as an object. `propertiesToInclude` lists additional properties of the objects to include. | +| `fromJSON(json?)` | `void` | Load a drawing (object or JSON string). Loads after 100 ms, resets the undo history, applies the tool configuration again and calls `onChange`. Does nothing for an empty argument. | +| `clear(propertiesToInclude?)` | `Types.SketchData` | Remove all objects and reset the undo history. Returns the discarded content as JSON. The `backgroundColor` property is kept. | +| `addImg(dataUrl, options?)` | `void` | Add an image, given as URL or data URL, as an object. It is added when it has loaded. Options: `left`, `top` (default: random position), `scale` (default `0.5`). | +| `addText(text, options?)` | `void` | Add an editable text. It is centered unless `left` or `top` are given. `options` are the options of a fabric text object, for example `fontSize`, `fill`. | +| `setBackgroundFromDataUrl(dataUrl, options?)` | `void` | Use an image as background. Options: `stretched` (fit the canvas), `stretchedX` (fit the width), `stretchedY` (fit the height); any other option is an image option. | +| `zoom(factor)` | `void` | Scale the objects by a factor: 2 doubles their size, 0.5 halves it. | +| `hasSelection()` | `boolean` | Whether an object is selected. | +| `clearSelection()` | `void` | Deselect the selected object or objects. | +| `removeSelected()` | `void` | Remove the selected object or objects. It can be undone. | +| `copy()` | `void` | Copy the selected object. Does nothing without a selection. | +| `paste()` | `void` | Paste the copied object, 10 pixels further down and to the right of the previous one. Does nothing when nothing was copied. | +| `enableTouchScroll()` | `void` | Allow the page to scroll on touch devices when touching the canvas. | +| `disableTouchScroll()` | `void` | Do not scroll the page when touching the canvas. | + +## Tools + +Use the tools by name (`"pencil"`), with `Tools` (`Tools.Pencil`) or with the enumeration +`Types.Tool` (`Types.Tool.PENCIL`). + +| Tool | `Tools` | Value | Description | +| --------------- | ---------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| Select | `Tools.Select` | `select` | Disables drawing. Objects can be selected, moved, scaled and rotated. | +| Pencil | `Tools.Pencil` | `pencil` | Free drawing. | +| Line | `Tools.Line` | `line` | Straight lines. | +| Arrow | `Tools.Arrow` | `arrow` | Lines with an arrow head. | +| Rectangle | `Tools.Rectangle` | `rectangle` | Rectangles, filled with `fillColor`. | +| Rectangle label | `Tools.RectangleLabel` | `rectangle-label` | Rectangles with a text box above them. The text box follows the rectangle when it is moved or scaled. | +| Circle | `Tools.Circle` | `circle` | Circles, filled with `fillColor`. The drag from the first to the second point is the diameter. | +| Pan | `Tools.Pan` | `pan` | Disables drawing. Dragging moves the whole canvas, useful after zooming (contributed by [wmaillard](https://github.com/wmaillard)). | +| Highlighter | `Tools.Highlighter` | `highlighter` | Free drawing in a semi-transparent color. `lineColor` must be a hex code or a color name; any other value falls back to the default color. | +| Default tool | `Tools.DefaultTool` | `default-tool` | Disables drawing and selection. Use it to show a drawing that is not edited. | + +## Exports + +| Export | Description | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `SketchField` | The component (named export). Also usable as a type, for the `ref`. | +| `Tools` | The tools by name: `Select`, `Pencil`, `Line`, `Arrow`, `Rectangle`, `RectangleLabel`, `Circle`, `Pan`, `DefaultTool`, `Highlighter`. | +| `Types` | Namespace of the types: `Tool` (enumeration), `Tools`, `SketchProperties`, `SketchEvent`, `SketchObject`, `SketchValue`, `SketchData`, `DataUrlOptions`, `ImageOptions`, `BackgroundOptions`, `TextOptions`. | +| default export | The component, which also carries `SketchField` and `Tools` (as in 0.5.x). | + +## Known limitations + +- `opacity` is accepted and not applied. +- `onChange` is called after every mouse up and mouse out, whether or not the drawing changed (issue [#80](https://github.com/tbolis/react-sketch/issues/80)). +- `undoSteps` keeps one step more than its value: `undoSteps + 1` actions can be undone. +- Drawing an arrow records undo steps which have no visible effect. +- With `forceValue`, every update of the component (for example each re-render of the parent with new properties) loads `value` again. + +## Support + +- React: `^17.0.0 || ^18.0.0 || ^19.0.0` (peer dependency). The test suite runs on React 19. +- Browsers: browsers with HTML5 canvas support. No polyfills are included and Internet Explorer 11 is not supported. +- Server-side rendering has not been tested. Render the component in the browser only. +- Node.js: the package has no runtime requirement for Node.js. Developing in this repository requires Node.js 22 or later (`.nvmrc` has 24) and Yarn 1. + +## Repository layout + +This is a Yarn 1 workspaces monorepo. + +| Path | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `packages/react-sketch` | The library, published to npm as `react-sketch`. The build output is `dist/index.js` (UMD bundle, `react` and `fabric` are external) and `dist/index.d.ts` (type declarations). | +| `packages/showcase` | Demo application (not published): a tools panel and the `defaultValue`, `value` and `addImg` scenarios. | +| `.github/workflows` | Continuous integration ([ci.yml](.github/workflows/ci.yml)). | + +## Development + +Requirements: Node.js 22 or later, Yarn 1. ```sh git clone https://github.com/tbolis/react-sketch.git +cd react-sketch yarn install -npm start +yarn start ``` -and navigate to http://localhost:23000 +`yarn start` serves the showcase at . It uses the sources of the library, so the +library does not have to be built first. + +| Command | Description | +| ---------------- | --------------------------------------------------------------------------------------------------- | +| `yarn start` | Serve the showcase on port 23000. | +| `yarn build` | Build the library (`packages/react-sketch/dist`) and the showcase (`packages/showcase/build`). | +| `yarn test` | Run the tests of the library (Jest). `yarn test:watch` and `yarn test:coverage` are also available. | +| `yarn typecheck` | Type-check both packages. | +| `yarn lint` | Lint the TypeScript sources with ESLint. `yarn lint:fix` fixes what it can. | +| `yarn format` | Format the repository with Prettier. `yarn format:check` only checks. | +| `yarn clean` | Remove the build output. | + +## Upgrading from 0.5.x + +1.0.0 is a rewrite in TypeScript which keeps the component API of 0.5.x: the properties, the methods, +the named exports `SketchField` and `Tools`, and the default export. It requires React 17 or later and +does not support Internet Explorer 11. A few behaviors differ deliberately and several bugs are fixed, +the [changelog](CHANGELOG.md) lists them. -You can as well check the live showcase here: http://tbolis.github.io/showcase/react-sketch/ - -## Issues +## Release notes -See https://github.com/tbolis/react-sketch/issues +See [CHANGELOG.md](CHANGELOG.md). -## Changelog +## Contributing -See https://github.com/tbolis/react-sketch/blob/master/CHANGELOG.md +Issues and pull requests are welcome at . Before opening a +pull request run `yarn lint`, `yarn typecheck`, `yarn test` and `yarn format:check`. A pre-commit hook +(husky and lint-staged) runs ESLint and Prettier on the staged files. Participation in this project is +subject to the [Code of Conduct](CODE_OF_CONDUCT.md). ## License -MIT, do remember to add a reference if you find it useful :) +MIT. See [LICENSE](LICENSE). -[warning-image]: /docs/img/warning.png -[idea-image]: /docs/img/idea.png -[github-image]: https://img.shields.io/github/release/tbolis/react-sketch.svg -[github-url]: https://github.com/tbolis/react-sketch/releases +[ci-image]: https://github.com/tbolis/react-sketch/actions/workflows/ci.yml/badge.svg +[ci-url]: https://github.com/tbolis/react-sketch/actions/workflows/ci.yml [npm-image]: https://img.shields.io/npm/v/react-sketch.svg [npm-url]: https://www.npmjs.com/package/react-sketch [downloads-image]: https://img.shields.io/npm/dm/react-sketch.svg [downloads-url]: https://www.npmjs.com/package/react-sketch -[travis-image]: https://img.shields.io/travis/tbolis/react-sketch.svg -[travis-url]: https://travis-ci.org/tbolis/react-sketch From ac542519c34606369f524190bd9965e6c72511b3 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 09:10:05 +0300 Subject: [PATCH 49/70] docs: add READMEs for the react-sketch package and the showcase --- packages/react-sketch/README.md | 61 +++++++++++++++++++++++++++++++++ packages/showcase/README.md | 33 ++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 packages/react-sketch/README.md create mode 100644 packages/showcase/README.md diff --git a/packages/react-sketch/README.md b/packages/react-sketch/README.md new file mode 100644 index 00000000..305c4b8f --- /dev/null +++ b/packages/react-sketch/README.md @@ -0,0 +1,61 @@ +# react-sketch + +A sketch field component for React applications, built on [fabric.js](https://www.fabricjs.com/). +Pencil, line, arrow, rectangle, circle, highlighter, pan and select tools, images and text, undo and +redo, JSON and image export. Includes TypeScript declarations. + +## Installation + +```sh +yarn add react-sketch +``` + +or + +```sh +npm install react-sketch +``` + +`react` (`^17.0.0 || ^18.0.0 || ^19.0.0`) is a peer dependency: install it in your application. +`fabric` is installed with `react-sketch`. + +## Usage + +```tsx +import { useRef } from "react"; +import { SketchField, Tools } from "react-sketch"; + +export const Drawing = () => { + const sketch = useRef(null); + + return ( + <> + + + + ); +}; +``` + +Exports: `SketchField` (the component), `Tools` (`Select`, `Pencil`, `Line`, `Arrow`, `Rectangle`, +`RectangleLabel`, `Circle`, `Pan`, `DefaultTool`, `Highlighter`), `Types` (namespace with the types and +the `Tool` enumeration) and a default export, which is the component with `SketchField` and `Tools` +attached (as in 0.5.x). + +## Documentation + +The properties, the methods, the tools and the usage with a saved or controlled drawing are documented +in the [README of the repository](https://github.com/tbolis/react-sketch#readme). Release notes are in +the [changelog](https://github.com/tbolis/react-sketch/blob/master/CHANGELOG.md). Report problems at +. + +## License + +MIT diff --git a/packages/showcase/README.md b/packages/showcase/README.md new file mode 100644 index 00000000..df896885 --- /dev/null +++ b/packages/showcase/README.md @@ -0,0 +1,33 @@ +# showcase + +Demo application for [react-sketch](../react-sketch). It is private and is not published to npm. + +It shows a `SketchField` with a tools panel for the properties of the component, an actions toolbar for +its methods (undo, redo, clear, download, copy, paste, zoom), and the usage scenarios `defaultValue`, +`value` with `forceValue`, and `addImg`. + +## Run + +From the root of the repository: + +```sh +yarn install +yarn start +``` + +The application is served at . It imports `react-sketch` from the sources of +`packages/react-sketch` (webpack alias), so the library does not have to be built first. + +## Scripts + +Run them from the root of the repository, or with `yarn workspace showcase - - - diff --git a/examples/data.json.controlled.js b/examples/data.json.controlled.js deleted file mode 100644 index a0c2465b..00000000 --- a/examples/data.json.controlled.js +++ /dev/null @@ -1,540 +0,0 @@ -export default { - objects: [ - { - type: "line", - originX: "center", - originY: "center", - left: 98.41, - top: 133.92, - width: 5, - height: 162, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: -2.5000111045611817, - x2: 2.5000111045611817, - y1: -81.00166757284126, - y2: 81.00166757284126, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 121.41, - top: 130.42, - width: 41, - height: 1, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: -20.500091057401697, - x2: 20.500091057401697, - y1: 0.5000102936595141, - y2: -0.5000102936595141, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 144.41, - top: 121.42, - width: 1, - height: 187, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: -0.5000022209122363, - x2: 0.5000022209122363, - y1: -93.5019249143291, - y2: 93.5019249143291, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 187.41, - top: 182.92, - width: 33, - height: 0, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: -16.5000732901038, - x2: 16.5000732901038, - y1: 0, - y2: 0, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 202.41, - top: 166.42, - width: 3, - height: 33, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: 1.500006662736709, - x2: -1.500006662736709, - y1: 16.500339690763965, - y2: -16.500339690763965, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 184.41, - top: 149.92, - width: 35, - height: 0, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: 17.500077731928272, - x2: -17.500077731928272, - y1: 0, - y2: 0, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 169.91, - top: 182.42, - width: 6, - height: 65, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: -3.000013325473418, - x2: 3.000013325473418, - y1: -32.5006690878684, - y2: 32.5006690878684, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 189.91, - top: 215.42, - width: 34, - height: 1, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: -17.000075511016036, - x2: 17.000075511016036, - y1: -0.5000102936595141, - y2: 0.5000102936595141, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 235.91, - top: 134.92, - width: 10, - height: 156, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: 5.000022209122363, - x2: -5.000022209122363, - y1: 78.00160581088417, - y2: -78.00160581088417, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 260.91, - top: 135.92, - width: 12, - height: 148, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - x1: 6.00002665094685, - x2: -6.00002665094685, - y1: 74.00152346160806, - y2: -74.00152346160806, - }, - { - type: "circle", - originX: "left", - originY: "center", - left: 284.91, - top: 154.92, - width: 57.32, - height: 57.32, - fill: "transparent", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 47.12, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - radius: 28.65783551172888, - startAngle: 0, - endAngle: 6.283185307179586, - }, - { - type: "rect", - originX: "left", - originY: "top", - left: 374.91, - top: 46.91, - width: 14, - height: 123, - fill: "#b0bc00", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - rx: 0, - ry: 0, - }, - { - type: "circle", - originX: "left", - originY: "center", - left: 373.91, - top: 182.92, - width: 21.93, - height: 21.93, - fill: "#b0bc00", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 46.85, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - radius: 10.96599903840613, - startAngle: 0, - endAngle: 6.283185307179586, - }, - { - type: "path", - originX: "left", - originY: "top", - left: 121.99000000000001, - top: 234.25212246173203, - width: 651.02, - height: 174.76, - fill: null, - stroke: "black", - strokeWidth: 10, - strokeDashArray: null, - strokeLineCap: "round", - strokeLineJoin: "round", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - transformMatrix: null, - skewX: 0, - skewY: 0, - pathOffset: { x: 452.5, y: 326.631061230866 }, - path: [ - ["M", 126.99, 270], - ["Q", 127, 270, 131, 270], - ["Q", 135, 270, 185.5, 270], - ["Q", 236, 270, 281.5, 270], - ["Q", 327, 270, 351.5, 268.5], - ["Q", 376, 267, 445.5, 261], - ["Q", 515, 255, 555, 250], - ["Q", 595, 245, 609, 242], - ["Q", 623, 239, 623, 239.5], - ["Q", 623, 240, 618.5, 245], - ["Q", 614, 250, 608, 254.5], - ["Q", 602, 259, 592.5, 264], - ["Q", 583, 269, 575, 273.5], - ["Q", 567, 278, 564.5, 279], - ["Q", 562, 280, 562, 280.5], - ["Q", 562, 281, 570.5, 281], - ["Q", 579, 281, 588.5, 282], - ["Q", 598, 283, 601, 283.5], - ["Q", 604, 284, 604, 286.5], - ["Q", 604, 289, 601.5, 293], - ["Q", 599, 297, 594, 301], - ["Q", 589, 305, 588, 306.5], - ["Q", 587, 308, 590.5, 308], - ["Q", 594, 308, 600.5, 310], - ["Q", 607, 312, 607.5, 313], - ["Q", 608, 314, 608, 317.5], - ["Q", 608, 321, 608, 321.5], - ["Q", 608, 322, 608, 322.5], - ["Q", 608, 323, 608, 323.5], - ["Q", 608, 324, 609.5, 324.5], - ["Q", 611, 325, 616, 327.5], - ["Q", 621, 330, 622.5, 331], - ["Q", 624, 332, 624, 332.5], - ["Q", 624, 333, 624.5, 334], - ["Q", 625, 335, 628.5, 337.5], - ["Q", 632, 340, 643, 345.5], - ["Q", 654, 351, 665.5, 355.5], - ["Q", 677, 360, 679, 364], - ["Q", 681, 368, 681.5, 370], - ["Q", 682, 372, 682.5, 373.5], - ["Q", 683, 375, 691.5, 376], - ["Q", 700, 377, 715.5, 381], - ["Q", 731, 385, 736, 389.5], - ["Q", 741, 394, 741.5, 395], - ["Q", 742, 396, 742, 396.5], - ["Q", 742, 397, 742.5, 398], - ["Q", 743, 399, 745, 399], - ["Q", 747, 399, 750.5, 402], - ["Q", 754, 405, 764, 408.5], - ["Q", 774, 412, 776, 413], - ["L", 778.01, 414.01], - ], - }, - ], -}; diff --git a/examples/data.json.js b/examples/data.json.js deleted file mode 100644 index c598183b..00000000 --- a/examples/data.json.js +++ /dev/null @@ -1,417 +0,0 @@ -export default { - objects: [ - { - type: "line", - originX: "center", - originY: "center", - left: 98.41, - top: 133.92, - width: 5, - height: 162, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: -2.5000111045611817, - x2: 2.5000111045611817, - y1: -81.00166757284126, - y2: 81.00166757284126, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 121.41, - top: 130.42, - width: 41, - height: 1, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: -20.500091057401697, - x2: 20.500091057401697, - y1: 0.5000102936595141, - y2: -0.5000102936595141, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 144.41, - top: 121.42, - width: 1, - height: 187, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: -0.5000022209122363, - x2: 0.5000022209122363, - y1: -93.5019249143291, - y2: 93.5019249143291, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 187.41, - top: 182.92, - width: 33, - height: 0, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: -16.5000732901038, - x2: 16.5000732901038, - y1: 0, - y2: 0, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 202.41, - top: 166.42, - width: 3, - height: 33, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: 1.500006662736709, - x2: -1.500006662736709, - y1: 16.500339690763965, - y2: -16.500339690763965, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 184.41, - top: 149.92, - width: 35, - height: 0, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: 17.500077731928272, - x2: -17.500077731928272, - y1: 0, - y2: 0, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 169.91, - top: 182.42, - width: 6, - height: 65, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: -3.000013325473418, - x2: 3.000013325473418, - y1: -32.5006690878684, - y2: 32.5006690878684, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 189.91, - top: 215.42, - width: 34, - height: 1, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: -17.000075511016036, - x2: 17.000075511016036, - y1: -0.5000102936595141, - y2: 0.5000102936595141, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 235.91, - top: 134.92, - width: 10, - height: 156, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: 5.000022209122363, - x2: -5.000022209122363, - y1: 78.00160581088417, - y2: -78.00160581088417, - }, - { - type: "line", - originX: "center", - originY: "center", - left: 260.91, - top: 135.92, - width: 12, - height: 148, - fill: "black", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - x1: 6.00002665094685, - x2: -6.00002665094685, - y1: 74.00152346160806, - y2: -74.00152346160806, - }, - { - type: "circle", - originX: "left", - originY: "center", - left: 284.91, - top: 154.92, - width: 57.32, - height: 57.32, - fill: "transparent", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 47.12, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - radius: 28.65783551172888, - startAngle: 0, - endAngle: 6.283185307179586, - }, - { - type: "rect", - originX: "left", - originY: "top", - left: 374.91, - top: 46.91, - width: 14, - height: 123, - fill: "#b0bc00", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 0, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - rx: 0, - ry: 0, - }, - { - type: "circle", - originX: "left", - originY: "center", - left: 373.91, - top: 182.92, - width: 21.93, - height: 21.93, - fill: "#b0bc00", - stroke: "black", - strokeWidth: 2, - strokeDashArray: null, - strokeLineCap: "butt", - strokeLineJoin: "miter", - strokeMiterLimit: 10, - scaleX: 1, - scaleY: 1, - angle: 46.85, - flipX: false, - flipY: false, - opacity: 1, - shadow: null, - visible: true, - clipTo: null, - backgroundColor: "", - fillRule: "nonzero", - globalCompositeOperation: "source-over", - radius: 10.96599903840613, - startAngle: 0, - endAngle: 6.283185307179586, - }, - ], - background: "", -}; diff --git a/examples/data.url.js b/examples/data.url.js deleted file mode 100644 index 53ffc772..00000000 --- a/examples/data.url.js +++ /dev/null @@ -1 +0,0 @@ -export default "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABgMAAAKhCAYAAAB91t4wAAAgAElEQVR4XuzdP+htV3Yf8OXaBkmNk04SSWkYvcqFixkFk85IchpDwDNiCjsuLImQgCEwFhhcBCPJRUgTZmQIuLIk3IUQjQoXrqSBlGOk6exppAlx7bCefufl9/T+/O696+xz1j73c+Dxrnh377POZ+3fT7C/957zS+EgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDi3wS4e+OhdHgAABAgQIECBAgAABAgQIECBAgAABAgQIhDDAIiBAgAABAgQIECBAgAABAgQIECBAgAABAgcXEAYcvMEujwABAgQIECBAgAABAgQIECBAgAABAgQICAOsAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcHABYcDBG+zyCBAgQIAAAQIECBAgQIAAAQIECBAgQICAMMAaIECAAAECBAgQIECAAAECBAgQIECAAAECBxcQBhy8wS6PAAECBAgQIECAAAECBAgQIECAAAECBAgIA6wBAgQIECBAgAABAgQIECBAgAABAgQIECBwcAFhwMEb7PIIECBAgAABAgQIECBAgAABAgQIECBAgIAwwBogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIHFxAGHLzBLo8AAQIECBAgQIAAAQIECBAgQIAAAQIECAgDrAECBAgQIECAAAECBAgQIECAAAECBAgQIHBwAWHAwRvs8ggQIECAAAECBAgQIECAAAECBAgQIECAgDDAGiBAgAABAgQIECBAgAABAgQIECBAgAABAgcXEAYcvMEujwABAgQIECBAgAABAgQIECBAgAABAgQICAOsAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcHABYcDBG+zyCBAgQIAAAQIECBAgQIAAAQIECBAgQICAMMAaIECAAAECBAgQIECAAAECBAgQIECAAAECBxcQBhy8wS6PAAECBAgQIECAAAECBAgQIECAAAECBAgIA6wBAgQIECBAgAABAgQIECBAgAABAgQIECBwcAFhwMEb7PIIECBAgAABAgQIECBAgAABAgQIECBAgIAwwBogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIHFxAGHLzBLo8AAQIECBAgQIAAAQIECBAgQIAAAQIECAgDrAECBAgQIECAAAECBAgQIECAAAECBAgQIHBwAWHAwRvs8ggQIECAAAECBAgQIECAAAECBAgQIECAgDDAGiBAgAABAgQIECBAgAABAgQIECBAgAABAgcXEAYcvMEujwABAgQIECBAgAABAgQIECBAgAABAgQICAOsgYrAP90Mto4qisYSIECAAAECBAgQIECAAAECBAgQIEBgsIBN3MHAB59eGHDwBrs8AgQIECBAgAABAgQIECBAgAABAgSOISAMOEYf97oKYcBe8s5LgAABAgQIECBAgAABAgQIECBAgACBMwSEAWdgeesjAsIAi4IAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bozQCBAgQIECAAAECBAgQIECAAAECBAgsAsIAa6EiIAyo6BlLgAABAgQIECBAgAABAgQIECBAgACBjQSEARtBH/Q0woCDNtZlESBAgAABAgQIECBAgAABAgQIECBwLAFhwLH6ufXVCAO2Fnc+AgQIECBAgAABAgQIECBAgAABAgQIXCAgDLgAzZAHAsIAi4EAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bozQCBAgQIECAAAECBAgQIECAAAECBAgsAsIAa6EiIAyo6BlLgAABAgQIECBAgAABAgQIECBAgACBjQSEARtBH/Q0woCDNtZlESBAgAABAgQIECBAgAABAgQIECBwLAFhwLH6ufXVCAO2Fnc+AgQIECBAgAABAgQIECBAgAABAgQIXCAgDLgAzZAHAsIAi4EAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bozQCBAgQIECAAAECBAgQIECAAAECBAgsAsIAa6EiIAyo6BlLgAABAgQIECBAgAABAgQIECBAgACBjQSEARtBH/Q0woCDNtZlESBAgAABAgQIECBAgAABAgQIECBwLAFhwLH6ufXVCAO2Fnc+AgQIECBAgAABAgQIECBAgAABAgQIXCAgDLgAzZAHAsIAi4EAAQIECBAgQIAAAQIECBAgQIAAAQITCAgDJmhS4xKFAY2bo7SrF1h+Pi+F8P+HS+WMI0CAAAECBAgQIECAAAECBAg0FLDZ07ApE5UkDJioWUq9OgFhwNW13AUTIECAAAECBAgQIECAAAECBJ4sIAywOioCwoCKnrEExgrc//n88H+ed5JXf/PB+/3/4Tw67yZAgAABAgQIECBAgAABAgQItBaw2dO6Pe2LEwa0b5ECr1hAGHDFzXfpBAgQIECAAAECBAgQIECAAIFvCggDrImKgDCgomcsgbECwoCxvmYnQIAAAQIECBAgQIAAAQIECEwlIAyYql3tihUGtGuJggg8EBAGWAwECBAgQIAAAQIECBAgQIAAAQIPBIQB+y6G2TfTZ69/3+47O4GxAsKAsb5mJ0CAAAECBAgQIECAAAECBAhMJSAM2Ldds2+mz17/vt13dgJjBYQBY33NToAAAQIECBAgQIAAAQIECBCYSkAYsG+7Zt9Mn73+fbvv7ATGCggDxvqanQABAgQIECBAgAABAgQIECAwlYAwYN92zb6ZPnv9+3b/7rO/EBFf3P027yDwWAFhgIVBgAABAgQIECBAgAABAgQIECDwQEAYsO9imH0zffb69+3+08/OtnN35qhNGDBHn1RJgAABAgQIECBAgAABAgQIENhEQBiwCfMTTzL7hu/s9e/bfWFAZ/8j1CYMOEIXXQMBAgQIECBAgAABAgQIECBAYCUBYcBKkBdOM/tm+uz1X9i2TYax3YT50CcRBhy6vS6OAAECBAgQIECAAAECBAgQIHCegDDgPK+13/3jiPh2RNyLiM/WnnyD+WxYj0POZwU8P/HaGCdj5lMFhAGnSnkfAQIECBAgQIAAAQIECBAgQOAKBIQB+zZ5CQNejoh8PdshDBjXsS3WxkuThlDj1I81szDgWP10NQQIECBAgAABAgQIECBAgACBkoAwoMRXHrzFhm+5yKdMIAwYpzt6bejduN51mVkY0KUT6iBAgAABAgQIECBAgAABAgQINBAQBuzbhNEbvqOvzobyOOHRa0PvxvWuy8zCgC6dUAcBAgQIECBAgAABAgQIECBAoIGAMGDfJoze8B19dTaUxwm/GxFvRMRbEZGv1z6+iohnIuLFiMjnEziOJyAMOF5PXREBAgQIECBAgAABAgQIECBA4GIBYcDFdKsMFAaswnjISf44In4QEW9HRL5e+5h97a3tccT5hAFH7KprIkCAAAECBAgQIECAAAECBAhcKCAMuBBupWGzb8j6ZsBKC+Ex0wgDxtley8zCgGvptOskQIAAAQIECBAgQIAAAQIECJwgIAw4AWngW4QBA3Enn3p0GPBhRLwSEa9FRL52HE9AGHC8nroiAgQIECBAgAABAgQIECBAgMDFAsKAi+lWGTj6vvCrFPmUSXwzYJzwqxHxQUR8FBH5eu1jdNiwdr3mO19AGHC+mREECBAgQIAAAQIECBAgQIAAgcMKCAP2be3sG7Kzf7Nh3+4//ezfiYiPI+KTiMjXax+zr721PY44nzDgiF11TQQIECBAgAABAgQIECBAgACBCwWEARfCrTRs9g1ZYcBKC+Ex04wOA96MiHci4r2IyNeO4wkIA47XU1dEgAABAgQIECBAgAABAgQIELhYQBhwMd0qA4UBqzAecpLRYcDo+Q/ZlMkuShgwWcOUS4AAAQIECBAgQIAAAQIECBAYKSAMGKl799zCgLuNrvkdI5/JIAw4/soSBhy/x66QAAECBAgQIECAAAECBAgQIHCygDDgZKohbxQGDGE9zKRbhAGfRcS9w4i5kNsCwgDrgQABAgQIECBAgAABAgQIECBA4IGAMGDfxSAM2Ne/+9lHhgF57aPn7+579PqEAUfvsOsjQIAAAQIECBAgQIAAAQIECJwhIAw4A2vAW4UBA1APNOXozfrR8x+oFVNeijBgyrYpmgABAgQIECBAgAABAgQIECAwRkAYMMb11FlfjYgPIuL9iPjeqYMave/HEfHtiHg5IvK1Y12B0b7CgHX71W02YUC3jqiHAAECBAgQIECAAAECBAgQILCjgDBgR/yImP0hrqM3q/ftzv5nH+07ev79Ba+7AmHAdfff1RMgQIAAAQIECBAgQIAAAQIEHhIQBuy7IIQB+/p3P/vozfrR83f3PXp9woCjd9j1ESBAgAABAgQIECBAgAABAgTOEBAGnIE14K3CgAGoB5py2ax/LSI+HHBdwoABqI2mFAY0aoZSCBAgQIAAAQIECBAgQIAAAQJ7CwgD9u2AMGBf/+5nH/2A6dHzd/c9en3CgKN32PURIECAAAECBAgQIECAAAECBM4QEAacgTXgrcKAAagHmnL0Zv3o+Q/UiikvRRgwZdsUTYAAAQIECBAgQIAAAQIECBAYIyAMGON66qzCgFOlrvN9ozfrR89/nV3rc9XCgD69UAkBAgQIECBAgAABAgQIECBAYHcBYcC+LRAG7Ovf/exvRsQ7EfFeROTrtY9XI+KDiPgkInItOo4lIAw4Vj9dDQECBAgQIECAAAECBAgQIECgJCAMKPGVB78QEZ9HxBcR8WJ5tu0n8ADaseajw6LR84/VMftdAsKAu4T8OwECBAgQIECAAAECBAgQIEDgigSEAfs3+/6GXUTM2AthwNj1M3qzfvT8Y3XMfpeAMOAuIf9OgAABAgQIECBAgAABAgQIELgigRk3oI/WHmHA0Tq63vWM3qx/NiK+jIivIuK59co2UxMBYUCTRiiDAAECBAgQIECAAAECBAgQINBBQBiwfxeEAfv3oGsFL0XEpxHxWUTcG1TkzOtvEMlhphUGHKaVLoQAAQIECBAgQIAAAQIECBAgUBcQBtQNqzPMvBnrNkHV7t89fvT6GD3/3VfoHaMEhAGjZM1LgAABAgQIECBAgAABAgQIEJhQQBiwf9Nm3owVBoxfP6PXR37r4Fs33zzI147jCAgDjtNLV0KAAAECBAgQIECAAAECBAgQKAsIA8qE5QlGb/aWC3zKBMKAkbpfzz16fejh+B7udQZhwF7yzkuAAAECBAgQIECAAAECBAgQaCggDNi/KaM3e0deoY3kkbpfz/1FRDwfES/evF77jHq4tmif+YQBfXqhEgIECBAgQIAAAQIECBAgQIDA7gLCgN1b8GCz97mI+Gr/cs6qwEbyWVwXvXm08Y8i4rsR8XpE5GvHcQSEAcfppSshQIAAAQIECBAgQIAAAQIECJQFhAFlwvIEozd7ywU+ZYKZax/psubco43/OCJ+EBFvR0S+dhxHQBhwnF66EgIECBAgQIAAAQIECBAgQIBAWUAYUCYsTzB6s7dcoDBgJOGdc49eH8KAO1sw7RuEAdO2TuEECBAgQIAAAQIECBAgQIAAgfUFhAHrm5474+jN3nPrOef9M9d+znXu+d7Rt/H5XkT8MCLej4h87TiOgDDgOL10JQQIECBAgAABAgQIECBAgACBsoAwoExYnmDmDfWZay83bqMJRn9y/zsR8XFEfBIR+dpxHAFhwHF66UoIECBAgAABAgQIECBAgAABAmUBYUCZsDzBzBvqM9debtxGEwgDNoI+4GmEAQdsqksiQIAAAQIECBAgQIAAAQIECFwqIAy4VG69cTNvqM9c+3odHDvT6DDghYj4PCK+iIgXx16K2TcWEAZsDO50BAgQIECAAAECBAgQIECAAIHOAsKA/bsz84b6zLXv3/nTKlju6f9RRLx62pCz33V/0zgi/D44m671AGFA6/YojgABAgQIECBAgAABAgQIECCwrYDNv229H3e25QGxr0XEh/uXc1YFwoCzuC568xb39BcGXNSa9oOEAe1bpEACBAgQIECAAAECBAgQIECAwHYCwoDtrJ90ptG3gRl5hcKAkbpfz71FGPBVRDwTEc9FRL52HENAGHCMProKAgQIECBAgAABAgQIECBAgMAqAsKAVRhLkwgDSnyHH7xFGCDUOeYyEgYcs6+uigABAgQIECBAgAABAgQIECBwkYAw4CK2VQcJA1blPNxkz0bElzef2M9P7o84hAEjVPefUxiwfw9UQIAAAQIECBAgQIAAAQIECBBoIyAM2L8VwoD9e9C9gtH39M9nVbwSETM+t6J77/asTxiwp75zEyBAgAABAgQIECBAgAABAgSaCQgD9m+IMGD/HnSvYHQYMPMa7N67PesTBuyp79wECBAgQIAAAQIECBAgQIAAgWYCwoD9GzLzRqzby2yzfoQB2zgf7SzCgKN11PUQIECAAAECBAgQIECAAAECBAoCwoAC3kpDhQErQR54ms8i4lsRcS8i8vXax5sR8U5EvBcR+dpxDAFhwDH66CoIECBAgAABAgQIECBAgAABAqsICANWYSxNMvNGrG8GlFp/8uDRzt+JiI8j4pOIyNeOYwgIA47RR1dBgAABAgQIECBAgAABAgQIEFhFQBiwCmNpkpk3YkdvUpdgDzR4tPPMa/BAbV79UoQBq5OakAABAgQIECBAgAABAgQIECAwr4AwYP/ezbwRO3qTev/u9KhgtPPMa7BHh3pWIQzo2RdVESBAgAABAgQIECBAgAABAgR2ERAG7ML+0Eln3ogdvUm9f3d6VPBuRLwREW9HRD5jYsQx+iHFI2o259MFhAFWCAECBAgQIECAAAECBAgQIECAwAMBYcD+i0EYsH8PulewxUOmhQHdV8H59QkDzjczggABAgQIECBAgAABAgQIECBwWAFhwP6tFQbs34PuFQgDuneoZ33CgJ59URUBAgQIECBAgAABAgQIECBAYBcBYcAu7A+dVBiwfw+6V7BFGOCWT91Xwfn1CQPONzOCAAECBAgQIECAAAECBAgQIHBYAWHA/q0VBuzfg+4VbLFGhAHdV8H59QkDzjczggABAgQIECBAgAABAgQIECBwWAFhwP6tfSkiPo2ITyIiN31nOrb4xPpMHqNqFQaMkj32vMKAY/fX1REgQIAAAQIECBAgQIAAAQIEzhIQBpzFNezNsz68VRgwbEk8NPEWYYBebtPLLc8iDNhS27kIECBAgAABAgQIECBAgAABAs0FhAE9GiQM6NGHrlUsYcBnEXFvUJHCgEGwO04rDNgR36kJECBAgAABAgQIECBAgAABAt0EhAE9OiIM6NGHzlWMXiPCgM7dv6w2YcBlbkYRIECAAAECBAgQIECAAAECBA4pIAzo0dbRG72jrtIG8ijZR+cdvUZejYgPIuKjiMjXjvkFhAHz99AVECBAgAABAgQIECBAgAABAgRWExAGrEZZmmj0Rm+puKcMFgaMkt0+DNjiuQTbaTlTCggDrAMCBAgQIECAAAECBAgQIECAAIEHAsKAHotBGNCjD52r+CoinomI5yIiX699CAPWFt1/PmHA/j1QAQECBAgQIECAAAECBAgQIECgjYAwoEcrhAE9+tC5ih9HxLcj4uWIyNdrH89GxJc3QUMGDo75BYQB8/fQFRAgQIAAAQIECBAgQIAAAQIEVhMQBqxGWZpIGFDiu4rBo8OARJx1HV7FArjgIoUBF6AZQoAAAQIECBAgQIAAAQIECBA4qoAwoEdnt9joHXGlnhkwQvXxc26xRoQB2/VzizMJA7ZQdg4CBAgQIECAAAECBAgQIECAwCQCwoAejdpio3fElQoDRqg+fs4PI+KViHgtIvL1iOOziPhWRNyLiHztmFtAGDB3/1RPgAABAgQIECBAgAABAgQIEFhVQBiwKufFkwkDLqa7moFbBC+zrsOrWQRnXqgw4EwwbydAgAABAgQIECBAgAABAgQIHFlAGNCju7Nuwm6xQd2jQ/tXsYX1rOtw/+70rEAY0LMvqiJAgAABAgQIECBAgAABAgQI7CIgDNiF/ZGTPm4T9oWIeP6E8p6NiJdOeF++5Tsnvi/ny3mfduTa2WKD+sSSD/+2Lax/FBHfjYjXIyJfO+YWEAbM3T/VEyBAgAABAgQIECBAgAABAgRWFRAGrMp58WTfDAOWB7lePOEGA4UBGyDfOsWbEfFORLwfEd8bdOotAodBpZv2MQLCAMuCAAECBAgQIECAAAECBAgQIEDggYAwoMdieFwY8LOI+OKE8r4642GveZ5Tjnx4bM5712Hz+C6h9f49v9XxcUR8csY3PM49u36eK9b7/cKA3v1RHQECBAgQIECAAAECBAgQIEBgUwFhwKbcTzzZrPdqt3m83frZIgzIbxz8cPC3D7YTcyZhgDVAgAABAgQIECBAgAABAgQIECDwQEAY0GMxLJvqb0XEuz1KOqkKYcBJTKu8aYswYItzrIJhkpMEhAEnMXkTAQIECBAgQIAAAQIECBAgQOA6BIQBPfo866b6rHX36Pp5VeQDpT+/uXXUi+cNPfndwoCTqaZ4ozBgijYpkgABAgQIECBAgAABAgQIECCwjYAwYBvnu84y66b6rHXf1Y+u/748WHrUz+0WgUNX2yPWJQw4YlddEwECBAgQIECAAAECBAgQIEDgQoFRm4oXlnO1w2bdVJ+17lkX2ugwIF22OMes/rPVLQyYrWPqJUCAAAECBAgQIECAAAECBAgMFBAGDMQ9Y+pZN9VnrfuM1rR66xYb9VucoxXqgYsRBhy4uS6NAAECBAgQIECAAAECBAgQIHCugDDgXLEx7591U33Wusd0cfysX0TE8xFxLyI+G3S6ryLimYh4LiLytWNeAWHAvL1TOQECBAgQIECAAAECBAgQIEBgdQFhwOqkF00466b6rHVf1KQGg34cEd+OiJcjIl+POLY4x4i6zfmogDDAqiBAgAABAgQIECBAgAABAgQIEHggIAzosRhm3VSfte4eXT+/ii026rc4x/lXbsQlAsKAS9SMIUCAAAECBAgQIECAAAECBAgcVEAY0KOx34mIjyPio4h4tUdJJ1UhDDiJabU3bbFR/2FEvBIRr0VEvnbMKyAMmLd3KidAgAABAgQIECBAgAABAgQIrC4gDFid9KIJlzDgk4jI17McwoBtO/VuRLwREW9FRL4ecejpCNV95hQG7OPurAQIECBAgAABAgQIECBAgACBlgLCgB5tEQb06EP3KrbYqN/iHN2dj1KfMOAonXQdBAgQIECAAAECBAgQIECAAIEVBIQBKyCuMIUwYAXEK5hii436NyPinYh4LyLytWNeAWHAvL1TOQECBAgQIECAAAECBAgQIEBgdQFhwOqkF00oDLiI7eoGbREGzLoWr24xnHDBwoATkLyFAAECBAgQIECAAAECBAgQIHAtAsKAHp2edQN2i83pHh3qUUU+XPqDwQ+annUt9uhQryqEAb36oRoCBAgQIECAAAECBAgQIECAwK4CwoBd+R+cfNYNWGHAtutni3WyxTkuUXslIl6KiBdu/uQct1/nf//4ZuLbf/8sIr645IQHGCMMOEATXQIBAgQIECBAgAABAgQIECBAYC0BYcBakrV5um7A3nVVwoC7hNb9963Wyf1N5IjY8/dDbvRnAJDXnN+IqBwfRkT++SgivqpMNNlYYcBkDVMuAQIECBAgQIAAAQIECBAgQGCkwJ6bfSOva7a5n42IL282Kp+bqPjRYcCyKd2BpMPPyjWEARkC5AOMvxkA/OTmk/+f3fqkf37i//an/tMnj9t/f/sbi2cJBt7vsKgG1yAMGAxsegIECBAgQIAAAQIECBAgQIDATAIdNjhn8hpZa4dPY597fSPDgE5BQLp0+FlZQqPR9eyxFjME+EFEfO9mEf7iZvM/N+/ztj+X3uonzTJYyD/5TYPlyDnfvnVroXPX/gzvFwbM0CU1EiBAgAABAgQIECBAgAABAgQ2EuiwwbnRpbY/zR4bsFWULcKAvddot75sUU9ulOcn6l/eYLM8N+vzmwBLCJBr8r2IyLW19i19lmAg537+ZvH/KCLeGnCu6s/WGuOFAWsomoMAAQIECBAgQIAAAQIECBAgcBCBvTdaD8K4ymVsscm7SqG3JhkZBuTtYL4VEfciIl/vdeQn0nPjeO86luvfYp1sFQbkA4F/ePNg4Ly+vHVPrqlLvwVw6hrJUODNm28i5JgMHTIQyGDgSIcw4EjddC0ECBAgQIAAAQIECBAgQIAAgaKAMKAIuOLwLTZ5Vyz3/lQjw4CtNqTvMulSx9HCgLxtTwYBuTGfzwPI/x4dAnyz13lrogwAlucK5HrOWwcd5RAGHKWTroMAAQIECBAgQIAAAQIECBAgsIKAMGAFxJWmEAY8DNllE75LHYvOFvWMDHnyOvK2QPnJ/Dzy2wD5eu1bAp3zY5m3KMpgIo8MB14/Z3Dj9woDGjdHaQQIECBAgAABAgQIECBAgACBrQWEAVuLP/l8woCHbUZvSJ/a+Xcj4o2bT4xnTXsfs4cBuem+PB8gN9273Jonv5mQtTwTEfnQ4qxtz4BijXUmDFhD0RwECBAgQIAAAQIECBAgQIAAgYMICAP6NFIY0DMM6BJKLDozhwFLsPKLiPjOzs+CeNxPfj7DIH0zEMjnVOQDlGcOBIQBfX6/q4QAAQIECBAgQIAAAQIECBAgsLuAMGD3FjwoYHlg7os73Dv9UoWRG+V565i8ncx7t24pc2mdlXHLNe5dxzfDgNduPsFeubYnjc1PyX8QER/d3Mt/jXPcvhVPbrLnpnvHIwOB/IZAPrx69lsGCQM6rjA1ESBAgAABAgQIECBAgAABAgR2EhAG7AT/mNNu8Ynvta92ZBiQnxz/OCI+ufkU+dq1nzpflzqWekeaL+dY+5pvBwGdbg30pDVw+xsCM9T7pOsQBpz6U+59BAgQIECAAAECBAgQIECAAIErEBAG9GmyMODhXqy9IX1pp7vUMWsYkBvrn94U/1ZE5K2CZoZsui4AACAASURBVDiWACNvE5TfZMhv7sx2CANm65h6CRAgQIAAAQIECBAgQIAAAQIDBYQBA3HPnFoY8DDYCxHx+c09258703LNty+b2V9ERN7Cae9ji28GPBsRX65kn9/uyEDl/VsPDt7b8NTzL884yN7fm/D5AcKAUzvtfQQIECBAgAABAgQIECBAgACBKxAQBvRpsjDg0V50eahylzpSaKtnKaxxzcuzB/KBwRnuzPgw3uVZHjOGGcKAPr/fVUKAAAECBAgQIECAAAECBAgQ2F1AGLB7Cx4UMGMYMHpjeo0N6TU63KWOvJatbltUveb8dkHeHihDgJnvu798QyXtZ3q4d9YrDFjjp98cBAgQIECAAAECBAgQIECAAIGDCAgD+jRyxjBg9Mb08qnsvGd7+ux15G1inr+5Vcze944fbb4YL/Z5e5xLrnm5ndHeD4BeY838KCK+O+GtjoQBa3TfHAQIECBAgAABAgQIECBAgACBgwgIA/o0UhjwaC+6mHSpI4W2CgMq17w8cyDr3TvIWeMnfNZvBwgD1ui+OQgQIECAAAECBAgQIECAAAECBxEQBvRp5PLp45luqTJ6Y3rZkH4tIj7csVWVjfG1y14eaJyf1s9P7Y86Ktf8vYj4YUR8FBH53IAjHDN+O0AYcISV5xoIECBAgAABAgQIECBAgAABAisJCANWglxhmuW2Km9HRL6e4RgdBnQxeTci3oiILr2p3s//lLVVCacyuHll8mcFfNPo9rcDZvm9KQw4ZaV7DwECBAgQIECAAAECBAgQIEDgSgRm2dS6hnZ02fg+x/pawoBuvdkiDLj0mm/fIui5iPjqnAXV/L1dvqlyKpMw4FQp7yNAgAABAgQIECBAgAABAgQIXIGAMKBPky/dfN3zCkaHAcvtZt6PiHy917H05r2IeHOvIm6dt3MYcMRbBC303dbBXUtRGHCXkH8nQIAAAQIECBAgQIAAAQIECFyRgDCgT7OFAY/2YnTYcGr3u9Sx1Juftn8mIl6MiC9OvYgz33dpEHPEWwQtdMs6GP28hjNb9cS3CwPWkjQPAQIECBAgQIAAAQIECBAgQOAAAsKAPk0UBggDTl2NlYf7nnqOSwOQLyMibxV0tFsELW7LtzJmuL6l1lN7/s33+f/DpXLGESBAgAABAgQIECBAgAABAgQaCtjs6dMUYcCjvVjuP5+fhM/N172OlyLi05tP4een8fc+OocBW9zCaE//mZ4bIAzYc6U4NwECBAgQIECAAAECBAgQIECgmYAwoE9DhAGP70WXzeUudaTSFmHACxHx+ZkByBKa/CQi8vURjxl/To/YB9dEgAABAgQIECBAgAABAgQIECBwpoAw4EywgW9f7tHe5SG1p1zqpbeSOWXu5T1dNuG71JEuP4qI70bE6zevz/E8573nXvMW6+Gc+ke8VxgwQtWcBAgQIECAAAECBAgQIECAAAECwwWEAcOJTz7BjBupW9S8xafgT2lSPqj3+Yi4FxH5ANk9j602pM8NA96MiHciYqZA69w+bmV/bl3eT4AAAQIECBAgQIAAAQIECBAgQOCpAsKAPgtki431ta92i5q7hAFd6sgebrUhnc9qeOaMhwFvVdfa6/ic+ZbA4+2bPpwz1nsJECBAgAABAgQIECBAgAABAgQI7CYgDNiN/pETb7GxvvbVblHzhxHxyga3xLnL5hrDgHOv+RrCgC3W/F1r0b8TIECAAAECBAgQIECAAAECBAgQOFtAGHA22bABM24yblFzlw3mdyPijYjo8Inw5fkS70dEvh51CAMeld1izY/qp3kJECBAgAABAgQIECBAgAABAgSuWEAY0Kf5M24yblFzlzCgSx25Yrdwz/Ms38p47eb1XT8t13ALna2CmLus/TsBAgQIECBAgAABAgQIECBAgACBswSEAWdxDX3zVhu8a17EFjUvm68fRcSraxZ/5lxLGNDh4bhbuCfPuQHIVnWd2bpV336uyaonL072bER86xtzfFKc03ACBAgQIECAAAECBAgQIECAAIFJBIQBfRo140bqFjVvcY5TVkGXOrLWrWo5d+N7q7pO6deo9/woIr7b4BkW51xfBmpZc/bnccdnEZHXlbedyodGOwgQIECAAAECBAgQIECAAAECBA4oIAzo09SXIuLTiMiNuXt9ynpqJVts/m5xjlO4u9SRteYnvL+82bh97pTiL3zPctufU78NsRjNtIbPpTn3OQrnzr/m+/ObNO9ExAu3J/21m+8GfP7TiH/8x4dOl0FABkDZbwcBAgQIECBAgAABAgQIECBAgMDBBIQBvRr6TzflzNKXLTbIl43vLp3a+3ZFi8MWa+WS/uaG8jMRkSHFET9lniFMrsnu17c88Dp+9Z9FfP8P4v7fL/7Lh3+Mfv73Ef/7JxH/6398/ffNkc+KeP2g/evye0QdBAgQIECAAAECBAgQIECAAIHNBWbZdN4cZqcTbrHBu+alXbJZfMn5F5dLxq49psvPzBZr5ZL+Lg8dzs3kvPXMkY78hP3nNxfUZR08zne5lVH81m9H/M7vRvzyr9zdhr/8i4j8c3PktzteFgjc7eYdBAgQIECAAAECBAgQIECAAIFZBDpvaM1iuGadW2zwrlnvJZvFl5z/6J82v8Rki7VySX+XWwvl/efzXvVHOma4tuU5D/Enfxax3BLo1CbkrYP+9AcRP/+H+yMyVMhQx0GAAAECBAgQIECAAAECBAgQIHAAAWFAryZuscG75hVfsll8yflnuk/7Jdd3yZj85Hbe/T2fL5GvRx3nrsnl2RdfRMSLo4raad58pkde32sRkd+A6HY8+ObC9/9dxG/9m8vKy9sF/ad//2Bs12u97OKMIkCAAAECBAgQIECAAAECBAhcsYAwoFfzz9143bt6YcB+HdgqILlkTS7f5MgwIEOBIxzLRvsvbp4Z0PGa7q+J/DZAfiugcvy3/xLx1391f4YjhjoVGmMJECBAgAABAgQIECBAgAABAtMKCAN6te6Sjdc9r2CrMGC5B/oR70N/af86hwHLw2uPdKug7rcIevCtgP/+4WnPCHjawvvH/xvx1u89uF2Qn7tLf0qNI0CAAAECBAgQIECAAAECBAg0EhAGNGpGRAgDHt+P5T7ob0dEvnZEbBUGXHKe2w/aPcq3A/LBwXldXW+bcz+sWONbAcsP160HCh8p1PG7gwABAgQIECBAgAABAgQIECBwtQLCgF6tn+1BuVt9M0AY8Og6XT59PzoguSQMyGqXb3McYSN5WX8/uwkEev3W+LqafIbBK7/zuxH5Z43jb//m64cJu1XQGprmIECAAAECBAgQIECAAAECBAjsLyAM2L8Htyu4dON1r6vYKgx4NSI+iIiPIiJfO77+hkRu1XYNA47y7YBnIyK/FZB/vxxffyOj43H/d8cfvR3x67+xTnmf/zTird9/MJf/V6zDahYCBAgQIECAAAECBAgQIECAwG4CNnh2o3/siYUBj+/HVqFDr9Xw9Gq2CgMq51m+HZDrOjfSZzyWa+geRN3/3ZEPDs5bBa11vPqbwoC1LM1DgAABAgQIECBAgAABAgQIENhbQBiwdwcePr8w4OlhwGcRca9Xy3arprJJf07RlfPkp+m/iIhnIuK9iMj72s90LCHULyLipZtr6Vr/6mFAPkT43/7/7+H4f0XXzquLAAECBAgQIECAAAECBAgQIHCigA2eE6E2epsw4MnQsz1cefSS2erbEpUwIA1yE/3TG4yuD999XK/yNkdZdwYao2/FtMZauf+7Y9AzAzo/K2ENO3MQIECAAAECBAgQIECAAAECBK5CQBjQq83CAGHAqStyqzBgjec15DcC3omIfEB2frMjvy3Q+cgA4OObIOOTiEjr7sf90OZf/euIP/yP65T6l38RkX88q2MdT7MQIECAAAECBAgQIECAAAECBPYWEAbs3YGHzy8MeHI/ciM5bzfz4gSbyVusqq3CgLXO82FEvBIReaunfH5A9rPjcTsI+MlNENC11tt+9/v0q/884p3/GvHLv1Knfev3Ij7/u/vzvB4R+ewEBwECBAgQIECAAAECBAgQIECAwMQCwoBezRMGPLkfs9mMXllrbdLfVeda58lN9uxhPt42A4G8ZVDHbwh8EBH5bYiZgoClh+n5/G/9dsT3/+Cutj793//2byL+9Af33/N/cs7G4U3tQo0mQIAAAQIECBAgQIAAAQIECFyRgDCgV7OXT0/nJ6dz47T7sdZG8SnXKQx4VGmL5yjkJv6XN5vBz53SqKe853YgkJ+2z3WewUCHI2vLICDXdD4wOP/uUtupPt+LiB/mm//kzyJ+LWOXC46f/33EW78fkQ8QnuR5CRdcpSEECBAgQIAAAQIECBAgQIAAgesTEAb06nn1Ya1bX82WYUDepuS7EfFWRLy79YU2Pd8WYUBe+prnyU33DL2+fRMwdAgE8iHH+YyArG3WIGBZovcDxRf/RcQfvR2Rtw0697h1e6AZvx1x7uV6PwECBAgQIECAAAECBAgQIEDgagSEAb1aLQx4cj9ms9liZa25Sf+0ekecZwl38rzZ2/d2uhXNG7fCpXxYcN4iaIZnBDypXw++fZHPDfjD/xDx679x2lL8/KcRf/6fHzwnYPZQ5LSL9i4CBAgQIECAAAECBAgQIECAwBUJCAN6NXu2De8tvxkwm80WK2t5qHLevmfkBnbeLidvOnNv5Vvn5Dc8cjM+j7zffX7rIz/ZvsWRazfvip9/55FhxJtbnHiDc9y+HVPkMwTyz5O+JZC3A/rrv4r4y794UJkgYIMmOQUBAgQIECBAgAABAgQIECBAYGsBYcDW4k8/32wb3luGAVueq9eqeHI1Wz1HYeR5sq8ZCix3uM9zvT7w4cIv3NxXfwkBcuM777W/VQix1drKQCBd89Za94/8pkA+RyBvIZTHz/8hIr8N8PnfPVTSEb4dsZWx8xAgQIAAAQIECBAgQIAAAQIEphIQBvRqlzDgyf0QBjxqM3KT/vbZtjhPbsjn5vUzNyfObyPkrYQ+WiEYyI3xfEZB3gIoz5NHhgB5vvwz8lsVe/+GyZ+b/MbDK3cUkiFA/v6Z4cHle5s6PwECBAgQIECAAAECBAgQIEBgSgFhQK+2CQOe3I98yOunN7epydvVOL7euM1N7nwI78hN3OX+/vmJ/Xw96shN+/wZyA37JRTIc2UwkJ/cX64xN67vOtIl10wGAMu3AHLMtYQA3/RJ23RIk9tH3p4pXfNvBwECBAgQIECAAAECBAgQIECAwIEFhAG9misMeHo/RjzIttcKOK+a3CDPT3y/Nvg2N3usy9zEX/7cDgYWofw0f4YEt4/c6M5N78cdGSCkV/6x8X3eOvNuAgQIECBAgAABAgQIECBAgACBAwgIA3o1cY9N14rA1rfuEQY83K2t1stW53nSWsxQIDf6c73lZv/yfIGnrd3c/M9N/+UbBUe+FVDlZ9hYAgQIECBAgAABAgQIECBAgACBKxEQBvRq9Nab69Wr37re3Nx9PiJe9Onu+63bapM+b9vzw4h4/9Y996trpzo+Q4Fv3vImvylg078qazwBAgQIECBAgAABAgQIECBAgMAhBYQBvdq69eZ69eq3rnere+RXXbYav1UYsHWft/JzHgIECBAgQIAAAQIECBAgQIAAAQJXIyAM6NXq2TZdt65XGPDwen0zIt7Z4BP7W/e510+laggQIECAAAECBAgQIECAAAECBAgcQEAY0KuJs226vhARn9/csidv3TP6eDci3oiIt29ukTP6fN3n32q9LH3O+/DnOR0ECBAgQIAAAQIECBAgQIAAAQIECEwmIAzo1bCtNnfXvOotH+q71W1x1vQZOdeM62Wkh7kJECBAgAABAgQIECBAgAABAgQIEHiCgDCg19KYcXN3jzDgvYjIW+Rc+zHjern2nrl+AgQIECBAgAABAgQIECBAgAABArsICAN2YX/iSWfc3N0yDJjRZ+QKc/uekbrmJkCAAAECBAgQIECAAAECBAgQIHAgAWFAr2bOuNktDOi1hlRDgAABAgQIECBAgAABAgQIECBAgACBRwSEAf0WRW6ufxURz/Ur7bEVbRkGvBQRn97h8uM7/v2LmwceP+1td83xsxPmmKR9yiRAgAABAgQIECBAgAABAgQIECBA4BoEhAHX0OVjXeOzEfFlk0vy89OkEcogQIAAAQIECBAgQIAAAQIECBAgQODpAjYzrZCjCeStlp525H3288/TjlPmyFAi/zgIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oTQPl/gAAIABJREFUAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAgQIECAAAECNQFhQM3PaAIECBAgQIAAAQIECBAgQIAAAQIECBAg0F5AGNC+RQokQIAAAQIECBAgQIAAAQIECBAgQIAAAQI1AWFAzc9oAgQIECBAgAABAgQIECBAgAABAgQIECDQXkAY0L5FCiRAgAABAgQIECBAgAABAgQIECBAgAABAjUBYUDNz2gCBAgQIECAAAECBAgQIECAAAECBAgQINBeQBjQvkUKJECAAAECBAgQIECAAAECBAj8v/bsmAYAAIZhGH/WBZGnhwFUmrwzBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAF8ZnUEAAAJUUlEQVQCBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FxID7FzmQAAECBAgQIECAAAECBAgQIECAAAECBAg0ATGg+VkTIECAAAECBAgQIECAAAECBAgQIECAAIF7ATHg/kUOJECAAAECBAgQIECAAAECBAgQIECAAAECTUAMaH7WBAgQIECAAAECBAgQIECAAAECBAgQIEDgXkAMuH+RAwkQIECAAAECBAgQIECAAAECBAgQIECAQBMQA5qfNQECBAgQIECAAAECBAgQIECAAAECBAgQuBcQA+5f5EACBAgQIECAAAECBAgQIECAAAECBAgQINAExIDmZ02AAAECBAgQIECAAAECBAgQIECAAAECBO4FBiixdxoC93XVAAAAAElFTkSuQmCC"; diff --git a/examples/layout/tools.tsx b/examples/layout/tools.tsx deleted file mode 100644 index bab7c7f1..00000000 --- a/examples/layout/tools.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import Paper from "@material-ui/core/Paper"; -import { makeStyles } from "@material-ui/core"; -import ToolSelector from "../tools/ToolSelector"; -import ColorSelector from "../tools/ColorSelector"; -import CanvasControls from "../tools/CanvasControls"; -import Background from "../tools/Background"; -import Text from "../tools/Text"; -import ImageControls from "../tools/ImageControls"; - -const useStyles = makeStyles((theme) => ({ - paper: { - color: theme.palette.text.secondary, - }, -})); - -export default function () { - const classes = useStyles(); - - const [tool, setTool] = React.useState("pencil"); - const [lineColor, setLineColor] = React.useState("black"); - const [fillColor, setFillColor] = React.useState("transparent"); - - const handleSelectTool = (event, tool) => { - tool != null && setTool(tool); - }; - - const handleLineColor = (color, event) => { - color != null && setLineColor(color.hex); - }; - - const handleFillColor = (color, event) => { - color != null && setFillColor(color.hex); - }; - - return ( - - - - - - - - - ); -} diff --git a/examples/main.css b/examples/main.css deleted file mode 100644 index bae1962b..00000000 --- a/examples/main.css +++ /dev/null @@ -1,27 +0,0 @@ -body, -html { - margin: 0; - padding: 0; - min-height: 100%; - height: 100%; - background-color: beige; - font-weight: 300; - font-family: "Roboto", sans-serif; -} - -#container { - display: flex; - flex-direction: column; - overflow-x: hidden; - min-height: 100%; - width: 100%; - height: 100%; - background-color: #607d8b; - color: #000000; -} - -.canvas-area { - margin: 7px 0 0 7px; - border: 1px solid #0d3349; - background-color: #ffffff; -} diff --git a/examples/main.jsx b/examples/main.jsx deleted file mode 100644 index 98083472..00000000 --- a/examples/main.jsx +++ /dev/null @@ -1,767 +0,0 @@ -/*eslint no-unused-vars: 0, no-console: 0*/ - -import React from "react"; -import { CompactPicker } from "react-color"; -import "flexboxgrid"; -import "./main.css"; -import AppBar from "@material-ui/core/AppBar"; -import Card from "@material-ui/core/Card"; -import CardContent from "@material-ui/core/CardContent"; -import ExpandMore from "@material-ui/icons/ExpandMore"; -import CardHeader from "@material-ui/core/CardHeader"; -import GridListTile from "@material-ui/core/GridListTile"; -import IconButton from "@material-ui/core/IconButton"; -import MenuItem from "@material-ui/core/MenuItem"; -import Button from "@material-ui/core/Button"; -import Slider from "@material-ui/lab/Slider"; -import TextField from "@material-ui/core/TextField"; -import Switch from "@material-ui/core/Switch"; -import FormControlLabel from "@material-ui/core/FormControlLabel"; -import Collapse from "@material-ui/core/Collapse"; -import { createMuiTheme, MuiThemeProvider } from "@material-ui/core/styles"; -import color from "@material-ui/core/colors/blueGrey"; - -import UndoIcon from "@material-ui/icons/Undo"; -import RedoIcon from "@material-ui/icons/Redo"; -import DeleteIcon from "@material-ui/icons/Delete"; -import SaveIcon from "@material-ui/icons/Save"; -import ClearIcon from "@material-ui/icons/Clear"; -import AddIcon from "@material-ui/icons/Add"; -import CopyIcon from "@material-ui/icons/FileCopy"; -import RemoveIcon from "@material-ui/icons/Remove"; -import DownloadIcon from "@material-ui/icons/CloudDownload"; -import ZoomInIcon from "@material-ui/icons/ZoomIn"; -import ZoomOutIcon from "@material-ui/icons/ZoomOut"; -import dataJson from "./data.json"; -import dataJsonControlled from "./data.json.controlled"; -import { SketchField, Tools } from "../src"; -import dataUrl from "./data.url"; -import DropZone from "react-dropzone"; -import Toolbar from "@material-ui/core/Toolbar/Toolbar"; -import Typography from "@material-ui/core/Typography/Typography"; - -const styles = { - root: { - padding: "3px", - display: "flex", - flexWrap: "wrap", - margin: "10px 10px 5px 10px", - justifyContent: "space-around", - }, - gridList: { - width: "100%", - overflowY: "auto", - marginBottom: "24px", - }, - gridTile: { - backgroundColor: "#fcfcfc", - }, - appBar: { - backgroundColor: "#333", - }, - radioButton: { - marginTop: "3px", - marginBottom: "3px", - }, - separator: { - height: "42px", - backgroundColor: "white", - }, - iconButton: { - fill: "white", - width: "42px", - height: "42px", - }, - dropArea: { - width: "100%", - height: "64px", - border: "2px dashed rgb(102, 102, 102)", - borderStyle: "dashed", - borderRadius: "5px", - textAlign: "center", - paddingTop: "20px", - }, - activeStyle: { - borderStyle: "solid", - backgroundColor: "#eee", - }, - rejectStyle: { - borderStyle: "solid", - backgroundColor: "#ffdddd", - }, - card: { - margin: "10px 10px 5px 0", - }, -}; - -/** - * Helper function to manually fire an event - * - * @param el the element - * @param etype the event type - */ -function eventFire(el, etype) { - if (el.fireEvent) { - el.fireEvent("on" + etype); - } else { - var evObj = document.createEvent("Events"); - evObj.initEvent(etype, true, false); - el.dispatchEvent(evObj); - } -} - -class SketchFieldDemo extends React.Component { - constructor(props) { - super(props); - - this.state = { - lineWidth: 10, - lineColor: "black", - fillColor: "#68CCCA", - backgroundColor: "transparent", - shadowWidth: 0, - shadowOffset: 0, - tool: Tools.Pencil, - enableRemoveSelected: false, - fillWithColor: false, - fillWithBackgroundColor: false, - drawings: [], - canUndo: false, - canRedo: false, - controlledSize: false, - sketchWidth: 600, - sketchHeight: 600, - stretched: true, - stretchedX: false, - stretchedY: false, - originX: "left", - originY: "top", - imageUrl: "https://files.gamebanana.com/img/ico/sprays/4ea2f4dad8d6f.png", - expandTools: false, - expandControls: false, - expandColors: false, - expandBack: false, - expandImages: false, - expandControlled: false, - text: "a text, cool!", - enableCopyPaste: false, - }; - } - - _selectTool = (event) => { - this.setState({ - tool: event.target.value, - enableRemoveSelected: event.target.value === Tools.Select, - enableCopyPaste: event.target.value === Tools.Select, - }); - }; - - _save = () => { - let drawings = this.state.drawings; - drawings.push(this._sketch.toDataURL()); - this.setState({ drawings: drawings }); - }; - - _download = () => { - console.save(this._sketch.toDataURL(), "toDataURL.txt"); - console.save(JSON.stringify(this._sketch.toJSON()), "toDataJSON.txt"); - - /*eslint-enable no-console*/ - - let { imgDown } = this.refs; - let event = new Event("click", {}); - - imgDown.href = this._sketch.toDataURL(); - imgDown.download = "toPNG.png"; - imgDown.dispatchEvent(event); - }; - - _renderTile = (drawing, index) => { - return ( - this._removeMe(index)}> - - - }> - - - ); - }; - - _removeMe = (index) => { - let drawings = this.state.drawings; - drawings.splice(index, 1); - this.setState({ drawings: drawings }); - }; - - _undo = () => { - this._sketch.undo(); - this.setState({ - canUndo: this._sketch.canUndo(), - canRedo: this._sketch.canRedo(), - }); - }; - - _redo = () => { - this._sketch.redo(); - this.setState({ - canUndo: this._sketch.canUndo(), - canRedo: this._sketch.canRedo(), - }); - }; - - _clear = () => { - this._sketch.clear(); - this._sketch.setBackgroundFromDataUrl(""); - this.setState({ - controlledValue: null, - backgroundColor: "transparent", - fillWithBackgroundColor: false, - canUndo: this._sketch.canUndo(), - canRedo: this._sketch.canRedo(), - }); - }; - - _removeSelected = () => { - this._sketch.removeSelected(); - }; - - _onSketchChange = () => { - let prev = this.state.canUndo; - let now = this._sketch.canUndo(); - if (prev !== now) { - this.setState({ canUndo: now }); - } - }; - - _onBackgroundImageDrop = (accepted /*, rejected*/) => { - if (accepted && accepted.length > 0) { - let sketch = this._sketch; - let reader = new FileReader(); - let { stretched, stretchedX, stretchedY, originX, originY } = this.state; - reader.addEventListener( - "load", - () => - sketch.setBackgroundFromDataUrl(reader.result, { - stretched: stretched, - stretchedX: stretchedX, - stretchedY: stretchedY, - originX: originX, - originY: originY, - }), - false - ); - reader.readAsDataURL(accepted[0]); - } - }; - - _addText = () => this._sketch.addText(this.state.text); - - componentDidMount = () => { - (function (console) { - console.save = function (data, filename) { - if (!data) { - console.error("Console.save: No data"); - return; - } - if (!filename) filename = "console.json"; - if (typeof data === "object") { - data = JSON.stringify(data, undefined, 4); - } - var blob = new Blob([data], { type: "text/json" }), - e = document.createEvent("MouseEvents"), - a = document.createElement("a"); - a.download = filename; - a.href = window.URL.createObjectURL(blob); - a.dataset.downloadurl = ["text/json", a.download, a.href].join(":"); - e.initMouseEvent( - "click", - true, - false, - window, - 0, - 0, - 0, - 0, - 0, - false, - false, - false, - false, - 0, - null - ); - a.dispatchEvent(e); - }; - })(console); - }; - - render = () => { - let { controlledValue } = this.state; - const theme = createMuiTheme({ - typography: { - useNextVariants: true, - }, - palette: { - primary: { main: color[500] }, // Purple and green play nicely together. - secondary: { main: "#11cb5f" }, // This is just green.A700 as hex. - }, - }); - return ( - -
-
- - - - Sketch Tool - - - - - - - - - - - - - - - - - - -
-
-
-
- (this._sketch = c)} - lineColor={this.state.lineColor} - lineWidth={this.state.lineWidth} - fillColor={ - this.state.fillWithColor ? this.state.fillColor : "transparent" - } - backgroundColor={ - this.state.fillWithBackgroundColor - ? this.state.backgroundColor - : "transparent" - } - width={this.state.controlledSize ? this.state.sketchWidth : null} - height={this.state.controlledSize ? this.state.sketchHeight : null} - defaultValue={dataJson} - value={controlledValue} - forceValue - onChange={this._onSketchChange} - tool={this.state.tool} - /> -
-
- - - this.setState({ expandTools: !this.state.expandTools }) - }> - - - } - /> - - -
-
- - - Select - - - Pencil - - - Line - - - Arrow - - - Rectangle - - - Circle - - - Pan - - - Highlighter - - - RectangleLabel - - -
-
-
-
- Line Weight - this.setState({ lineWidth: v })} - /> -
- -
- this._sketch.zoom(1.25)}> - - - this._sketch.zoom(0.8)}> - - -
-
-
- this.setState({ text: e.target.value })} - value={this.state.text} - /> -
-
- - - -
-
-
-
-
- - - this.setState({ - expandControls: !this.state.expandControls, - }) - }> - - - } - /> - - -
-
- - this.setState({ - controlledSize: !this.state.controlledSize, - }) - } - /> - } - label="Control size" - /> -
- Change Canvas Width - this.setState({ sketchWidth: v })} - /> -
- Change Canvas Height - this.setState({ sketchHeight: v })} - /> -
-
-
- -
-
- { - this._sketch.copy(); - this._sketch.paste(); - }}> - - -
-
- - - -
-
-
-
-
- - - this.setState({ expandColors: !this.state.expandColors }) - }> - - - } - /> - - - -
- this.setState({ lineColor: color.hex })} - /> -
-
- - this.setState({ - fillWithColor: !this.state.fillWithColor, - }) - } - /> - } - label="Fill" - /> - this.setState({ fillColor: color.hex })} - /> -
-
-
- - - this.setState({ expandBack: !this.state.expandBack }) - }> - - - } - /> - - - - this.setState({ - fillWithBackgroundColor: !this.state - .fillWithBackgroundColor, - }) - } - /> - } - /> - - this.setState({ backgroundColor: color.hex }) - } - /> -
-
- -
- - this.setState({ stretched: !this.state.stretched }) - } - /> - } - /> - - this.setState({ stretchedX: !this.state.stretchedX }) - } - /> - } - /> - - this.setState({ stretchedY: !this.state.stretchedY }) - } - /> - } - /> -
- - Try dropping an image here, -
- or click -
- to select image as background. -
-
-
-
-
- - - this.setState({ expandImages: !this.state.expandImages }) - }> - - - } - /> - - -
- this.setState({ imageUrl: e.target.value })} - value={this.state.imageUrl} - /> - -
-
- -
-
-
- - - this.setState({ - expandControlled: !this.state.expandControlled, - }) - }> - - - } - /> - - - - - - -
-
-
-
- {/* Sketch area */} - -
-
-
-
- ); - }; -} - -export default SketchFieldDemo; diff --git a/examples/run.jsx b/examples/run.jsx deleted file mode 100644 index 80134c77..00000000 --- a/examples/run.jsx +++ /dev/null @@ -1,11 +0,0 @@ -(function () { - const React = require("react"); - const ReactDOM = require("react-dom"); - - const Demo = require("./main").default; - - // Needed for React Developer Tools - window.React = React; - - ReactDOM.render(, document.getElementById("container")); -})(); diff --git a/src/components/SketchField/SketchField.jsx b/src/components/SketchField/SketchField.jsx deleted file mode 100644 index 98dd7f36..00000000 --- a/src/components/SketchField/SketchField.jsx +++ /dev/null @@ -1,725 +0,0 @@ -/*eslint no-unused-vars: 0*/ -// @ts-nocheck - -import React, { PureComponent } from "react"; -import PropTypes from "prop-types"; -import History from "../../history"; -import { uuid4 } from "../../utils"; -import Arrow from "./../../tools/Arrow"; -import Tool from "./../../tools"; -import DefaultTool from "./../../tools/defaul-tool"; -import Select from "./../../tools/Select"; -import Pencil from "./../../tools/Pencil"; -import Line from "./../../tools/Line"; -import Rectangle from "./../../tools/Rectangle"; -import RectangleLabel from "./../../tools/Rectangle/rectangle-label"; -import Circle from "./../../tools/Circle"; -import Pan from "./../../tools/Pan"; -import Highlighter from "./../../tools/Highlighter"; -import { fabric } from "fabric"; - -/** - * Sketch Tool based on FabricJS for React Applications - */ -class SketchField extends PureComponent { - static propTypes = { - // the color of the line - lineColor: PropTypes.string, - // The width of the line - lineWidth: PropTypes.number, - // the fill color of the shape when applicable - fillColor: PropTypes.string, - // the background color of the sketch - backgroundColor: PropTypes.string, - // the opacity of the object - opacity: PropTypes.number, - // number of undo/redo steps to maintain - undoSteps: PropTypes.number, - // The tool to use, can be pencil, rectangle, circle, brush; - tool: PropTypes.string, - // image format when calling toDataURL - imageFormat: PropTypes.string, - // Sketch data for controlling sketch from - // outside the component - value: PropTypes.object, - // Set to true if you wish to force load the given value, even if it is the same - forceValue: PropTypes.bool, - // Specify some width correction which will be applied on auto resize - widthCorrection: PropTypes.number, - // Specify some height correction which will be applied on auto resize - heightCorrection: PropTypes.number, - // Specify action on change - onChange: PropTypes.func, - // Default initial value - defaultValue: PropTypes.object, - // Sketch width - width: PropTypes.number, - // Sketch height - height: PropTypes.number, - // event object added - onObjectAdded: PropTypes.func, - // event object modified - onObjectModified: PropTypes.func, - // event object removed - onObjectRemoved: PropTypes.func, - // event mouse down - onMouseDown: PropTypes.func, - // event mouse move - onMouseMove: PropTypes.func, - // event mouse up - onMouseUp: PropTypes.func, - // event mouse out - onMouseOut: PropTypes.func, - // event object move - onObjectMoving: PropTypes.func, - // event object scale - onObjectScaling: PropTypes.func, - // event object rotating - onObjectRotating: PropTypes.func, - // Class name to pass to container div of canvas - className: PropTypes.string, - // Style options to pass to container div of canvas - style: PropTypes.object, - }; - - static defaultProps = { - lineColor: "black", - lineWidth: 10, - fillColor: "transparent", - backgroundColor: "transparent", - opacity: 1.0, - undoSteps: 25, - tool: null, - widthCorrection: 0, - heightCorrection: 0, - forceValue: false, - onObjectAdded: () => null, - onObjectModified: () => null, - onObjectRemoved: () => null, - onMouseDown: () => null, - onMouseMove: () => null, - onMouseUp: () => null, - onMouseOut: () => null, - onObjectMoving: () => null, - onObjectScaling: () => null, - onObjectRotating: () => null, - }; - - state = { - action: true, - }; - _initTools = (fabricCanvas) => { - this._tools = {}; - this._tools[Tool.Select] = new Select(fabricCanvas); - this._tools[Tool.Pencil] = new Pencil(fabricCanvas); - this._tools[Tool.Line] = new Line(fabricCanvas); - this._tools[Tool.Arrow] = new Arrow(fabricCanvas); - this._tools[Tool.Rectangle] = new Rectangle(fabricCanvas); - this._tools[Tool.RectangleLabel] = new RectangleLabel(fabricCanvas); - this._tools[Tool.Circle] = new Circle(fabricCanvas); - this._tools[Tool.Pan] = new Pan(fabricCanvas); - this._tools[Tool.Highlighter] = new Highlighter(fabricCanvas); - this._tools[Tool.DefaultTool] = new DefaultTool(fabricCanvas); - }; - - /** - * Enable touch Scrolling on Canvas - */ - enableTouchScroll = () => { - let canvas = this._fc; - if (canvas.allowTouchScrolling) return; - canvas.allowTouchScrolling = true; - }; - - /** - * Disable touch Scrolling on Canvas - */ - disableTouchScroll = () => { - let canvas = this._fc; - if (canvas.allowTouchScrolling) { - canvas.allowTouchScrolling = false; - } - }; - - /** - * Add an image as object to the canvas - * - * @param dataUrl the image url or Data Url - * @param options object to pass and change some options when loading image, the format of the object is: - * - * { - * left: , - * top: , - * scale: - * } - */ - addImg = (dataUrl, options = {}) => { - let canvas = this._fc; - fabric.Image.fromURL(dataUrl, (oImg) => { - let opts = { - left: Math.random() * (canvas.getWidth() - oImg.width * 0.5), - top: Math.random() * (canvas.getHeight() - oImg.height * 0.5), - scale: 0.5, - }; - Object.assign(opts, options); - oImg.scale(opts.scale); - oImg.set({ - left: opts.left, - top: opts.top, - }); - canvas.add(oImg); - }); - }; - - /** - * Action when an object is added to the canvas - */ - _onObjectAdded = (e) => { - const { onObjectAdded } = this.props; - if (!this.state.action) { - this.setState({ action: true }); - return; - } - let obj = e.target; - obj.__version = 1; - // record current object state as json and save as originalState - let objState = obj.toJSON(); - obj.__originalState = objState; - let state = JSON.stringify(objState); - // object, previous state, current state - this._history.keep([obj, state, state]); - onObjectAdded(e); - }; - - /** - * Action when an object is moving around inside the canvas - */ - _onObjectMoving = (e) => { - const { onObjectMoving } = this.props; - onObjectMoving(e); - }; - - /** - * Action when an object is scaling inside the canvas - */ - _onObjectScaling = (e) => { - const { onObjectScaling } = this.props; - onObjectScaling(e); - }; - - /** - * Action when an object is rotating inside the canvas - */ - _onObjectRotating = (e) => { - const { onObjectRotating } = this.props; - onObjectRotating(e); - }; - - _onObjectModified = (e) => { - const { onObjectModified } = this.props; - let obj = e.target; - obj.__version += 1; - let prevState = JSON.stringify(obj.__originalState); - let objState = obj.toJSON(); - // record current object state as json and update to originalState - obj.__originalState = objState; - let currState = JSON.stringify(objState); - this._history.keep([obj, prevState, currState]); - onObjectModified(e); - }; - - /** - * Action when an object is removed from the canvas - */ - _onObjectRemoved = (e) => { - const { onObjectRemoved } = this.props; - let obj = e.target; - if (obj.__removed) { - obj.__version += 1; - return; - } - obj.__version = 0; - onObjectRemoved(e); - }; - - /** - * Action when the mouse button is pressed down - */ - _onMouseDown = (e) => { - const { onMouseDown } = this.props; - this._selectedTool.doMouseDown(e); - onMouseDown(e); - }; - - /** - * Action when the mouse cursor is moving around within the canvas - */ - _onMouseMove = (e) => { - const { onMouseMove } = this.props; - this._selectedTool.doMouseMove(e); - onMouseMove(e); - }; - - /** - * Action when the mouse cursor is moving out from the canvas - */ - _onMouseOut = (e) => { - const { onMouseOut } = this.props; - this._selectedTool.doMouseOut(e); - if (this.props.onChange) { - let onChange = this.props.onChange; - setTimeout(() => { - onChange(e.e); - }, 10); - } - onMouseOut(e); - }; - - _onMouseUp = (e) => { - const { onMouseUp } = this.props; - this._selectedTool.doMouseUp(e); - // Update the final state to new-generated object - // Ignore Path object since it would be created after mouseUp - // Assumed the last object in canvas.getObjects() in the newest object - if (this.props.tool !== Tool.Pencil) { - const canvas = this._fc; - const objects = canvas.getObjects(); - const newObj = objects[objects.length - 1]; - if (newObj && newObj.__version === 1) { - newObj.__originalState = newObj.toJSON(); - } - } - if (this.props.onChange) { - let onChange = this.props.onChange; - setTimeout(() => { - onChange(e.e); - }, 10); - } - onMouseUp(e); - }; - - /** - * Track the resize of the window and update our state - * - * @param e the resize event - * @private - */ - _resize = (e, canvasWidth = null, canvasHeight = null) => { - if (e) e.preventDefault(); - let { widthCorrection, heightCorrection } = this.props; - let canvas = this._fc; - let { offsetWidth, clientHeight } = this._container; - let prevWidth = canvasWidth || canvas.getWidth(); - let prevHeight = canvasHeight || canvas.getHeight(); - let wfactor = ((offsetWidth - widthCorrection) / prevWidth).toFixed(2); - let hfactor = ((clientHeight - heightCorrection) / prevHeight).toFixed(2); - canvas.setWidth(offsetWidth - widthCorrection); - canvas.setHeight(clientHeight - heightCorrection); - if (canvas.backgroundImage) { - // Need to scale background images as well - let bi = canvas.backgroundImage; - bi.width = bi.width * wfactor; - bi.height = bi.height * hfactor; - } - let objects = canvas.getObjects(); - for (let i in objects) { - let obj = objects[i]; - let scaleX = obj.scaleX; - let scaleY = obj.scaleY; - let left = obj.left; - let top = obj.top; - let tempScaleX = scaleX * wfactor; - let tempScaleY = scaleY * hfactor; - let tempLeft = left * wfactor; - let tempTop = top * hfactor; - obj.scaleX = tempScaleX; - obj.scaleY = tempScaleY; - obj.left = tempLeft; - obj.top = tempTop; - obj.setCoords(); - } - canvas.renderAll(); - canvas.calcOffset(); - }; - - /** - * Sets the background color for this sketch - * @param color in rgba or hex format - */ - _backgroundColor = (color) => { - if (!color) return; - let canvas = this._fc; - canvas.setBackgroundColor(color, () => canvas.renderAll()); - }; - - /** - * Zoom the drawing by the factor specified - * - * The zoom factor is a percentage with regards the original, for example if factor is set to 2 - * it will double the size whereas if it is set to 0.5 it will half the size - * - * @param factor the zoom factor - */ - zoom = (factor) => { - let canvas = this._fc; - let objects = canvas.getObjects(); - for (let i in objects) { - objects[i].scaleX = objects[i].scaleX * factor; - objects[i].scaleY = objects[i].scaleY * factor; - objects[i].left = objects[i].left * factor; - objects[i].top = objects[i].top * factor; - objects[i].setCoords(); - } - canvas.renderAll(); - canvas.calcOffset(); - }; - - /** - * Perform an undo operation on canvas, if it cannot undo it will leave the canvas intact - */ - undo = () => { - let history = this._history; - let [obj, prevState, currState] = history.getCurrent(); - history.undo(); - if (obj.__removed) { - this.setState({ action: false }, () => { - this._fc.add(obj); - obj.__version -= 1; - obj.__removed = false; - }); - } else if (obj.__version <= 1) { - this._fc.remove(obj); - } else { - obj.__version -= 1; - obj.setOptions(JSON.parse(prevState)); - obj.setCoords(); - this._fc.renderAll(); - } - if (this.props.onChange) { - this.props.onChange(); - } - }; - - /** - * Perform a redo operation on canvas, if it cannot redo it will leave the canvas intact - */ - redo = () => { - let history = this._history; - if (history.canRedo()) { - let canvas = this._fc; - //noinspection Eslint - let [obj, prevState, currState] = history.redo(); - if (obj.__version === 0) { - this.setState({ action: false }, () => { - canvas.add(obj); - obj.__version = 1; - }); - } else { - obj.__version += 1; - obj.setOptions(JSON.parse(currState)); - } - obj.setCoords(); - canvas.renderAll(); - if (this.props.onChange) { - this.props.onChange(); - } - } - }; - - /** - * Delegation method to check if we can perform an undo Operation, useful to disable/enable possible buttons - * - * @returns {*} true if we can undo otherwise false - */ - canUndo = () => { - return this._history.canUndo(); - }; - - /** - * Delegation method to check if we can perform a redo Operation, useful to disable/enable possible buttons - * - * @returns {*} true if we can redo otherwise false - */ - canRedo = () => { - return this._history.canRedo(); - }; - - /** - * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately - * - * Available Options are - * - * - * - * - * - * - * - * - * - * - * - *
NameTypeArgumentDefaultDescription
format String pngThe format of the output image. Either "jpeg" or "png"
qualityNumber1Quality level (0..1). Only used for jpeg.
multiplierNumber1Multiplier to scale by
leftNumberCropping left offset. Introduced in v1.2.14
topNumberCropping top offset. Introduced in v1.2.14
widthNumberCropping width. Introduced in v1.2.14
heightNumberCropping height. Introduced in v1.2.14
- * - * @returns {String} URL containing a representation of the object in the format specified by options.format - */ - toDataURL = (options) => this._fc.toDataURL(options); - - /** - * Returns JSON representation of canvas - * - * @param propertiesToInclude Array Any properties that you might want to additionally include in the output - * @returns {string} JSON string - */ - toJSON = (propertiesToInclude) => this._fc.toJSON(propertiesToInclude); - - /** - * Populates canvas with data from the specified JSON. - * - * JSON format must conform to the one of fabric.Canvas#toDatalessJSON - * - * @param json JSON string or object - */ - fromJSON = (json) => { - if (!json) return; - let canvas = this._fc; - setTimeout(() => { - canvas.loadFromJSON(json, () => { - if (this.props.tool === Tool.DefaultTool) { - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - } - canvas.renderAll(); - if (this.props.onChange) { - this.props.onChange(); - } - }); - }, 100); - }; - - /** - * Clear the content of the canvas, this will also clear history but will return the canvas content as JSON to be - * used as needed in order to undo the clear if possible - * - * @param propertiesToInclude Array Any properties that you might want to additionally include in the output - * @returns {string} JSON string of the canvas just cleared - */ - clear = (propertiesToInclude) => { - let discarded = this.toJSON(propertiesToInclude); - this._fc.clear(); - this._history.clear(); - return discarded; - }; - - hasSelection = () => { - let canvas = this._fc; - return !!canvas.getActiveObject(); - }; - - clearSelection = () => { - let canvas = this._fc; - canvas.discardActiveObject(); - canvas.requestRenderAll(); - }; - - /** - * Remove selected object from the canvas - */ - removeSelected = () => { - let canvas = this._fc; - let activeObj = canvas.getActiveObject(); - if (activeObj) { - let selected = []; - if (activeObj.type === "activeSelection") { - activeObj.forEachObject((obj) => selected.push(obj)); - } else { - selected.push(activeObj); - } - selected.forEach((obj) => { - obj.__removed = true; - let objState = obj.toJSON(); - obj.__originalState = objState; - let state = JSON.stringify(objState); - this._history.keep([obj, state, state]); - canvas.remove(obj); - }); - canvas.discardActiveObject(); - canvas.requestRenderAll(); - } - }; - - copy = () => { - let canvas = this._fc; - canvas.getActiveObject().clone((cloned) => (this._clipboard = cloned)); - }; - - paste = () => { - // clone again, so you can do multiple copies. - this._clipboard.clone((clonedObj) => { - let canvas = this._fc; - canvas.discardActiveObject(); - clonedObj.set({ - left: clonedObj.left + 10, - top: clonedObj.top + 10, - evented: true, - }); - if (clonedObj.type === "activeSelection") { - // active selection needs a reference to the canvas. - clonedObj.canvas = canvas; - clonedObj.forEachObject((obj) => canvas.add(obj)); - clonedObj.setCoords(); - } else { - canvas.add(clonedObj); - } - this._clipboard.top += 10; - this._clipboard.left += 10; - canvas.setActiveObject(clonedObj); - canvas.requestRenderAll(); - }); - }; - - /** - * Sets the background from the dataUrl given - * - * @param dataUrl the dataUrl to be used as a background - * @param options - */ - setBackgroundFromDataUrl = (dataUrl, options = {}) => { - let canvas = this._fc; - let img = new Image(); - img.setAttribute("crossOrigin", "anonymous"); - const { stretched, stretchedX, stretchedY, ...fabricOptions } = options; - img.onload = () => { - const imgObj = new fabric.Image(img); - if (stretched || stretchedX) imgObj.scaleToWidth(canvas.width); - if (stretched || stretchedY) imgObj.scaleToHeight(canvas.height); - canvas.setBackgroundImage(imgObj, () => canvas.renderAll(), fabricOptions); - }; - img.src = dataUrl; - }; - - addText = (text, options = {}) => { - let canvas = this._fc; - let iText = new fabric.IText(text, options); - let opts = { - left: (canvas.getWidth() - iText.width) * 0.5, - top: (canvas.getHeight() - iText.height) * 0.5, - }; - Object.assign(options, opts); - iText.set({ - left: options.left, - top: options.top, - }); - - canvas.add(iText); - }; - - callEvent = (e, eventFunction) => { - if (this._selectedTool) eventFunction(e); - }; - - componentDidMount = () => { - let { tool, value, undoSteps, defaultValue, backgroundColor } = this.props; - - let canvas = (this._fc = new fabric.Canvas( - this._canvas /*, { - preserveObjectStacking: false, - renderOnAddRemove: false, - skipTargetFind: true - }*/ - )); - - this._initTools(canvas); - - // set initial backgroundColor - this._backgroundColor(backgroundColor); - - let selectedTool = this._tools[tool]; - if (selectedTool) selectedTool.configureCanvas(this.props); - this._selectedTool = selectedTool; - - // Control resize - window.addEventListener("resize", this._resize, false); - - // Initialize History, with maximum number of undo steps - this._history = new History(undoSteps); - - // Events binding - canvas.on("object:added", (e) => this.callEvent(e, this._onObjectAdded)); - canvas.on("object:modified", (e) => this.callEvent(e, this._onObjectModified)); - canvas.on("object:removed", (e) => this.callEvent(e, this._onObjectRemoved)); - canvas.on("mouse:down", (e) => this.callEvent(e, this._onMouseDown)); - canvas.on("mouse:move", (e) => this.callEvent(e, this._onMouseMove)); - canvas.on("mouse:up", (e) => this.callEvent(e, this._onMouseUp)); - canvas.on("mouse:out", (e) => this.callEvent(e, this._onMouseOut)); - canvas.on("object:moving", (e) => this.callEvent(e, this._onObjectMoving)); - canvas.on("object:scaling", (e) => this.callEvent(e, this._onObjectScaling)); - canvas.on("object:rotating", (e) => this.callEvent(e, this._onObjectRotating)); - // IText Events fired on Adding Text - // canvas.on("text:event:changed", console.log) - // canvas.on("text:selection:changed", console.log) - // canvas.on("text:editing:entered", console.log) - // canvas.on("text:editing:exited", console.log) - - this.disableTouchScroll(); - - this._resize(); - - // initialize canvas with controlled value if exists - (value || defaultValue) && this.fromJSON(value || defaultValue); - }; - - componentWillUnmount = () => window.removeEventListener("resize", this._resize); - - componentDidUpdate = (prevProps, prevState) => { - if ( - this.props.width !== prevProps.width || - this.props.height !== prevProps.height - ) { - this._resize(); - } - - if (this.props.tool !== prevProps.tool) { - this._selectedTool = this._tools[this.props.tool]; - //Bring the cursor back to default if it is changed by a tool - this._fc.defaultCursor = "default"; - if (this._selectedTool) { - this._selectedTool.configureCanvas(this.props); - } - } - - if (this.props.backgroundColor !== prevProps.backgroundColor) { - this._backgroundColor(this.props.backgroundColor); - } - - if ( - this.props.value !== prevProps.value || - (this.props.value && this.props.forceValue) - ) { - this.fromJSON(this.props.value); - } - }; - - render = () => { - let { className, style, width, height } = this.props; - - let canvasDivStyle = Object.assign( - {}, - style ? style : {}, - width ? { width: width } : {}, - height ? { height: height } : { height: 512 } - ); - return ( -
(this._container = c)} - style={canvasDivStyle}> - (this._canvas = c)}> - Sorry, Canvas HTML5 element is not supported by your browser :( - -
- ); - }; -} - -export default SketchField; diff --git a/src/components/SketchField/SketchField.spec.js b/src/components/SketchField/SketchField.spec.js deleted file mode 100644 index fe4d46b8..00000000 --- a/src/components/SketchField/SketchField.spec.js +++ /dev/null @@ -1,215 +0,0 @@ -/* global expect, describe,it */ -/* eslint no-console: 0 */ -/* eslint-env node */ - -import React from "react"; -import { mount } from "enzyme"; -import SketchField from "./index"; - -function objectFromDrag(canvas, from = { x: 0, y: 0 }, to = { x: 10, y: 10 }, id) { - function MouseEventPositionGenerator(pos = { x: 0, y: 0 }) { - const eventX = ["x", "pageX", "screenX", "clientX", "offsetX"]; - const eventY = ["y", "pageY", "screenY", "clientY", "offsetY"]; - const generated = {}; - eventX.forEach((key) => (generated[key] = pos.x)); - eventY.forEach((key) => (generated[key] = pos.y)); - return generated; - } - - canvas.trigger("mouse:down", { e: MouseEventPositionGenerator(from) }); - canvas.trigger("mouse:move", { e: MouseEventPositionGenerator(to) }); - canvas.trigger("mouse:up", { e: MouseEventPositionGenerator(to) }); - // Get the last object as the last created object - const objects = canvas.getObjects(); - const newObj = objects[objects.length - 1]; - id && (newObj.id = id); - return newObj; -} - -describe("SketchField", () => { - it("Loads Normally", () => { - require("./index"); - }); - - it("Contains canvas tag", () => { - const sketch = mount(); - expect(sketch.getDOMNode("canvas")).toBeDefined(); - }); - - it("Drag to create rectangle", () => { - const sketch = mount(); - const canvas = sketch.instance()._fc; - expect(canvas).toBeDefined(); - - const startPt = { x: 10, y: 10 }; - const endPt = { x: 40, y: 50 }; - const bounding = { - left: startPt.x, - top: startPt.y, - width: endPt.x - startPt.x, - height: endPt.y - startPt.y, - }; - - // From left-top to right-bottom - objectFromDrag(canvas, startPt, endPt); - - // Check the rectangle existed - expect(canvas.getObjects()[0]).toBeDefined(); - const rect1 = canvas.getObjects()[0]; - expect(rect1.type).toEqual("rect"); - - // Check the rectangle dimension - expect({ - left: rect1.left, - top: rect1.top, - width: rect1.width, - height: rect1.height, - }).toEqual(bounding); - - canvas.remove(rect1); - // From right-bottom to left-top; - objectFromDrag(canvas, endPt, startPt); - const rect2 = canvas.getObjects()[0]; - expect(rect2.type).toEqual("rect"); - - // Check the rectangle dimension - expect({ - left: rect2.left, - top: rect2.top, - width: rect2.width, - height: rect2.height, - }).toEqual(bounding); - }); - - it("Undo/Redo for multiple rectangles add to canvas", () => { - const sketch = mount().instance(); - const canvas = sketch._fc; - expect(canvas).toBeDefined(); - - const startPt = { x: 10, y: 10 }; - const endPt = { x: 40, y: 50 }; - - canvas.renderOnAddRemove = false; - objectFromDrag(canvas, startPt, endPt, "rect1"); - objectFromDrag(canvas, startPt, endPt, "rect2"); - expect(canvas.getObjects().map((o) => o.id)).toEqual(["rect1", "rect2"]); - - sketch.undo(); - expect(canvas.getObjects().map((o) => o.id)).toEqual(["rect1"]); - - sketch.undo(); - expect(canvas.getObjects().map((o) => o.id)).toEqual([]); - - sketch.redo(); - expect(canvas.getObjects().map((o) => o.id)).toEqual(["rect1"]); - - objectFromDrag(canvas, startPt, endPt, "rect3"); - expect(canvas.getObjects().map((o) => o.id)).toEqual(["rect1", "rect3"]); - - sketch.undo(); - expect(canvas.getObjects().map((o) => o.id)).toEqual(["rect1"]); - }); - - it("Undo/Redo for multiple modification for single rectangle", () => { - const sketch = mount().instance(); - const canvas = sketch._fc; - expect(canvas).toBeDefined(); - - const startPt = { x: 10, y: 10 }; - const endPt = { x: 40, y: 50 }; - - // [Action1] Add new rectange object and save its state - const stateStack = []; - const rect = objectFromDrag(canvas, startPt, endPt); - stateStack.push(rect.toJSON()); - - // [Action2] Change rectangle dimension and save its state - rect.set({ width: 50, height: 60 }); - rect.setCoords(); - canvas.trigger("object:modified", { target: rect }); - stateStack.push(rect.toJSON()); - - // [Action3] Change the position and save its state - rect.set({ left: 20, top: 70 }); - rect.setCoords(); - canvas.trigger("object:modified", { target: rect }); - stateStack.push(rect.toJSON()); - - // Undo Action3 - sketch.undo(); - void (function () { - const obj = canvas.getObjects()[0]; - expect(obj.toJSON()).toEqual(stateStack[1]); - })(); - - // Undo Action2 - sketch.undo(); - void (function () { - const obj = canvas.getObjects()[0]; - expect(obj.toJSON()).toEqual(stateStack[0]); - })(); - - // Undo Action1, and then redo Action1 - sketch.undo(); - sketch.redo(); - void (function () { - const obj = canvas.getObjects()[0]; - expect(obj.toJSON()).toEqual(stateStack[0]); - })(); - - // redo Action2 - sketch.redo(); - void (function () { - const obj = canvas.getObjects()[0]; - expect(obj.toJSON()).toEqual(stateStack[1]); - })(); - - // redo Action3 - sketch.redo(); - void (function () { - const obj = canvas.getObjects()[0]; - expect(obj.toJSON()).toEqual(stateStack[2]); - })(); - }); - - it("Removes selected object", () => { - const sketch = mount().instance(); - const canvas = sketch._fc; - expect(canvas).toBeDefined(); - - const startPt = { x: 10, y: 10 }; - const endPt = { x: 40, y: 50 }; - - canvas.renderOnAddRemove = false; - objectFromDrag(canvas, startPt, endPt, "rect1"); - objectFromDrag(canvas, startPt, endPt, "rect2"); - canvas.setActiveObject(canvas.getObjects()[0]); - - sketch.removeSelected(); - expect(canvas.getObjects().map((o) => o.id)).toEqual(["rect2"]); - - sketch.undo(); - expect(canvas.getObjects().map((o) => o.id)).toEqual(["rect2", "rect1"]); - }); - - it("Copy/Paste selected object", () => { - const sketch = mount().instance(); - const canvas = sketch._fc; - expect(canvas).toBeDefined(); - - const startPt = { x: 10, y: 10 }; - const endPt = { x: 40, y: 50 }; - - canvas.renderOnAddRemove = false; - objectFromDrag(canvas, startPt, endPt, "rect1"); - objectFromDrag(canvas, startPt, endPt, "rect2"); - canvas.setActiveObject(canvas.getObjects()[0]); - - expect(canvas.getObjects().length).toEqual(2); - - sketch.copy(); - sketch.paste(); - - expect(canvas.getObjects().length).toEqual(3); - }); -}); diff --git a/src/components/SketchField/index.js b/src/components/SketchField/index.js deleted file mode 100644 index ebeabdd9..00000000 --- a/src/components/SketchField/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import SketchField from "./SketchField"; - -export { SketchField }; -export default SketchField; diff --git a/src/history/History.spec.js b/src/history/History.spec.js deleted file mode 100644 index c4520e35..00000000 --- a/src/history/History.spec.js +++ /dev/null @@ -1,90 +0,0 @@ -/* eslint no-console: 0 */ -/* eslint-env node, mocha */ - -import History from "./index"; - -describe("History", () => { - it("Loads Normally", () => { - require("./index"); - }); - - it("Undo limit is set", () => { - const instance = new History(); - const instanceWithCustomUndoSteps = new History(15); - expect(instance.getUndoLimit()).toEqual(10); - expect(instanceWithCustomUndoSteps.getUndoLimit()).toEqual(15); - }); - - it("Informs if can undo", () => { - const instance = new History(); - expect(instance.canUndo()).toBeFalsy(); - instance.keep("1"); - expect(instance.canUndo()).toBeTruthy(); - instance.keep("2"); - expect(instance.canUndo()).toBeTruthy(); - }); - - it("Can undo/redo object", () => { - const instance = new History(15, true); - instance.keep("1"); - instance.keep("2"); - expect(instance.canUndo()).toBeTruthy(); - expect(instance.getCurrent()).toEqual("2"); - expect(instance.undo()).toEqual("1"); - expect(instance.undo()).toBeNull(); - expect(instance.getCurrent()).toBeNull(); - expect(instance.redo()).toEqual("1"); - expect(instance.getCurrent()).toEqual("1"); - }); - - it("Multiple undo/redo of objects", () => { - const instance = new History(); - instance.keep("1"); - instance.keep("2"); - instance.keep("3"); - instance.keep("4"); - instance.keep("5"); - expect(instance.canUndo()).toBeTruthy(); - expect(instance.undo()).toEqual("4"); - expect(instance.undo()).toEqual("3"); - expect(instance.undo()).toEqual("2"); - expect(instance.undo()).toEqual("1"); - expect(instance.undo()).toBeNull(); - expect(instance.redo()).toEqual("1"); - expect(instance.redo()).toEqual("2"); - expect(instance.redo()).toEqual("3"); - expect(instance.redo()).toEqual("4"); - expect(instance.redo()).toEqual("5"); - expect(instance.redo()).toBeNull(); - }); - - it("Redo is reset after a keep of a new object", () => { - const instance = new History(); - instance.keep("1"); - instance.keep("2"); - instance.keep("3"); - expect(instance.canUndo()).toBeTruthy(); - expect(instance.canRedo()).toBeFalsy(); - expect(instance.undo()).toEqual("2"); - expect(instance.canRedo()).toBeTruthy(); - instance.keep("4"); - expect(instance.canRedo()).toBeFalsy(); - expect(instance.redo()).toBeNull(); - }); - - it("Can clear history", () => { - const instance = new History(); - instance.keep("1"); - instance.keep("2"); - instance.keep("3"); - expect(instance.undo()).toEqual("2"); - expect(instance.redo()).toEqual("3"); - instance.clear(); - expect(instance.canUndo()).toBeFalsy(); - expect(instance.canRedo()).toBeFalsy(); - expect(instance.undo()).toBeNull(); - expect(instance.redo()).toBeNull(); - instance.undo(); - instance.redo(); - }); -}); diff --git a/src/history/index.js b/src/history/index.js deleted file mode 100644 index f2dc9fba..00000000 --- a/src/history/index.js +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Maintains the history of an object - */ -class History { - constructor(undoLimit = 10, debug = false) { - this.undoLimit = undoLimit; - this.undoList = []; - this.redoList = []; - this.current = null; - this.debug = debug; - } - - /** - * Get the limit of undo/redo actions - * - * @returns {number|*} the undo limit, as it is configured when constructing the history instance - */ - getUndoLimit() { - return this.undoLimit; - } - - /** - * Get Current state - * - * @returns {null|*} - */ - getCurrent() { - return this.current; - } - - /** - * Keep an object to history - * - * This method will set the object as current value and will push the previous "current" object to the undo history - * - * @param obj - */ - keep(obj) { - try { - this.redoList = []; - if (this.current) { - this.undoList.push(this.current); - } - if (this.undoList.length > this.undoLimit) { - this.undoList.shift(); - } - this.current = obj; - } finally { - this.print(); - } - } - - /** - * Undo the last object, this operation will set the current object to one step back in time - * - * @returns the new current value after the undo operation, else null if no undo operation was possible - */ - undo() { - try { - if (this.current) { - this.redoList.push(this.current); - if (this.redoList.length > this.undoLimit) { - this.redoList.shift(); - } - if (this.undoList.length === 0) this.current = null; - } - if (this.undoList.length > 0) { - this.current = this.undoList.pop(); - return this.current; - } - return null; - } finally { - this.print(); - } - } - - /** - * Redo the last object, redo happens only if no keep operations have been performed - * - * @returns the new current value after the redo operation, or null if no redo operation was possible - */ - redo() { - try { - if (this.redoList.length > 0) { - if (this.current) this.undoList.push(this.current); - this.current = this.redoList.pop(); - return this.current; - } - return null; - } finally { - this.print(); - } - } - - /** - * Checks whether we can perform a redo operation - * - * @returns {boolean} - */ - canRedo() { - return this.redoList.length > 0; - } - - /** - * Checks whether we can perform an undo operation - * - * @returns {boolean} - */ - canUndo() { - return this.undoList.length > 0 || this.current !== null; - } - - /** - * Clears the history maintained, can be undone - */ - clear() { - this.undoList = []; - this.redoList = []; - this.current = null; - this.print(); - } - - print() { - if (this.debug) { - /* eslint-disable no-console */ - console.log( - this.undoList, - " -> " + this.current + " <- ", - this.redoList.slice(0).reverse() - ); - } - } -} - -export default History; diff --git a/src/index.js b/src/index.js deleted file mode 100644 index e1473efd..00000000 --- a/src/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import "./polyfill"; -import SketchField from "./components/SketchField"; -import Tools from "./tools"; - -export { SketchField }; -export { Tools }; - -export default { - SketchField, - Tools, -}; diff --git a/src/polyfill.js b/src/polyfill.js deleted file mode 100644 index 597cb8d3..00000000 --- a/src/polyfill.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Object.assign() polyfill for IE11 - * @see - */ - -if (typeof Object.assign != "function") { - Object.defineProperty(Object, "assign", { - // eslint-disable-next-line no-unused-vars - value: function assign(target, varArgs) { - "use strict"; - if (target == null) { - throw new TypeError("Cannot convert undefined or null to object"); - } - let to = Object(target); - for (let index = 1; index < arguments.length; index++) { - let nextSource = arguments[index]; - if (nextSource != null) { - for (let nextKey in nextSource) { - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - to[nextKey] = nextSource[nextKey]; - } - } - } - } - return to; - }, - writable: true, - configurable: true, - }); -} diff --git a/src/tools.js b/src/tools.js deleted file mode 100644 index 32c2f351..00000000 --- a/src/tools.js +++ /dev/null @@ -1,12 +0,0 @@ -export default { - Circle: "circle", - Line: "line", - Arrow: "arrow", - Pencil: "pencil", - Rectangle: "rectangle", - RectangleLabel: "rectangle-label", - Select: "select", - Pan: "pan", - Highlighter: "highlighter", - DefaultTool: "default-tool", -}; diff --git a/src/tools/Arrow/index.js b/src/tools/Arrow/index.js deleted file mode 100644 index aedecd2b..00000000 --- a/src/tools/Arrow/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "../fabrictool"; - -const fabric = require("fabric").fabric; - -class Index extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - this._width = props.lineWidth; - this._color = props.lineColor; - } - - doMouseDown(o) { - this.isDown = true; - let canvas = this._canvas; - var pointer = canvas.getPointer(o.e); - var points = [pointer.x, pointer.y, pointer.x, pointer.y]; - this.line = new fabric.Line(points, { - strokeWidth: this._width, - fill: this._color, - stroke: this._color, - originX: "center", - originY: "center", - selectable: false, - evented: false, - }); - - this.head = new fabric.Triangle({ - fill: this._color, - left: pointer.x, - top: pointer.y, - originX: "center", - originY: "center", - height: 3 * this._width, - width: 3 * this._width, - selectable: false, - evented: false, - angle: 90, - }); - - canvas.add(this.line); - canvas.add(this.head); - } - - doMouseMove(o) { - if (!this.isDown) return; - let canvas = this._canvas; - var pointer = canvas.getPointer(o.e); - this.line.set({ x2: pointer.x, y2: pointer.y }); - this.line.setCoords(); - - let x_delta = pointer.x - this.line.x1; - let y_delta = pointer.y - this.line.y1; - - this.head.set({ - left: pointer.x, - top: pointer.y, - angle: 90 + (Math.atan2(y_delta, x_delta) * 180) / Math.PI, - }); - - canvas.renderAll(); - } - - doMouseUp(o) { - this.isDown = false; - let canvas = this._canvas; - - canvas.remove(this.line); - canvas.remove(this.head); - let arrow = new fabric.Group([this.line, this.head]); - canvas.add(arrow); - } - - doMouseOut(o) { - this.isDown = false; - } -} - -export default Index; diff --git a/src/tools/Circle/index.js b/src/tools/Circle/index.js deleted file mode 100644 index 24163888..00000000 --- a/src/tools/Circle/index.js +++ /dev/null @@ -1,61 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "../fabrictool"; -import { linearDistance } from "../../utils"; - -const fabric = require("fabric").fabric; - -class Circle extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - this._width = props.lineWidth; - this._color = props.lineColor; - this._fill = props.fillColor; - } - - doMouseDown(o) { - let canvas = this._canvas; - this.isDown = true; - let pointer = canvas.getPointer(o.e); - [this.startX, this.startY] = [pointer.x, pointer.y]; - this.circle = new fabric.Circle({ - left: this.startX, - top: this.startY, - originX: "left", - originY: "center", - strokeWidth: this._width, - stroke: this._color, - fill: this._fill, - selectable: false, - evented: false, - radius: 1, - }); - canvas.add(this.circle); - } - - doMouseMove(o) { - if (!this.isDown) return; - let canvas = this._canvas; - let pointer = canvas.getPointer(o.e); - this.circle.set({ - radius: - linearDistance( - { x: this.startX, y: this.startY }, - { x: pointer.x, y: pointer.y } - ) / 2, - angle: - (Math.atan2(pointer.y - this.startY, pointer.x - this.startX) * 180) / - Math.PI, - }); - this.circle.setCoords(); - canvas.renderAll(); - } - - doMouseUp(o) { - this.isDown = false; - } -} - -export default Circle; diff --git a/src/tools/Highlighter/index.js b/src/tools/Highlighter/index.js deleted file mode 100644 index d42d80de..00000000 --- a/src/tools/Highlighter/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import FabricCanvasTool from "../fabrictool"; -import { hexToRgbA, colorNameToHex } from "../../utils"; - -class Highlighter extends FabricCanvasTool { - configureCanvas(props) { - this._canvas.isDrawingMode = true; - this._canvas.freeDrawingBrush.width = props.lineWidth; - this._canvas.freeDrawingBrush.color = - props.lineColor.indexOf("#") > -1 - ? hexToRgbA(props.lineColor) - : hexToRgbA(colorNameToHex(props.lineColor)); - } -} - -export default Highlighter; diff --git a/src/tools/Line/index.js b/src/tools/Line/index.js deleted file mode 100644 index 4531ed75..00000000 --- a/src/tools/Line/index.js +++ /dev/null @@ -1,51 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "../fabrictool"; - -const fabric = require("fabric").fabric; - -class Line extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - this._width = props.lineWidth; - this._color = props.lineColor; - } - - doMouseDown(o) { - this.isDown = true; - let canvas = this._canvas; - var pointer = canvas.getPointer(o.e); - var points = [pointer.x, pointer.y, pointer.x, pointer.y]; - this.line = new fabric.Line(points, { - strokeWidth: this._width, - fill: this._color, - stroke: this._color, - originX: "center", - originY: "center", - selectable: false, - evented: false, - }); - canvas.add(this.line); - } - - doMouseMove(o) { - if (!this.isDown) return; - let canvas = this._canvas; - var pointer = canvas.getPointer(o.e); - this.line.set({ x2: pointer.x, y2: pointer.y }); - this.line.setCoords(); - canvas.renderAll(); - } - - doMouseUp(o) { - this.isDown = false; - } - - doMouseOut(o) { - this.isDown = false; - } -} - -export default Line; diff --git a/src/tools/Pan/index.js b/src/tools/Pan/index.js deleted file mode 100644 index d4b1231d..00000000 --- a/src/tools/Pan/index.js +++ /dev/null @@ -1,41 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "../fabrictool"; - -const fabric = require("fabric").fabric; - -class Pan extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - //Change the cursor to the move grabber - canvas.defaultCursor = "move"; - } - - doMouseDown(o) { - let canvas = this._canvas; - this.isDown = true; - let pointer = canvas.getPointer(o.e); - this.startX = pointer.x; - this.startY = pointer.y; - } - - doMouseMove(o) { - if (!this.isDown) return; - let canvas = this._canvas; - let pointer = canvas.getPointer(o.e); - - canvas.relativePan({ - x: pointer.x - this.startX, - y: pointer.y - this.startY, - }); - canvas.renderAll(); - } - - doMouseUp(o) { - this.isDown = false; - } -} - -export default Pan; diff --git a/src/tools/Pencil/index.js b/src/tools/Pencil/index.js deleted file mode 100644 index 83cd36f7..00000000 --- a/src/tools/Pencil/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import FabricCanvasTool from "../fabrictool"; - -class Pencil extends FabricCanvasTool { - configureCanvas(props) { - this._canvas.isDrawingMode = true; - this._canvas.freeDrawingBrush.width = props.lineWidth; - this._canvas.freeDrawingBrush.color = props.lineColor; - } -} - -export default Pencil; diff --git a/src/tools/Rectangle/index.js b/src/tools/Rectangle/index.js deleted file mode 100644 index e8f68023..00000000 --- a/src/tools/Rectangle/index.js +++ /dev/null @@ -1,64 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "../fabrictool"; - -const fabric = require("fabric").fabric; - -class Rectangle extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - this._width = props.lineWidth; - this._color = props.lineColor; - this._fill = props.fillColor; - } - - doMouseDown(o) { - let canvas = this._canvas; - this.isDown = true; - let pointer = canvas.getPointer(o.e); - this.startX = pointer.x; - this.startY = pointer.y; - this.rect = new fabric.Rect({ - left: this.startX, - top: this.startY, - originX: "left", - originY: "top", - width: pointer.x - this.startX, - height: pointer.y - this.startY, - stroke: this._color, - strokeWidth: this._width, - fill: this._fill, - transparentCorners: false, - selectable: false, - evented: false, - strokeUniform: true, - noScaleCache: false, - angle: 0, - }); - canvas.add(this.rect); - } - - doMouseMove(o) { - if (!this.isDown) return; - let canvas = this._canvas; - let pointer = canvas.getPointer(o.e); - if (this.startX > pointer.x) { - this.rect.set({ left: Math.abs(pointer.x) }); - } - if (this.startY > pointer.y) { - this.rect.set({ top: Math.abs(pointer.y) }); - } - this.rect.set({ width: Math.abs(this.startX - pointer.x) }); - this.rect.set({ height: Math.abs(this.startY - pointer.y) }); - this.rect.setCoords(); - canvas.renderAll(); - } - - doMouseUp(o) { - this.isDown = false; - } -} - -export default Rectangle; diff --git a/src/tools/Rectangle/rectangle-label-object.js b/src/tools/Rectangle/rectangle-label-object.js deleted file mode 100644 index 3acf94d3..00000000 --- a/src/tools/Rectangle/rectangle-label-object.js +++ /dev/null @@ -1,35 +0,0 @@ -/* eslint no-unused-vars: 0 */ - -const fabric = require("fabric").fabric; - -class RectangleLabelObject { - constructor(canvas, text, rectProps, textProps) { - this._canvas = canvas; - this._text = text; - this._rectObj = new fabric.Rect(rectProps); - this._textObj = new fabric.Textbox(text, textProps); - canvas.on({ "object:scaling": this.update }); - canvas.on({ "object:moving": this.update }); - } - - update = (e) => { - //e.target.set({scaleX:1, scaleY:1}) - if (!this._textObj || !this._rectObj) return; - if (e.target === this._rectObj) { - this._textObj.set({ - width: this._rectObj.getScaledWidth(), - scaleX: 1, - scaleY: 1, - top: this._rectObj.top - this._textObj.getScaledHeight(), - left: this._rectObj.left, - }); - } - }; - - setText(text) { - this._text = text; - this._textObj.set({ text }); - } -} - -export default RectangleLabelObject; diff --git a/src/tools/Rectangle/rectangle-label.js b/src/tools/Rectangle/rectangle-label.js deleted file mode 100644 index f1dac8e8..00000000 --- a/src/tools/Rectangle/rectangle-label.js +++ /dev/null @@ -1,114 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "../fabrictool"; -import RectangleLabelObject from "./rectangle-label-object"; - -class RectangleLabel extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - this._width = props.lineWidth; - this._color = props.lineColor; - this._fill = props.fillColor; - this._textString = props.text; - this._maxFontSize = 12; - } - - doMouseDown(o) { - let canvas = this._canvas; - this.isDown = true; - let pointer = canvas.getPointer(o.e); - this.startX = pointer.x; - this.startY = pointer.y; - this.rectangleLabel = new RectangleLabelObject( - canvas, - "New drawing", - { - left: this.startX, - top: this.startY, - originX: "left", - originY: "top", - width: pointer.x - this.startX, - height: pointer.y - this.startY, - stroke: this._color, - strokeWidth: this._width, - fill: this._fill, - transparentCorners: false, - selectable: false, - evented: false, - strokeUniform: true, - noScaleCache: false, - angle: 0, - }, - { - left: this.startX, - top: this.startY - 12, - originX: "left", - originY: "top", - width: pointer.x - this.startX - this._width, - height: canvas.height / 3, - fontSize: this._maxFontSize, - noScaleCache: false, - backgroundColor: this._color, - transparentCorners: true, - hasControls: false, - angle: 0, - } - ); - - if (this._objects && this._objects.length > 0) - this._objects.push(this.rectangleLabel); - else this._objects = [this.rectangleLabel]; - - while (this.rectangleLabel._textObj.height > canvas.height / 3) { - this.rectangleLabel._textObj.set({ - fontSize: this.rectangleLabel._textObj.fontSize - 1, - top: this.startY - this.rectangleLabel._textObj.fontSize - 12, - }); - } - - canvas.add(this.rectangleLabel._rectObj); - canvas.add(this.rectangleLabel._textObj); - canvas.renderAll(); - } - - doMouseMove(o) { - if (!this.isDown) return; - let canvas = this._canvas; - let pointer = canvas.getPointer(o.e); - if (this.startX > pointer.x) { - this.rectangleLabel._rectObj.set({ left: Math.abs(pointer.x) }); - this.rectangleLabel._textObj.set({ left: Math.abs(pointer.x) }); - } - if (this.startY > pointer.y) { - this.rectangleLabel._rectObj.set({ left: Math.abs(pointer.x) }); - this.rectangleLabel._textObj.set({ top: Math.abs(pointer.y) }); - } - this.rectangleLabel._textObj.setCoords(); - this.rectangleLabel._rectObj.set({ - width: Math.abs(this.startX - pointer.x), - }); - this.rectangleLabel._textObj.set({ - width: this.rectangleLabel._rectObj.getScaledWidth(), - }); - this.rectangleLabel._rectObj.set({ - height: Math.abs(this.startY - pointer.y), - }); - this.rectangleLabel._rectObj.setCoords(); - canvas.renderAll(); - } - - doMouseUp(o) { - this.isDown = false; - let canvas = this._canvas; - - // var group = new fabric.Group([this.rectangleLabel._rectObj,this.rectangleLabel._textObj]); - // canvas.remove(this.rectangleLabel._rectObj); - // canvas.remove(this.rectangleLabel._textObj); - // canvas.add(group); - canvas.renderAll(); - } -} - -export default RectangleLabel; diff --git a/src/tools/Select/index.js b/src/tools/Select/index.js deleted file mode 100644 index 880afddc..00000000 --- a/src/tools/Select/index.js +++ /dev/null @@ -1,16 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "../fabrictool"; - -class Select extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = false; - canvas.selection = true; - canvas.forEachObject((o) => { - o.selectable = o.evented = true; - }); - } -} - -export default Select; diff --git a/src/tools/defaul-tool.js b/src/tools/defaul-tool.js deleted file mode 100644 index 2d58ae87..00000000 --- a/src/tools/defaul-tool.js +++ /dev/null @@ -1,18 +0,0 @@ -/*eslint no-unused-vars: 0*/ - -import FabricCanvasTool from "./fabrictool"; - -const fabric = require("fabric").fabric; - -class DefaultTool extends FabricCanvasTool { - configureCanvas(props) { - let canvas = this._canvas; - canvas.isDrawingMode = canvas.selection = false; - canvas.forEachObject((o) => (o.selectable = o.evented = false)); - canvas.discardActiveObject(); - canvas.defaultCursor = "pointer"; - canvas.renderAll(); - } -} - -export default DefaultTool; diff --git a/src/tools/fabrictool.js b/src/tools/fabrictool.js deleted file mode 100644 index 4a08c3fd..00000000 --- a/src/tools/fabrictool.js +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint no-unused-vars: 0 */ - -/** - * "Abstract" like base class for a Canvas tool - */ -class FabricCanvasTool { - constructor(canvas) { - this._canvas = canvas; - } - - configureCanvas(props) {} - - doMouseUp(event) {} - - doMouseDown(event) {} - - doMouseMove(event) {} - - doMouseOut(event) {} -} - -export default FabricCanvasTool; diff --git a/src/tools/index.js b/src/tools/index.js deleted file mode 100644 index 7a959cba..00000000 --- a/src/tools/index.js +++ /dev/null @@ -1,23 +0,0 @@ -import Arrow from "./Arrow"; -import Circle from "./Circle"; -import Highlighter from "./Highlighter"; -import Line from "./Line"; -import Pan from "./Pan"; -import Pencil from "./Pencil"; -import Rectangle from "./Rectangle"; -import RectangleLabel from "./Rectangle/rectangle-label"; -import Select from "./Select/index"; -import DefaultTool from "./defaul-tool"; - -export default { - Arrow, - Circle, - Highlighter, - Line, - Pan, - Pencil, - Rectangle, - RectangleLabel, - Select, - DefaultTool, -}; diff --git a/src/utils/Utils.spec.js b/src/utils/Utils.spec.js deleted file mode 100644 index 90f949b4..00000000 --- a/src/utils/Utils.spec.js +++ /dev/null @@ -1,15 +0,0 @@ -/* global expect,describe,it */ -/* eslint no-console: 0 */ -/* eslint-env node, mocha */ - -import { uuid4 } from "../index"; - -describe("Utils", () => { - it("Loads Normally", () => { - require("../index"); - }); - - it("Generates random uuid", () => { - expect(uuid4()).toBeDefined(); - }); -}); diff --git a/src/utils/index.js b/src/utils/index.js deleted file mode 100644 index da1adff7..00000000 --- a/src/utils/index.js +++ /dev/null @@ -1,242 +0,0 @@ -/** - * Determine the mouse position - * - * @param event the canvas event - * @returns *[] tuple of position x,y - * @private - */ -export const pointerPosition = (event) => { - event = event || window.event; - var target = event.target || event.srcElement, - style = target.currentStyle || window.getComputedStyle(target, null), - borderLeftWidth = parseInt(style["borderLeftWidth"], 10), - borderTopWidth = parseInt(style["borderTopWidth"], 10), - rect = target.getBoundingClientRect(), - _x = event.clientX - borderLeftWidth - rect.left, - _y = event.clientY - borderTopWidth - rect.top, - _touchX = event.changedTouches - ? event.changedTouches[0].clientX - borderLeftWidth - rect.left - : null, - _touchY = event.changedTouches - ? event.changedTouches[0].clientY - borderTopWidth - rect.top - : null; - return [_x || _touchX, _y || _touchY]; -}; - -/** - * Calculate the distance of two x,y points - * - * @param point1 an object with x,y attributes representing the start point - * @param point2 an object with x,y attributes representing the end point - * - * @returns {number} - */ -export const linearDistance = (point1, point2) => { - let xs = point2.x - point1.x; - let ys = point2.y - point1.y; - return Math.sqrt(xs * xs + ys * ys); -}; - -/** - * Return a random uuid of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx - * @returns {string} - */ -export const uuid4 = () => { - let uuid = "", - ii; - for (ii = 0; ii < 32; ii += 1) { - switch (ii) { - case 8: - case 20: - uuid += "-"; - uuid += ((Math.random() * 16) | 0).toString(16); - break; - case 12: - uuid += "-"; - uuid += "4"; - break; - case 16: - uuid += "-"; - uuid += ((Math.random() * 4) | 8).toString(16); - break; - default: - uuid += ((Math.random() * 16) | 0).toString(16); - } - } - return uuid; -}; - -/** - * - * @param hex is a color code in the form of hex. - * Return a rgba equivalent of given hex. - * @returns {string} - */ -export const hexToRgbA = (hex) => { - var c; - if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) { - c = hex.substring(1).split(""); - if (c.length == 3) { - c = [c[0], c[0], c[1], c[1], c[2], c[2]]; - } - c = "0x" + c.join(""); - return "rgba(" + [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(",") + ",0.4)"; - } - throw new Error("Bad Hex"); -}; - -/** - * - * @param color is a color name to convert it to hex - * Return hex equivalent of given color name - */ -export const colorNameToHex = (color) => { - var colors = { - aliceblue: "#f0f8ff", - antiquewhite: "#faebd7", - aqua: "#00ffff", - aquamarine: "#7fffd4", - azure: "#f0ffff", - beige: "#f5f5dc", - bisque: "#ffe4c4", - black: "#000000", - blanchedalmond: "#ffebcd", - blue: "#0000ff", - blueviolet: "#8a2be2", - brown: "#a52a2a", - burlywood: "#deb887", - cadetblue: "#5f9ea0", - chartreuse: "#7fff00", - chocolate: "#d2691e", - coral: "#ff7f50", - cornflowerblue: "#6495ed", - cornsilk: "#fff8dc", - crimson: "#dc143c", - cyan: "#00ffff", - darkblue: "#00008b", - darkcyan: "#008b8b", - darkgoldenrod: "#b8860b", - darkgray: "#a9a9a9", - darkgreen: "#006400", - darkkhaki: "#bdb76b", - darkmagenta: "#8b008b", - darkolivegreen: "#556b2f", - darkorange: "#ff8c00", - darkorchid: "#9932cc", - darkred: "#8b0000", - darksalmon: "#e9967a", - darkseagreen: "#8fbc8f", - darkslateblue: "#483d8b", - darkslategray: "#2f4f4f", - darkturquoise: "#00ced1", - darkviolet: "#9400d3", - deeppink: "#ff1493", - deepskyblue: "#00bfff", - dimgray: "#696969", - dodgerblue: "#1e90ff", - firebrick: "#b22222", - floralwhite: "#fffaf0", - forestgreen: "#228b22", - fuchsia: "#ff00ff", - gainsboro: "#dcdcdc", - ghostwhite: "#f8f8ff", - gold: "#ffd700", - goldenrod: "#daa520", - gray: "#808080", - green: "#008000", - greenyellow: "#adff2f", - honeydew: "#f0fff0", - hotpink: "#ff69b4", - "indianred ": "#cd5c5c", - indigo: "#4b0082", - ivory: "#fffff0", - khaki: "#f0e68c", - lavender: "#e6e6fa", - lavenderblush: "#fff0f5", - lawngreen: "#7cfc00", - lemonchiffon: "#fffacd", - lightblue: "#add8e6", - lightcoral: "#f08080", - lightcyan: "#e0ffff", - lightgoldenrodyellow: "#fafad2", - lightgrey: "#d3d3d3", - lightgreen: "#90ee90", - lightpink: "#ffb6c1", - lightsalmon: "#ffa07a", - lightseagreen: "#20b2aa", - lightskyblue: "#87cefa", - lightslategray: "#778899", - lightsteelblue: "#b0c4de", - lightyellow: "#ffffe0", - lime: "#00ff00", - limegreen: "#32cd32", - linen: "#faf0e6", - magenta: "#ff00ff", - maroon: "#800000", - mediumaquamarine: "#66cdaa", - mediumblue: "#0000cd", - mediumorchid: "#ba55d3", - mediumpurple: "#9370d8", - mediumseagreen: "#3cb371", - mediumslateblue: "#7b68ee", - mediumspringgreen: "#00fa9a", - mediumturquoise: "#48d1cc", - mediumvioletred: "#c71585", - midnightblue: "#191970", - mintcream: "#f5fffa", - mistyrose: "#ffe4e1", - moccasin: "#ffe4b5", - navajowhite: "#ffdead", - navy: "#000080", - oldlace: "#fdf5e6", - olive: "#808000", - olivedrab: "#6b8e23", - orange: "#ffa500", - orangered: "#ff4500", - orchid: "#da70d6", - palegoldenrod: "#eee8aa", - palegreen: "#98fb98", - paleturquoise: "#afeeee", - palevioletred: "#d87093", - papayawhip: "#ffefd5", - peachpuff: "#ffdab9", - peru: "#cd853f", - pink: "#ffc0cb", - plum: "#dda0dd", - powderblue: "#b0e0e6", - purple: "#800080", - rebeccapurple: "#663399", - red: "#ff0000", - rosybrown: "#bc8f8f", - royalblue: "#4169e1", - saddlebrown: "#8b4513", - salmon: "#fa8072", - sandybrown: "#f4a460", - seagreen: "#2e8b57", - seashell: "#fff5ee", - sienna: "#a0522d", - silver: "#c0c0c0", - skyblue: "#87ceeb", - slateblue: "#6a5acd", - slategray: "#708090", - snow: "#fffafa", - springgreen: "#00ff7f", - steelblue: "#4682b4", - tan: "#d2b48c", - teal: "#008080", - thistle: "#d8bfd8", - tomato: "#ff6347", - turquoise: "#40e0d0", - violet: "#ee82ee", - wheat: "#f5deb3", - white: "#ffffff", - whitesmoke: "#f5f5f5", - yellow: "#ffff00", - yellowgreen: "#9acd32", - }; - - if (typeof colors[color.toLowerCase()] != "undefined") - return colors[color.toLowerCase()]; - - return false; -}; diff --git a/webpack/examples.cfg.js b/webpack/examples.cfg.js deleted file mode 100644 index 7603c443..00000000 --- a/webpack/examples.cfg.js +++ /dev/null @@ -1,63 +0,0 @@ -const Paths = require("./paths"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); -const DefinePlugin = require("webpack/lib/DefinePlugin"); -const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); -const OccurrenceOrderPlugin = require("webpack/lib/optimize/OccurrenceOrderPlugin"); -const AggressiveMergingPlugin = require("webpack/lib/optimize/AggressiveMergingPlugin"); - -const config = { - entry: { - examples: Paths.entryPath, - }, - output: { - path: Paths.buildPath, - filename: "index.js", - publicPath: "", - }, - resolve: { - extensions: [".js", ".jsx"], - }, - performance: { - hints: false, - }, - cache: true, - module: { - rules: [ - { - test: /\.html$/, - loader: "html-loader", - include: [Paths.examplesPath], - exclude: /base\.html$/, - }, - { test: /\.css$/, loader: "style-loader!css-loader" }, - { - test: /\.(js|jsx)$/, - include: [Paths.srcPath, Paths.examplesPath], - exclude: /(node_modules|bower_components|lib)/, - loaders: ["babel-loader"], - }, - ], - }, - plugins: [ - new UglifyJsPlugin(), - new OccurrenceOrderPlugin(), - new AggressiveMergingPlugin(), - new DefinePlugin({ - "process.env": { - NODE_ENV: JSON.stringify("production"), - }, - }), - new HtmlWebpackPlugin({ - title: "React Sketch", - description: - "Sketch Element for React based applications, backed-up by fabricjs as its core", - keywords: ["react", "canvas", "sketch", "fabricjs", "fabric.js"], - template: Paths.templatePath, - filename: "index.html", - chunks: ["examples"], - inject: "body", - }), - ], -}; - -module.exports = config; diff --git a/webpack/library.cfg.js b/webpack/library.cfg.js deleted file mode 100644 index f89d42b7..00000000 --- a/webpack/library.cfg.js +++ /dev/null @@ -1,65 +0,0 @@ -const Paths = require("./paths"); -const DefinePlugin = require("webpack/lib/DefinePlugin"); -const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); -const NoEmitOnErrorsPlugin = require("webpack/lib/NoEmitOnErrorsPlugin"); -const OccurrenceOrderPlugin = require("webpack/lib/optimize/OccurrenceOrderPlugin"); -const AggressiveMergingPlugin = require("webpack/lib/optimize/AggressiveMergingPlugin"); -const ModuleConcatenationPlugin = require("webpack/lib/optimize/ModuleConcatenationPlugin"); -const { CleanWebpackPlugin } = require("clean-webpack-plugin"); - -function containsObject(obj, list) { - var i; - for (i = 0; i < list.length; i++) { - if (list[i] === obj) { - return true; - } - } - return false; -} - -const externals = []; -const internals = ["fabric", "canvas"]; - -module.exports = { - entry: { - src: "./src", - }, - performance: { - hints: false, - }, - output: { - path: Paths.outputPath, - filename: "index.js", - libraryTarget: "umd", - }, - resolve: { - extensions: [".js", ".jsx"], - }, - cache: true, - module: { - rules: [ - { - test: /\.(js|jsx)$/, - include: [Paths.srcPath], - exclude: /(node_modules|bower_components|lib)/, - loaders: ["babel-loader"], - }, - ], - }, - plugins: [ - new CleanWebpackPlugin(), - new ModuleConcatenationPlugin(), - new UglifyJsPlugin({ - parallel: true, - uglifyOptions: { - warnings: false, - }, - }), - new NoEmitOnErrorsPlugin(), - new OccurrenceOrderPlugin(), - new AggressiveMergingPlugin(), - new DefinePlugin({ - "process.env.NODE_ENV": JSON.stringify("production"), - }), - ], -}; diff --git a/webpack/paths.js b/webpack/paths.js deleted file mode 100644 index 021deb4a..00000000 --- a/webpack/paths.js +++ /dev/null @@ -1,13 +0,0 @@ -const path = require("path"); - -const root = path.resolve(__dirname, "../"); - -module.exports = { - root: root, - srcPath: path.join(root, "src"), - buildPath: path.join(root, "build"), - outputPath: path.join(root, "dist"), - examplesPath: path.join(root, "examples"), - entryPath: path.join(root, "examples", "run.jsx"), - templatePath: path.join(root, "examples", "base.html"), -}; diff --git a/webpack/server.cfg.js b/webpack/server.cfg.js deleted file mode 100644 index 215878a6..00000000 --- a/webpack/server.cfg.js +++ /dev/null @@ -1,58 +0,0 @@ -/*eslint no-console:0 */ - -const Paths = require("./paths"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); -const NamedModulesPlugin = require("webpack/lib/NamedModulesPlugin"); -const NoEmitOnErrorsPlugin = require("webpack/lib/NoEmitOnErrorsPlugin"); -const HotModuleReplacementPlugin = require("webpack/lib/HotModuleReplacementPlugin"); - -const port = 23000; - -module.exports = { - mode: "development", - entry: { - examples: Paths.entryPath, - }, - resolve: { - extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], - }, - output: { - path: Paths.buildPath, - filename: "index.js", - publicPath: "/", - }, - devServer: { - historyApiFallback: true, - stats: { colors: true }, - publicPath: "/", - noInfo: false, - lazy: false, - port: port, - hot: true, - }, - module: { - rules: [ - { test: /\.css$/, loader: "style-loader!css-loader" }, - { - test: /\.(js|jsx)$/, - include: [Paths.srcPath, Paths.examplesPath], - exclude: /(node_modules|bower_components|lib)/, - loaders: ["babel-loader"], - }, - ], - }, - plugins: [ - new HotModuleReplacementPlugin(), - new NamedModulesPlugin(), - new NoEmitOnErrorsPlugin(), - new HtmlWebpackPlugin({ - chunks: ["examples"], - description: "Sketch Component for React applications, backed-up by fabricjs", - inject: "body", - filename: "index.html", - keywords: ["react", "canvas", "sketch", "fabricjs", "fabric.js"], - template: Paths.templatePath, - title: "React Sketch", - }), - ], -}; From 44c43a70fbae41bd1d10355fb0d1bec9dc868c37 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 09:35:30 +0300 Subject: [PATCH 58/70] test: cover what the fabric 7 upgrade must not change Sample data of the showcase (fabric 3/4 JSON) loads with the same objects, toJSON output loads again, the geometry of the shapes is the one fabric 4 produced, the pencil draws, undo and redo restore, and the methods (zoom, background, addImg, addText, copy/paste, removeSelected) behave as before. --- .../SketchField/SketchField.fabric.spec.tsx | 899 ++++++++++++++++++ 1 file changed, 899 insertions(+) create mode 100644 packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx diff --git a/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx b/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx new file mode 100644 index 00000000..97773d7d --- /dev/null +++ b/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx @@ -0,0 +1,899 @@ +/** + * What the upgrade of fabric 4 to fabric 7 must not change: old data keeps + * loading, what is drawn has the same geometry, undo and redo restore the + * same state, and the methods behave as before. + */ +import { createRef } from "react"; +import { render } from "@testing-library/react"; +import * as fabric from "fabric"; +import controlledValue from "../../../../showcase/src/data/controlledValue"; +import defaultValue from "../../../../showcase/src/data/defaultValue"; +import SketchField from "./SketchField"; +import { SketchProperties, Tool } from "../../types"; + +type Point = [number, number]; + +const mount = (props: SketchProperties = {}) => { + const ref = createRef(); + const view = render(); + const sketch = ref.current as SketchField; + return { ...view, sketch, canvas: sketch["canvas"] as fabric.Canvas }; +}; + +/** Fire a canvas event, as the canvas does when the user interacts with it */ +const fire = (canvas: fabric.Canvas, name: string, event: object): void => + (canvas as unknown as fabric.Observable>).fire(name, event); + +const mouseEvent = (type: string, [x, y]: Point) => ({ + e: new MouseEvent(type, { clientX: x, clientY: y }), +}); + +/** Press the mouse at `from`, move it to `to` and release it */ +const drag = (canvas: fabric.Canvas, from: Point, to: Point): void => { + fire(canvas, "mouse:down", mouseEvent("mousedown", from)); + fire(canvas, "mouse:move", mouseEvent("mousemove", to)); + fire(canvas, "mouse:up", mouseEvent("mouseup", to)); +}; + +/** Draw a free hand stroke, through the brush as the canvas does */ +const stroke = (canvas: fabric.Canvas, points: Point[]): void => { + const brush = canvas.freeDrawingBrush as fabric.BaseBrush; + const event = (type: string, point: Point) => ({ + ...mouseEvent(type, point), + pointer: new fabric.Point(...point), + }); + const [first, ...rest] = points; + const last = points[points.length - 1]; + brush.onMouseDown(new fabric.Point(...first), event("mousedown", first)); + rest.forEach((point) => + brush.onMouseMove(new fabric.Point(...point), event("mousemove", point)) + ); + brush.onMouseUp(event("mouseup", last)); +}; + +/** Timers (fromJSON, onChange) and the pending promises (loading, cloning) */ +const flush = (): Promise => jest.advanceTimersByTimeAsync(100); + +const round = (value: number, digits = 6): number => { + const factor = 10 ** digits; + return Math.round(value * factor) / factor; +}; + +/** Where an object is, and how big. JSON keeps 4 decimals, so 3 digits compare restored objects */ +const geometry = (object: fabric.FabricObject, digits = 6) => ({ + type: object.type, + originX: object.originX, + originY: object.originY, + left: round(object.left, digits), + top: round(object.top, digits), + width: round(object.width, digits), + height: round(object.height, digits), + angle: round(object.angle, digits), +}); + +/** The geometry and the area an object covers on the canvas */ +const shape = (object: fabric.FabricObject, digits = 6) => { + const { left, top, width, height } = object.getBoundingRect(); + return { + ...geometry(object, digits), + bbox: [left, top, width, height].map((n) => round(n, digits)), + }; +}; + +/** The shapes of a canvas, and for a group the geometry of its objects */ +const shapes = (canvas: fabric.Canvas, digits = 6) => + canvas.getObjects().map((object) => + object instanceof fabric.Group + ? { + ...shape(object, digits), + children: object.getObjects().map((o) => geometry(o, digits)), + } + : shape(object, digits) + ); + +/** The end points of a line, as drawn */ +const endPoints = (object: fabric.FabricObject): number[] => { + const { x1, y1, x2, y2 } = object as fabric.Line; + return [x1, y1, x2, y2]; +}; + +const typesOf = (canvas: fabric.Canvas): string[] => + canvas.getObjects().map((object) => object.type); + +beforeEach(() => jest.useFakeTimers()); + +afterEach(() => { + jest.useRealTimers(); + jest.restoreAllMocks(); +}); + +describe("SketchField on fabric 7", () => { + describe("sample data of the showcase (JSON of fabric 3/4)", () => { + const samples = [ + ["defaultValue", defaultValue], + ["controlledValue", controlledValue], + ] as const; + + it.each(samples)( + "loads %s with the same number and types of objects", + async (_name, data) => { + const onChange = jest.fn(); + const { sketch, canvas } = mount({ onChange }); + + sketch.fromJSON(data); + await flush(); + + expect(canvas.getObjects()).toHaveLength(data.objects.length); + expect(typesOf(canvas)).toEqual(data.objects.map((o) => o.type)); + expect(onChange).toHaveBeenCalledTimes(1); + } + ); + + it("has the lines, circles, rectangle and path the data describes", async () => { + const { sketch, canvas } = mount(); + + sketch.fromJSON(controlledValue); + await flush(); + + const count = (type: string) => + typesOf(canvas).filter((t) => t === type).length; + expect([count("line"), count("circle"), count("rect"), count("path")]).toEqual( + [10, 2, 1, 1] + ); + }); + + it.each(samples)( + "keeps the position and the origin of the objects of %s", + async (_name, data) => { + const { sketch, canvas } = mount(); + + sketch.fromJSON(data); + await flush(); + + canvas.getObjects().forEach((object, index) => { + const source = data.objects[index] as unknown as Record< + string, + number | string + >; + expect(object.originX).toEqual(source.originX); + expect(object.originY).toEqual(source.originY); + expect(object.left).toBeCloseTo(source.left as number, 3); + expect(object.top).toBeCloseTo(source.top as number, 3); + }); + } + ); + + it("loads the data given as a string", async () => { + const { sketch, canvas } = mount(); + + sketch.fromJSON(JSON.stringify(defaultValue)); + await flush(); + + expect(typesOf(canvas)).toEqual(defaultValue.objects.map((o) => o.type)); + }); + + it("loads it as defaultValue and as value, once mounted", async () => { + const first = mount({ defaultValue }); + const second = mount({ value: controlledValue }); + await flush(); + + expect(first.canvas.getObjects()).toHaveLength(defaultValue.objects.length); + expect(second.canvas.getObjects()).toHaveLength( + controlledValue.objects.length + ); + }); + + it("can be undone, one object at a time", async () => { + const { sketch, canvas } = mount(); + sketch.fromJSON(defaultValue); + await flush(); + + sketch.undo(); + + expect(canvas.getObjects()).toHaveLength(defaultValue.objects.length - 1); + sketch.redo(); + expect(canvas.getObjects()).toHaveLength(defaultValue.objects.length); + }); + }); + + describe("toJSON", () => { + const drawings: [Tool, Point, Point, string[]][] = [ + [Tool.LINE, [10, 20], [60, 80], ["line"]], + [Tool.RECTANGLE, [10, 20], [110, 70], ["rect"]], + [Tool.CIRCLE, [0, 0], [30, 40], ["circle"]], + [Tool.ARROW, [0, 0], [100, 50], ["group"]], + [Tool.RECTANGLE_LABEL, [100, 100], [180, 160], ["rect", "textbox"]], + ]; + + it.each(drawings)( + "gives an object that fromJSON loads again, for the %s tool", + async (tool, from, to, types) => { + const { sketch, canvas } = mount({ + tool, + lineColor: "red", + lineWidth: 3, + fillColor: "blue", + }); + drag(canvas, from, to); + const drawn = shapes(canvas, 3); + const saved = sketch.toJSON(); + expect(typeof saved).toBe("object"); + + const other = mount(); + other.sketch.fromJSON(JSON.parse(JSON.stringify(saved))); + await flush(); + + expect(typesOf(other.canvas)).toEqual(types); + expect(shapes(other.canvas, 3)).toEqual(drawn); + } + ); + + it("gives an object that fromJSON loads again, for the pencil", async () => { + const { sketch, canvas } = mount({ + tool: Tool.PENCIL, + lineColor: "green", + lineWidth: 4, + }); + stroke(canvas, [ + [10, 10], + [30, 20], + [50, 15], + [70, 40], + ]); + const saved = sketch.toJSON(); + + const other = mount(); + other.sketch.fromJSON(JSON.stringify(saved)); + await flush(); + + expect(typesOf(other.canvas)).toEqual(["path"]); + const [path] = other.canvas.getObjects(); + expect([path.stroke, path.strokeWidth]).toEqual(["green", 4]); + expect(shapes(other.canvas, 3)).toEqual(shapes(canvas, 3)); + }); + + it("restores everything drawn on the same sketch, after clear", async () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + drag(canvas, [10, 20], [110, 70]); + drag(canvas, [5, 5], [25, 45]); + const drawn = shapes(canvas, 3); + + const discarded = sketch.clear(); + expect(canvas.getObjects()).toHaveLength(0); + sketch.fromJSON(discarded); + await flush(); + + expect(shapes(canvas, 3)).toEqual(drawn); + }); + }); + + describe("geometry of what is drawn (the numbers of fabric 4)", () => { + const props = { lineColor: "red", lineWidth: 3, fillColor: "blue" }; + const draw = (tool: Tool, from: Point, to: Point) => { + const { canvas } = mount({ tool, ...props }); + drag(canvas, from, to); + return canvas; + }; + const drawn = (tool: Tool, from: Point, to: Point) => + shapes(draw(tool, from, to)); + + it("Line", () => { + expect(drawn(Tool.LINE, [10, 20], [60, 80])).toEqual([ + { + type: "line", + originX: "center", + originY: "center", + left: 35, + top: 50, + width: 50, + height: 60, + angle: 0, + bbox: [8.5, 18.5, 53, 63], + }, + ]); + expect(endPoints(draw(Tool.LINE, [10, 20], [60, 80]).getObjects()[0])).toEqual( + [10, 20, 60, 80] + ); + expect(drawn(Tool.LINE, [100, 100], [40, 60])).toEqual([ + { + type: "line", + originX: "center", + originY: "center", + left: 70, + top: 80, + width: 60, + height: 40, + angle: 0, + bbox: [38.5, 58.5, 63, 43], + }, + ]); + expect( + endPoints(draw(Tool.LINE, [100, 100], [40, 60]).getObjects()[0]) + ).toEqual([100, 100, 40, 60]); + }); + + it("Rectangle", () => { + expect(drawn(Tool.RECTANGLE, [10, 20], [110, 70])).toEqual([ + { + type: "rect", + originX: "left", + originY: "top", + left: 10, + top: 20, + width: 100, + height: 50, + angle: 0, + bbox: [10, 20, 103, 53], + }, + ]); + expect(drawn(Tool.RECTANGLE, [100, 100], [40, 60])).toEqual([ + expect.objectContaining({ left: 40, top: 60, width: 60, height: 40 }), + ]); + }); + + it("Circle", () => { + expect(drawn(Tool.CIRCLE, [0, 0], [30, 40])).toEqual([ + { + type: "circle", + originX: "left", + originY: "center", + left: 0, + top: 0, + width: 50, + height: 50, + angle: 53.130102, + bbox: [-21.2, -15.9, 74.2, 74.2], + }, + ]); + expect(drawn(Tool.CIRCLE, [50, 50], [10, 20])).toEqual([ + expect.objectContaining({ + angle: -143.130102, + bbox: [-8.3, -3, 74.2, 74.2], + }), + ]); + }); + + it("Arrow", () => { + const [arrow] = drawn(Tool.ARROW, [0, 0], [100, 50]); + expect(arrow).toEqual({ + type: "group", + originX: "left", + originY: "top", + left: -1.5, + top: -1.5, + width: 108.208204, + height: 58.208204, + angle: 0, + bbox: [-1.5, -1.5, 108.208204, 58.208204], + children: [ + expect.objectContaining({ + type: "line", + originX: "center", + originY: "center", + left: -2.604102, + top: -2.604102, + width: 100, + height: 50, + }), + expect.objectContaining({ + type: "triangle", + originX: "center", + originY: "center", + left: 47.395898, + top: 22.395898, + width: 9, + height: 9, + angle: 116.565051, + }), + ], + }); + + const [group] = draw(Tool.ARROW, [0, 0], [100, 50]).getObjects(); + expect(endPoints((group as fabric.Group).getObjects()[0])).toEqual([ + 0, 0, 100, 50, + ]); + + const [backwards] = drawn(Tool.ARROW, [100, 100], [20, 60]); + expect(backwards).toEqual( + expect.objectContaining({ + left: 13.291796, + top: 53.291796, + width: 88.208204, + height: 48.208204, + }) + ); + }); + + it("RectangleLabel", () => { + const [rect, text] = drawn(Tool.RECTANGLE_LABEL, [100, 100], [180, 160]); + expect(rect).toEqual({ + type: "rect", + originX: "left", + originY: "top", + left: 100, + top: 100, + width: 80, + height: 60, + angle: 0, + bbox: [100, 100, 83, 63], + }); + expect(text).toEqual( + expect.objectContaining({ + type: "textbox", + originX: "left", + originY: "top", + left: 100, + top: 88, + width: 83, + height: 13.56, + }) + ); + + const [, backwards] = drawn(Tool.RECTANGLE_LABEL, [100, 100], [40, 60]); + expect(backwards).toEqual( + expect.objectContaining({ left: 40, top: 60, width: 63 }) + ); + }); + }); + + describe("pencil", () => { + it("has a brush with the width and the color of the sketch", () => { + const { canvas } = mount({ + tool: Tool.PENCIL, + lineColor: "green", + lineWidth: 4, + }); + + expect(canvas.freeDrawingBrush).toBeInstanceOf(fabric.PencilBrush); + expect(canvas.freeDrawingBrush?.width).toEqual(4); + expect(canvas.freeDrawingBrush?.color).toEqual("green"); + expect(canvas.isDrawingMode).toBe(true); + }); + + it("draws a path with that width and color, announced once", () => { + const onObjectAdded = jest.fn(); + const { canvas } = mount({ + tool: Tool.PENCIL, + lineColor: "green", + lineWidth: 4, + onObjectAdded, + }); + + stroke(canvas, [ + [10, 10], + [30, 20], + [50, 15], + [70, 40], + ]); + + const [path] = canvas.getObjects() as fabric.Path[]; + expect(canvas.getObjects()).toHaveLength(1); + expect([path.type, path.stroke, path.strokeWidth, path.fill]).toEqual([ + "path", + "green", + 4, + null, + ]); + expect(onObjectAdded).toHaveBeenCalledTimes(1); + expect(onObjectAdded).toHaveBeenCalledWith( + expect.objectContaining({ target: path }) + ); + }); + + it("keeps its brush when the tool changes, and follows the sketch again", () => { + const { canvas, rerender } = mount({ + tool: Tool.PENCIL, + lineColor: "green", + lineWidth: 4, + }); + const brush = canvas.freeDrawingBrush; + + rerender(); + expect(canvas.isDrawingMode).toBe(false); + rerender(); + + expect(canvas.isDrawingMode).toBe(true); + expect(canvas.freeDrawingBrush).toBe(brush); + expect([brush?.color, brush?.width]).toEqual(["blue", 7]); + }); + + it("can be undone and redone", () => { + const { sketch, canvas } = mount({ tool: Tool.PENCIL }); + stroke(canvas, [ + [10, 10], + [30, 20], + [50, 15], + ]); + const [path] = canvas.getObjects(); + + sketch.undo(); + expect(canvas.getObjects()).toHaveLength(0); + sketch.redo(); + + expect(canvas.getObjects()).toEqual([path]); + }); + }); + + describe("undo and redo", () => { + // The undos which take a drawing back: a label is two objects + const drawings: [Tool, Point, Point, number][] = [ + [Tool.LINE, [10, 20], [60, 80], 1], + [Tool.RECTANGLE, [10, 20], [110, 70], 1], + [Tool.CIRCLE, [0, 0], [30, 40], 1], + [Tool.ARROW, [0, 0], [100, 50], 1], + [Tool.RECTANGLE_LABEL, [100, 100], [180, 160], 2], + ]; + const times = (count: number, run: () => void) => + Array.from({ length: count }, run); + + it.each(drawings)( + "bring a %s back and forth, with its size and position", + (tool, from, to, steps) => { + const { sketch, canvas } = mount({ tool, lineColor: "red" }); + drag(canvas, from, to); + const drawn = shapes(canvas); + drag(canvas, to, [to[0] + 30, to[1] + 30]); + const both = shapes(canvas); + + times(steps, sketch.undo); + expect(shapes(canvas)).toEqual(drawn); + times(steps, sketch.redo); + expect(shapes(canvas)).toEqual(both); + } + ); + + // The state restored is the JSON of the object, which keeps 4 decimals. + // Not the line: undo of a moved line puts it at 0,0 (as on fabric 4) + it.each(drawings.filter(([tool]) => tool !== Tool.LINE))( + "restore a %s moved by the user", + (tool, from, to) => { + const warn = jest.spyOn(console, "warn").mockImplementation(); + const { sketch, canvas } = mount({ tool, lineColor: "red" }); + drag(canvas, from, to); + // the last object is the one whose final state the history knows + const object = canvas.getObjects().slice(-1)[0]; + const before = shape(object, 3); + + object.set({ left: object.left + 25, top: object.top + 15 }); + object.setCoords(); + fire(canvas, "object:modified", { target: object }); + const after = shape(object, 3); + expect(after).not.toEqual(before); + + sketch.undo(); + expect(shape(object, 3)).toEqual(before); + sketch.redo(); + expect(shape(object, 3)).toEqual(after); + // the saved state sets nothing fabric refuses (the type), so it has no warning + expect(warn).not.toHaveBeenCalled(); + } + ); + + it.todo( + "restores the position of a line moved by the user (it jumps to 0,0, as on fabric 4)" + ); + + it("restore the state of a free hand path moved by the user", () => { + const { sketch, canvas } = mount({ tool: Tool.PENCIL }); + stroke(canvas, [ + [10, 10], + [30, 20], + [50, 15], + ]); + const [path] = canvas.getObjects(); + const before = shape(path, 3); + + path.set({ left: path.left + 25, top: path.top + 15 }); + path.setCoords(); + fire(canvas, "object:modified", { target: path }); + sketch.undo(); + + expect(shape(path, 3)).toEqual(before); + }); + + it("keep the drawing working after an arrow was restored", () => { + const { sketch, canvas } = mount({ tool: Tool.ARROW }); + drag(canvas, [0, 0], [100, 50]); + const [group] = canvas.getObjects() as fabric.Group[]; + group.set({ left: group.left + 10 }); + fire(canvas, "object:modified", { target: group }); + sketch.undo(); + + group.set({ left: group.left + 5 }); + group.setCoords(); + expect(() => canvas.renderAll()).not.toThrow(); + expect(group.getObjects()).toHaveLength(2); + }); + + it("bring back what removeSelected removed", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + drag(canvas, [10, 20], [110, 70]); + const [rect] = canvas.getObjects(); + canvas.setActiveObject(rect); + + sketch.removeSelected(); + expect(canvas.getObjects()).toHaveLength(0); + sketch.undo(); + + expect(canvas.getObjects()).toEqual([rect]); + }); + }); + + describe("methods", () => { + it("zoom scales the position and the size of objects of any origin", () => { + const { sketch, canvas } = mount({ tool: Tool.LINE }); + drag(canvas, [10, 20], [60, 80]); + const [line] = canvas.getObjects(); + + sketch.zoom(2); + + expect(line.getCenterPoint()).toMatchObject({ x: 70, y: 100 }); + expect([line.scaleX, line.scaleY]).toEqual([2, 2]); + sketch.zoom(0.5); + expect(line.getCenterPoint()).toMatchObject({ x: 35, y: 50 }); + }); + + describe("setBackgroundFromDataUrl", () => { + /** An image of 200 x 100 loads as soon as its source is set */ + const stubImages = () => + jest.spyOn(window, "Image").mockImplementation(() => { + const img = document.createElement("img"); + img.width = 200; + img.height = 100; + Object.defineProperty(img, "src", { + set: () => img.onload?.(new Event("load")), + }); + return img; + }); + + it("covers the canvas from its top left corner", () => { + stubImages(); + const { sketch, canvas } = mount(); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00"); + + const image = canvas.backgroundImage as fabric.FabricImage; + expect(image).toBeInstanceOf(fabric.FabricImage); + expect([image.originX, image.originY]).toEqual(["left", "top"]); + expect(image.getBoundingRect()).toMatchObject({ + left: 0, + top: 0, + width: 200, + height: 100, + }); + }); + + it("stretches to the canvas, from its top left corner", () => { + stubImages(); + const { sketch, canvas } = mount(); + + sketch.setBackgroundFromDataUrl("data:image/png;base64,00", { + stretched: true, + }); + + const image = canvas.backgroundImage as fabric.FabricImage; + expect(image.getBoundingRect()).toMatchObject({ + left: 0, + top: 0, + width: canvas.getWidth(), + height: canvas.getHeight(), + }); + }); + + it("is part of the json, and loads again", async () => { + stubImages(); + const { sketch, canvas } = mount(); + sketch.setBackgroundFromDataUrl("data:image/png;base64,00", { + opacity: 0.5, + }); + const saved = JSON.parse(JSON.stringify(sketch.toJSON())); + + expect(saved.backgroundImage).toMatchObject({ opacity: 0.5 }); + expect(canvas.backgroundImage).toBeDefined(); + }); + }); + + it("the background color is painted by the canvas", () => { + const { canvas, rerender } = mount({ backgroundColor: "red" }); + expect(canvas.backgroundColor).toEqual("red"); + + rerender(); + + expect(canvas.backgroundColor).toEqual("blue"); + }); + + it("addImg places the image by its top left corner", async () => { + jest + .spyOn(fabric.FabricImage, "fromURL") + .mockImplementation((_url, _options, imageOptions) => + Promise.resolve( + new fabric.FabricImage(document.createElement("img"), { + width: 100, + height: 60, + ...imageOptions, + }) + ) + ); + const { sketch, canvas } = mount(); + + sketch.addImg("data:image/png;base64,00", { left: 15, top: 25, scale: 2 }); + await flush(); + + const [image] = canvas.getObjects(); + expect(image.getBoundingRect()).toMatchObject({ + left: 15, + top: 25, + width: 200, + height: 120, + }); + }); + + it("addText centers the text on the canvas, or places it by its top left corner", () => { + const { sketch, canvas } = mount(); + + sketch.addText("hello"); + sketch.addText("there", { left: 11, top: 22 }); + + const [centered, placed] = canvas.getObjects(); + expect([centered.originX, centered.originY]).toEqual(["left", "top"]); + expect(centered.left).toEqual((canvas.getWidth() - centered.width) / 2); + expect(centered.top).toEqual((canvas.getHeight() - centered.height) / 2); + expect([placed.left, placed.top]).toEqual([11, 22]); + expect([placed.originX, placed.originY]).toEqual(["left", "top"]); + }); + + describe("copy and paste", () => { + const drawTwo = () => { + const sketch = mount({ tool: Tool.RECTANGLE, lineColor: "red" }); + drag(sketch.canvas, [10, 20], [110, 70]); + drag(sketch.canvas, [200, 20], [250, 70]); + sketch.canvas.setActiveObject(sketch.canvas.getObjects()[0]); + return sketch; + }; + + it("work when they are called one after the other", async () => { + const { sketch, canvas } = drawTwo(); + + sketch.copy(); + sketch.paste(); + sketch.paste(); + await flush(); + + expect(canvas.getObjects()).toHaveLength(4); + const [, , first, second] = canvas.getObjects(); + expect([first.left, first.top]).toEqual([20, 30]); + expect([second.left, second.top]).toEqual([30, 40]); + expect(canvas.getActiveObject()).toBe(second); + }); + + it("paste a copy, not the object itself", async () => { + const { sketch, canvas } = drawTwo(); + const [original] = canvas.getObjects(); + + sketch.copy(); + sketch.paste(); + await flush(); + + const pasted = canvas.getObjects()[2]; + expect(pasted).not.toBe(original); + expect(pasted.type).toEqual("rect"); + expect([pasted.width, pasted.height]).toEqual([100, 50]); + expect(pasted.stroke).toEqual("red"); + }); + + it("copy the object as it is when copy is called", async () => { + const { sketch, canvas } = drawTwo(); + const [original] = canvas.getObjects(); + + sketch.copy(); + original.set({ left: 500 }); + sketch.paste(); + await flush(); + + expect(canvas.getObjects()[2].left).toEqual(20); + }); + + it("paste a multiple selection", async () => { + const { sketch, canvas } = drawTwo(); + canvas.setActiveObject( + new fabric.ActiveSelection(canvas.getObjects(), { canvas }) + ); + + sketch.copy(); + sketch.paste(); + await flush(); + + expect(canvas.getObjects()).toHaveLength(4); + expect(sketch.hasSelection()).toBe(true); + }); + + it("paste what was copied last", async () => { + const { sketch, canvas } = drawTwo(); + sketch.copy(); + canvas.setActiveObject(canvas.getObjects()[1]); + sketch.copy(); + sketch.paste(); + await flush(); + + expect(canvas.getObjects()[2].left).toEqual(210); + }); + }); + + it("removeSelected removes every object of a multiple selection", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + drag(canvas, [10, 20], [110, 70]); + drag(canvas, [200, 20], [250, 70]); + canvas.setActiveObject( + new fabric.ActiveSelection(canvas.getObjects(), { canvas }) + ); + + sketch.removeSelected(); + + expect(canvas.getObjects()).toHaveLength(0); + sketch.undo(); + sketch.undo(); + expect(canvas.getObjects()).toHaveLength(2); + }); + }); + + describe("behavior of fabric 4 which the component keeps", () => { + it("ignores right and middle clicks, leaves the context menu alone", () => { + const { canvas } = mount(); + + expect(canvas.fireRightClick).toBe(false); + expect(canvas.fireMiddleClick).toBe(false); + expect(canvas.stopContextMenu).toBe(false); + }); + + it("brings the selected object to the front only while it is selected", () => { + const { canvas } = mount(); + + expect(canvas.preserveObjectStacking).toBe(false); + }); + + it("does not announce the objects discarded by clear or by a loaded value", async () => { + const onObjectRemoved = jest.fn(); + const { sketch, canvas } = mount({ + tool: Tool.RECTANGLE, + onObjectRemoved, + }); + drag(canvas, [10, 20], [110, 70]); + drag(canvas, [5, 5], [25, 45]); + + sketch.clear(); + drag(canvas, [10, 20], [110, 70]); + sketch.fromJSON(defaultValue); + await flush(); + + expect(onObjectRemoved).not.toHaveBeenCalled(); + }); + + it("announces a removal by the user, also after a clear", () => { + const onObjectRemoved = jest.fn(); + const { sketch, canvas } = mount({ + tool: Tool.RECTANGLE, + onObjectRemoved, + }); + drag(canvas, [10, 20], [110, 70]); + sketch.clear(); + drag(canvas, [10, 20], [110, 70]); + canvas.setActiveObject(canvas.getObjects()[0]); + + sketch.removeSelected(); + + expect(onObjectRemoved).toHaveBeenCalledTimes(1); + }); + + it("returns the JSON of a clear synchronously, and toJSON gives an object", () => { + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + drag(canvas, [10, 20], [110, 70]); + + const json = sketch.toJSON(); + const discarded = sketch.clear(); + + expect(json).not.toBeInstanceOf(Promise); + expect(discarded).toEqual(json); + expect(discarded.objects).toHaveLength(1); + }); + }); +}); From bd99d93098a7fa284faa345ecce3e0375680d762 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 09:38:56 +0300 Subject: [PATCH 59/70] Resolve minimist for fabric's optional canvas to 1.2.8 The ^1.2.0 range was locked to 1.2.5 (prototype pollution advisory), which yarn audit reported through fabric > canvas > prebuild-install > rc. A lockfile merge with the 1.2.8 entry already present clears it. Also document the fabric 7 global of the UMD external and the JSON fromJSON accepts. --- .../src/components/SketchField/SketchField.tsx | 2 +- packages/react-sketch/webpack.config.js | 4 +++- yarn.lock | 7 +------ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/SketchField.tsx b/packages/react-sketch/src/components/SketchField/SketchField.tsx index 1384fa16..651b747d 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.tsx @@ -425,7 +425,7 @@ class SketchField extends PureComponent { * The canvas is populated a moment later, not right away. The history is * reset, as the objects it knows are replaced. * - * JSON format must conform to the one of fabric.Canvas#toDatalessJSON + * The JSON is what `toJSON` returns. The JSON of 0.5.x (fabric 4) is loaded too. * * @param json JSON string or object */ diff --git a/packages/react-sketch/webpack.config.js b/packages/react-sketch/webpack.config.js index f466d0e6..030b1043 100644 --- a/packages/react-sketch/webpack.config.js +++ b/packages/react-sketch/webpack.config.js @@ -11,7 +11,9 @@ module.exports = { entry: { index: "./src/index.ts", }, - // react and fabric are provided by the consumer, never bundled. + // react and fabric are provided by the consumer, never bundled. The script + // tag build of fabric (7.x) defines window.fabric with the named exports, + // which is what `import * as fabric from "fabric"` reads from the global. externals: { react: umdExternal("react", "React"), "react/jsx-runtime": umdExternal("react/jsx-runtime", "ReactJSXRuntime"), diff --git a/yarn.lock b/yarn.lock index e666bfbe..8808ce80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5411,12 +5411,7 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.2" -minimist@^1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@^1.2.3, minimist@^1.2.8: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== From 663f6e3f6b246ca7513dc1180806bb16a37228fb Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 09:40:45 +0300 Subject: [PATCH 60/70] test: drive the line tool with real mouse events and ignore right clicks Also make the unmount explicit about the promise of the async dispose of fabric 7. --- .../SketchField/SketchField.fabric.spec.tsx | 36 ++++++++++++++++++- .../components/SketchField/SketchField.tsx | 4 ++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx b/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx index 97773d7d..c7b47712 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx @@ -35,6 +35,17 @@ const drag = (canvas: fabric.Canvas, from: Point, to: Point): void => { fire(canvas, "mouse:up", mouseEvent("mouseup", to)); }; +/** An event of the browser, as the canvas receives it from the page */ +const domEvent = (type: string, [x, y]: Point, button = 0): MouseEvent => + new MouseEvent(type, { + clientX: x, + clientY: y, + button, + buttons: type === "mouseup" ? 0 : 1 << button, + bubbles: true, + cancelable: true, + }); + /** Draw a free hand stroke, through the brush as the canvas does */ const stroke = (canvas: fabric.Canvas, points: Point[]): void => { const brush = canvas.freeDrawingBrush as fabric.BaseBrush; @@ -837,9 +848,32 @@ describe("SketchField on fabric 7", () => { }); describe("behavior of fabric 4 which the component keeps", () => { + it("draws with the mouse events of the page", () => { + const onMouseDown = jest.fn(); + const onMouseUp = jest.fn(); + const { canvas } = mount({ tool: Tool.LINE, onMouseDown, onMouseUp }); + + canvas.upperCanvasEl.dispatchEvent(domEvent("mousedown", [10, 20])); + document.dispatchEvent(domEvent("mousemove", [60, 80])); + document.dispatchEvent(domEvent("mouseup", [60, 80])); + + const [line] = canvas.getObjects(); + expect(endPoints(line)).toEqual([10, 20, 60, 80]); + expect(onMouseDown).toHaveBeenCalledTimes(1); + expect(onMouseUp).toHaveBeenCalledTimes(1); + }); + it("ignores right and middle clicks, leaves the context menu alone", () => { - const { canvas } = mount(); + const onMouseDown = jest.fn(); + const { canvas } = mount({ tool: Tool.LINE, onMouseDown }); + [1, 2].forEach((button) => { + canvas.upperCanvasEl.dispatchEvent(domEvent("mousedown", [10, 20], button)); + document.dispatchEvent(domEvent("mouseup", [10, 20], button)); + }); + + expect(canvas.getObjects()).toHaveLength(0); + expect(onMouseDown).not.toHaveBeenCalled(); expect(canvas.fireRightClick).toBe(false); expect(canvas.fireMiddleClick).toBe(false); expect(canvas.stopContextMenu).toBe(false); diff --git a/packages/react-sketch/src/components/SketchField/SketchField.tsx b/packages/react-sketch/src/components/SketchField/SketchField.tsx index 651b747d..016785e9 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.tsx @@ -235,7 +235,9 @@ class SketchField extends PureComponent { window.removeEventListener("resize", this._resize_listener); this.timers.forEach((id) => window.clearTimeout(id)); this.timers.clear(); - this.canvas.dispose(); + // The canvas element is released at once, so it can be used again (React + // strict mode mounts twice). The rest is freed once the pending render is done. + void this.canvas.dispose(); } /** From a11b54911fd090eaf226cb40c260628c80083a68 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 11:04:22 +0300 Subject: [PATCH 61/70] chore: re-resolve brace-expansion, kind-of and @babel/runtime to patched versions (yarn audit clean) --- yarn.lock | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8808ce80..9214e6e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -272,7 +272,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.29.7" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.29.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.10.tgz#fe9920782f7ee34029165ac6f272984917a1641b" integrity sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA== @@ -282,13 +282,6 @@ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-8.0.7.tgz#4f4d0371d27c93c269b57dba49b8427027ddd25e" integrity sha512-k0hagDDq/6w4v+0Sp4wFvIz/yswH5O7Va6aRTnD7N62Tnborp4X+YB+H3XUcWVSR4aE47WPEXiIIZchBs0GmYg== -"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" - integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/template@^7.29.7": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700" @@ -2422,9 +2415,9 @@ boolbase@^1.0.0: integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.21" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.21.tgz#edf4fab5c64d051aea5a8def49aba1c7522279f3" + integrity sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -5151,9 +5144,9 @@ keyv@^4.5.4: json-buffer "3.0.1" kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== launch-editor@^2.14.1: version "2.14.2" @@ -6199,11 +6192,6 @@ reflect.getprototypeof@^1.0.10: get-proto "^1.0.1" which-builtin-type "^1.2.1" -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - regexp.prototype.flags@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" From 49161646c46eda7e3a214f0b01edae9b4bebba02 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 11:07:50 +0300 Subject: [PATCH 62/70] docs: describe fabric 7 (JSON format, behavior differences) in README and CHANGELOG --- CHANGELOG.md | 21 +++++++++++++++++++-- README.md | 4 +++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6207fab7..785a2daa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,8 +14,10 @@ Rewrite in TypeScript. The component API of 0.5.x is kept (properties, methods, hand-written `types/index.d.ts` of 0.5.x is removed. - React 17, 18 and 19 are supported. `react` is a peer dependency (`^17.0.0 || ^18.0.0 || ^19.0.0`). `react-dom` and `prop-types` are no longer dependencies of the library. -- fabric 4.4 (`fabric` `^4.4.0`) is a dependency of the library. 0.5.x bundled fabric into the build - (fabric 3.5 at 0.5.6), now it is installed next to the library and is external in the bundle. +- fabric 7.4 (`fabric` `^7.4.0`) is a dependency of the library. 0.5.x bundled fabric into the build + (fabric 3.5 at 0.5.6), now it is installed next to the library and is external in the bundle. fabric + 7.4 fixes the stored XSS advisories of fabric versions before 7.2 and 7.4 that have no patch in fabric + 4 to 6. fabric types are not part of the public declarations of the package. - Developing requires Node.js 22 or later (`engines` in the root `package.json`, `.nvmrc` has 24). The package itself has no Node.js requirement. The `node >= 8` engine of 0.5.x and the Node.js 6, 7 and 8 notes are removed. @@ -68,6 +70,19 @@ Rewrite in TypeScript. The component API of 0.5.x is kept (properties, methods, object. - Every tool falls back to line width 1, color black and fill `"transparent"` when the properties are not set. +- Because of fabric 7, the JSON returned by `toJSON()` and `clear()` has the fabric 7 format: the + `type` of each object is PascalCase (`"Rect"`, `"IText"`), there is a `version` field, and numbers are + rounded to 4 decimals. JSON saved by 0.5.x still loads with `fromJSON()`, `value` and `defaultValue` + (the showcase sample data is JSON saved by 0.5.x). JSON saved by 1.0.0 does not load in 0.5.x. The + `type` of live objects, as seen in the event callbacks, is unchanged, except `ActiveSelection`, which + is now `activeselection`. +- Undoing a modification restores the values to a precision of 1e-4. +- The Pencil and Highlighter paths have a center origin, so their `left` and `top` are the center of the + path. They are drawn the same, and a stroke now includes its last point. +- `addImg()` with a URL that cannot be loaded adds nothing and does not call `onObjectAdded`. In 0.5.x it + added an empty image object. +- Objects added by `copy()`, `paste()`, and by loading a value appear a few microtasks after the call or + the 100 ms timer. Tests that use fake timers need to flush promises. ### Fixed @@ -99,6 +114,8 @@ These behaviors of 0.5.x are kept. - `undoSteps` keeps one step more than its value: `undoSteps + 1` actions can be undone. It is read when the component mounts. - Drawing an arrow records undo steps that have no visible effect. +- Undoing the move of a line puts the line at 0,0, and redo leaves it there. Undoing the move of the + rectangle of a RectangleLabel restores a width and a height of 0. Both happen in 0.5.x too. - `forceValue` loads `value` on every update of the component, so a parent that re-renders often loads it often. - Calling a method of the component before it is mounted throws. diff --git a/README.md b/README.md index 755a9a43..66ca3012 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,9 @@ export const Drawing = () => ### Initial, loaded and saved drawings `toJSON()` returns the drawing as an object. `defaultValue` and `value` accept that object, or the same -object as a JSON string. +object as a JSON string. The object has the format of fabric 7 (object types such as `"Rect"` and +`"IText"`). Drawings saved with `react-sketch` 0.5.x load as well, drawings saved with 1.0.0 do not load +in 0.5.x. - `defaultValue` is loaded when the component mounts, unless `value` is set. - `value` is loaded when it changes (a different object, compared by identity). Pass a new object, for From cb7dc354918718d8762ca11bbe97041fcc9b84e7 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 11:12:37 +0300 Subject: [PATCH 63/70] style: apply Prettier 3 to the remaining files --- eslint.config.js | 6 +---- .../tools/Highlighter/Highlighter.ts | 2 +- .../SketchField/tools/tools.spec.ts | 25 ++++--------------- packages/react-sketch/src/utils/utils.spec.ts | 6 ++--- packages/showcase/public/base.html | 8 +++--- packages/showcase/src/App.css | 1 - 6 files changed, 13 insertions(+), 35 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 65699533..beaeed66 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -7,11 +7,7 @@ const prettier = require("eslint-config-prettier/flat"); const { defineConfig, globalIgnores } = require("eslint/config"); module.exports = defineConfig([ - globalIgnores([ - "**/dist/", - "**/coverage/", - "**/node_modules/", - ]), + globalIgnores(["**/dist/", "**/coverage/", "**/node_modules/"]), { files: ["packages/**/*.{ts,tsx}"], extends: [ diff --git a/packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts b/packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts index 28bbd4ef..bd902f90 100644 --- a/packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts +++ b/packages/react-sketch/src/components/SketchField/tools/Highlighter/Highlighter.ts @@ -16,7 +16,7 @@ export class Highlighter extends FabricCanvasTool { this.canvas.isDrawingMode = true; this.brush.width = props.lineWidth ? props.lineWidth : 1; this.brush.color = hexToRgbA( - color.startsWith("#") ? color : colorNameToHex(color) ?? color + color.startsWith("#") ? color : (colorNameToHex(color) ?? color) ); } diff --git a/packages/react-sketch/src/components/SketchField/tools/tools.spec.ts b/packages/react-sketch/src/components/SketchField/tools/tools.spec.ts index 9b78a040..d2d76542 100644 --- a/packages/react-sketch/src/components/SketchField/tools/tools.spec.ts +++ b/packages/react-sketch/src/components/SketchField/tools/tools.spec.ts @@ -16,10 +16,7 @@ const mouseEvent = (type: string, [x, y]: Point): CanvasEvent => ({ /** Fire a canvas event, as the canvas does when the user interacts with it */ const fire = (canvas: fabric.Canvas, name: string, event: object): void => - (canvas as unknown as fabric.Observable>).fire( - name, - event - ); + (canvas as unknown as fabric.Observable>).fire(name, event); const down = (tool: FabricCanvasTool, point: Point) => tool.doMouseDown(mouseEvent("mousedown", point)); @@ -106,10 +103,7 @@ describe("Tools", () => { const [rect] = canvas.getObjects() as fabric.Rect[]; expect(canvas.getObjects()).toHaveLength(1); expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ - 10, - 20, - 100, - 50, + 10, 20, 100, 50, ]); expect(rect.stroke).toEqual("red"); expect(rect.strokeWidth).toEqual(3); @@ -131,18 +125,12 @@ describe("Tools", () => { const [rect] = canvas.getObjects() as fabric.Rect[]; expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ - 40, - 60, - 60, - 40, + 40, 60, 60, 40, ]); move(tool, [150, 130]); expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ - 100, - 100, - 50, - 30, + 100, 100, 50, 30, ]); }); }); @@ -210,10 +198,7 @@ describe("Tools", () => { const [rect, text] = canvas.getObjects() as [fabric.Rect, fabric.Textbox]; expect(canvas.getObjects()).toHaveLength(2); expect([rect.left, rect.top, rect.width, rect.height]).toEqual([ - 100, - 100, - 80, - 60, + 100, 100, 80, 60, ]); expect(text.text).toEqual("New drawing"); expect(text.backgroundColor).toEqual("red"); diff --git a/packages/react-sketch/src/utils/utils.spec.ts b/packages/react-sketch/src/utils/utils.spec.ts index a36bf60d..a8752f33 100644 --- a/packages/react-sketch/src/utils/utils.spec.ts +++ b/packages/react-sketch/src/utils/utils.spec.ts @@ -58,7 +58,7 @@ describe("Utils", () => { element = document.createElement("div"); element.style.borderLeftWidth = "2px"; element.style.borderTopWidth = "3px"; - element.getBoundingClientRect = () => ({ left: 10, top: 20 } as DOMRect); + element.getBoundingClientRect = () => ({ left: 10, top: 20 }) as DOMRect; document.body.appendChild(element); }); @@ -76,10 +76,10 @@ describe("Utils", () => { }); it("Supports touch events", () => { - const event = ({ + const event = { target: element, changedTouches: [{ clientX: 30, clientY: 40 }], - } as unknown) as TouchEvent; + } as unknown as TouchEvent; expect(pointerPosition(event)).toEqual([18, 17]); }); }); diff --git a/packages/showcase/public/base.html b/packages/showcase/public/base.html index 38dc508c..3900191a 100644 --- a/packages/showcase/public/base.html +++ b/packages/showcase/public/base.html @@ -1,4 +1,4 @@ - + @@ -8,12 +8,10 @@ + content="<%= htmlWebpackPlugin.options.description %>" /> + rel="stylesheet" />
diff --git a/packages/showcase/src/App.css b/packages/showcase/src/App.css index a24dce69..49114c39 100644 --- a/packages/showcase/src/App.css +++ b/packages/showcase/src/App.css @@ -19,4 +19,3 @@ html { background-color: #607d8b; color: #000000; } - From bdeea2d1cc6832ca06a867ca64de721288761b40 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 11:12:38 +0300 Subject: [PATCH 64/70] ci: check formatting --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 00e8270f..0e73e321 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,7 @@ jobs: node-version: ${{ matrix.node }} cache: yarn - run: yarn install --frozen-lockfile + - run: yarn format:check - run: yarn lint - run: yarn typecheck - run: yarn build From ee39406e434b9fee9fc31b762e8c8adc33dfd250 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 11:41:58 +0300 Subject: [PATCH 65/70] chore: lint-staged 17 (engines.node >=22.22.1) --- CHANGELOG.md | 2 +- README.md | 4 +- package.json | 4 +- yarn.lock | 173 +++++---------------------------------------------- 4 files changed, 19 insertions(+), 164 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 785a2daa..32749015 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ Rewrite in TypeScript. The component API of 0.5.x is kept (properties, methods, (fabric 3.5 at 0.5.6), now it is installed next to the library and is external in the bundle. fabric 7.4 fixes the stored XSS advisories of fabric versions before 7.2 and 7.4 that have no patch in fabric 4 to 6. fabric types are not part of the public declarations of the package. -- Developing requires Node.js 22 or later (`engines` in the root `package.json`, `.nvmrc` has 24). The +- Developing requires Node.js 22.22.1 or later (`engines` in the root `package.json`, `.nvmrc` has 24). The package itself has no Node.js requirement. The `node >= 8` engine of 0.5.x and the Node.js 6, 7 and 8 notes are removed. - New build output in `packages/react-sketch/dist`: `index.js`, a UMD bundle (global `ReactSketch`) diff --git a/README.md b/README.md index 66ca3012..2d0f0027 100644 --- a/README.md +++ b/README.md @@ -299,7 +299,7 @@ Use the tools by name (`"pencil"`), with `Tools` (`Tools.Pencil`) or with the en - React: `^17.0.0 || ^18.0.0 || ^19.0.0` (peer dependency). The test suite runs on React 19. - Browsers: browsers with HTML5 canvas support. No polyfills are included and Internet Explorer 11 is not supported. - Server-side rendering has not been tested. Render the component in the browser only. -- Node.js: the package has no runtime requirement for Node.js. Developing in this repository requires Node.js 22 or later (`.nvmrc` has 24) and Yarn 1. +- Node.js: the package has no runtime requirement for Node.js. Developing in this repository requires Node.js 22.22.1 or later (`.nvmrc` has 24) and Yarn 1. ## Repository layout @@ -313,7 +313,7 @@ This is a Yarn 1 workspaces monorepo. ## Development -Requirements: Node.js 22 or later, Yarn 1. +Requirements: Node.js 22.22.1 or later, Yarn 1. ```sh git clone https://github.com/tbolis/react-sketch.git diff --git a/package.json b/package.json index 17facf32..73d3a928 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ ], "license": "MIT", "engines": { - "node": ">=22" + "node": ">=22.22.1" }, "scripts": { "start": "yarn workspace showcase start", @@ -31,7 +31,7 @@ "eslint-plugin-react-hooks": "^7.1.1", "globals": "^17.13.0", "husky": "^9.1.7", - "lint-staged": "^16.4.0", + "lint-staged": "^17.6.0", "prettier": "^3.9.10", "typescript": "^6.0.3", "typescript-eslint": "^8.71.2", diff --git a/yarn.lock b/yarn.lock index 9214e6e4..dc14293d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2100,13 +2100,6 @@ ansi-escapes@^4.3.2: dependencies: type-fest "^0.21.3" -ansi-escapes@^7.0.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.3.0.tgz#5395bb74b2150a4a1d6e3c2565f4aeca78d28627" - integrity sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== - dependencies: - environment "^1.0.0" - ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" @@ -2146,7 +2139,7 @@ ansi-styles@^5.0.0, ansi-styles@^5.2.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.1.0, ansi-styles@^6.2.1, ansi-styles@^6.2.3: +ansi-styles@^6.1.0: version "6.2.3" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== @@ -2634,21 +2627,6 @@ clean-css@^5.2.2: dependencies: source-map "~0.6.0" -cli-cursor@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" - integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== - dependencies: - restore-cursor "^5.0.0" - -cli-truncate@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.2.0.tgz#c8e72aaca8339c773d128c36e0a17c6315b694eb" - integrity sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw== - dependencies: - slice-ansi "^8.0.0" - string-width "^8.2.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -2706,11 +2684,6 @@ color-name@^1.1.4, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - commander@^14.0.3: version "14.0.3" resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" @@ -3142,11 +3115,6 @@ emittery@^0.13.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== -emoji-regex@^10.3.0: - version "10.6.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" - integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -3192,11 +3160,6 @@ envinfo@^7.21.0: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== -environment@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" - integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -3554,11 +3517,6 @@ etag@^1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eventemitter3@^5.0.1: - version "5.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" - integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== - events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -3820,11 +3778,6 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.1, get-east-asian-width@^1.5.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz#7ee99f0bd5ab7c622002deeabba232923726d1d4" - integrity sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q== - get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -4383,13 +4336,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-fullwidth-code-point@^5.0.0, is-fullwidth-code-point@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98" - integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== - dependencies: - get-east-asian-width "^1.3.1" - is-generator-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -5174,29 +5120,16 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.4.0.tgz#a00b0e3abff59239cef6d7d9341e8f8473308e23" - integrity sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw== +lint-staged@^17.6.0: + version "17.6.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-17.6.0.tgz#756fa50b4d4d9032ab05f64ef899eee81e44d421" + integrity sha512-nOhBfYkZEwkFtNzD5pK9s9LkcWoxJ+whLzEnhqi9nl7zTB5n7tg8+9iYgMGx2Wm3VlLu8cbNj0RACzY+nWi5iQ== dependencies: - commander "^14.0.3" - listr2 "^9.0.5" - picomatch "^4.0.3" + picomatch "^4.0.7" string-argv "^0.3.2" - tinyexec "^1.0.4" - yaml "^2.8.2" - -listr2@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.5.tgz#92df7c4416a6da630eb9ef46da469b70de97b316" - integrity sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g== - dependencies: - cli-truncate "^5.0.0" - colorette "^2.0.20" - eventemitter3 "^5.0.1" - log-update "^6.1.0" - rfdc "^1.4.1" - wrap-ansi "^9.0.0" + tinyexec "^1.3.1" + optionalDependencies: + yaml "^2.9.1" locate-path@^5.0.0: version "5.0.0" @@ -5227,17 +5160,6 @@ lodash@^4.17.20, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-update@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" - integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== - dependencies: - ansi-escapes "^7.0.0" - cli-cursor "^5.0.0" - slice-ansi "^7.1.0" - strip-ansi "^7.1.0" - wrap-ansi "^9.0.0" - loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5368,11 +5290,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-function@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" - integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -5678,13 +5595,6 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -onetime@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" - integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== - dependencies: - mimic-function "^5.0.0" - open@^11.0.0: version "11.0.4" resolved "https://registry.yarnpkg.com/open/-/open-11.0.4.tgz#10d20dfdb558c71e5149b2d789ad6995caf697ca" @@ -5860,7 +5770,7 @@ picomatch@^2.0.4, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== -picomatch@^4.0.0, picomatch@^4.0.3, picomatch@^4.0.4: +picomatch@^4.0.0, picomatch@^4.0.3, picomatch@^4.0.4, picomatch@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== @@ -6269,19 +6179,6 @@ resolve@^2.0.0-next.5: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" - integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== - dependencies: - onetime "^7.0.0" - signal-exit "^4.1.0" - -rfdc@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - router@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" @@ -6526,7 +6423,7 @@ signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1, signal-exit@^4.1.0: +signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -6550,22 +6447,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.2.tgz#adf7be70aa6d72162d907cd0e6d5c11f507b5403" - integrity sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w== - dependencies: - ansi-styles "^6.2.1" - is-fullwidth-code-point "^5.0.0" - -slice-ansi@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-8.0.0.tgz#22d0b66d18bc5c57f488bfcf36cbde3bef731537" - integrity sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg== - dependencies: - ansi-styles "^6.2.3" - is-fullwidth-code-point "^5.1.0" - source-map-js@^1.0.2, source-map-js@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.2.tgz#79fb88d97535a21cb27162cb05d211b67acea4ab" @@ -6681,23 +6562,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string-width@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" - integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== - dependencies: - emoji-regex "^10.3.0" - get-east-asian-width "^1.0.0" - strip-ansi "^7.1.0" - -string-width@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.3.0.tgz#f1e85ca6d276ed9226c979c3651fb7abf548fbbe" - integrity sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ== - dependencies: - get-east-asian-width "^1.5.0" - strip-ansi "^7.1.2" - string.prototype.matchall@^4.0.12: version "4.1.0" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz#8d854b2318fc596fc0877cfc6c4bcc50d0455b8e" @@ -6802,7 +6666,7 @@ strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1, strip-ansi@^7.1.0, strip-ansi@^7.1.2: +strip-ansi@^7.0.1: version "7.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== @@ -6944,7 +6808,7 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tinyexec@^1.0.4: +tinyexec@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.3.1.tgz#16a2e3c6e23fafce72640e678e651db36145b9c6" integrity sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA== @@ -7502,15 +7366,6 @@ wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" -wrap-ansi@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" - integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== - dependencies: - ansi-styles "^6.2.1" - string-width "^7.0.0" - strip-ansi "^7.1.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -7562,7 +7417,7 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3" integrity sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA== -yaml@^2.8.2: +yaml@^2.9.1: version "2.9.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.9.1.tgz#c16233fb31944e705cfefaff38795587f57588ce" integrity sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw== From 0a154b5fd382203bf227e6f7c76c19e956381283 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 12:27:19 +0300 Subject: [PATCH 66/70] showcase: React 19 context API and stable ids for saved drawings --- eslint.config.js | 35 ------------------- .../components/Canvas/CanvasActions/index.tsx | 4 +-- .../src/components/Canvas/Drawings/index.tsx | 6 ++-- packages/showcase/src/index.tsx | 8 ++--- packages/showcase/src/stores/config.ts | 22 ++++++++++-- 5 files changed, 29 insertions(+), 46 deletions(-) delete mode 100644 eslint.config.js diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index beaeed66..00000000 --- a/eslint.config.js +++ /dev/null @@ -1,35 +0,0 @@ -const js = require("@eslint/js"); -const globals = require("globals"); -const tseslint = require("typescript-eslint"); -const react = require("eslint-plugin-react"); -const reactHooks = require("eslint-plugin-react-hooks"); -const prettier = require("eslint-config-prettier/flat"); -const { defineConfig, globalIgnores } = require("eslint/config"); - -module.exports = defineConfig([ - globalIgnores(["**/dist/", "**/coverage/", "**/node_modules/"]), - { - files: ["packages/**/*.{ts,tsx}"], - extends: [ - js.configs.recommended, - tseslint.configs.recommended, - react.configs.flat.recommended, - // Target is the automatic JSX runtime (no React import needed). - react.configs.flat["jsx-runtime"], - reactHooks.configs.flat.recommended, - ], - languageOptions: { globals: globals.browser }, - settings: { react: { version: "detect" } }, - rules: { - // Component props are typed with TypeScript. - "react/prop-types": "off", - "no-console": ["error", { allow: ["warn", "error"] }], - }, - }, - { - files: ["packages/**/*.spec.{ts,tsx}"], - languageOptions: { globals: globals.jest }, - }, - // Last: switches off rules that conflict with Prettier. - prettier, -]); diff --git a/packages/showcase/src/components/Canvas/CanvasActions/index.tsx b/packages/showcase/src/components/Canvas/CanvasActions/index.tsx index f31c7ffe..e97deed8 100644 --- a/packages/showcase/src/components/Canvas/CanvasActions/index.tsx +++ b/packages/showcase/src/components/Canvas/CanvasActions/index.tsx @@ -12,7 +12,7 @@ import ClearIcon from "@mui/icons-material/DeleteSweep"; import Divider from "@mui/material/Divider"; import IconButton from "@mui/material/IconButton"; import Stack from "@mui/material/Stack"; -import { CONFIG, type Config } from "../../../stores/config"; +import { CONFIG, createDrawing, type Config } from "../../../stores/config"; import { downloadText, downloadUrl } from "../../../utils/files"; import { syncState, withSketch } from "../sketchRef"; @@ -66,7 +66,7 @@ const copy = () => const save = () => withSketch((sketch) => { - CONFIG.drawings = [...CONFIG.drawings, sketch.toDataURL()]; + CONFIG.drawings = [...CONFIG.drawings, createDrawing(sketch.toDataURL())]; }); const download = () => diff --git a/packages/showcase/src/components/Canvas/Drawings/index.tsx b/packages/showcase/src/components/Canvas/Drawings/index.tsx index c32bcc19..2ada4ac4 100644 --- a/packages/showcase/src/components/Canvas/Drawings/index.tsx +++ b/packages/showcase/src/components/Canvas/Drawings/index.tsx @@ -19,11 +19,11 @@ const Drawings = ({ drawings }: Pick): ReactElement | null = {drawings.map((drawing, index) => ( @@ -32,7 +32,7 @@ const Drawings = ({ drawings }: Pick): ReactElement | null = aria-label={`Remove saved drawing ${index + 1}`} sx={{ position: "absolute", top: 0, right: 0, color: "common.black" }} onClick={() => - (CONFIG.drawings = drawings.filter((_, i) => i !== index)) + (CONFIG.drawings = drawings.filter((d) => d.id !== drawing.id)) }> diff --git a/packages/showcase/src/index.tsx b/packages/showcase/src/index.tsx index 9e660075..4492fd43 100644 --- a/packages/showcase/src/index.tsx +++ b/packages/showcase/src/index.tsx @@ -2,7 +2,7 @@ import { App } from "./App"; import { createRoot } from "react-dom/client"; import { configure } from "mobx"; import { observer } from "mobx-react-lite"; -import { createContext, useContext } from "react"; +import { createContext, use } from "react"; import { Config, CONFIG } from "./stores/config"; configure({ @@ -12,7 +12,7 @@ configure({ const ShowcaseContext = createContext(CONFIG); const AppView = observer(() => { - const options = useContext(ShowcaseContext); + const options = use(ShowcaseContext); return ; }); @@ -22,7 +22,7 @@ if (!container) { } createRoot(container).render( - + - + ); diff --git a/packages/showcase/src/stores/config.ts b/packages/showcase/src/stores/config.ts index d77cde4a..e811a6e1 100644 --- a/packages/showcase/src/stores/config.ts +++ b/packages/showcase/src/stores/config.ts @@ -31,9 +31,27 @@ export interface Config { canRedo: boolean; hasSelection: boolean; canPaste: boolean; - drawings: string[]; + drawings: Drawing[]; } +/** + * A drawing saved with the save action, as a data URL + */ +export interface Drawing { + id: number; + src: string; +} + +let lastDrawingId = 0; + +/** + * Creates a drawing with an id that is unique in this session + */ +export const createDrawing = (src: string): Drawing => ({ + id: ++lastDrawingId, + src, +}); + export class ConfigStore implements Config { public scenario: Scenario = "playground"; public selectedTool = "line"; @@ -57,7 +75,7 @@ export class ConfigStore implements Config { public canRedo = false; public hasSelection = false; public canPaste = false; - public drawings: string[] = []; + public drawings: Drawing[] = []; constructor() { // The controlled value is handed to the canvas as is, do not wrap it in a proxy From 149d60862031b16aae414af8f366bc860c6eea98 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 12:27:20 +0300 Subject: [PATCH 67/70] chore: ESLint 10 with @eslint-react (eslint-plugin-react does not support ESLint 10) --- CHANGELOG.md | 2 +- eslint.config.mjs | 33 + package.json | 6 +- yarn.lock | 1606 ++++++++++----------------------------------- 4 files changed, 378 insertions(+), 1269 deletions(-) create mode 100644 eslint.config.mjs diff --git a/CHANGELOG.md b/CHANGELOG.md index 32749015..c2223679 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ Rewrite in TypeScript. The component API of 0.5.x is kept (properties, methods, - The showcase replaces `examples/`: React 19, `@mui/material` 9 and MobX 7, with a tools panel, an actions toolbar and the scenarios `defaultValue`, `value` with `forceValue`, and `addImg`. It runs with `yarn start` on port 23000 and uses the sources of the library, no build needed first. -- Toolchain: TypeScript 6, ESLint 9 (flat config) with typescript-eslint, Prettier 3, Jest 30 with +- Toolchain: TypeScript 6, ESLint 10 (flat config) with typescript-eslint and @eslint-react, Prettier 3, Jest 30 with ts-jest and Testing Library (replacing karma, enzyme and the Jest 23 setup of 0.5.x), husky 9 with lint-staged. GitHub Actions (`.github/workflows/ci.yml`, Node.js 22 and 24) replaces Travis CI. - Documentation: README rewritten, code of conduct updated to Contributor Covenant 2.1, README files diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..1f014d44 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,33 @@ +import js from "@eslint/js"; +import eslintReact from "@eslint-react/eslint-plugin"; +import { defineConfig, globalIgnores } from "eslint/config"; +import prettier from "eslint-config-prettier/flat"; +import reactHooks from "eslint-plugin-react-hooks"; +import globals from "globals"; +import tseslint from "typescript-eslint"; + +export default defineConfig([ + globalIgnores(["**/dist/", "**/coverage/", "**/node_modules/"]), + { + files: ["packages/**/*.{ts,tsx}"], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + eslintReact.configs["recommended-typescript"], + reactHooks.configs.flat.recommended, + ], + languageOptions: { globals: globals.browser }, + rules: { + "no-console": ["error", { allow: ["warn", "error"] }], + // The public methods of SketchField (undo, toJSON, ...) are its ref API, + // so they are not used inside the class. + "@eslint-react/no-unused-class-component-members": "off", + }, + }, + { + files: ["packages/**/*.spec.{ts,tsx}"], + languageOptions: { globals: globals.jest }, + }, + // Last: switches off rules that conflict with Prettier. + prettier, +]); diff --git a/package.json b/package.json index 73d3a928..2771c3cd 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,10 @@ "prepare": "husky" }, "devDependencies": { - "@eslint/js": "^9.39.5", - "eslint": "^9.39.5", + "@eslint-react/eslint-plugin": "^5.26.5", + "@eslint/js": "^10.0.1", + "eslint": "^10.12.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.1.1", "globals": "^17.13.0", "husky": "^9.1.7", diff --git a/yarn.lock b/yarn.lock index dc14293d..0eaf830f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -317,6 +317,24 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@cacheable/memory@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@cacheable/memory/-/memory-2.2.0.tgz#72aeb8b051f6d597d10ac8595b94ad8302bd2239" + integrity sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ== + dependencies: + "@cacheable/utils" "^2.5.0" + "@keyv/bigmap" "^1.3.1" + hookified "^1.15.1" + keyv "^5.6.0" + +"@cacheable/utils@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@cacheable/utils/-/utils-2.5.0.tgz#534c91113aa48fe43baedb169550b6ee070ef303" + integrity sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA== + dependencies: + hashery "^1.5.1" + keyv "^5.6.0" + "@csstools/color-helpers@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" @@ -486,65 +504,127 @@ dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2": +"@eslint-community/regexpp@^4.12.2": version "4.12.2" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.21.2": - version "0.21.2" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.2.tgz#f29e22057ad5316cf23836cee9a34c81fffcb7e6" - integrity sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw== +"@eslint-react/ast@5.26.5": + version "5.26.5" + resolved "https://registry.yarnpkg.com/@eslint-react/ast/-/ast-5.26.5.tgz#1752e36d1ca54c71e215d6f10e982b82f7249990" + integrity sha512-6oplvZs6FSY8D21BHeWVOvSH6x2/H53BULcqHK81K/s0B0Sr2STn+JnXYFjsmk8Wz+j0n/LRhuOaVhFOKbst0w== dependencies: - "@eslint/object-schema" "^2.1.7" - debug "^4.3.1" - minimatch "^3.1.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/typescript-estree" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + +"@eslint-react/core@5.26.5": + version "5.26.5" + resolved "https://registry.yarnpkg.com/@eslint-react/core/-/core-5.26.5.tgz#a3abfdcc1055f399060b342aa40954f556def5ff" + integrity sha512-Fa7gAPJzvV+hnEa8UBvDCpYXv/4n20r9wbG+nK55QZz4DoPkC5+AnsvAuhec9sesD4V+kPVbMz8cLDsOKLLJUw== + dependencies: + "@eslint-react/ast" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/shared" "5.26.5" + "@eslint-react/var" "5.26.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + ts-pattern "^5.9.0" + +"@eslint-react/eslint-plugin@^5.26.5": + version "5.26.5" + resolved "https://registry.yarnpkg.com/@eslint-react/eslint-plugin/-/eslint-plugin-5.26.5.tgz#8fc4530f2d999007bdbc214da0e26c1983af8560" + integrity sha512-zzWv23qlqFX3OQlwqLb82w5n0FCPOUO/y/408jhpiIItDE5amIA4lva8b5wcdbvN7dLB0qzZBkmd6FEdYO8Bsw== + dependencies: + "@eslint-react/shared" "5.26.5" + eslint-plugin-react-dom "5.26.5" + eslint-plugin-react-jsx "5.26.5" + eslint-plugin-react-naming-convention "5.26.5" + eslint-plugin-react-rsc "5.26.5" + eslint-plugin-react-web-api "5.26.5" + eslint-plugin-react-x "5.26.5" + +"@eslint-react/eslint@5.26.5": + version "5.26.5" + resolved "https://registry.yarnpkg.com/@eslint-react/eslint/-/eslint-5.26.5.tgz#7b35fbe09a4fbc454babcd24f18d3f8501bb98bb" + integrity sha512-s+x7cThaUeDC9eCQKWYyxStEYKAydsJz3BH8SpLdvjIE7jS0tmBYPe76AJ38XlYqTi8A20sJgFHAk0tb4xOm0Q== + dependencies: + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" -"@eslint/config-helpers@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" - integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== +"@eslint-react/jsx@5.26.5": + version "5.26.5" + resolved "https://registry.yarnpkg.com/@eslint-react/jsx/-/jsx-5.26.5.tgz#bc9e5d8bf6e55fee76b41fa7a788af4da9d21027" + integrity sha512-p84c6t0Zfprqz79DkkDNQiszLX5Ugz5s7DFOmeM3y1NQ3SSFMGUy9ezyP/f6NxandL/XPSmNKBJyqOAVxFq05Q== dependencies: - "@eslint/core" "^0.17.0" + "@eslint-react/ast" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/var" "5.26.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + ts-pattern "^5.9.0" -"@eslint/core@^0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" - integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== +"@eslint-react/shared@5.26.5": + version "5.26.5" + resolved "https://registry.yarnpkg.com/@eslint-react/shared/-/shared-5.26.5.tgz#f31554ad8a4fa67da71a7fea23fa7aee2964356f" + integrity sha512-VsBPYZZdJPzWGjxqJWgOUFcictXY6uoTKTleJz5jV3Bx0ibTUixfHp2cxBzcU1BMl/3gbUfpdQmBIWYl3z/RLw== dependencies: - "@types/json-schema" "^7.0.15" + "@eslint-react/eslint" "5.26.5" + "@typescript-eslint/utils" "^8.71.2" + ts-pattern "^5.9.0" + zod "^3.25.0 || ^4.0.0" -"@eslint/eslintrc@^3.3.6": - version "3.3.7" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.7.tgz#76d3dedec4a30ea32df797bf8a0085c1311b7316" - integrity sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw== +"@eslint-react/var@5.26.5": + version "5.26.5" + resolved "https://registry.yarnpkg.com/@eslint-react/var/-/var-5.26.5.tgz#f96a7d794f4b595cb7926a86cc55d86b58cf6ebc" + integrity sha512-uiXuKWNDv8/+jVubIepmovC7K5Hs+9kZJrHokwc8bJcAe++eTpTN6XOoioiIgkWy2oRNjXy2bemgbzaw7e+paQ== dependencies: - ajv "^6.14.0" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.3.2" - minimatch "^3.1.5" - strip-json-comments "^3.1.1" + "@eslint-react/ast" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@typescript-eslint/scope-manager" "^8.71.2" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + ts-pattern "^5.9.0" -"@eslint/js@9.39.5", "@eslint/js@^9.39.5": - version "9.39.5" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.5.tgz#6f2fbcff75500d229d535e0a949ae13472c84787" - integrity sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A== +"@eslint/config-array@^0.23.5": + version "0.23.5" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.23.5.tgz#56e86d243049195d8acc0c06a1b3dfdc3fa3de95" + integrity sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA== + dependencies: + "@eslint/object-schema" "^3.0.5" + debug "^4.3.1" + minimatch "^10.2.4" -"@eslint/object-schema@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" - integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== +"@eslint/config-helpers@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.7.0.tgz#09ee4aa07b73f059ec2d4c74bf4b2ff02b322377" + integrity sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw== + dependencies: + "@eslint/core" "^1.2.1" -"@eslint/plugin-kit@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" - integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== +"@eslint/core@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-1.2.1.tgz#c1da7cd1b82fa8787f98b5629fb811848a1b63ce" + integrity sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/js@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-10.0.1.tgz#1e8a876f50117af8ab67e47d5ad94d38d6622583" + integrity sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA== + +"@eslint/object-schema@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-3.0.5.tgz#88e9bf4d11d2b19c082e78ebe7ce88724a5eb091" + integrity sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw== + +"@eslint/plugin-kit@^0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.7.3.tgz#cc7268cc36405b331ef92db1bc37971f21d66fe1" + integrity sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q== dependencies: - "@eslint/core" "^0.17.0" + "@eslint/core" "^1.2.1" levn "^0.4.1" "@humanfs/core@^0.19.2": @@ -1051,6 +1131,19 @@ "@jsonjoy.com/buffers" "^1.0.0" "@jsonjoy.com/codegen" "^1.0.0" +"@keyv/bigmap@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@keyv/bigmap/-/bigmap-1.3.1.tgz#fc82fa83947e7ff68c6798d08907db842771ef2c" + integrity sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ== + dependencies: + hashery "^1.4.0" + hookified "^1.15.0" + +"@keyv/serialize@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@keyv/serialize/-/serialize-1.1.1.tgz#0c01dd3a3483882af7cf3878d4e71d505c81fc4a" + integrity sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA== + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" @@ -1507,6 +1600,11 @@ dependencies: "@types/node" "*" +"@types/esrecurse@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/esrecurse/-/esrecurse-4.3.1.tgz#6f636af962fbe6191b830bd676ba5986926bccec" + integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw== + "@types/estree@^1.0.6", "@types/estree@^1.0.8": version "1.0.9" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" @@ -1716,7 +1814,7 @@ "@typescript-eslint/types" "^8.71.2" debug "^4.4.3" -"@typescript-eslint/scope-manager@8.71.2": +"@typescript-eslint/scope-manager@8.71.2", "@typescript-eslint/scope-manager@^8.71.2": version "8.71.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.71.2.tgz#ddb35569150c9aab76d1324d7f6c1a1b68ac60d9" integrity sha512-YF4wgg5iUX5Obywoac27B56FhozMNFhdJSbh11H5GBAwmBtfyRhmgTQqW9tRNNmHDvsZ2CX6UGzoz+YfYn2Leg== @@ -1745,7 +1843,7 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.71.2.tgz#c2629dcd4056c71b02cf172d109a59a757c2cce9" integrity sha512-y5Ukl3oVp7e/VGxqIoEXoeb/Roj71PAJ4WG/N/RGj+eeDvKRLM15kGr9MijLbN0i03S52zxu31Z98E5gWChJKw== -"@typescript-eslint/typescript-estree@8.71.2": +"@typescript-eslint/typescript-estree@8.71.2", "@typescript-eslint/typescript-estree@^8.71.2": version "8.71.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.2.tgz#7ef01d376f6c1da20e173c3483f446127c88c24a" integrity sha512-DgNOEsl4pdYzwSL+N/Cl33tX1Hlw3FvId73LnKXfq7jnrF2viOEn7X+P7RBkkSWCVm92gnWd28GIC5vJuLREeA== @@ -1760,7 +1858,7 @@ tinyglobby "^0.2.15" ts-api-utils "^2.5.0" -"@typescript-eslint/utils@8.71.2": +"@typescript-eslint/utils@8.71.2", "@typescript-eslint/utils@^8.71.2": version "8.71.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.71.2.tgz#7c01b239b7cea1310f1793bbb5a02b5f8b74a6b9" integrity sha512-RyKa1G1M9rKHDhrk+HJtiF1MvLD5Ux2JW3TSkzw+02pRALdpJb+QzG1Y5em+LvCgzGwgg8H7mBRFKljNz7ImPw== @@ -2049,7 +2147,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.15.0: +acorn@^8.15.0, acorn@^8.16.0: version "8.19.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.19.0.tgz#6b26fd97ce1cc9dc50bdf7ad305e9f1384d4f28a" integrity sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw== @@ -2159,11 +2257,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - aria-query@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" @@ -2176,85 +2269,6 @@ aria-query@^5.0.0: resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - -array-includes@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" - -array-includes@^3.1.8: - version "3.2.0" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.2.0.tgz#18771e6837351aa139c3b58873371d0afa64964a" - integrity sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-abstract "^1.24.2" - es-object-atoms "^1.1.2" - es-shim-unscopables "^1.1.0" - is-string "^1.1.1" - math-intrinsics "^1.1.0" - -array.prototype.findlast@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" - integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flatmap@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" - integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.tosorted@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" - integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-shim-unscopables "^1.0.2" - -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - asn1js@^3.0.10, asn1js@^3.0.6: version "3.0.10" resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.10.tgz#df26c874c8a8b41ca605efea47b2ad07551013dd" @@ -2264,18 +2278,6 @@ asn1js@^3.0.10, asn1js@^3.0.6: pvutils "^1.1.5" tslib "^2.8.1" -async-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" - integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - babel-jest@30.5.2: version "30.5.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.5.2.tgz#ee4b3b265baf9dad68e6275bc813ef35d1736e6d" @@ -2407,14 +2409,6 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -brace-expansion@^1.1.7: - version "1.1.21" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.21.tgz#edf4fab5c64d051aea5a8def49aba1c7522279f3" - integrity sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - brace-expansion@^2.0.2: version "2.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.7.tgz#14ea3836731823bb24740225ea43b941b436f9d1" @@ -2491,6 +2485,17 @@ bytestreamjs@^2.0.1: resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== +cacheable@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/cacheable/-/cacheable-2.5.0.tgz#d142d41043e5a865f6053cc70ef4e3ad068bd5ce" + integrity sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g== + dependencies: + "@cacheable/memory" "^2.2.0" + "@cacheable/utils" "^2.5.0" + hookified "^1.15.0" + keyv "^5.6.0" + qified "^0.10.1" + call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" @@ -2499,25 +2504,7 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.7, call-bind@^1.0.8, call-bind@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" - integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - get-intrinsic "^1.3.0" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: +call-bound@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -2570,7 +2557,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -2699,6 +2686,11 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +compare-versions@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -2720,11 +2712,6 @@ compression@^1.8.1: safe-buffer "5.2.1" vary "~1.1.2" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" @@ -2851,33 +2838,6 @@ data-urls@^5.0.0: whatwg-mimetype "^4.0.0" whatwg-url "^14.0.0" -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2944,36 +2904,11 @@ default-browser@^5.5.1: bundle-name "^4.1.0" default-browser-id "^5.0.0" -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - define-lazy-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -3011,13 +2946,6 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" @@ -3086,7 +3014,7 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dunder-proto@^1.0.0, dunder-proto@^1.0.1: +dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== @@ -3167,99 +3095,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract-get@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-abstract-get/-/es-abstract-get-1.0.0.tgz#1eae87101f42bedeb6a740e8c5051271aef89088" - integrity sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg== - dependencies: - es-errors "^1.3.0" - es-object-atoms "^1.1.2" - is-callable "^1.2.7" - object-inspect "^1.13.4" - -es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.2: - version "1.24.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.2.tgz#2dbd38c180735ee983f77585140a2706a963ed9a" - integrity sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.3.0" - get-proto "^1.0.1" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-negative-zero "^2.0.3" - is-regex "^1.2.1" - is-set "^2.0.3" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.1" - math-intrinsics "^1.1.0" - object-inspect "^1.13.4" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.4" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - stop-iteration-iterator "^1.1.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.19" - -es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" - -es-define-property@^1.0.0, es-define-property@^1.0.1: +es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== @@ -3269,78 +3105,18 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-iterator-helpers@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz#2b4635ee3e8db2285378a47a1ea8f8dd34adb653" - integrity sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-abstract "^1.24.2" - es-errors "^1.3.0" - es-set-tostringtag "^2.1.0" - function-bind "^1.1.2" - get-intrinsic "^1.3.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - internal-slot "^1.1.0" - iterator.prototype "^1.1.5" - math-intrinsics "^1.1.0" - es-module-lexer@^2.1.0: version "2.3.2" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.2.tgz#311fa4f40168c1975c505477c51b23234d41ad55" integrity sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1, es-object-atoms@^1.1.2: +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz#a2d0b373205724dfa525d23b0c3e1b1ca582c99b" integrity sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" - integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== - dependencies: - hasown "^2.0.2" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es-to-primitive@^1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.4.tgz#0c854291cf0d7b439d6b9e5771ea837ffaf1f991" - integrity sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw== - dependencies: - es-abstract-get "^1.0.0" - es-define-property "^1.0.1" - es-errors "^1.3.0" - is-callable "^1.2.7" - is-date-object "^1.1.0" - is-symbol "^1.1.1" - escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -3371,6 +3147,21 @@ eslint-config-prettier@^10.1.8: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== +eslint-plugin-react-dom@5.26.5: + version "5.26.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-dom/-/eslint-plugin-react-dom-5.26.5.tgz#2e5c3891263c6a5e4968d1b001a0923274219bd9" + integrity sha512-CdDjJx4X1cTRq5uresXx0flA5f8Ute6+9QUwTLshlsNvf+SXA84qyx99FHOu4Gn33tD+C80lunrCRyjX5DlBLw== + dependencies: + "@eslint-react/ast" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/jsx" "5.26.5" + "@eslint-react/shared" "5.26.5" + "@eslint-react/var" "5.26.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + compare-versions "^6.1.1" + ts-pattern "^5.9.0" + eslint-plugin-react-hooks@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz#e6742cad75d970c0a3f30d7d3fa80a4784f55927" @@ -3382,35 +3173,87 @@ eslint-plugin-react-hooks@^7.1.1: zod "^3.25.0 || ^4.0.0" zod-validation-error "^3.5.0 || ^4.0.0" -eslint-plugin-react@^7.37.5: - version "7.37.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" - integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== - dependencies: - array-includes "^3.1.8" - array.prototype.findlast "^1.2.5" - array.prototype.flatmap "^1.3.3" - array.prototype.tosorted "^1.1.4" - doctrine "^2.1.0" - es-iterator-helpers "^1.2.1" - estraverse "^5.3.0" - hasown "^2.0.2" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.9" - object.fromentries "^2.0.8" - object.values "^1.2.1" - prop-types "^15.8.1" - resolve "^2.0.0-next.5" - semver "^6.3.1" - string.prototype.matchall "^4.0.12" - string.prototype.repeat "^1.0.0" +eslint-plugin-react-jsx@5.26.5: + version "5.26.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-jsx/-/eslint-plugin-react-jsx-5.26.5.tgz#24c75334c81889454e123520cfae4b36ea40ecd7" + integrity sha512-OR4E+Lur+QpooICY4YWbgic0Dox9I4mfjXmVDOJqVZ2QpkjF3qUrI2I/BjBvG2TLrCgblaIV3n/KCRA17pJrbg== + dependencies: + "@eslint-react/ast" "5.26.5" + "@eslint-react/core" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/jsx" "5.26.5" + "@eslint-react/shared" "5.26.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + +eslint-plugin-react-naming-convention@5.26.5: + version "5.26.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-naming-convention/-/eslint-plugin-react-naming-convention-5.26.5.tgz#3a859e47b73b816b258072d9d14eb7663524c6ec" + integrity sha512-A/7d8uTbT+MDOwS/lQx7IPQx7QpOZdjx7X4h1hq9BDrKRhMfq6FIMGETMzpM8gu4s2Evj3XQBOdbfq+9AdmkCA== + dependencies: + "@eslint-react/ast" "5.26.5" + "@eslint-react/core" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/shared" "5.26.5" + "@eslint-react/var" "5.26.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + ts-pattern "^5.9.0" + +eslint-plugin-react-rsc@5.26.5: + version "5.26.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-rsc/-/eslint-plugin-react-rsc-5.26.5.tgz#2206e65ad428a258ce2444146f7bf4f375771540" + integrity sha512-o+xEYpZMhSFMLuyYt9Eq2kr6zLkMpph+1tcA4vbnTFRtxVuQkFLNcyQSmUJ1Qg8CXT7mPlLBEGytf5q27u/UPw== + dependencies: + "@eslint-react/ast" "5.26.5" + "@eslint-react/core" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/shared" "5.26.5" + "@eslint-react/var" "5.26.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + +eslint-plugin-react-web-api@5.26.5: + version "5.26.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-web-api/-/eslint-plugin-react-web-api-5.26.5.tgz#7bfa71c7928810635d27b2af786a80cc96ddcd5a" + integrity sha512-LMUD7pIXvajuT0MKZYgY0f9bE6shi/OZOzOS2Zt5wBmZxX8wZZAegehmafD9BbXgOf/zhQ9cVW7v1btR5eaaxA== + dependencies: + "@eslint-react/ast" "5.26.5" + "@eslint-react/core" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/shared" "5.26.5" + "@eslint-react/var" "5.26.5" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + ts-pattern "^5.9.0" + +eslint-plugin-react-x@5.26.5: + version "5.26.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-x/-/eslint-plugin-react-x-5.26.5.tgz#86cf802226c1ccef8ef70a2953af96cedeb4e500" + integrity sha512-YCcWpeWdenZ6e+vLoZMO9u8fWEob5WpmeCqNUzlyLi/8qN8H8y60DvS6oLBtoXoiTLY5omfPNUXqmGWaMBvgiw== + dependencies: + "@eslint-react/ast" "5.26.5" + "@eslint-react/core" "5.26.5" + "@eslint-react/eslint" "5.26.5" + "@eslint-react/jsx" "5.26.5" + "@eslint-react/shared" "5.26.5" + "@eslint-react/var" "5.26.5" + "@typescript-eslint/scope-manager" "^8.71.2" + "@typescript-eslint/types" "^8.71.2" + "@typescript-eslint/typescript-estree" "^8.71.2" + "@typescript-eslint/utils" "^8.71.2" + compare-versions "^6.1.1" + string-ts "^2.3.1" + ts-api-utils "^2.5.0" + ts-pattern "^5.9.0" -eslint-scope@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" - integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== +eslint-scope@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.2.tgz#b9de6ace2fab1cff24d2e58d85b74c8fcea39802" + integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ== dependencies: + "@types/esrecurse" "^4.3.1" + "@types/estree" "^1.0.8" esrecurse "^4.3.0" estraverse "^5.2.0" @@ -3419,71 +3262,62 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" - integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== - -eslint-visitor-keys@^5.0.0: +eslint-visitor-keys@^5.0.0, eslint-visitor-keys@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== -eslint@^9.39.5: - version "9.39.5" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.5.tgz#2a4e3c8b0f753196efae943c8ffaa8730fc6a3fa" - integrity sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw== +eslint@^10.12.0: + version "10.12.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-10.12.0.tgz#4f2f7e679bdce9d71438c2900f2c8d4d297332b0" + integrity sha512-npHjrHb2o4ehH3mE+YuxABR+0gyb0aVWCIolgJDArwCiHEIsonBm3ZKjel5b0U5+a+MbEvIyRCGCzD3eKKK2NA== dependencies: "@eslint-community/eslint-utils" "^4.8.0" - "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.21.2" - "@eslint/config-helpers" "^0.4.2" - "@eslint/core" "^0.17.0" - "@eslint/eslintrc" "^3.3.6" - "@eslint/js" "9.39.5" - "@eslint/plugin-kit" "^0.4.1" + "@eslint-community/regexpp" "^4.12.2" + "@eslint/config-array" "^0.23.5" + "@eslint/config-helpers" "^0.7.0" + "@eslint/core" "^1.2.1" + "@eslint/plugin-kit" "^0.7.3" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" ajv "^6.14.0" - chalk "^4.0.0" cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.4.0" - eslint-visitor-keys "^4.2.1" - espree "^10.4.0" - esquery "^1.5.0" + eslint-scope "^9.1.2" + eslint-visitor-keys "^5.0.1" + espree "^11.2.0" + esquery "^1.7.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^8.0.0" + file-entry-cache "11.1.5 || >11.1.6 <12" find-up "^5.0.0" glob-parent "^6.0.2" ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" json-stable-stringify-without-jsonify "^1.0.1" - lodash.merge "^4.6.2" - minimatch "^3.1.5" + minimatch "^10.2.5" natural-compare "^1.4.0" optionator "^0.9.3" -espree@^10.0.1, espree@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" - integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== +espree@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-11.2.0.tgz#01d5e47dc332aaba3059008362454a8cc34ccaa5" + integrity sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw== dependencies: - acorn "^8.15.0" + acorn "^8.16.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.1" + eslint-visitor-keys "^5.0.1" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.5.0: +esquery@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== @@ -3502,11 +3336,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -3638,12 +3467,12 @@ fdir@^6.5.0: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== -file-entry-cache@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" - integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== +"file-entry-cache@11.1.5 || >11.1.6 <12": + version "11.1.5" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-11.1.5.tgz#c8210eb055de63e68685ccfb6a017e386d4577d0" + integrity sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q== dependencies: - flat-cache "^4.0.0" + flat-cache "^6.1.23" fill-range@^7.1.1: version "7.1.1" @@ -3685,31 +3514,25 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" - integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== +flat-cache@^6.1.23: + version "6.1.23" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-6.1.23.tgz#735dc888c271868d7301b3bbb8edba5028afb61d" + integrity sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA== dependencies: - flatted "^3.2.9" - keyv "^4.5.4" + cacheable "^2.5.0" + flatted "^3.4.2" + hookified "^1.15.0" flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.2.9: +flatted@^3.4.2: version "3.4.4" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.4.tgz#aeeca2a506303f0cee61c59e6c9f2a88d2f29fc6" integrity sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q== -for-each@^0.3.3, for-each@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - dependencies: - is-callable "^1.2.7" - foreground-child@^3.1.0: version "3.3.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" @@ -3733,41 +3556,11 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.2.0.tgz#758f3e84fa542672454bd5e14cb081a5ce07f70c" - integrity sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - es-define-property "^1.0.1" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - hasown "^2.0.4" - is-callable "^1.2.7" - is-document.all "^1.0.0" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -generator-function@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" - integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3778,16 +3571,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -3808,7 +3592,7 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-proto@^1.0.0, get-proto@^1.0.1: +get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== @@ -3821,15 +3605,6 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -3868,25 +3643,12 @@ glob@^13.0.6: minipass "^7.1.3" path-scurry "^2.0.2" -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - globals@^17.13.0: version "17.13.0" resolved "https://registry.yarnpkg.com/globals/-/globals-17.13.0.tgz#ab2134b5ededbf2fbe2831dd0acc36f4f1ddeac5" integrity sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg== -globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -gopd@^1.0.1, gopd@^1.2.0: +gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== @@ -3918,16 +3680,6 @@ handlebars@^4.7.9: optionalDependencies: uglify-js "^3.1.4" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-bigints@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" - integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3938,43 +3690,17 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-symbols@^1.0.3, has-symbols@^1.1.0: +has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hashery@^1.4.0, hashery@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/hashery/-/hashery-1.5.1.tgz#4ba82ad54911ac617467870845d57a9fe508a400" + integrity sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ== dependencies: - function-bind "^1.1.1" + hookified "^1.15.0" hasown@^2.0.2, hasown@^2.0.4: version "2.0.4" @@ -4007,6 +3733,16 @@ hoist-non-react-statics@^3.3.1: dependencies: react-is "^16.7.0" +hookified@^1.15.0, hookified@^1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/hookified/-/hookified-1.15.1.tgz#b1fafeaa5489cdc29cb85546a8f837ed4ffbbcb6" + integrity sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg== + +hookified@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hookified/-/hookified-2.2.0.tgz#1d024ac1668973dd5bcc4a96ab9ccdb7639ef8d4" + integrity sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA== + html-encoding-sniffer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" @@ -4192,15 +3928,6 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -4216,121 +3943,28 @@ ipaddr.js@^2.3.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.5.0.tgz#7d4b6c39f9392fb61cf807de6e425e22c10e061f" integrity sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w== -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-async-function@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" - integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== - dependencies: - async-function "^1.0.0" - call-bound "^1.0.3" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== - dependencies: - call-bind "^1.0.0" - -is-boolean-object@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" - integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.16.2, is-core-module@^2.17.0: +is-core-module@^2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.17.0.tgz#75c1c76236c9f7e38ddbfff292e127dc13b21027" integrity sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA== dependencies: hasown "^2.0.4" -is-data-view@^1.0.1, is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-date-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-docker@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== -is-document.all@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-document.all/-/is-document.all-1.0.0.tgz#163a4bfb362c6ed7b118ce46cdecc4e37dee3195" - integrity sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g== - dependencies: - call-bound "^1.0.4" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -4341,17 +3975,6 @@ is-generator-fn@^2.1.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.10: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" - integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== - dependencies: - call-bound "^1.0.4" - generator-function "^2.0.0" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - is-glob@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -4378,39 +4001,11 @@ is-inside-container@^1.0.0: dependencies: is-docker "^3.0.0" -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - is-network-error@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.2.tgz#9460bc30f8419a4bca77114f4de88a3ee5e0c519" integrity sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA== -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -4438,97 +4033,11 @@ is-promise@^4.0.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== -is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" - -is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - -is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2, is-weakref@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" - integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== - dependencies: - call-bound "^1.0.3" - -is-weakset@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" - integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - dependencies: - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - is-wsl@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f" @@ -4536,11 +4045,6 @@ is-wsl@^3.1.0: dependencies: is-inside-container "^1.0.0" -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4593,18 +4097,6 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterator.prototype@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" - integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== - dependencies: - define-data-property "^1.1.4" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.6" - get-proto "^1.0.0" - has-symbols "^1.1.0" - set-function-name "^2.0.2" - jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" @@ -5006,13 +4498,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.2.tgz#8e44fb14a2643c59726bb15787b5f1512cb3d3fb" - integrity sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA== - dependencies: - argparse "^2.0.1" - jsdom@^26.1.0: version "26.1.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-26.1.0.tgz#ab5f1c1cafc04bd878725490974ea5e8bf0c72b3" @@ -5044,11 +4529,6 @@ jsesc@^3.0.2: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -5074,20 +4554,12 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" - integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== - dependencies: - array-includes "^3.1.2" - object.assign "^4.1.2" - -keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== +keyv@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.6.0.tgz#03044074c6b4d072d0a62c7b9fa649537baf0105" + integrity sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw== dependencies: - json-buffer "3.0.1" + "@keyv/serialize" "^1.1.1" kind-of@^6.0.2: version "6.0.3" @@ -5150,11 +4622,6 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -5300,20 +4767,13 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^10.2.2: +minimatch@^10.2.2, minimatch@^10.2.4, minimatch@^10.2.5: version "10.2.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.6.tgz#fd956bbe0b77241e9f15ac5dccb1c638060968ef" integrity sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A== dependencies: brace-expansion "^5.0.8" -minimatch@^3.1.2, minimatch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" - integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== - dependencies: - brace-expansion "^1.1.7" - minimatch@^9.0.4: version "9.0.9" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" @@ -5448,16 +4908,6 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== -node-exports-info@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/node-exports-info/-/node-exports-info-1.6.2.tgz#243a3105677d6781cd26e6a72350fd928a5cb46f" - integrity sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag== - dependencies: - array.prototype.flatmap "^1.3.3" - es-errors "^1.3.0" - object.entries "^1.1.9" - semver "^6.3.1" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -5502,73 +4952,6 @@ object-inspect@^1.13.3, object-inspect@^1.13.4: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - -object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.assign@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - -object.entries@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" - integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-object-atoms "^1.1.1" - -object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.values@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" - integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -5619,16 +5002,6 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -own-keys@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.2.tgz#31448ec1f781ecb1447f6f6aa0d6534222af59de" - integrity sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg== - dependencies: - call-bound "^1.0.4" - get-intrinsic "^1.3.0" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -5799,11 +5172,6 @@ pkijs@^3.3.3: pvutils "^1.1.3" tslib "^2.8.1" -possible-typed-array-names@^1.0.0, possible-typed-array-names@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" - integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== - postcss-modules-extract-imports@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" @@ -5979,6 +5347,13 @@ pvutils@^1.1.3, pvutils@^1.1.5: resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.2.0.tgz#4b5487a9cccd52d275b0538775790a3ca982bc22" integrity sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg== +qified@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/qified/-/qified-0.10.1.tgz#0640bf21bbe6ca540db290ad8f5fde4d870b8bda" + integrity sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA== + dependencies: + hookified "^2.1.1" + qs@^6.15.2, qs@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.16.0.tgz#c22c723a28a920f3aacdce8289fabd43eccb79fd" @@ -6088,32 +5463,6 @@ reflect-metadata@^0.2.2: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== -reflect.getprototypeof@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - -regexp.prototype.flags@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -6167,18 +5516,6 @@ resolve@^1.19.0, resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.5: - version "2.0.0-next.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.7.tgz#ba3b035d4b1ee7c522426eee73cabcb0fd5515dd" - integrity sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ== - dependencies: - es-errors "^1.3.0" - is-core-module "^2.16.2" - node-exports-info "^1.6.0" - object-keys "^1.1.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - router@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" @@ -6200,39 +5537,11 @@ run-applescript@^7.0.0: resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== -safe-array-concat@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.4.tgz#a54cc9b61a57f33b42abad3cbdda3a2b38cc5719" - integrity sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - get-intrinsic "^1.3.0" - has-symbols "^1.1.0" - isarray "^2.0.5" - safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6318,37 +5627,6 @@ serve-static@^2.2.0: parseurl "^1.3.3" send "^1.2.0" -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -6407,7 +5685,7 @@ side-channel-weakmap@^1.0.2: object-inspect "^1.13.3" side-channel-map "^1.0.1" -side-channel@^1.1.0, side-channel@^1.1.1: +side-channel@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab" integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== @@ -6505,14 +5783,6 @@ statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== -stop-iteration-iterator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" - integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== - dependencies: - es-errors "^1.3.0" - internal-slot "^1.1.0" - string-argv@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" @@ -6526,6 +5796,11 @@ string-length@^4.0.2: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-ts@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/string-ts/-/string-ts-2.3.1.tgz#ef5394c8bd81139a2d49487623605f1208250d5a" + integrity sha512-xSJq+BS52SaFFAVxuStmx6n5aYZU571uYUnUrPXkPFCfdHyZMMlbP2v2Wx5sNBnAVzq/2+0+mcBLBa3Xa5ubYw== + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -6562,82 +5837,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz#8d854b2318fc596fc0877cfc6c4bcc50d0455b8e" - integrity sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-abstract "^1.24.2" - es-errors "^1.3.0" - es-object-atoms "^1.1.2" - get-intrinsic "^1.3.0" - gopd "^1.2.0" - has-symbols "^1.1.0" - internal-slot "^1.1.0" - regexp.prototype.flags "^1.5.4" - set-function-name "^2.0.2" - side-channel "^1.1.1" - -string.prototype.repeat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" - integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trim@^1.2.10: - version "1.2.11" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz#e6bd19cda3985d05a42dda31f3ddf4d35d3430e3" - integrity sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.24.2" - es-object-atoms "^1.1.2" - has-property-descriptors "^1.0.2" - safe-regex-test "^1.1.0" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimend@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz#be6bcf4f3fe0460bdeccdb2cf4f971b310f8346e" - integrity sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-object-atoms "^1.1.2" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -6893,6 +6092,11 @@ ts-loader@^9.6.2: picomatch "^4.0.0" source-map "^0.7.4" +ts-pattern@^5.9.0: + version "5.9.2" + resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-5.9.2.tgz#d2dbf1b4061df9b712068bb962fbe3c5c2998255" + integrity sha512-qAf+7M7Jjk7uebZeIo9uEzyintfuRtgHdzM9dqxRKcMi2dt76Ec+FH2wW3bnU9TuGLkZIJLoLs7cCQnU7Tu8ig== + tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -6958,50 +6162,6 @@ type-is@^2.1.0: media-typer "^1.1.0" mime-types "^3.0.0" -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - -typed-array-byte-offset@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz#c076d6a0db563933154b3c442204b614bf0d7b15" - integrity sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.9" - for-each "^0.3.5" - gopd "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.10" - -typed-array-length@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.8.tgz#0b70e982c9e9dafe2def6d6458ff4b3f2d2b6d70" - integrity sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g== - dependencies: - call-bind "^1.0.9" - for-each "^0.3.5" - gopd "^1.2.0" - is-typed-array "^1.1.15" - possible-typed-array-names "^1.1.0" - reflect.getprototypeof "^1.0.10" - typescript-eslint@^8.71.2: version "8.71.2" resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.71.2.tgz#3084e83f6061d778077b275f905e5942443bd4be" @@ -7022,26 +6182,6 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - undici-types@~6.21.0: version "6.21.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" @@ -7253,70 +6393,6 @@ whatwg-url@^14.0.0, whatwg-url@^14.1.1: tr46 "^5.1.0" webidl-conversions "^7.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.16, which-typed-array@^1.1.19: - version "1.1.24" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.24.tgz#211f5877c29e6213d50e8f2dce4ac9ca2d0008cf" - integrity sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.9" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" From 55c12fc05ea4220e8861bcf239de2073dd044197 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 16:43:07 +0300 Subject: [PATCH 68/70] fix: enableTouchScroll and disableTouchScroll set the touch-action style of the canvas --- .../components/SketchField/SketchField.spec.tsx | 14 ++++++++++++++ .../src/components/SketchField/SketchField.tsx | 17 +++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx b/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx index 8ca90ef8..c2d359c7 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.spec.tsx @@ -874,6 +874,20 @@ describe("SketchField", () => { sketch.disableTouchScroll(); expect(canvas.allowTouchScrolling).toBe(false); }); + + // jsdom does not implement touch-action: it keeps the assigned value only + // on the style object, which is what the component sets. + it("switch the touch-action style that lets the browser scroll", () => { + const { sketch, canvas } = mount(); + + sketch.enableTouchScroll(); + expect(canvas.upperCanvasEl.style.touchAction).toBe("manipulation"); + expect(canvas.lowerCanvasEl.style.touchAction).toBe("manipulation"); + + sketch.disableTouchScroll(); + expect(canvas.upperCanvasEl.style.touchAction).toBe("none"); + expect(canvas.lowerCanvasEl.style.touchAction).toBe("none"); + }); }); describe("addImg", () => { diff --git a/packages/react-sketch/src/components/SketchField/SketchField.tsx b/packages/react-sketch/src/components/SketchField/SketchField.tsx index 016785e9..9c825902 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.tsx @@ -298,16 +298,29 @@ class SketchField extends PureComponent { * Enable touch Scrolling on Canvas */ enableTouchScroll = (): void => { - this.canvas.allowTouchScrolling = true; + this.setTouchScrolling(true); }; /** * Disable touch Scrolling on Canvas */ disableTouchScroll = (): void => { - this.canvas.allowTouchScrolling = false; + this.setTouchScrolling(false); }; + /** + * Switch the touch scrolling of the canvas. fabric reads allowTouchScrolling + * only when it creates the canvas elements, so the touch-action style that + * lets the browser scroll is set here too, with the values fabric uses. + */ + private setTouchScrolling(allow: boolean): void { + const canvas = this.canvas; + canvas.allowTouchScrolling = allow; + const touchAction = allow ? "manipulation" : "none"; + canvas.upperCanvasEl.style.touchAction = touchAction; + canvas.lowerCanvasEl.style.touchAction = touchAction; + } + /** * Add an image as object to the canvas * From 31a135efe90b6a6b72aab5a213c5ccf60bfa31bd Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 16:43:08 +0300 Subject: [PATCH 69/70] docs: images and the background image are part of the JSON (#58), with a test --- README.md | 3 ++ .../SketchField/SketchField.fabric.spec.tsx | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/README.md b/README.md index 2d0f0027..ade83e10 100644 --- a/README.md +++ b/README.md @@ -127,6 +127,9 @@ in 0.5.x. - `value` is not updated while the user draws. Read the drawing with `toJSON()`. Do not store the result of `toJSON()` in `value` from `onChange`: loading a value calls `onChange`, so the value would be loaded again and again. +- Images added with `addImg` and the background image are part of the JSON, so one `value` or + `defaultValue` holds shapes and images. Loading replaces everything, the background image included: + add images after `onChange` reports the load. ```tsx import { useRef, useState } from "react"; diff --git a/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx b/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx index c7b47712..330f9d69 100644 --- a/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx +++ b/packages/react-sketch/src/components/SketchField/SketchField.fabric.spec.tsx @@ -702,6 +702,45 @@ describe("SketchField on fabric 7", () => { expect(saved.backgroundImage).toMatchObject({ opacity: 0.5 }); expect(canvas.backgroundImage).toBeDefined(); }); + + it("is saved with the shapes and the added images, and loading replaces all of them (#58)", async () => { + stubImages(); + jest + .spyOn(fabric.FabricImage, "fromURL") + .mockImplementation((_url, _options, imageOptions) => + Promise.resolve( + new fabric.FabricImage(document.createElement("img"), { + width: 100, + height: 60, + ...imageOptions, + }) + ) + ); + const { sketch, canvas } = mount({ tool: Tool.RECTANGLE }); + drag(canvas, [10, 20], [60, 80]); + sketch.addImg("data:image/png;base64,00"); + sketch.setBackgroundFromDataUrl("data:image/png;base64,00"); + await flush(); + + const saved = JSON.parse(JSON.stringify(sketch.toJSON())); + expect(saved.objects.map((o: { type: string }) => o.type)).toEqual([ + "Rect", + "Image", + ]); + expect(saved.backgroundImage).toBeDefined(); + + // Loading clears the canvas first: the images and the background image + // that are not in the loaded value are gone + sketch.fromJSON({ + ...saved, + objects: [saved.objects[0]], + backgroundImage: undefined, + }); + await flush(); + + expect(canvas.getObjects().map((o) => o.type)).toEqual(["rect"]); + expect(canvas.backgroundImage).toBeFalsy(); + }); }); it("the background color is painted by the canvas", () => { From f0e4fd7e4de57a998a4ec2b8ed87048352a0fab8 Mon Sep 17 00:00:00 2001 From: tbolis Date: Wed, 14 Oct 2026 16:43:08 +0300 Subject: [PATCH 70/70] showcase: add text in the line color (#78); CHANGELOG: touch scrolling fix --- CHANGELOG.md | 3 +++ packages/showcase/src/components/Tools/TextControls/index.tsx | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2223679..76128fb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -99,6 +99,9 @@ Rewrite in TypeScript. The component API of 0.5.x is kept (properties, methods, - Unmounting clears the pending timers (`fromJSON`, `onChange`) and disposes the canvas, so no callback runs on a disposed canvas. - `undo()` does nothing when there is nothing to undo. In 0.5.x it threw an error. +- `enableTouchScroll()` and `disableTouchScroll()` also set the `touch-action` style of the canvas, as + fabric reads the flag only when it creates the canvas. In 0.5.x the flag changed and the browser + kept blocking the scroll. - The Rectangle and RectangleLabel tools follow the pointer when dragging in every direction. - The Arrow tool no longer adds the previous arrow again on a mouse up that follows a finished arrow. - The Pencil tool uses the default cursor, not the crosshair of fabric (#181). diff --git a/packages/showcase/src/components/Tools/TextControls/index.tsx b/packages/showcase/src/components/Tools/TextControls/index.tsx index 375dd474..6683230e 100644 --- a/packages/showcase/src/components/Tools/TextControls/index.tsx +++ b/packages/showcase/src/components/Tools/TextControls/index.tsx @@ -8,7 +8,8 @@ import { withSketch } from "../../Canvas/sketchRef"; import Section from "../Section"; const TextControls = ({ text }: Pick): ReactElement => { - const addText = () => withSketch((sketch) => sketch.addText(CONFIG.text)); + const addText = () => + withSketch((sketch) => sketch.addText(CONFIG.text, { fill: CONFIG.lineColor })); return (