diff --git a/package.json b/package.json index dd9ac61..c6bd316 100644 --- a/package.json +++ b/package.json @@ -20,17 +20,17 @@ "zustand": "^4.4.7" }, "devDependencies": { - "@rspack/cli": "0.4.2", - "@rspack/core": "0.4.2", + "@rspack/cli": "0.4.3", + "@rspack/core": "0.4.3", "@testing-library/jest-dom": "^6.1.5", "@testing-library/react": "^14.1.2", "@types/jest": "^29.5.11", "@types/object-hash": "^3.0.6", - "@types/react": "^18.2.42", + "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", - "@types/recharts": "1.8.28", + "@types/recharts": "1.8.29", "@types/node": "^20.10.4", - "@typescript-eslint/eslint-plugin": "^6.13.2", + "@typescript-eslint/eslint-plugin": "^6.14.0", "autoprefixer": "^10.4.16", "eslint": "^8.55.0", "eslint-config-unosquare": "0.8.2", @@ -43,7 +43,7 @@ "lint-staged": "^15.2.0", "object-hash": "^3.0.0", "postcss-loader": "^7.3.3", - "prettier": "^3.1.0", + "prettier": "^3.1.1", "tailwindcss": "^3.3.6", "ts-jest": "^29.1.1", "typescript": "^5.3.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1981d2c..a02c5be 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,15 +34,15 @@ dependencies: version: 3.62.0 zustand: specifier: ^4.4.7 - version: 4.4.7(@types/react@18.2.42)(react@18.2.0) + version: 4.4.7(@types/react@18.2.43)(react@18.2.0) devDependencies: '@rspack/cli': - specifier: 0.4.2 - version: 0.4.2(@rspack/core@0.4.2) + specifier: 0.4.3 + version: 0.4.3(@rspack/core@0.4.3) '@rspack/core': - specifier: 0.4.2 - version: 0.4.2 + specifier: 0.4.3 + version: 0.4.3 '@testing-library/jest-dom': specifier: ^6.1.5 version: 6.1.5(@types/jest@29.5.11)(jest@29.7.0) @@ -59,17 +59,17 @@ devDependencies: specifier: ^3.0.6 version: 3.0.6 '@types/react': - specifier: ^18.2.42 - version: 18.2.42 + specifier: ^18.2.43 + version: 18.2.43 '@types/react-dom': specifier: ^18.2.17 version: 18.2.17 '@types/recharts': - specifier: 1.8.28 - version: 1.8.28 + specifier: 1.8.29 + version: 1.8.29 '@typescript-eslint/eslint-plugin': - specifier: ^6.13.2 - version: 6.13.2(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.3.3) + specifier: ^6.14.0 + version: 6.14.0(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.3.3) autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) @@ -78,10 +78,10 @@ devDependencies: version: 8.55.0 eslint-config-unosquare: specifier: 0.8.2 - version: 0.8.2(eslint@8.55.0)(prettier@3.1.0)(typescript@5.3.3) + version: 0.8.2(eslint@8.55.0)(prettier@3.1.1)(typescript@5.3.3) eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.0.1(eslint@8.55.0)(prettier@3.1.0) + version: 5.0.1(eslint@8.55.0)(prettier@3.1.1) eslint-plugin-react: specifier: ^7.33.2 version: 7.33.2(eslint@8.55.0) @@ -107,8 +107,8 @@ devDependencies: specifier: ^7.3.3 version: 7.3.3(postcss@8.4.31)(webpack@5.88.1) prettier: - specifier: ^3.1.0 - version: 3.1.0 + specifier: ^3.1.1 + version: 3.1.1 tailwindcss: specifier: ^3.3.6 version: 3.3.6 @@ -951,101 +951,101 @@ packages: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true - /@rspack/binding-darwin-arm64@0.4.2: - resolution: {integrity: sha512-DLchrjW1tTTFjtysgqKo6O+RBr4nq7wT4C+wHYqMqByPfQ6m0WtuSORFRDBHBEWt5RQvcjt+mSDO76imiBzSyg==} + /@rspack/binding-darwin-arm64@0.4.3: + resolution: {integrity: sha512-H/MW5oWawFY45OM+ePRELBueDlAusAMTaztn54AB1CRXyhLteyeX9luQv6+Fe1TDHeDfv27NL+eNTfO0+YJeZg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rspack/binding-darwin-x64@0.4.2: - resolution: {integrity: sha512-NpGwHYcHxMwkdnn+g3LKCIcbogYrxvI3lHZZuZdbBf9tIOzYBgSq6RRmfIHIl/WQ9UVcnwjpb1zxUganmwhi7Q==} + /@rspack/binding-darwin-x64@0.4.3: + resolution: {integrity: sha512-m/XiTWbsrJ45sFTD+I3P9V7OT9sNx4+RW6PbS28n9yvPflrx5TX6r9WjFnFD6RJcPnt81hvO6oOE3LDO5LPvAw==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rspack/binding-linux-arm64-gnu@0.4.2: - resolution: {integrity: sha512-m8kaD2EfdNHoHWZrnhYRvq/AP2K9ztrfeYLUC9qF8lDJW0cnI/easUigr0sfoPqml7iVVwsepKOQmjsDMvKT3A==} + /@rspack/binding-linux-arm64-gnu@0.4.3: + resolution: {integrity: sha512-t7wbd5NbZ5H3LeiUGZey0CKJdJWluu/iqdecnoPDEbXRdF7caev9OAJuQ9fKEsK4uQHQLvQ0/pjFDyDbJbPG5w==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rspack/binding-linux-arm64-musl@0.4.2: - resolution: {integrity: sha512-k5JhGPYjeZYDV819eNVrA1ajr/q+dBOb1mAwzuzgDJn38sMPLjj589XjlopuzY+JrpsQtP0p2iC/Yi+HPyYRmw==} + /@rspack/binding-linux-arm64-musl@0.4.3: + resolution: {integrity: sha512-VlqXmsgft9LeYxWm8bZB16f/SZE7xLaHgDwFR6KCFLhubPRnF7gvxLf/y8FAtZzV+9XDi7mhfLWHMyJJDqwFBQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rspack/binding-linux-x64-gnu@0.4.2: - resolution: {integrity: sha512-Su5AgvdSg4QNHeem3mFNY9VlaRKyK+sHjK+/RefP/l3sCRKUcGDLXcf8wUBy8//Mt/yJ88Z6jzB38vpFlnwsCA==} + /@rspack/binding-linux-x64-gnu@0.4.3: + resolution: {integrity: sha512-7eGymsvYsHz/P1mvUo1O+UJqrFzlMXY41599UWRiX4M3tX/pvDtLvxxjZ3JHVvNzEaBCiQ5xyRzqhhRDzcj4ww==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rspack/binding-linux-x64-musl@0.4.2: - resolution: {integrity: sha512-1xEBR719aSxpgARpnhSOpyFYOEqLCdfdz+KaeMt5NCl4FJ0p/Ob6h27GRcWdK91MQgCV2/4az6THiN5YKGTM7A==} + /@rspack/binding-linux-x64-musl@0.4.3: + resolution: {integrity: sha512-16PptmbtvpGHtEfbLoQjWjhBXOykdQRHXxn3RUTpkEXFbmhLnvnXbfmfSRoBuVNR+j0BqCrGiwweO43VBceJPg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rspack/binding-win32-arm64-msvc@0.4.2: - resolution: {integrity: sha512-7iKlOtp2AQjPEA81tSxf9rKu1gE7b+rkMiJnnlzqfDjUvUk4zD71F6BdY9jXXiPjCTUfL5Oym8f1OMkjZsrjDA==} + /@rspack/binding-win32-arm64-msvc@0.4.3: + resolution: {integrity: sha512-q9Vsn9Glj6m24UQfXpxcirk5S8r1RmAShXxjF+yRrKqpOtq1IodLWWRZ85kQfJyfk9deAfVkpiqHdsoK54uqQQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rspack/binding-win32-ia32-msvc@0.4.2: - resolution: {integrity: sha512-XXy3/I/TqpLTrHPqrfWkqzZC53gGqJ6BHuPkCRJQFVgJI9zdBADqumj7A2s7VuH411zZQrCQVa/YBWxXWlScxA==} + /@rspack/binding-win32-ia32-msvc@0.4.3: + resolution: {integrity: sha512-jY6RiFwKQQjX3QR28K7boydBIhWKgAcGlDR+p4KnDSciF0H19ImT9QAf31Wcj2+XjN0wRev58cHRI2tgRw2+cw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rspack/binding-win32-x64-msvc@0.4.2: - resolution: {integrity: sha512-OIMbPhhlGxwr6j4hQ7zeQAGMu217ZeV+/2PY+yQddgHUv/eFwH9MFhBZQc+k5Ad8+hurdyrLwOHGqjvo00ri/Q==} + /@rspack/binding-win32-x64-msvc@0.4.3: + resolution: {integrity: sha512-tZySo3ZZptxjuR0DDYQWQATUf5ApdDH7lQBezum/q5kzKVFFHN963JnInPHEO1wUtNXaTWXcx31habZTBrse/A==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /@rspack/binding@0.4.2: - resolution: {integrity: sha512-2Rb4cmDxHOqAoExiB7RZGyMUp17kDUkcHoPIi3W803mclqwHU9XpLdIMggy0J2Ig2Kp8TCF0tpoUSu2UhgXQgA==} + /@rspack/binding@0.4.3: + resolution: {integrity: sha512-cw7Sca7YL9FeSTWdYahxr6HgWXnboOgPiM5SJai2Nfj6c/PWJV+ntBZbIW0LRY1fFDL7dYz3GUCXj4Dv3QYc8A==} optionalDependencies: - '@rspack/binding-darwin-arm64': 0.4.2 - '@rspack/binding-darwin-x64': 0.4.2 - '@rspack/binding-linux-arm64-gnu': 0.4.2 - '@rspack/binding-linux-arm64-musl': 0.4.2 - '@rspack/binding-linux-x64-gnu': 0.4.2 - '@rspack/binding-linux-x64-musl': 0.4.2 - '@rspack/binding-win32-arm64-msvc': 0.4.2 - '@rspack/binding-win32-ia32-msvc': 0.4.2 - '@rspack/binding-win32-x64-msvc': 0.4.2 - dev: true - - /@rspack/cli@0.4.2(@rspack/core@0.4.2): - resolution: {integrity: sha512-9TnEmxqxJu6oW2wTQ+9pkPCM+PUHT2NOJ9iCvwTXz5izohM2ZTsG0BlCcpmUWqYn963P+NQdX1eiPd59NukHtQ==} + '@rspack/binding-darwin-arm64': 0.4.3 + '@rspack/binding-darwin-x64': 0.4.3 + '@rspack/binding-linux-arm64-gnu': 0.4.3 + '@rspack/binding-linux-arm64-musl': 0.4.3 + '@rspack/binding-linux-x64-gnu': 0.4.3 + '@rspack/binding-linux-x64-musl': 0.4.3 + '@rspack/binding-win32-arm64-msvc': 0.4.3 + '@rspack/binding-win32-ia32-msvc': 0.4.3 + '@rspack/binding-win32-x64-msvc': 0.4.3 + dev: true + + /@rspack/cli@0.4.3(@rspack/core@0.4.3): + resolution: {integrity: sha512-2s159uLRr/lX5S2Xifaj6DvQG8ajIOZwXyBf3OlvaGb8miFVLHjBL7TBu6vq3SNXOY9cjIK67B9AIMBZZPENjA==} hasBin: true peerDependencies: '@rspack/core': '>=0.4.0' dependencies: '@discoveryjs/json-ext': 0.5.7 - '@rspack/core': 0.4.2 - '@rspack/dev-server': 0.4.2(@rspack/core@0.4.2) + '@rspack/core': 0.4.3 + '@rspack/dev-server': 0.4.3(@rspack/core@0.4.3) colorette: 2.0.19 exit-hook: 3.2.0 interpret: 3.1.1 @@ -1066,11 +1066,11 @@ packages: - webpack-cli dev: true - /@rspack/core@0.4.2: - resolution: {integrity: sha512-D5gKawtOMnzp0JIk62t09WrgqU1TR1X44km8mWZqGs5EunQVCvE5wW785cGOXgfuV8yxFXUKEqdHPg5Cp9fvEg==} + /@rspack/core@0.4.3: + resolution: {integrity: sha512-YKzOOt6v6vZZH15+HdwWbd7DdXdXIJLlYQdQ6jgrAK7/X+5qg99MUgsfra3k+MXXX0vWROOy8mM6/dBaaDb7tg==} engines: {node: '>=16.0.0'} dependencies: - '@rspack/binding': 0.4.2 + '@rspack/binding': 0.4.3 '@swc/helpers': 0.5.1 browserslist: 4.21.10 compare-versions: 6.0.0-rc.1 @@ -1088,13 +1088,13 @@ packages: zod-validation-error: 1.3.1(zod@3.21.4) dev: true - /@rspack/dev-server@0.4.2(@rspack/core@0.4.2): - resolution: {integrity: sha512-YxCnTHAmOXLxrFhuzEJjwkKVST1iu8k+wGbv4jA0UjCFP1fBNPuPq780Hfi8tRopdsNo6tVtnhA/01wlhArTcQ==} + /@rspack/dev-server@0.4.3(@rspack/core@0.4.3): + resolution: {integrity: sha512-qbggWEySoWdCrbWxqV+HX7nXgyT6qE3DqGtdYKzX9RLPp+RilXtnPlXtwY1AXNh8e0gYe1dMpvTcHYxeSglZSg==} peerDependencies: '@rspack/core': '*' dependencies: - '@rspack/core': 0.4.2 - '@rspack/plugin-react-refresh': 0.4.2 + '@rspack/core': 0.4.3 + '@rspack/plugin-react-refresh': 0.4.3 chokidar: 3.5.3 connect-history-api-fallback: 2.0.0 express: 4.18.1 @@ -1117,8 +1117,8 @@ packages: - webpack-cli dev: true - /@rspack/plugin-react-refresh@0.4.2: - resolution: {integrity: sha512-NMEyODrRZKDjMsoj8H0g7IMUjBBWB9CtTc0LWRbAMTEPf1pat+aAlhbRxYys7TE1VyREg4cWH7ON0FAGbfh5MA==} + /@rspack/plugin-react-refresh@0.4.3: + resolution: {integrity: sha512-JWzlqFZKta87AuaDWpG1XAeF5sG2yTWjm86yevHE0yIHsj/Xy+EFwGwoKHPWg884vzKzzlyLbB8yikgdv8YvJA==} peerDependencies: react-refresh: '>=0.10.0 <1.0.0' peerDependenciesMeta: @@ -1483,21 +1483,21 @@ packages: /@types/react-dom@18.2.17: resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} dependencies: - '@types/react': 18.2.42 + '@types/react': 18.2.43 dev: true - /@types/react@18.2.42: - resolution: {integrity: sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA==} + /@types/react@18.2.43: + resolution: {integrity: sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 csstype: 3.1.2 - /@types/recharts@1.8.28: - resolution: {integrity: sha512-31D+dVBdVMtBnRMOjfM9210oRsclujQetwDNnCfapy/gF1BruvQkiK9WZ2ZMqDZY2xnDpIV8sWjISBcY+wgkLw==} + /@types/recharts@1.8.29: + resolution: {integrity: sha512-ulKklaVsnFIIhTQsQw226TnOibrddW1qUQNFVhoQEyY1Z7FRQrNecFCGt7msRuJseudzE9czVawZb17dK/aPXw==} dependencies: '@types/d3-shape': 1.3.8 - '@types/react': 18.2.42 + '@types/react': 18.2.43 dev: true /@types/retry@0.12.0: @@ -1562,8 +1562,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1575,10 +1575,10 @@ packages: dependencies: '@eslint-community/regexpp': 4.6.2 '@typescript-eslint/parser': 6.9.1(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 eslint: 8.55.0 graphemer: 1.4.0 @@ -1612,12 +1612,12 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.13.2: - resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==} + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 dev: true /@typescript-eslint/scope-manager@6.9.1: @@ -1628,8 +1628,8 @@ packages: '@typescript-eslint/visitor-keys': 6.9.1 dev: true - /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} + /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1638,8 +1638,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.55.0 ts-api-utils: 1.0.1(typescript@5.3.3) @@ -1648,8 +1648,8 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.13.2: - resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==} + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -1658,8 +1658,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.3): - resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1667,8 +1667,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1700,8 +1700,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} + /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1709,9 +1709,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: @@ -1719,11 +1719,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.13.2: - resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==} + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/types': 6.14.0 eslint-visitor-keys: 3.4.3 dev: true @@ -3311,20 +3311,20 @@ packages: eslint: 8.55.0 dev: true - /eslint-config-unosquare@0.8.2(eslint@8.55.0)(prettier@3.1.0)(typescript@5.3.3): + /eslint-config-unosquare@0.8.2(eslint@8.55.0)(prettier@3.1.1)(typescript@5.3.3): resolution: {integrity: sha512-BaH3n1jFjjV+Us2fYJrrfYxbP/D2QVQEIvVQYhjo7/+o0l/U/emn+y5ZAAVZBg55dpi6kRsR4FXFoZMrn1cYOw==} peerDependencies: eslint: ^8.44.0 prettier: ^3.0.0 dependencies: - '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.9.1)(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/parser': 6.9.1(eslint@8.55.0)(typescript@5.3.3) eslint: 8.55.0 eslint-config-prettier: 9.0.0(eslint@8.55.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0) - prettier: 3.1.0 + prettier: 3.1.1 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -3406,7 +3406,7 @@ packages: - supports-color dev: true - /eslint-plugin-prettier@5.0.1(eslint@8.55.0)(prettier@3.1.0): + /eslint-plugin-prettier@5.0.1(eslint@8.55.0)(prettier@3.1.1): resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3421,7 +3421,7 @@ packages: optional: true dependencies: eslint: 8.55.0 - prettier: 3.1.0 + prettier: 3.1.1 prettier-linter-helpers: 1.0.0 synckit: 0.8.5 dev: true @@ -5868,8 +5868,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} hasBin: true dev: true @@ -7631,7 +7631,7 @@ packages: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: true - /zustand@4.4.7(@types/react@18.2.42)(react@18.2.0): + /zustand@4.4.7(@types/react@18.2.43)(react@18.2.0): resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==} engines: {node: '>=12.7.0'} peerDependencies: @@ -7646,7 +7646,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.42 + '@types/react': 18.2.43 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false diff --git a/sample/index.tsx b/sample/index.tsx index 0736bb5..275b94b 100644 --- a/sample/index.tsx +++ b/sample/index.tsx @@ -1,6 +1,5 @@ import React, { useState } from 'react'; import { createRoot } from 'react-dom/client'; -import { identity } from 'uno-js'; import { ArrowSync24Regular, Dismiss24Regular, @@ -68,6 +67,7 @@ const extraColumns: TableColumn[] = [ const onlineColumns: TableColumn[] = [ + { label: 'User Id' }, { label: 'Id', sortOrder: 1, sortDirection: 'asc', dataType: 'number' }, { label: 'Title' }, { label: 'Body' }, @@ -88,8 +88,6 @@ type onlineDto = { body: string; }; -const processOnlineData = (data: onlineDto[]) => data ? data.map((x) => [x.id, x.title, x.body]) : []; - const Application = () => { const setAlert = useAlertStore(st => st.setAlert); const [currentOption, setCurrentOption] = React.useState(options.A); @@ -215,7 +213,6 @@ const Application = () => { Line Chart { className='mt-5' refLineY={{ value: 20, label: 'Ref Line', color: 'red' }} rawData={loading ? undefined : chartData} - dataCallback={identity} legendFormatType='percentage' legend onClick={barClick} @@ -236,7 +232,7 @@ const Application = () => { Composited Chart - @@ -245,7 +241,6 @@ const Application = () => { className='h-72' columns={toggle ? columns : extraColumns} rawData={toggle ? defaultData : anotherDataSet} - dataCallback={identity} searchable sortable exportCsv @@ -260,7 +255,6 @@ const Application = () => { Online Data
@@ -274,7 +268,6 @@ const Application = () => { className='h-72' columns={columns} rawData={defaultData} - dataCallback={identity} searchable > Modal Table diff --git a/src/ChartBar/ChartBar.spec.tsx b/src/ChartBar/ChartBar.spec.tsx index 8e83dab..bdff576 100644 --- a/src/ChartBar/ChartBar.spec.tsx +++ b/src/ChartBar/ChartBar.spec.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { render } from '@testing-library/react'; import { ChartBar, ChartBarSettings } from './index'; -import { identity } from 'uno-js'; describe('ChartBar', () => { const data = [ @@ -12,14 +11,13 @@ describe('ChartBar', () => { const settings: ChartBarSettings<{ name: string, value: number }[]> = { rawData: data, - dataCallback: identity, legendFormatType: 'number', legend: true, refLineY: { value: 50, label: 'Ref Line', color: 'red' }, }; it('renders without crashing', () => { - render(); + render(); }); it('renders the legend', () => { @@ -44,7 +42,7 @@ describe('ChartBar', () => { }); it('renders the no data legend', () => { - const { getByText } = render(); + const { getByText } = render(); expect(getByText('No record found')).toBeInTheDocument(); }); }); \ No newline at end of file diff --git a/src/ChartBar/index.tsx b/src/ChartBar/index.tsx index 975cdde..4c0dbf9 100644 --- a/src/ChartBar/index.tsx +++ b/src/ChartBar/index.tsx @@ -1,4 +1,4 @@ -import React, { ReactElement, useEffect, useState } from 'react'; +import React, { ReactElement, useEffect, useMemo, useState } from 'react'; import { Bar, BarChart, Brush, Cell, ResponsiveContainer, XAxis, YAxis } from 'recharts'; import { Color, Flex } from '@tremor/react'; import { twMerge } from 'tailwind-merge'; @@ -52,6 +52,11 @@ export const ChartBar = ({ refLineY, className, }: ChartBarSettings) => { + const dataTransformFn = useMemo( + () => dataCallback ?? ((data: T) => data as unknown as Record[]), + [dataCallback], + ); + const [legendHeight, setLegendHeight] = useState(60); const [dataStore, setDataStore] = useState[]>([]); const [categoryColors, setCategoryColors] = useState>(new Map()); @@ -75,8 +80,8 @@ export const ChartBar = ({ }, [keys, colors]); useEffect(() => { - setDataStore((dataCallback && rawData && dataCallback(rawData)) || []); - }, [rawData, dataCallback]); + if (rawData) setDataStore(dataTransformFn(rawData)); + }, [rawData, dataTransformFn]); if (!rawData) return ; diff --git a/src/ComposedLineChart/ComposedLineChart.spec.tsx b/src/ComposedLineChart/ComposedLineChart.spec.tsx index 6c768fc..c456b12 100644 --- a/src/ComposedLineChart/ComposedLineChart.spec.tsx +++ b/src/ComposedLineChart/ComposedLineChart.spec.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { render } from '@testing-library/react'; import { ComposedLineChart } from './index'; -import { identity } from 'uno-js'; describe('ComposedLineChart', () => { const data = [ @@ -11,11 +10,11 @@ describe('ComposedLineChart', () => { ]; it('renders without crashing', () => { - render(); + render(); }); it('renders the no data legend', () => { - const { getByText } = render(); + const { getByText } = render(); expect(getByText('No record found')).toBeInTheDocument(); }); }); \ No newline at end of file diff --git a/src/ComposedLineChart/index.tsx b/src/ComposedLineChart/index.tsx index 65a338b..a50daef 100644 --- a/src/ComposedLineChart/index.tsx +++ b/src/ComposedLineChart/index.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { CartesianGrid, ComposedChart, @@ -62,8 +62,12 @@ export const ComposedLineChart = ({ formats, lines, }: ComposedLineChartSettings) => { + const dataTransformFn = useMemo( + () => dataCallback ?? ((data: T) => data as unknown as Record[]), + [dataCallback], + ); const [legendHeight, setLegendHeight] = useState(60); - const dataStore: Record[] = (dataCallback && rawData && dataCallback(rawData)) || []; + const dataStore: Record[] = (rawData && dataTransformFn(rawData)) || []; // eslint-disable-next-line @typescript-eslint/no-explicit-any const tickFormatter = (t: any, orientation: 'left' | 'right') => diff --git a/src/DataChart/index.tsx b/src/DataChart/index.tsx index b67262f..20e462c 100644 --- a/src/DataChart/index.tsx +++ b/src/DataChart/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { CartesianGrid, Line, LineChart, ResponsiveContainer, XAxis, YAxis } from 'recharts'; import { Flex } from '@tremor/react'; import { twMerge } from 'tailwind-merge'; @@ -54,6 +54,10 @@ export const DataChart = ({ refLineY, className, }: DataChartSettings) => { + const dataTransformFn = useMemo( + () => dataCallback ?? ((data: T) => data as unknown as Record[]), + [dataCallback], + ); const [legendHeight, setLegendHeight] = useState(60); const [dataStore, setDataStore] = useState[]>([]); @@ -70,8 +74,8 @@ export const DataChart = ({ }; useEffect(() => { - setDataStore((dataCallback && rawData && dataCallback(rawData)) || []); - }, [rawData, dataCallback]); + setDataStore((rawData && dataTransformFn(rawData)) || []); + }, [rawData, dataTransformFn]); if (!rawData) return ; diff --git a/src/PieChart/PieChart.spec.tsx b/src/PieChart/PieChart.spec.tsx index 9527e5f..f4505bb 100644 --- a/src/PieChart/PieChart.spec.tsx +++ b/src/PieChart/PieChart.spec.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { render } from '@testing-library/react'; import { PieChart } from './index'; -import { identity } from 'uno-js'; describe('PieChart', () => { beforeEach(() => { @@ -19,7 +18,7 @@ describe('PieChart', () => { ]; it('renders a pie chart with the correct number of slices', () => { - const { container } = render(); + const { container } = render(); const slices = container.querySelectorAll('.recharts-pie-sector'); expect(slices.length).toBe(dataStore.length); @@ -35,7 +34,7 @@ describe('PieChart', () => { }); it('renders the no data legend', () => { - const { getByText } = render(); + const { getByText } = render(); expect(getByText('No record found')).toBeInTheDocument(); }); }); diff --git a/src/PieChart/index.tsx b/src/PieChart/index.tsx index 68672c5..9b89e0d 100644 --- a/src/PieChart/index.tsx +++ b/src/PieChart/index.tsx @@ -1,5 +1,5 @@ import objectHash from 'object-hash'; -import React from 'react'; +import React, { useMemo } from 'react'; import { Cell, Pie, PieChart as PieChartRechart, ResponsiveContainer, Tooltip } from 'recharts'; import { constructCategoryColors } from '@tremor/react/dist/components/chart-elements/common/utils'; import { colorPalette, themeColorRange } from '@tremor/react/dist/lib/theme'; @@ -18,7 +18,11 @@ export const PieChart = ({ className, colors = themeColorRange, }: ChartComponent) => { - const dataStore: ChartData[] = (dataCallback && rawData && dataCallback(rawData)) || []; + const dataTransformFn = useMemo( + () => dataCallback ?? ((data: T) => data as unknown as ChartData[]), + [dataCallback], + ); + const dataStore: ChartData[] = (rawData && dataTransformFn(rawData)) || []; const categoryColors = constructCategoryColors( dataStore.map((x) => x.name), colors, diff --git a/src/Table/Table.spec.tsx b/src/Table/Table.spec.tsx index bea9704..5c22510 100644 --- a/src/Table/Table.spec.tsx +++ b/src/Table/Table.spec.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { getAlignment, getColumnSorting, renderTableCell, Table, TableCellTypes, TableColumn } from './index'; import { render } from '@testing-library/react'; -import { identity } from 'uno-js'; describe('getAlignment', () => { it('returns text-left for paragraph data type', () => { @@ -123,7 +122,7 @@ describe('Table', () => { ]; it('renders without crashing', () => { - render(); + render(
); }); it('renders with shimmer', () => { @@ -135,20 +134,20 @@ describe('Table', () => { }); it('renders the correct number of rows', () => { - const { container } = render(
); + const { container } = render(
); const rows = container.querySelectorAll('tbody .tremor-TableRow-row'); expect(rows.length).toBe(tableData.length); }); it('renders the correct number of headers', () => { - const { container } = render(
); + const { container } = render(
); const headers = container.querySelectorAll('.tremor-TableHeaderCell-root'); expect(headers.length).toBe(tableColumns.length); }); it('renders the correct number of footer', () => { - const { container } = render(
Array.from({ length: tableColumns.length }).map(() => '')} />); + const { container } = render(
Array.from({ length: tableColumns.length }).map(() => '')} />); const headers = container.querySelectorAll('.tremor-TableFooterCell-root'); expect(headers.length).toBe(tableColumns.length); }); diff --git a/src/Table/index.tsx b/src/Table/index.tsx index f7f3a57..100eb4b 100644 --- a/src/Table/index.tsx +++ b/src/Table/index.tsx @@ -1,4 +1,4 @@ -import React, { PropsWithChildren, startTransition, useEffect, useState } from 'react'; +import React, { PropsWithChildren, startTransition, useEffect, useMemo, useState } from 'react'; import { renderToString } from 'react-dom/server'; import tw from 'tailwind-styled-components'; import { createCsv, formatter, FormatTypes } from 'uno-js'; @@ -289,6 +289,13 @@ const SpanTable = ({ colSpan, children }: PropsWithChildren<{ colSpan: number }> ); +const defaultTranform = (data: TDataIn) => { + if (data instanceof Array && data[0] instanceof Object) + return data.map((x) => Object.values(x as Record) as unknown as TableCellTypes[]); + + return data as unknown as TableCellTypes[][]; +}; + export const Table = ({ columns, noDataElement, @@ -302,6 +309,7 @@ export const Table = ({ dataCallback, className = '', }: PropsWithChildren>) => { + const dataTransformFn = useMemo(() => dataCallback ?? defaultTranform, [dataCallback]); const [rawDataState, setRawDataState] = useState(); const [definitions, setDefinitions] = useState(columns); const [data, setData] = useState([]); @@ -328,13 +336,13 @@ export const Table = ({ startTransition(() => { setRawDataState(rawData); - const raw = dataCallback(rawData); + const raw = dataTransformFn(rawData); setData(raw); setSearched(raw); setSearch(''); if (calculateFooter) setFooterData(calculateFooter(rawData)); }); - }, [rawData, dataCallback, calculateFooter]); + }, [rawData, dataTransformFn, calculateFooter]); useEffect(() => setDefinitions(columns), [columns]); diff --git a/src/constants.ts b/src/constants.ts index 3528b2d..e4cb305 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -32,7 +32,7 @@ export type ClassNameComponent = { export type DataComponent = { rawData: TDataIn | undefined; - dataCallback: (data: TDataIn) => TDataOut; + dataCallback?: (data: TDataIn) => TDataOut; }; export type ChartComponent = DataComponent & diff --git a/tsconfig.json b/tsconfig.json index e3ee3e2..5f40ea7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,6 @@ "outDir": "./dist" }, "include": ["src/**/*.ts*"], - "exclude": ["sample/**/*.*", "node_modules", "src/**/*.test.ts", "src/**/*.spec.tsx"], + "exclude": ["sample/**/*.*", "node_modules", "src/**/*.test.ts", "src/**/*.spec.tsx", "src/__mocks__/**/*.*"], "types": ["node"] }