feat(frontend): enable knip (#31)

* feat(frontend): enable `knip`

* fix: remove stages barrel file
This commit is contained in:
Marco Pasqualetti
2026-01-24 15:30:39 +01:00
committed by GitHub
parent 90490046bb
commit 2871309af3
31 changed files with 78 additions and 448 deletions
+6
View File
@@ -57,6 +57,12 @@ jobs:
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
# needed to resolve .vercel folder from apps/frontend/src/components/Card/SVG.js
- name: Run vercel-preparation.sh
run: |
chmod +x ./vercel-preparation.sh
./vercel-preparation.sh
- name: Format
run: pnpm run format:check
+2 -15
View File
@@ -3,16 +3,12 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@babel/runtime": "^7.23.2",
"axios": "^1",
"axios-cache-interceptor": "^1",
"buffer": "^6.0.3",
"daisyui": "2.31.0",
"downloadjs": "^1.4.7",
"emoji-name-map": "^2.0.3",
"github-username-regex": "^1.0.0",
"html-to-image": "^1.11.11",
"moment": "^2.29.4",
"path-browserify": "^1.0.1",
"prop-types": "^15.8.1",
"querystring-es3": "^0.2.1",
@@ -23,11 +19,8 @@
"react-redux": "^8.1.3",
"react-router-dom": "^6.18.0",
"react-scripts": "^5.0.1",
"react-select": "^5.8.0",
"react-spinners": "^0.13.8",
"react-toastify": "^9.1.3",
"react-typist": "^2.0.5",
"react-typist-loop": "0.0.5",
"redux": "^4.2.1",
"save-svg-as-png": "^1.4.17",
"stream-browserify": "^3.0.0",
@@ -41,8 +34,8 @@
"@craco/craco": "^7.1.0",
"autoprefixer": "^10.4.16",
"postcss": "^8.4.31",
"prettier": "^3.0.3",
"tailwindcss": "^3.3.5"
"tailwindcss": "^3.3.5",
"webpack": "5.104.1"
},
"scripts": {
"start-trends": "craco start",
@@ -51,12 +44,6 @@
"eject": "react-scripts eject"
},
"homepage": "/frontend",
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
-2
View File
@@ -124,5 +124,3 @@ axios.defaults.adapter = async (config) => {
return defaultAdapter(config);
}
};
export const { get, post } = cachedAxios;
@@ -1,4 +0,0 @@
import SvgInline from "./SVG";
import { Card, Image } from "./Card";
export { Card, Image, SvgInline };
@@ -27,4 +27,4 @@ Button.defaultProps = {
className: "",
};
export default Button;
export { Button };
@@ -31,4 +31,4 @@ Checkbox.defaultProps = {
disabled: false,
};
export default Checkbox;
export { Checkbox };
@@ -62,4 +62,4 @@ Input.defaultProps = {
className: "",
};
export default Input;
export { Input };
@@ -1,5 +0,0 @@
import Button from "./Button";
import Checkbox from "./Checkbox";
import Input from "./Input";
export { Button, Checkbox, Input };
@@ -1,8 +1,8 @@
import React from "react";
import PropTypes from "prop-types";
import Section from "./Section";
import { Checkbox } from "../Generic";
import { Section } from "./Section";
import { Checkbox } from "../Generic/Checkbox";
const CheckboxSection = ({
title,
@@ -38,4 +38,4 @@ CheckboxSection.defaultProps = {
disabled: false,
};
export default CheckboxSection;
export { CheckboxSection };
@@ -1,8 +1,8 @@
import React from "react";
import PropTypes from "prop-types";
import Section from "./Section";
import { Input } from "../Generic";
import { Section } from "./Section";
import { Input } from "../Generic/Input";
export const DEFAULT_OPTION = {
id: 1,
@@ -48,4 +48,4 @@ LanguagesLayoutSection.propTypes = {
setSelectedOption: PropTypes.func.isRequired,
};
export default LanguagesLayoutSection;
export { LanguagesLayoutSection };
@@ -1,7 +1,7 @@
import React, { useEffect, useRef, useState } from "react";
import PropTypes from "prop-types";
import Section from "./Section";
import { Section } from "./Section";
const NumericSection = ({
title,
@@ -74,4 +74,4 @@ NumericSection.defaultProps = {
placeholder: "",
};
export default NumericSection;
export { NumericSection };
@@ -92,4 +92,4 @@ ProgressBar.propTypes = {
setCurrItem: PropTypes.func.isRequired,
};
export default ProgressBar;
export { ProgressBar };
+1 -1
View File
@@ -33,4 +33,4 @@ Section.defaultProps = {
children: <p className="leading-relaxed">This is a test!</p>,
};
export default Section;
export { Section };
@@ -1,8 +1,8 @@
import React from "react";
import PropTypes from "prop-types";
import Section from "./Section";
import { Input } from "../Generic";
import { Section } from "./Section";
import { Input } from "../Generic/Input";
export const DEFAULT_OPTION = {
id: 1,
@@ -36,4 +36,4 @@ StatsRankSection.propTypes = {
setSelectedOption: PropTypes.func.isRequired,
};
export default StatsRankSection;
export { StatsRankSection };
@@ -1,7 +1,7 @@
import React, { useEffect, useRef, useState } from "react";
import PropTypes from "prop-types";
import Section from "./Section";
import { Section } from "./Section";
import { classnames } from "../../utils";
const TextSection = ({
@@ -70,4 +70,4 @@ TextSection.defaultProps = {
onPaste: undefined,
};
export default TextSection;
export { TextSection };
@@ -1,8 +1,8 @@
import React from "react";
import PropTypes from "prop-types";
import Section from "./Section";
import { Input } from "../Generic";
import { Section } from "./Section";
import { Input } from "../Generic/Input";
export const DEFAULT_OPTION = {
id: 1,
@@ -1,4 +0,0 @@
import ProgressBar from "./Progress";
import CheckboxSection from "./CheckboxSection";
export { ProgressBar, CheckboxSection };
@@ -1,73 +0,0 @@
import React, { useState, useEffect } from "react";
import PropTypes from "prop-types";
import {
FaArrowRight as ArrowRightIcon,
FaArrowLeft as ArrowLeftIcon,
} from "react-icons/fa";
import { classnames } from "../../utils";
const Preview = ({ pages, details, showArrows }) => {
const totalPages = pages.length;
const [page, setPage] = useState(0);
const prevPage = () => {
setPage((page - 1 + totalPages) % totalPages);
};
const nextPage = () => {
setPage((page + 1 + totalPages) % totalPages);
};
useEffect(() => {
const interval = setInterval(nextPage, 5000);
return () => clearInterval(interval);
}, [page]);
return (
<div className="w-7/8 mx-auto p-8 rounded-sm">
<br />
<div className="flex items-center">
{showArrows && (
<ArrowLeftIcon
className="mr-4 w-8 h-8 text-gray-300 hover:text-gray-600"
onClick={prevPage}
/>
)}
<img
src={pages[page]}
alt="preview"
className={showArrows ? "w-3/4 mx-auto" : "w-full"}
/>
{showArrows && (
<ArrowRightIcon
className="ml-4 w-8 h-8 text-gray-300 hover:text-gray-600"
onClick={nextPage}
/>
)}
</div>
<br />
<p
className={classnames(
"w-full text-center",
"text-sm lg:text-lg xl:text-xl 2xl:text-2xl",
)}
>
{details[page]}
</p>
</div>
);
};
Preview.propTypes = {
pages: PropTypes.arrayOf(PropTypes.any).isRequired,
details: PropTypes.arrayOf(PropTypes.string).isRequired,
showArrows: PropTypes.bool,
};
Preview.defaultProps = {
showArrows: true,
};
export default Preview;
@@ -1,3 +0,0 @@
import Preview from "./Preview";
export default Preview;
-7
View File
@@ -1,7 +0,0 @@
import Preview from "./Preview";
export * from "./Generic";
export * from "./Card";
export * from "./Home";
export { Preview };
+2 -2
View File
@@ -1,4 +1,4 @@
export const PROD = false;
const PROD = false;
export const USE_LOGGER = true;
@@ -8,7 +8,7 @@ export const HOST = PROD
? "github-stats-extended.vercel.app"
: "github-stats-extended-preview.vercel.app";
export const REDIRECT_URI = `https://${HOST}/frontend`;
const REDIRECT_URI = `https://${HOST}/frontend`;
export const GITHUB_PRIVATE_AUTH_URL = `https://github.com/login/oauth/authorize?scope=user,repo&client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}/private`;
export const GITHUB_PUBLIC_AUTH_URL = `https://github.com/login/oauth/authorize?client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}/public`;
+1 -1
View File
@@ -6,7 +6,7 @@ import { Link } from "react-router-dom";
import appIcon from "../../assets/appLogo64.png";
import { classnames } from "../../utils";
import { FaGithub as GithubIcon } from "react-icons/fa";
import { ProgressBar } from "../../components";
import { ProgressBar } from "../../components/Home/Progress";
const propTypes = {
to: PropTypes.string.isRequired,
+6 -7
View File
@@ -4,13 +4,12 @@ import PropTypes from "prop-types";
import BounceLoader from "react-spinners/BounceLoader";
import { v4 as uuidv4 } from "uuid";
import {
CustomizeStage,
DisplayStage,
LoginStage,
SelectCardStage,
ThemeStage,
} from "./stages";
import { CustomizeStage } from "./stages/Customize";
import { DisplayStage } from "./stages/Display";
import { LoginStage } from "./stages/Login";
import { SelectCardStage } from "./stages/SelectCard";
import { ThemeStage } from "./stages/Theme";
import { authenticate } from "../../api";
import { login as _login } from "../../redux/actions/userActions";
@@ -1,12 +1,13 @@
import React from "react";
import PropTypes from "prop-types";
import { CheckboxSection, Image } from "../../../components";
import { CardTypes } from "../../../utils";
import TextSection from "../../../components/Home/TextSection";
import NumericSection from "../../../components/Home/NumericSection";
import StatsRankSection from "../../../components/Home/StatsRankSection";
import LanguagesLayoutSection from "../../../components/Home/LanguagesLayoutSection";
import { Image } from "../../../components/Card/Card";
import { CheckboxSection } from "../../../components/Home/CheckboxSection";
import { TextSection } from "../../../components/Home/TextSection";
import { NumericSection } from "../../../components/Home/NumericSection";
import { StatsRankSection } from "../../../components/Home/StatsRankSection";
import { LanguagesLayoutSection } from "../../../components/Home/LanguagesLayoutSection";
import WakatimeLayoutSection from "../../../components/Home/WakatimeLayoutSection";
import {
DEMO_GIST,
@@ -396,4 +397,4 @@ CustomizeStage.propTypes = {
setStage: PropTypes.func.isRequired,
};
export default CustomizeStage;
export { CustomizeStage };
@@ -8,7 +8,8 @@ import "react-toastify/dist/ReactToastify.css";
import { saveSvgAsPng } from "save-svg-as-png";
import { Button, Image } from "../../../components";
import { Button } from "../../../components/Generic/Button";
import { Image } from "../../../components/Card/Card";
import { classnames } from "../../../utils";
import { HOST } from "../../../constants";
@@ -103,4 +104,4 @@ DisplayStage.propTypes = {
guestHint: PropTypes.string.isRequired,
};
export default DisplayStage;
export { DisplayStage };
+3 -2
View File
@@ -4,7 +4,8 @@ import React, { useEffect, useRef, useState } from "react";
import PropTypes from "prop-types";
import { useDispatch } from "react-redux";
import { Button, Image } from "../../../components";
import { Button } from "../../../components/Generic/Button";
import { Image } from "../../../components/Card/Card";
import { classnames } from "../../../utils";
import {
CLIENT_ID,
@@ -303,4 +304,4 @@ LoginStage.propTypes = {
setCurrItem: PropTypes.func.isRequired,
};
export default LoginStage;
export { LoginStage };
@@ -3,7 +3,7 @@
import React from "react";
import PropTypes from "prop-types";
import { Card } from "../../../components";
import { Card } from "../../../components/Card/Card";
import { useUserId } from "../../../redux/selectors/userSelectors";
import {
DEMO_GIST,
@@ -83,4 +83,4 @@ SelectCardStage.defaultProps = {
selectedCard: null,
};
export default SelectCardStage;
export { SelectCardStage };
+2 -2
View File
@@ -3,7 +3,7 @@
import React from "react";
import PropTypes from "prop-types";
import { Card } from "../../../components";
import { Card } from "../../../components/Card/Card";
import { themes } from "../../../backend/themes/index";
const ThemeStage = ({ theme, setTheme, setStage, fullSuffix }) => {
@@ -64,4 +64,4 @@ ThemeStage.propTypes = {
fullSuffix: PropTypes.string.isRequired,
};
export default ThemeStage;
export { ThemeStage };
@@ -1,13 +0,0 @@
import LoginStage from "./Login";
import SelectCardStage from "./SelectCard";
import CustomizeStage from "./Customize";
import ThemeStage from "./Theme";
import DisplayStage from "./Display";
export {
LoginStage,
SelectCardStage,
CustomizeStage,
ThemeStage,
DisplayStage,
};
+21 -1
View File
@@ -1,6 +1,5 @@
{
"$schema": "./node_modules/knip/schema.json",
"ignoreWorkspaces": ["apps/frontend/**"],
"workspaces": {
"apps/backend": {
"entry": [
@@ -17,6 +16,27 @@
"jest", // used by test scripts referencing binary due to lack of ESM support
"@octokit/request-error" // used by js scripts executed in a GitHub actions not listed in deps
]
},
"apps/frontend": {
"entry": [
"src/index.js",
"src/dotenv-browser-stub.js",
"src/wakatime-override.js",
"craco.config.js"
],
"ignoreDependencies": [
// used by webpack as polyfill
"url",
"buffer",
"util",
// below dependencies are added because backend folder is copied inside frontend folder,
// so some of his dependencies must be present here
"github-username-regex",
"emoji-name-map",
"word-wrap"
]
}
}
}
+3 -277
View File
@@ -118,9 +118,6 @@ importers:
apps/frontend:
dependencies:
'@babel/runtime':
specifier: ^7.23.2
version: 7.28.4
axios:
specifier: ^1
version: 1.13.2
@@ -133,21 +130,12 @@ importers:
daisyui:
specifier: 2.31.0
version: 2.31.0(autoprefixer@10.4.23(postcss@8.5.6))(postcss@8.5.6)(yaml@2.8.2)
downloadjs:
specifier: ^1.4.7
version: 1.4.7
emoji-name-map:
specifier: ^2.0.3
version: 2.0.3
github-username-regex:
specifier: ^1.0.0
version: 1.0.0
html-to-image:
specifier: ^1.11.11
version: 1.11.13
moment:
specifier: ^2.29.4
version: 2.30.1
path-browserify:
specifier: ^1.0.1
version: 1.0.1
@@ -178,21 +166,12 @@ importers:
react-scripts:
specifier: ^5.0.1
version: 5.0.1(@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.5))(@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5))(@types/babel__core@7.20.5)(eslint@9.39.2(jiti@1.21.7))(react@18.3.1)(ts-node@10.9.2(@types/node@25.0.3)(typescript@4.9.5))(type-fest@0.21.3)(typescript@4.9.5)(yaml@2.8.2)
react-select:
specifier: ^5.8.0
version: 5.10.2(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-spinners:
specifier: ^0.13.8
version: 0.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-toastify:
specifier: ^9.1.3
version: 9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-typist:
specifier: ^2.0.5
version: 2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-typist-loop:
specifier: 0.0.5
version: 0.0.5(react-typist@2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
redux:
specifier: ^4.2.1
version: 4.2.1
@@ -227,12 +206,12 @@ importers:
postcss:
specifier: ^8.4.31
version: 8.5.6
prettier:
specifier: ^3.0.3
version: 3.7.4
tailwindcss:
specifier: ^3.3.5
version: 3.4.19(yaml@2.8.2)
webpack:
specifier: 5.104.1
version: 5.104.1
packages:
@@ -1121,47 +1100,6 @@ packages:
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
'@emotion/babel-plugin@11.13.5':
resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
'@emotion/cache@11.14.0':
resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==}
'@emotion/hash@0.9.2':
resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
'@emotion/memoize@0.9.0':
resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
'@emotion/react@11.14.0':
resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==}
peerDependencies:
'@types/react': '*'
react: '>=16.8.0'
peerDependenciesMeta:
'@types/react':
optional: true
'@emotion/serialize@1.3.3':
resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==}
'@emotion/sheet@1.4.0':
resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
'@emotion/unitless@0.10.0':
resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
'@emotion/use-insertion-effect-with-fallbacks@1.2.0':
resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==}
peerDependencies:
react: '>=16.8.0'
'@emotion/utils@1.4.2':
resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==}
'@emotion/weak-memoize@0.4.0':
resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
'@es-joy/jsdoccomment@0.78.0':
resolution: {integrity: sha512-rQkU5u8hNAq2NVRzHnIUUvR6arbO0b6AOlvpTNS48CkiKSn/xtNfOzBK23JE4SiW89DgvU7GtxLVgV4Vn2HBAw==}
engines: {node: '>=20.11.0'}
@@ -1225,15 +1163,6 @@ packages:
resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
engines: {node: '>=14'}
'@floating-ui/core@1.7.3':
resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
'@floating-ui/dom@1.7.4':
resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -1974,11 +1903,6 @@ packages:
'@types/range-parser@1.2.7':
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
'@types/react-transition-group@4.4.12':
resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==}
peerDependencies:
'@types/react': '*'
'@types/react@18.3.27':
resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==}
@@ -3219,9 +3143,6 @@ packages:
dom-converter@0.2.0:
resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
dom-helpers@5.2.1:
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
dom-serializer@1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
@@ -3254,9 +3175,6 @@ packages:
resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
engines: {node: '>=12'}
downloadjs@1.4.7:
resolution: {integrity: sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -3691,9 +3609,6 @@ packages:
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
engines: {node: '>=8'}
find-root@1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
find-up@3.0.0:
resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
engines: {node: '>=6'}
@@ -3986,9 +3901,6 @@ packages:
engines: {node: '>=12'}
hasBin: true
html-to-image@1.11.13:
resolution: {integrity: sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==}
html-webpack-plugin@5.6.5:
resolution: {integrity: sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==}
engines: {node: '>=10.13.0'}
@@ -4939,9 +4851,6 @@ packages:
memfs@4.51.1:
resolution: {integrity: sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==}
memoize-one@6.0.0:
resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
@@ -5024,9 +4933,6 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
moment@2.30.1:
resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
@@ -6002,12 +5908,6 @@ packages:
typescript:
optional: true
react-select@5.10.2:
resolution: {integrity: sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-spinners@0.13.8:
resolution: {integrity: sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==}
peerDependencies:
@@ -6020,24 +5920,6 @@ packages:
react: '>=16'
react-dom: '>=16'
react-transition-group@4.4.5:
resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
peerDependencies:
react: '>=16.6.0'
react-dom: '>=16.6.0'
react-typist-loop@0.0.5:
resolution: {integrity: sha512-CyeQjuKUoe/cu1ga+JBZWq0G4PKa5ALNVxJ2k4QK9OGFBBBkOmE0dRpY/NnXUbVwlfyPGfxIcjGFLJb3QjPHFg==}
engines: {node: '>=4'}
peerDependencies:
react-typist: '*'
react-typist@2.0.5:
resolution: {integrity: sha512-iZCkeqeegO0TlkTMiH2JD1tvMtY9RrXkRylnAI6m8aCVAUUwNzoWTVF7CKLij6THeOMcUDCznLDDvNp55s+YZA==}
peerDependencies:
react: ^0.14 || ^15.0 || ^16.0
react-dom: ^^0.14 || ^15.0 || ^16.0
react@18.3.1:
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'}
@@ -6411,10 +6293,6 @@ packages:
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
source-map@0.5.7:
resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
engines: {node: '>=0.10.0'}
source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
@@ -6599,9 +6477,6 @@ packages:
peerDependencies:
postcss: ^8.2.15
stylis@4.2.0:
resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
sucrase@3.35.1:
resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -6927,15 +6802,6 @@ packages:
resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
engines: {node: '>= 0.4'}
use-isomorphic-layout-effect@1.2.1:
resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==}
peerDependencies:
'@types/react': '*'
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
peerDependenciesMeta:
'@types/react':
optional: true
use-sync-external-store@1.6.0:
resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
peerDependencies:
@@ -8396,70 +8262,6 @@ snapshots:
tslib: 2.8.1
optional: true
'@emotion/babel-plugin@11.13.5':
dependencies:
'@babel/helper-module-imports': 7.27.1
'@babel/runtime': 7.28.4
'@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.9.0
escape-string-regexp: 4.0.0
find-root: 1.1.0
source-map: 0.5.7
stylis: 4.2.0
transitivePeerDependencies:
- supports-color
'@emotion/cache@11.14.0':
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': {}
'@emotion/memoize@0.9.0': {}
'@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1)':
dependencies:
'@babel/runtime': 7.28.4
'@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(react@18.3.1)
'@emotion/utils': 1.4.2
'@emotion/weak-memoize': 0.4.0
hoist-non-react-statics: 3.3.2
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.27
transitivePeerDependencies:
- supports-color
'@emotion/serialize@1.3.3':
dependencies:
'@emotion/hash': 0.9.2
'@emotion/memoize': 0.9.0
'@emotion/unitless': 0.10.0
'@emotion/utils': 1.4.2
csstype: 3.2.3
'@emotion/sheet@1.4.0': {}
'@emotion/unitless@0.10.0': {}
'@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)':
dependencies:
react: 18.3.1
'@emotion/utils@1.4.2': {}
'@emotion/weak-memoize@0.4.0': {}
'@es-joy/jsdoccomment@0.78.0':
dependencies:
'@types/estree': 1.0.8
@@ -8533,17 +8335,6 @@ snapshots:
'@fastify/busboy@2.1.1': {}
'@floating-ui/core@1.7.3':
dependencies:
'@floating-ui/utils': 0.2.10
'@floating-ui/dom@1.7.4':
dependencies:
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
'@floating-ui/utils@0.2.10': {}
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.7':
@@ -9507,10 +9298,6 @@ snapshots:
'@types/range-parser@1.2.7': {}
'@types/react-transition-group@4.4.12(@types/react@18.3.27)':
dependencies:
'@types/react': 18.3.27
'@types/react@18.3.27':
dependencies:
'@types/prop-types': 15.7.15
@@ -10829,11 +10616,6 @@ snapshots:
dependencies:
utila: 0.4.0
dom-helpers@5.2.1:
dependencies:
'@babel/runtime': 7.28.4
csstype: 3.2.3
dom-serializer@1.4.1:
dependencies:
domelementtype: 2.3.0
@@ -10867,8 +10649,6 @@ snapshots:
dotenv@17.2.3: {}
downloadjs@1.4.7: {}
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -11600,8 +11380,6 @@ snapshots:
make-dir: 3.1.0
pkg-dir: 4.2.0
find-root@1.1.0: {}
find-up@3.0.0:
dependencies:
locate-path: 3.0.0
@@ -11898,8 +11676,6 @@ snapshots:
relateurl: 0.2.7
terser: 5.44.1
html-to-image@1.11.13: {}
html-webpack-plugin@5.6.5(webpack@5.104.1):
dependencies:
'@types/html-minifier-terser': 6.1.0
@@ -13339,8 +13115,6 @@ snapshots:
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
memoize-one@6.0.0: {}
merge-descriptors@1.0.3: {}
merge-descriptors@2.0.0: {}
@@ -13400,8 +13174,6 @@ snapshots:
minipass@7.1.2: {}
moment@2.30.1: {}
ms@2.0.0: {}
ms@2.1.3: {}
@@ -14452,23 +14224,6 @@ snapshots:
- webpack-plugin-serve
- yaml
react-select@5.10.2(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.28.4
'@emotion/cache': 11.14.0
'@emotion/react': 11.14.0(@types/react@18.3.27)(react@18.3.1)
'@floating-ui/dom': 1.7.4
'@types/react-transition-group': 4.4.12(@types/react@18.3.27)
memoize-one: 6.0.0
prop-types: 15.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
use-isomorphic-layout-effect: 1.2.1(@types/react@18.3.27)(react@18.3.1)
transitivePeerDependencies:
- '@types/react'
- supports-color
react-spinners@0.13.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
@@ -14480,25 +14235,6 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.28.4
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-typist-loop@0.0.5(react-typist@2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)):
dependencies:
react-typist: 2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-typist@2.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
prop-types: 15.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react@18.3.1:
dependencies:
loose-envify: 1.4.0
@@ -14947,8 +14683,6 @@ snapshots:
buffer-from: 1.1.2
source-map: 0.6.1
source-map@0.5.7: {}
source-map@0.6.1: {}
source-map@0.7.6: {}
@@ -15161,8 +14895,6 @@ snapshots:
postcss: 8.5.6
postcss-selector-parser: 6.1.2
stylis@4.2.0: {}
sucrase@3.35.1:
dependencies:
'@jridgewell/gen-mapping': 0.3.13
@@ -15533,12 +15265,6 @@ snapshots:
punycode: 1.4.1
qs: 6.14.1
use-isomorphic-layout-effect@1.2.1(@types/react@18.3.27)(react@18.3.1):
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.27
use-sync-external-store@1.6.0(react@18.3.1):
dependencies:
react: 18.3.1