diff --git a/package-lock.json b/package-lock.json index 5df1e12..0983997 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@react-pdf/renderer": "^4.3.0", "@tailwindcss/vite": "^4.1.11", "framer": "^2.4.1", + "framer-motion": "^12.23.12", "lottie-react": "^2.4.1", "lucide-react": "^0.525.0", "motion": "^12.23.9", @@ -338,25 +339,6 @@ "node": ">=6.9.0" } }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emotion/memoize": "0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.8", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", @@ -364,6 +346,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -380,6 +363,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -396,6 +380,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -412,6 +397,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -428,6 +414,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -444,6 +431,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -460,6 +448,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -476,6 +465,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -492,6 +482,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -508,6 +499,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -524,6 +516,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -540,6 +533,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -556,6 +550,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -572,6 +567,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -588,6 +584,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -604,6 +601,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -620,6 +618,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -636,6 +635,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -652,6 +652,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -668,6 +669,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -684,6 +686,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -700,6 +703,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -716,6 +720,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -732,6 +737,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -748,6 +754,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -764,6 +771,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1228,6 +1236,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1241,6 +1250,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1254,6 +1264,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1267,6 +1278,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1280,6 +1292,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1293,6 +1306,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1306,6 +1320,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1319,6 +1334,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1332,6 +1348,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1345,6 +1362,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1358,6 +1376,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1371,6 +1390,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1384,6 +1404,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1397,6 +1418,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1410,6 +1432,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1423,6 +1446,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1436,6 +1460,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1449,6 +1474,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1462,6 +1488,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1475,6 +1502,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1855,6 +1883,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -2293,6 +2322,7 @@ "version": "0.25.8", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -2570,6 +2600,7 @@ "version": "6.4.6", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -2674,22 +2705,24 @@ } }, "node_modules/framer-motion": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz", - "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==", + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz", + "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==", "license": "MIT", - "peer": true, "dependencies": { + "motion-dom": "^12.23.12", + "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, - "optionalDependencies": { - "@emotion/is-prop-valid": "^0.8.2" - }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, "react": { "optional": true }, @@ -2702,6 +2735,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3413,9 +3447,9 @@ } }, "node_modules/motion-dom": { - "version": "12.23.9", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.9.tgz", - "integrity": "sha512-6Sv++iWS8XMFCgU1qwKj9l4xuC47Hp4+2jvPfyTXkqDg2tTzSgX6nWKD4kNFXk0k7llO59LZTPuJigza4A2K1A==", + "version": "12.23.12", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz", + "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==", "license": "MIT", "dependencies": { "motion-utils": "^12.23.6" @@ -3427,33 +3461,6 @@ "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", "license": "MIT" }, - "node_modules/motion/node_modules/framer-motion": { - "version": "12.23.9", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.9.tgz", - "integrity": "sha512-TqEHXj8LWfQSKqfdr5Y4mYltYLw96deu6/K9kGDd+ysqRJPNwF9nb5mZcrLmybHbU7gcJ+HQar41U3UTGanbbQ==", - "license": "MIT", - "dependencies": { - "motion-dom": "^12.23.9", - "motion-utils": "^12.23.6", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3465,6 +3472,7 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -3610,12 +3618,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3628,6 +3638,7 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3841,6 +3852,7 @@ "version": "4.45.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -4074,6 +4086,7 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.4.4", @@ -4182,6 +4195,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", diff --git a/package.json b/package.json index 87671d1..0f7ec73 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@react-pdf/renderer": "^4.3.0", "@tailwindcss/vite": "^4.1.11", "framer": "^2.4.1", + "framer-motion": "^12.23.12", "lottie-react": "^2.4.1", "lucide-react": "^0.525.0", "motion": "^12.23.9", diff --git a/src/components/BudgetGoals.jsx b/src/components/BudgetGoals.jsx index 5aba898..166b948 100644 --- a/src/components/BudgetGoals.jsx +++ b/src/components/BudgetGoals.jsx @@ -1,19 +1,68 @@ -import React from "react"; -import { Link } from "react-router-dom"; +import React, { useState, useEffect } from "react"; +import Footer from "./Footer"; // Ensure the path to Footer is correct +// Loader Component +const Loader = () => ( +
+
+

Loading...

+
+); + +// BudgetGoals Component const BudgetGoals = () => { + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + // Simulate a loading delay, like fetching data or loading resources + setTimeout(() => { + setIsLoading(false); // Turn off loading after 3 seconds (can be adjusted) + }, 3000); // Adjust this time as needed (currently set to 3 seconds) + }, []); + return ( -
- Budget Goals Page Coming Soon ..... -
- - ) +
+
+ {isLoading ? ( + // Show loader while loading + ) : ( + "Budget Goals Page Coming Soon ....." // Main content after loading + )} +
+ + {/* Footer positioned at the bottom */} +
+ ); }; -export default BudgetGoals; \ No newline at end of file +export default BudgetGoals; diff --git a/src/components/SmartAnalytics.jsx b/src/components/SmartAnalytics.jsx index 6016dd4..715f8ec 100644 --- a/src/components/SmartAnalytics.jsx +++ b/src/components/SmartAnalytics.jsx @@ -1,19 +1,68 @@ -import React from "react"; -import { Link } from "react-router-dom"; +import React, { useState, useEffect } from "react"; +import Footer from "./Footer"; // Ensure the path to Footer is correct +// Loader Component +const Loader = () => ( +
+
+

