refactor: Update Pagination Logic in Playground

This commit is contained in:
Rajarshee Chatterjee
2026-01-10 11:27:35 +05:30
parent f8da77a903
commit 0064125421
3 changed files with 177 additions and 199 deletions
+6 -38
View File
@@ -284,7 +284,6 @@
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.5.tgz", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.5.tgz",
"integrity": "sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==", "integrity": "sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5", "@emotion/babel-plugin": "^11.13.5",
@@ -328,7 +327,6 @@
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.5.tgz", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.5.tgz",
"integrity": "sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==", "integrity": "sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5", "@emotion/babel-plugin": "^11.13.5",
@@ -1070,7 +1068,6 @@
"resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz", "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz",
"integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==", "integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.26.0", "@babel/runtime": "^7.26.0",
"@mui/core-downloads-tracker": "^6.1.9", "@mui/core-downloads-tracker": "^6.1.9",
@@ -3006,7 +3003,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.66.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.66.tgz",
"integrity": "sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==", "integrity": "sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==",
"devOptional": true, "devOptional": true,
"peer": true,
"dependencies": { "dependencies": {
"@types/prop-types": "*", "@types/prop-types": "*",
"@types/scheduler": "*", "@types/scheduler": "*",
@@ -3018,7 +3014,6 @@
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz",
"integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==",
"devOptional": true, "devOptional": true,
"peer": true,
"dependencies": { "dependencies": {
"@types/react": "*" "@types/react": "*"
} }
@@ -3091,7 +3086,6 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz",
"integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "7.14.1", "@typescript-eslint/scope-manager": "7.14.1",
"@typescript-eslint/types": "7.14.1", "@typescript-eslint/types": "7.14.1",
@@ -3307,7 +3301,6 @@
"version": "8.12.0", "version": "8.12.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
"integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
"peer": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@@ -4966,7 +4959,6 @@
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
@@ -7628,7 +7620,6 @@
"version": "18.3.1", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"peer": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0" "loose-envify": "^1.1.0"
}, },
@@ -7640,7 +7631,6 @@
"version": "18.3.1", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"peer": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0", "loose-envify": "^1.1.0",
"scheduler": "^0.23.2" "scheduler": "^0.23.2"
@@ -7660,7 +7650,6 @@
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
"integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@types/use-sync-external-store": "^0.0.3", "@types/use-sync-external-store": "^0.0.3",
"use-sync-external-store": "^1.0.0" "use-sync-external-store": "^1.0.0"
@@ -7813,8 +7802,7 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
"dev": true, "dev": true
"peer": true
}, },
"node_modules/redux-thunk": { "node_modules/redux-thunk": {
"version": "3.1.0", "version": "3.1.0",
@@ -8638,7 +8626,6 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
@@ -8710,7 +8697,6 @@
"version": "5.7.2", "version": "5.7.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
"peer": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@@ -8899,7 +8885,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
"integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"esbuild": "^0.25.0", "esbuild": "^0.25.0",
"fdir": "^6.4.4", "fdir": "^6.4.4",
@@ -9005,7 +8990,6 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
@@ -9400,7 +9384,6 @@
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.5.tgz", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.5.tgz",
"integrity": "sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==", "integrity": "sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5", "@emotion/babel-plugin": "^11.13.5",
@@ -9436,7 +9419,6 @@
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.5.tgz", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.5.tgz",
"integrity": "sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==", "integrity": "sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5", "@emotion/babel-plugin": "^11.13.5",
@@ -9825,7 +9807,6 @@
"resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz", "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz",
"integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==", "integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@babel/runtime": "^7.26.0", "@babel/runtime": "^7.26.0",
"@mui/core-downloads-tracker": "^6.1.9", "@mui/core-downloads-tracker": "^6.1.9",
@@ -10804,7 +10785,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.66.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.66.tgz",
"integrity": "sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==", "integrity": "sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==",
"devOptional": true, "devOptional": true,
"peer": true,
"requires": { "requires": {
"@types/prop-types": "*", "@types/prop-types": "*",
"@types/scheduler": "*", "@types/scheduler": "*",
@@ -10816,7 +10796,6 @@
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz",
"integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==",
"devOptional": true, "devOptional": true,
"peer": true,
"requires": { "requires": {
"@types/react": "*" "@types/react": "*"
} }
@@ -10873,7 +10852,6 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz",
"integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@typescript-eslint/scope-manager": "7.14.1", "@typescript-eslint/scope-manager": "7.14.1",
"@typescript-eslint/types": "7.14.1", "@typescript-eslint/types": "7.14.1",
@@ -11002,8 +10980,7 @@
"acorn": { "acorn": {
"version": "8.12.0", "version": "8.12.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
"integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw=="
"peer": true
}, },
"acorn-jsx": { "acorn-jsx": {
"version": "5.3.2", "version": "5.3.2",
@@ -12204,7 +12181,6 @@
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
@@ -13989,7 +13965,6 @@
"version": "18.3.1", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"peer": true,
"requires": { "requires": {
"loose-envify": "^1.1.0" "loose-envify": "^1.1.0"
} }
@@ -13998,7 +13973,6 @@
"version": "18.3.1", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"peer": true,
"requires": { "requires": {
"loose-envify": "^1.1.0", "loose-envify": "^1.1.0",
"scheduler": "^0.23.2" "scheduler": "^0.23.2"
@@ -14015,7 +13989,6 @@
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
"integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@types/use-sync-external-store": "^0.0.3", "@types/use-sync-external-store": "^0.0.3",
"use-sync-external-store": "^1.0.0" "use-sync-external-store": "^1.0.0"
@@ -14095,8 +14068,7 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
"dev": true, "dev": true
"peer": true
}, },
"redux-thunk": { "redux-thunk": {
"version": "3.1.0", "version": "3.1.0",
@@ -14665,8 +14637,7 @@
"picomatch": { "picomatch": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
"peer": true
} }
} }
}, },
@@ -14715,8 +14686,7 @@
"typescript": { "typescript": {
"version": "5.7.2", "version": "5.7.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg=="
"peer": true
}, },
"typescript-eslint": { "typescript-eslint": {
"version": "7.14.1", "version": "7.14.1",
@@ -14839,7 +14809,6 @@
"version": "6.3.5", "version": "6.3.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
"integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
"peer": true,
"requires": { "requires": {
"esbuild": "^0.25.0", "esbuild": "^0.25.0",
"fdir": "^6.4.4", "fdir": "^6.4.4",
@@ -14859,8 +14828,7 @@
"picomatch": { "picomatch": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
"peer": true
} }
} }
}, },
+140 -132
View File
@@ -114,138 +114,142 @@ import p_111 from '@plugins/english/ZetroTranslation[madara]';
import p_112 from '@plugins/english/ao3'; import p_112 from '@plugins/english/ao3';
import p_113 from '@plugins/english/bestlightnovel'; import p_113 from '@plugins/english/bestlightnovel';
import p_114 from '@plugins/english/chrysanthemumgarden'; import p_114 from '@plugins/english/chrysanthemumgarden';
import p_115 from '@plugins/english/divinedaolibrary'; import p_115 from '@plugins/english/crimsonscrolls';
import p_116 from '@plugins/english/dreambigtl'; import p_116 from '@plugins/english/divinedaolibrary';
import p_117 from '@plugins/english/earlynovel'; import p_117 from '@plugins/english/dreambigtl';
import p_118 from '@plugins/english/faqwikius'; import p_118 from '@plugins/english/earlynovel';
import p_119 from '@plugins/english/fenrirrealm'; import p_119 from '@plugins/english/faqwikius';
import p_120 from '@plugins/english/fictionzone'; import p_120 from '@plugins/english/fenrirrealm';
import p_121 from '@plugins/english/foxteller'; import p_121 from '@plugins/english/fictionzone';
import p_122 from '@plugins/english/genesis'; import p_122 from '@plugins/english/foxteller';
import p_123 from '@plugins/english/inkitt'; import p_123 from '@plugins/english/genesis';
import p_124 from '@plugins/english/kdtnovels'; import p_124 from '@plugins/english/inkitt';
import p_125 from '@plugins/english/lightnovelpub'; import p_125 from '@plugins/english/kdtnovels';
import p_126 from '@plugins/english/lightnoveltranslation'; import p_126 from '@plugins/english/leafstudio';
import p_127 from '@plugins/english/lnmtl'; import p_127 from '@plugins/english/lightnovelpub';
import p_128 from '@plugins/english/mtlreader'; import p_128 from '@plugins/english/lightnoveltranslation';
import p_129 from '@plugins/english/mvlempyr'; import p_129 from '@plugins/english/lnmtl';
import p_130 from '@plugins/english/novelbuddy'; import p_130 from '@plugins/english/mtlreader';
import p_131 from '@plugins/english/novelfire'; import p_131 from '@plugins/english/mvlempyr';
import p_132 from '@plugins/english/novelhall'; import p_132 from '@plugins/english/novelbuddy';
import p_133 from '@plugins/english/novelight'; import p_133 from '@plugins/english/novelfire.paged';
import p_134 from '@plugins/english/novelupdates'; import p_134 from '@plugins/english/novelfire';
import p_135 from '@plugins/english/pawread'; import p_135 from '@plugins/english/novelhall';
import p_136 from '@plugins/english/rainofsnow'; import p_136 from '@plugins/english/novelight';
import p_137 from '@plugins/english/readfrom'; import p_137 from '@plugins/english/novelupdates';
import p_138 from '@plugins/english/readlitenovel'; import p_138 from '@plugins/english/pawread';
import p_139 from '@plugins/english/reaperscans'; import p_139 from '@plugins/english/rainofsnow';
import p_140 from '@plugins/english/relibrary'; import p_140 from '@plugins/english/readfrom';
import p_141 from '@plugins/english/royalroad'; import p_141 from '@plugins/english/readlitenovel';
import p_142 from '@plugins/english/scribblehub'; import p_142 from '@plugins/english/reaperscans';
import p_143 from '@plugins/english/vynovel'; import p_143 from '@plugins/english/relibrary';
import p_144 from '@plugins/english/webnovel'; import p_144 from '@plugins/english/royalroad';
import p_145 from '@plugins/english/wtrlab'; import p_145 from '@plugins/english/scribblehub';
import p_146 from '@plugins/english/wuxiaworld'; import p_146 from '@plugins/english/vynovel';
import p_147 from '@plugins/french/LighNovelFR[lightnovelwp]'; import p_147 from '@plugins/english/webnovel';
import p_148 from '@plugins/french/MTLNovel(FR)[mtlnovel]'; import p_148 from '@plugins/english/wtrlab';
import p_149 from '@plugins/french/MassNovel[madara]'; import p_149 from '@plugins/english/wuxiaworld';
import p_150 from '@plugins/french/WorldNovel[madara]'; import p_150 from '@plugins/french/LighNovelFR[lightnovelwp]';
import p_151 from '@plugins/french/chireads'; import p_151 from '@plugins/french/MTLNovel(FR)[mtlnovel]';
import p_152 from '@plugins/french/harkeneliwood'; import p_152 from '@plugins/french/MassNovel[madara]';
import p_153 from '@plugins/french/kisswood'; import p_153 from '@plugins/french/WorldNovel[madara]';
import p_154 from '@plugins/french/noveldeglace'; import p_154 from '@plugins/french/chireads';
import p_155 from '@plugins/french/novhell'; import p_155 from '@plugins/french/harkeneliwood';
import p_156 from '@plugins/french/phenixscans'; import p_156 from '@plugins/french/kisswood';
import p_157 from '@plugins/french/warriorlegendtrad'; import p_157 from '@plugins/french/noveldeglace';
import p_158 from '@plugins/french/wuxialnscantrad'; import p_158 from '@plugins/french/novhell';
import p_159 from '@plugins/french/xiaowaz'; import p_159 from '@plugins/french/phenixscans';
import p_160 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]'; import p_160 from '@plugins/french/warriorlegendtrad';
import p_161 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]'; import p_161 from '@plugins/french/wuxialnscantrad';
import p_162 from '@plugins/indonesian/MeioNovel[madara]'; import p_162 from '@plugins/french/xiaowaz';
import p_163 from '@plugins/indonesian/NovelBookID[madara]'; import p_163 from '@plugins/indonesian/BacaLightNovel[lightnovelwp]';
import p_164 from '@plugins/indonesian/Risenovel[madara]'; import p_164 from '@plugins/indonesian/MTLNovel(ID)[mtlnovel]';
import p_165 from '@plugins/indonesian/SekteNovel[lightnovelwp]'; import p_165 from '@plugins/indonesian/MeioNovel[madara]';
import p_166 from '@plugins/indonesian/WBNovel[madara]'; import p_166 from '@plugins/indonesian/NovelBookID[madara]';
import p_167 from '@plugins/indonesian/indowebnovel'; import p_167 from '@plugins/indonesian/Risenovel[madara]';
import p_168 from '@plugins/indonesian/novelringan'; import p_168 from '@plugins/indonesian/SekteNovel[lightnovelwp]';
import p_169 from '@plugins/indonesian/sakuranovel'; import p_169 from '@plugins/indonesian/Vanovel[madara]';
import p_170 from '@plugins/japanese/Syosetu'; import p_170 from '@plugins/indonesian/WBNovel[madara]';
import p_171 from '@plugins/japanese/kakuyomu'; import p_171 from '@plugins/indonesian/indowebnovel';
import p_172 from '@plugins/korean/Agitoon'; import p_172 from '@plugins/indonesian/novelringan';
import p_173 from '@plugins/korean/FortuneEternal[madara]'; import p_173 from '@plugins/indonesian/sakuranovel';
import p_174 from '@plugins/multi/komga'; import p_174 from '@plugins/japanese/Syosetu';
import p_175 from '@plugins/polish/novelki'; import p_175 from '@plugins/japanese/kakuyomu';
import p_176 from '@plugins/portuguese/BetterNovels[lightnovelwp]'; import p_176 from '@plugins/korean/Agitoon';
import p_177 from '@plugins/portuguese/CentralNovel[lightnovelwp]'; import p_177 from '@plugins/korean/FortuneEternal[madara]';
import p_178 from '@plugins/portuguese/Kiniga[madara]'; import p_178 from '@plugins/multi/komga';
import p_179 from '@plugins/portuguese/LaNovels[hotnovelpub]'; import p_179 from '@plugins/polish/novelki';
import p_180 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]'; import p_180 from '@plugins/portuguese/BetterNovels[lightnovelwp]';
import p_181 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]'; import p_181 from '@plugins/portuguese/CentralNovel[lightnovelwp]';
import p_182 from '@plugins/portuguese/blogdoamonnovels'; import p_182 from '@plugins/portuguese/Kiniga[madara]';
import p_183 from '@plugins/portuguese/novelmania'; import p_183 from '@plugins/portuguese/LaNovels[hotnovelpub]';
import p_184 from '@plugins/portuguese/tsundoku'; import p_184 from '@plugins/portuguese/LightNovelBrasil[lightnovelwp]';
import p_185 from '@plugins/russian/Bookhamster[ifreedom]'; import p_185 from '@plugins/portuguese/MTLNovel(PT)[mtlnovel]';
import p_186 from '@plugins/russian/Erolate[rulate]'; import p_186 from '@plugins/portuguese/blogdoamonnovels';
import p_187 from '@plugins/russian/EzNovels[hotnovelpub]'; import p_187 from '@plugins/portuguese/novelmania';
import p_188 from '@plugins/russian/LitSpace'; import p_188 from '@plugins/portuguese/tsundoku';
import p_189 from '@plugins/russian/MTLNovel(RU)[mtlnovel]'; import p_189 from '@plugins/russian/Bookhamster[ifreedom]';
import p_190 from '@plugins/russian/NovelCool(RU)[novelcool]'; import p_190 from '@plugins/russian/Erolate[rulate]';
import p_191 from '@plugins/russian/Ranobes(RU)[ranobes]'; import p_191 from '@plugins/russian/EzNovels[hotnovelpub]';
import p_192 from '@plugins/russian/Rulate[rulate]'; import p_192 from '@plugins/russian/LitSpace';
import p_193 from '@plugins/russian/authortoday'; import p_193 from '@plugins/russian/MTLNovel(RU)[mtlnovel]';
import p_194 from '@plugins/russian/bookriver'; import p_194 from '@plugins/russian/NovelCool(RU)[novelcool]';
import p_195 from '@plugins/russian/ficbook'; import p_195 from '@plugins/russian/Ranobes(RU)[ranobes]';
import p_196 from '@plugins/russian/jaomix'; import p_196 from '@plugins/russian/Rulate[rulate]';
import p_197 from '@plugins/russian/neobook'; import p_197 from '@plugins/russian/authortoday';
import p_198 from '@plugins/russian/novelOvh'; import p_198 from '@plugins/russian/bookriver';
import p_199 from '@plugins/russian/novelTL'; import p_199 from '@plugins/russian/ficbook';
import p_200 from '@plugins/russian/ranobehub'; import p_200 from '@plugins/russian/jaomix';
import p_201 from '@plugins/russian/ranobelib'; import p_201 from '@plugins/russian/neobook';
import p_202 from '@plugins/russian/ranoberf'; import p_202 from '@plugins/russian/novelOvh';
import p_203 from '@plugins/russian/renovels'; import p_203 from '@plugins/russian/novelTL';
import p_204 from '@plugins/russian/ruvers'; import p_204 from '@plugins/russian/ranobehub';
import p_205 from '@plugins/russian/topliba'; import p_205 from '@plugins/russian/ranobelib';
import p_206 from '@plugins/russian/zelluloza'; import p_206 from '@plugins/russian/ranoberf';
import p_207 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]'; import p_207 from '@plugins/russian/renovels';
import p_208 from '@plugins/spanish/AllNovelRead[lightnovelwp]'; import p_208 from '@plugins/russian/ruvers';
import p_209 from '@plugins/spanish/AnimesHoy12[madara]'; import p_209 from '@plugins/russian/topliba';
import p_210 from '@plugins/spanish/LightNovelDaily[hotnovelpub]'; import p_210 from '@plugins/russian/zelluloza';
import p_211 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]'; import p_211 from '@plugins/russian/СвободныйМирРанобэ[ifreedom]';
import p_212 from '@plugins/spanish/PanchoTranslations[madara]'; import p_212 from '@plugins/spanish/AllNovelRead[lightnovelwp]';
import p_213 from '@plugins/spanish/TC&Sega[lightnovelwp]'; import p_213 from '@plugins/spanish/AnimesHoy12[madara]';
import p_214 from '@plugins/spanish/TraduccionesAmistosas[madara]'; import p_214 from '@plugins/spanish/LightNovelDaily[hotnovelpub]';
import p_215 from '@plugins/spanish/hasutl'; import p_215 from '@plugins/spanish/MTLNovel(ES)[mtlnovel]';
import p_216 from '@plugins/spanish/novelasligera'; import p_216 from '@plugins/spanish/PanchoTranslations[madara]';
import p_217 from '@plugins/spanish/novelawuxia'; import p_217 from '@plugins/spanish/TC&Sega[lightnovelwp]';
import p_218 from '@plugins/spanish/oasistranslations'; import p_218 from '@plugins/spanish/TraduccionesAmistosas[madara]';
import p_219 from '@plugins/spanish/skynovels'; import p_219 from '@plugins/spanish/hasutl';
import p_220 from '@plugins/spanish/tunovelaligera'; import p_220 from '@plugins/spanish/novelasligera';
import p_221 from '@plugins/spanish/yukitls'; import p_221 from '@plugins/spanish/novelawuxia';
import p_222 from '@plugins/thai/NovelLucky[madara]'; import p_222 from '@plugins/spanish/oasistranslations';
import p_223 from '@plugins/thai/NovelPDF[madara]'; import p_223 from '@plugins/spanish/skynovels';
import p_224 from '@plugins/turkish/ArazNovel[madara]'; import p_224 from '@plugins/spanish/tunovelaligera';
import p_225 from '@plugins/turkish/EKTAPLAR[madara]'; import p_225 from '@plugins/spanish/yukitls';
import p_226 from '@plugins/turkish/KodeksLibrary[lightnovelwp]'; import p_226 from '@plugins/thai/NovelLucky[madara]';
import p_227 from '@plugins/turkish/MangaTR'; import p_227 from '@plugins/thai/NovelPDF[madara]';
import p_228 from '@plugins/turkish/NABSCANS[madara]'; import p_228 from '@plugins/turkish/ArazNovel[madara]';
import p_229 from '@plugins/turkish/Namevt[lightnovelwp]'; import p_229 from '@plugins/turkish/EKTAPLAR[madara]';
import p_230 from '@plugins/turkish/NovelTR[lightnovelwp]'; import p_230 from '@plugins/turkish/KodeksLibrary[lightnovelwp]';
import p_231 from '@plugins/turkish/Noveloku[madara]'; import p_231 from '@plugins/turkish/MangaTR';
import p_232 from '@plugins/turkish/RagnarScans[madara]'; import p_232 from '@plugins/turkish/NABSCANS[madara]';
import p_233 from '@plugins/turkish/ThNovels[hotnovelpub]'; import p_233 from '@plugins/turkish/Namevt[lightnovelwp]';
import p_234 from '@plugins/turkish/TurkceLightNovels[madara]'; import p_234 from '@plugins/turkish/NovelTR[lightnovelwp]';
import p_235 from '@plugins/turkish/WebNovelOku[madara]'; import p_235 from '@plugins/turkish/Noveloku[madara]';
import p_236 from '@plugins/turkish/epiknovel'; import p_236 from '@plugins/turkish/RagnarScans[madara]';
import p_237 from '@plugins/turkish/kakikata[madara]'; import p_237 from '@plugins/turkish/ThNovels[hotnovelpub]';
import p_238 from '@plugins/ukrainian/bakainua'; import p_238 from '@plugins/turkish/TurkceLightNovels[madara]';
import p_239 from '@plugins/ukrainian/smakolykytl'; import p_239 from '@plugins/turkish/WebNovelOku[madara]';
import p_240 from '@plugins/ukrainian/uaranobeclub'; import p_240 from '@plugins/turkish/epiknovel';
import p_241 from '@plugins/vietnamese/LNHako'; import p_241 from '@plugins/turkish/kakikata[madara]';
import p_242 from '@plugins/vietnamese/Truyenconect'; import p_242 from '@plugins/ukrainian/bakainua';
import p_243 from '@plugins/vietnamese/lightnovelvn'; import p_243 from '@plugins/ukrainian/smakolykytl';
import p_244 from '@plugins/vietnamese/nettruyen'; import p_244 from '@plugins/ukrainian/uaranobeclub';
import p_245 from '@plugins/vietnamese/truyenchu'; import p_245 from '@plugins/vietnamese/LNHako';
import p_246 from '@plugins/vietnamese/truyenfull'; import p_246 from '@plugins/vietnamese/Truyenconect';
import p_247 from '@plugins/vietnamese/lightnovelvn';
import p_248 from '@plugins/vietnamese/nettruyen';
import p_249 from '@plugins/vietnamese/truyenchu';
import p_250 from '@plugins/vietnamese/truyenfull';
const PLUGINS: Plugin.PluginBase[] = [ const PLUGINS: Plugin.PluginBase[] = [
p_0, p_0,
@@ -495,5 +499,9 @@ const PLUGINS: Plugin.PluginBase[] = [
p_244, p_244,
p_245, p_245,
p_246, p_246,
p_247,
p_248,
p_249,
p_250,
]; ];
export default PLUGINS; export default PLUGINS;
+31 -29
View File
@@ -409,43 +409,45 @@ export default function ParseNovelSection({
<h4 className="font-semibold text-foreground"> <h4 className="font-semibold text-foreground">
Chapters ({chapters.length}) Chapters ({chapters.length})
</h4> </h4>
{sourceNovel.totalPages && sourceNovel.totalPages > 1 && ( {sourceNovel.totalPages && (
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
{sourceNovel.totalPages > 1 && (
<>
<Button
variant="outline"
size="sm"
onClick={() => fetchPage(currentPage - 1)}
disabled={currentPage === 1 || loading}
>
<ChevronLeft className="w-4 h-4" />
Previous
</Button>
<span className="text-sm text-muted-foreground">
Page {currentPage} of {sourceNovel.totalPages}
</span>
<Button
variant="outline"
size="sm"
onClick={() => fetchPage(currentPage + 1)}
disabled={
currentPage === sourceNovel.totalPages || loading
}
>
Next
<ChevronRight className="w-4 h-4" />
</Button>
</>
)}
<Button <Button
variant="outline" variant="outline"
size="sm" size="sm"
onClick={() => fetchPage(currentPage - 1)} onClick={() => fetchPage(currentPage || 1)}
disabled={currentPage === 1 || loading} disabled={loading}
> >
<ChevronLeft className="w-4 h-4" /> {loading ? 'Fetching...' : 'Fetch Page'}
Previous
</Button>
<span className="text-sm text-muted-foreground">
Page {currentPage} of {sourceNovel.totalPages}
</span>
<Button
variant="outline"
size="sm"
onClick={() => fetchPage(currentPage + 1)}
disabled={
currentPage === sourceNovel.totalPages || loading
}
>
Next
<ChevronRight className="w-4 h-4" />
</Button> </Button>
</div> </div>
)} )}
{sourceNovel.totalPages && (
<Button
variant="outline"
size="sm"
onClick={() => fetchPage(currentPage)}
disabled={!currentPage || loading}
>
{loading ? 'Fetching...' : 'Chapter Fetch'}
</Button>
)}
</div> </div>
<div className="overflow-x-auto border border-border rounded-lg"> <div className="overflow-x-auto border border-border rounded-lg">
<table className="w-full text-sm"> <table className="w-full text-sm">