Loading...

+
+); + +// SmartAnalytics Component const SmartAnalytics = () => { + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + // Simulate a loading delay, like fetching data or loading resources + setTimeout(() => { + setIsLoading(false); // Turn off loading after 3 seconds (can be adjusted) + }, 3000); // Adjust this time as needed (currently set to 3 seconds) + }, []); + return ( -
- Smart Analytics Page Coming Soon ..... -
- - ) +
+
+ {isLoading ? ( + // Show loader while loading + ) : ( + "Smart Analytics Page Coming Soon ....." // Main content after loading + )} +
+ + {/* Footer positioned at the bottom */} +
+ ); }; -export default SmartAnalytics; \ No newline at end of file +export default SmartAnalytics; diff --git a/src/components/TrackExpenses.jsx b/src/components/TrackExpenses.jsx index 58fc04e..18e6222 100644 --- a/src/components/TrackExpenses.jsx +++ b/src/components/TrackExpenses.jsx @@ -1,20 +1,69 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; import { Link } from "react-router-dom"; +import Footer from "./Footer"; // Ensure this path is correct +// Loader Component +const Loader = () => ( +
+
+

Loading...

+
+); + +// TrackExpenses Component const TrackExpenses = () => { + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + // Simulate a loading delay, like fetching data or loading resources + setTimeout(() => { + setIsLoading(false); // Turn off loading after 3 seconds (can be adjusted) + }, 3000); // Adjust this time as needed (currently set to 3 seconds) + }, []); + return ( -
- Track Expenses Page Coming Soon ..... -
+
+
+ {isLoading ? ( + + ) : ( + "Track Expenses Page Coming Soon ....." + )} +
- - ) + {/* Footer positioned at the bottom */} +
+ ); }; -export default TrackExpenses; \ No newline at end of file +export default TrackExpenses; diff --git a/src/components/VisualReports.jsx b/src/components/VisualReports.jsx index 74a77a0..1d23367 100644 --- a/src/components/VisualReports.jsx +++ b/src/components/VisualReports.jsx @@ -1,19 +1,68 @@ -import React from "react"; -import { Link } from "react-router-dom"; +import React, { useState, useEffect } from "react"; +import Footer from "./Footer"; // Ensure the path to Footer is correct +// Loader Component +const Loader = () => ( +
+
+

Loading...

+
+); + +// VisualReports Component const VisualReports = () => { + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + // Simulate a loading delay, like fetching data or loading resources + setTimeout(() => { + setIsLoading(false); // Turn off loading after 3 seconds (can be adjusted) + }, 3000); // Adjust this time as needed (currently set to 3 seconds) + }, []); + return ( -
- Visual Reports Page Coming Soon ..... -
+
+
+ {isLoading ? ( + // Show loader while loading + ) : ( + "Visual Reports Page Coming Soon ....." // Main content after loading + )} +
- ) + {/* Footer positioned at the bottom */} +
+ ); }; -export default VisualReports; \ No newline at end of file +export default VisualReports;