diff --git a/.gitignore b/.gitignore index f940a99..cd75485 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ dist-ssr *.sw? *storybook.log + +.cursor \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e48f017..672e6ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@storybook/react": "^8.6.12", "@storybook/react-vite": "^8.6.12", "@storybook/test": "^8.6.12", + "@types/pdfmake": "^0.2.11", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.4", @@ -43,6 +44,7 @@ "@mui/material": "^7.0.2", "@mui/x-date-pickers": "^8.0.0", "material-react-table": "^3.2.1", + "pdfmake": "^0.2.18", "react": "^18.3.1", "react-dom": "^18.3.1" } @@ -714,9 +716,9 @@ "peer": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", + "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", "cpu": [ "ppc64" ], @@ -731,9 +733,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", + "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", "cpu": [ "arm" ], @@ -748,9 +750,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", + "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", "cpu": [ "arm64" ], @@ -765,9 +767,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", + "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", "cpu": [ "x64" ], @@ -782,9 +784,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", + "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", "cpu": [ "arm64" ], @@ -799,9 +801,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", + "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", "cpu": [ "x64" ], @@ -816,9 +818,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", + "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", "cpu": [ "arm64" ], @@ -833,9 +835,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", + "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", "cpu": [ "x64" ], @@ -850,9 +852,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", + "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", "cpu": [ "arm" ], @@ -867,9 +869,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", + "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", "cpu": [ "arm64" ], @@ -884,9 +886,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", + "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", "cpu": [ "ia32" ], @@ -901,9 +903,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", + "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", "cpu": [ "loong64" ], @@ -918,9 +920,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", + "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", "cpu": [ "mips64el" ], @@ -935,9 +937,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", + "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", "cpu": [ "ppc64" ], @@ -952,9 +954,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", + "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", "cpu": [ "riscv64" ], @@ -969,9 +971,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", + "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", "cpu": [ "s390x" ], @@ -986,9 +988,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", + "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", "cpu": [ "x64" ], @@ -1003,9 +1005,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", - "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", + "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", "cpu": [ "arm64" ], @@ -1020,9 +1022,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", + "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", "cpu": [ "x64" ], @@ -1037,9 +1039,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", - "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", + "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", "cpu": [ "arm64" ], @@ -1054,9 +1056,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", + "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", "cpu": [ "x64" ], @@ -1071,9 +1073,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", + "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", "cpu": [ "x64" ], @@ -1088,9 +1090,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", + "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", "cpu": [ "arm64" ], @@ -1105,9 +1107,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", + "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", "cpu": [ "ia32" ], @@ -1122,9 +1124,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", + "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", "cpu": [ "x64" ], @@ -1256,9 +1258,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.25.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.0.tgz", - "integrity": "sha512-iWhsUS8Wgxz9AXNfvfOPFSW4VfMXdVhp1hjkZVhXCrpgh/aLcc45rX6MPu+tIVUWDw0HfNwth7O28M1xDxNf9w==", + "version": "9.25.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", + "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", "dev": true, "license": "MIT", "engines": { @@ -1289,6 +1291,55 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz", + "integrity": "sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brotli": "^1.2.0", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz", + "integrity": "sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg==", + "license": "MIT", + "peer": true, + "dependencies": { + "base64-js": "1.3.1", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.15.3.tgz", + "integrity": "sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.2", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.2.0", + "jpeg-exif": "^1.1.4", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "license": "MIT", + "peer": true + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1484,9 +1535,9 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.52.4", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.52.4.tgz", - "integrity": "sha512-mIEcqgx877CFwNrTuCdPnlIGak8FjlayZb8sSBwWXX+i4gxkZRpMsb5BQcFW3v1puuJB3jYMqQ08kyAc4Vldhw==", + "version": "7.52.5", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.52.5.tgz", + "integrity": "sha512-6WWgjjg6FkoDWpF/O3sjB05OkszpI5wtKJqd8fUIR/JJUv8IqNCGr1lJUZJnc1HegcT9gAvyf98KfH0wFncU0w==", "dev": true, "license": "MIT", "dependencies": { @@ -1496,7 +1547,7 @@ "@rushstack/node-core-library": "5.13.0", "@rushstack/rig-package": "0.5.3", "@rushstack/terminal": "0.15.2", - "@rushstack/ts-command-line": "4.23.7", + "@rushstack/ts-command-line": "5.0.0", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", @@ -1879,9 +1930,9 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.0.0.tgz", - "integrity": "sha512-wwbn/g88ZsMkuGWz77zH8NJ4RTGch/9Yi9BkuyXGZEL47CaCk+wn0/muD+Nek7c7iUUMtJU0dXi1llQiU8L3lw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.1.0.tgz", + "integrity": "sha512-RySt7KKo7+VYbj4tj374GckC8BzFLRfIauJAbMlC3gh02azJr2AoBAkFoOLyiDyG9y9U1+ZX/9QGuOcUsknncw==", "license": "MIT", "peer": true, "dependencies": { @@ -2057,9 +2108,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", - "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz", + "integrity": "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==", "cpu": [ "arm" ], @@ -2071,9 +2122,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", - "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz", + "integrity": "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==", "cpu": [ "arm64" ], @@ -2085,9 +2136,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", - "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz", + "integrity": "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==", "cpu": [ "arm64" ], @@ -2099,9 +2150,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", - "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz", + "integrity": "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==", "cpu": [ "x64" ], @@ -2113,9 +2164,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", - "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz", + "integrity": "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==", "cpu": [ "arm64" ], @@ -2127,9 +2178,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", - "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz", + "integrity": "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==", "cpu": [ "x64" ], @@ -2141,9 +2192,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", - "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz", + "integrity": "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==", "cpu": [ "arm" ], @@ -2155,9 +2206,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", - "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz", + "integrity": "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==", "cpu": [ "arm" ], @@ -2169,9 +2220,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", - "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz", + "integrity": "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==", "cpu": [ "arm64" ], @@ -2183,9 +2234,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", - "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz", + "integrity": "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==", "cpu": [ "arm64" ], @@ -2197,9 +2248,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", - "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz", + "integrity": "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==", "cpu": [ "loong64" ], @@ -2211,9 +2262,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", - "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz", + "integrity": "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==", "cpu": [ "ppc64" ], @@ -2225,9 +2276,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", - "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz", + "integrity": "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==", "cpu": [ "riscv64" ], @@ -2239,9 +2290,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", - "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz", + "integrity": "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==", "cpu": [ "riscv64" ], @@ -2253,9 +2304,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", - "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz", + "integrity": "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==", "cpu": [ "s390x" ], @@ -2267,9 +2318,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", - "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz", + "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==", "cpu": [ "x64" ], @@ -2281,9 +2332,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", - "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz", + "integrity": "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==", "cpu": [ "x64" ], @@ -2295,9 +2346,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", - "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz", + "integrity": "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==", "cpu": [ "arm64" ], @@ -2309,9 +2360,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", - "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz", + "integrity": "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==", "cpu": [ "ia32" ], @@ -2323,9 +2374,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", - "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz", + "integrity": "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==", "cpu": [ "x64" ], @@ -2483,9 +2534,9 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.23.7", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.7.tgz", - "integrity": "sha512-Gr9cB7DGe6uz5vq2wdr89WbVDKz0UeuFEn5H2CfWDe7JvjFFaiV15gi6mqDBTbHhHCWS7w8mF1h3BnIfUndqdA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.0.0.tgz", + "integrity": "sha512-SW6nqZVxH26Rxz25+lJQRlnXI/YCrNH7NfDEWPPm9i0rwkSE6Rgtmzw96cuZgQjacOh0sw77d6V4SvgarAfr8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3320,6 +3371,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "22.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", + "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -3327,6 +3388,27 @@ "license": "MIT", "peer": true }, + "node_modules/@types/pdfkit": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.13.9.tgz", + "integrity": "sha512-RDG8Yb1zT7I01FfpwK7nMSA433XWpblMqSCtA5vJlSyavWZb303HUYPCel6JTiDDFqwGLvtAnYbH8N/e0Cb89g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pdfmake": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@types/pdfmake/-/pdfmake-0.2.11.tgz", + "integrity": "sha512-gglgMQhnG6C2kco13DJlvokqTxL+XKxHwCejElH8fSCNF9ZCkRK6Mzo011jQ0zuug+YlIgn6BpcpZrARyWdW3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/pdfkit": "*" + } + }, "node_modules/@types/prop-types": { "version": "15.7.14", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", @@ -3378,17 +3460,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.30.1.tgz", - "integrity": "sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.0.tgz", + "integrity": "sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.30.1", - "@typescript-eslint/type-utils": "8.30.1", - "@typescript-eslint/utils": "8.30.1", - "@typescript-eslint/visitor-keys": "8.30.1", + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/type-utils": "8.31.0", + "@typescript-eslint/utils": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3408,16 +3490,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.30.1.tgz", - "integrity": "sha512-H+vqmWwT5xoNrXqWs/fesmssOW70gxFlgcMlYcBaWNPIEWDgLa4W9nkSPmhuOgLnXq9QYgkZ31fhDyLhleCsAg==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", + "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.30.1", - "@typescript-eslint/types": "8.30.1", - "@typescript-eslint/typescript-estree": "8.30.1", - "@typescript-eslint/visitor-keys": "8.30.1", + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/typescript-estree": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", "debug": "^4.3.4" }, "engines": { @@ -3433,14 +3515,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.30.1.tgz", - "integrity": "sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz", + "integrity": "sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.30.1", - "@typescript-eslint/visitor-keys": "8.30.1" + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3451,14 +3533,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.30.1.tgz", - "integrity": "sha512-64uBF76bfQiJyHgZISC7vcNz3adqQKIccVoKubyQcOnNcdJBvYOILV1v22Qhsw3tw3VQu5ll8ND6hycgAR5fEA==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.0.tgz", + "integrity": "sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.30.1", - "@typescript-eslint/utils": "8.30.1", + "@typescript-eslint/typescript-estree": "8.31.0", + "@typescript-eslint/utils": "8.31.0", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -3475,9 +3557,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.30.1.tgz", - "integrity": "sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz", + "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==", "dev": true, "license": "MIT", "engines": { @@ -3489,14 +3571,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.30.1.tgz", - "integrity": "sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz", + "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.30.1", - "@typescript-eslint/visitor-keys": "8.30.1", + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3555,16 +3637,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.30.1.tgz", - "integrity": "sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.0.tgz", + "integrity": "sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.30.1", - "@typescript-eslint/types": "8.30.1", - "@typescript-eslint/typescript-estree": "8.30.1" + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/typescript-estree": "8.31.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3579,13 +3661,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.30.1.tgz", - "integrity": "sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz", + "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.30.1", + "@typescript-eslint/types": "8.31.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -3617,16 +3699,16 @@ } }, "node_modules/@vitest/browser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.1.1.tgz", - "integrity": "sha512-A+A69mMtrj1RPh96LfXGc309KSXhy2MslvyL+cp9+Y5EVdoJD4KfXDx/3SSlRGN70+hIoJ3RRbTidTvj18PZ/A==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.1.2.tgz", + "integrity": "sha512-dwL6hQg3NSDP3Z4xzIZL0xHq/AkQAPQ4StFpWVlY2zbRJtK3Y2YqdFZ7YmZjszTETN1BDQZRn/QOrcP+c8ATgg==", "dev": true, "license": "MIT", "dependencies": { "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.6.1", - "@vitest/mocker": "3.1.1", - "@vitest/utils": "3.1.1", + "@vitest/mocker": "3.1.2", + "@vitest/utils": "3.1.2", "magic-string": "^0.30.17", "sirv": "^3.0.1", "tinyrainbow": "^2.0.0", @@ -3637,7 +3719,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "3.1.1", + "vitest": "3.1.2", "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0" }, "peerDependenciesMeta": { @@ -3667,9 +3749,9 @@ } }, "node_modules/@vitest/browser/node_modules/@vitest/pretty-format": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", - "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.2.tgz", + "integrity": "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==", "dev": true, "license": "MIT", "dependencies": { @@ -3680,13 +3762,13 @@ } }, "node_modules/@vitest/browser/node_modules/@vitest/utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", - "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.2.tgz", + "integrity": "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.1", + "@vitest/pretty-format": "3.1.2", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -3695,9 +3777,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.1.tgz", - "integrity": "sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.2.tgz", + "integrity": "sha512-XDdaDOeaTMAMYW7N63AqoK32sYUWbXnTkC6tEbVcu3RlU1bB9of32T+PGf8KZvxqLNqeXhafDFqCkwpf2+dyaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3710,7 +3792,7 @@ "istanbul-reports": "^3.1.7", "magic-string": "^0.30.17", "magicast": "^0.3.5", - "std-env": "^3.8.1", + "std-env": "^3.9.0", "test-exclude": "^7.0.1", "tinyrainbow": "^2.0.0" }, @@ -3718,8 +3800,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.1.1", - "vitest": "3.1.1" + "@vitest/browser": "3.1.2", + "vitest": "3.1.2" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -3793,13 +3875,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.1.tgz", - "integrity": "sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.2.tgz", + "integrity": "sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.1.1", + "@vitest/spy": "3.1.2", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -3820,9 +3902,9 @@ } }, "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz", - "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.2.tgz", + "integrity": "sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==", "dev": true, "license": "MIT", "dependencies": { @@ -3866,13 +3948,13 @@ } }, "node_modules/@vitest/runner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.1.tgz", - "integrity": "sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.2.tgz", + "integrity": "sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.1.1", + "@vitest/utils": "3.1.2", "pathe": "^2.0.3" }, "funding": { @@ -3880,9 +3962,9 @@ } }, "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", - "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.2.tgz", + "integrity": "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==", "dev": true, "license": "MIT", "dependencies": { @@ -3893,13 +3975,13 @@ } }, "node_modules/@vitest/runner/node_modules/@vitest/utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", - "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.2.tgz", + "integrity": "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.1", + "@vitest/pretty-format": "3.1.2", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -3908,13 +3990,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.1.tgz", - "integrity": "sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.2.tgz", + "integrity": "sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.1", + "@vitest/pretty-format": "3.1.2", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -3923,9 +4005,9 @@ } }, "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", - "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.2.tgz", + "integrity": "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==", "dev": true, "license": "MIT", "dependencies": { @@ -3974,30 +4056,30 @@ } }, "node_modules/@volar/language-core": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.12.tgz", - "integrity": "sha512-RLrFdXEaQBWfSnYGVxvR2WrO6Bub0unkdHYIdC31HzIEqATIuuhRRzYu76iGPZ6OtA4Au1SnW0ZwIqPP217YhA==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.13.tgz", + "integrity": "sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==", "dev": true, "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.12" + "@volar/source-map": "2.4.13" } }, "node_modules/@volar/source-map": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.12.tgz", - "integrity": "sha512-bUFIKvn2U0AWojOaqf63ER0N/iHIBYZPpNGogfLPQ68F5Eet6FnLlyho7BS0y2HJ1jFhSif7AcuTx1TqsCzRzw==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.13.tgz", + "integrity": "sha512-l/EBcc2FkvHgz2ZxV+OZK3kMSroMr7nN3sZLF2/f6kWW66q8+tEL4giiYyFjt0BcubqJhBt6soYIrAPhg/Yr+Q==", "dev": true, "license": "MIT" }, "node_modules/@volar/typescript": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.12.tgz", - "integrity": "sha512-HJB73OTJDgPc80K30wxi3if4fSsZZAOScbj2fcicMuOPoOkcf9NNAINb33o+DzhBdF9xTKC1gnPmIRDous5S0g==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.13.tgz", + "integrity": "sha512-Ukz4xv84swJPupZeoFsQoeJEOm7U9pqsEnaGGgt5ni3SCTa22m8oJP5Nng3Wed7Uw5RBELdLxxORX8YhJPyOgQ==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.12", + "@volar/language-core": "2.4.13", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } @@ -4290,6 +4372,13 @@ "dev": true, "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "license": "MIT", + "peer": true + }, "node_modules/better-opn": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", @@ -4327,6 +4416,16 @@ "node": ">=8" } }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", + "peer": true, + "dependencies": { + "base64-js": "^1.1.2" + } + }, "node_modules/browser-assert": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", @@ -4380,7 +4479,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -4399,7 +4497,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -4413,7 +4510,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -4524,6 +4620,16 @@ } } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -4624,6 +4730,13 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT", + "peer": true + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -4671,6 +4784,27 @@ "node": ">=6" } }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -4682,7 +4816,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -4706,6 +4839,24 @@ "node": ">=8" } }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -4716,6 +4867,13 @@ "node": ">=6" } }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "license": "MIT", + "peer": true + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4751,7 +4909,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -4770,9 +4927,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.139", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.139.tgz", - "integrity": "sha512-GGnRYOTdN5LYpwbIr0rwP/ZHOQSvAF6TG0LSzp28uCBb9JiXHJGmaaKw29qjNJc5bGnnp6kXJqRnGMQoELwi5w==", + "version": "1.5.143", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.143.tgz", + "integrity": "sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g==", "dev": true, "license": "ISC" }, @@ -4810,7 +4967,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4820,16 +4976,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, @@ -4837,7 +4992,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -4847,9 +5001,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", + "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4860,31 +5014,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@esbuild/aix-ppc64": "0.25.3", + "@esbuild/android-arm": "0.25.3", + "@esbuild/android-arm64": "0.25.3", + "@esbuild/android-x64": "0.25.3", + "@esbuild/darwin-arm64": "0.25.3", + "@esbuild/darwin-x64": "0.25.3", + "@esbuild/freebsd-arm64": "0.25.3", + "@esbuild/freebsd-x64": "0.25.3", + "@esbuild/linux-arm": "0.25.3", + "@esbuild/linux-arm64": "0.25.3", + "@esbuild/linux-ia32": "0.25.3", + "@esbuild/linux-loong64": "0.25.3", + "@esbuild/linux-mips64el": "0.25.3", + "@esbuild/linux-ppc64": "0.25.3", + "@esbuild/linux-riscv64": "0.25.3", + "@esbuild/linux-s390x": "0.25.3", + "@esbuild/linux-x64": "0.25.3", + "@esbuild/netbsd-arm64": "0.25.3", + "@esbuild/netbsd-x64": "0.25.3", + "@esbuild/openbsd-arm64": "0.25.3", + "@esbuild/openbsd-x64": "0.25.3", + "@esbuild/sunos-x64": "0.25.3", + "@esbuild/win32-arm64": "0.25.3", + "@esbuild/win32-ia32": "0.25.3", + "@esbuild/win32-x64": "0.25.3" } }, "node_modules/esbuild-register": { @@ -4923,9 +5077,9 @@ } }, "node_modules/eslint": { - "version": "9.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.0.tgz", - "integrity": "sha512-MsBdObhM4cEwkzCiraDv7A6txFXEqtNXOb877TsSp2FCkBNl8JfVQrmiuDqC1IkejT6JLPzYBXx/xAiYhyzgGA==", + "version": "9.25.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", + "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4935,7 +5089,7 @@ "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.13.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.25.0", + "@eslint/js": "9.25.1", "@eslint/plugin-kit": "^0.2.8", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -4997,9 +5151,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", - "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5402,6 +5556,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5416,7 +5580,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5441,7 +5604,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -5528,7 +5690,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5565,7 +5726,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -5578,7 +5738,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5591,7 +5750,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -5660,6 +5818,19 @@ "dev": true, "license": "MIT" }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5727,7 +5898,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -5775,6 +5945,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -5857,7 +6044,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -5985,6 +6171,13 @@ "dev": true, "license": "MIT" }, + "node_modules/jpeg-exif": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/jpeg-exif/-/jpeg-exif-1.1.4.tgz", + "integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==", + "license": "MIT", + "peer": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6306,7 +6499,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6500,6 +6692,33 @@ "node": ">=0.10.0" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", @@ -6575,6 +6794,13 @@ "dev": true, "license": "BlueOak-1.0.0" }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT", + "peer": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6690,6 +6916,22 @@ "node": ">= 14.16" } }, + "node_modules/pdfmake": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.19.tgz", + "integrity": "sha512-jVUILxOqAgcquxbGCz3Bo1/sGEuVLcReGYvo61oJ2EkkyfrlREd7TfLRF6jdF85aEQjxOj/6BD9uj0p+UfXNkw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.2", + "@foliojs-fork/pdfkit": "^0.15.3", + "iconv-lite": "^0.6.3", + "xmldoc": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6753,6 +6995,12 @@ "node": ">=18" } }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "peer": true + }, "node_modules/polished": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", @@ -7108,6 +7356,27 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", @@ -7166,9 +7435,9 @@ } }, "node_modules/rollup": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", - "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.1.tgz", + "integrity": "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==", "dev": true, "license": "MIT", "dependencies": { @@ -7182,26 +7451,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.0", - "@rollup/rollup-android-arm64": "4.40.0", - "@rollup/rollup-darwin-arm64": "4.40.0", - "@rollup/rollup-darwin-x64": "4.40.0", - "@rollup/rollup-freebsd-arm64": "4.40.0", - "@rollup/rollup-freebsd-x64": "4.40.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", - "@rollup/rollup-linux-arm-musleabihf": "4.40.0", - "@rollup/rollup-linux-arm64-gnu": "4.40.0", - "@rollup/rollup-linux-arm64-musl": "4.40.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", - "@rollup/rollup-linux-riscv64-gnu": "4.40.0", - "@rollup/rollup-linux-riscv64-musl": "4.40.0", - "@rollup/rollup-linux-s390x-gnu": "4.40.0", - "@rollup/rollup-linux-x64-gnu": "4.40.0", - "@rollup/rollup-linux-x64-musl": "4.40.0", - "@rollup/rollup-win32-arm64-msvc": "4.40.0", - "@rollup/rollup-win32-ia32-msvc": "4.40.0", - "@rollup/rollup-win32-x64-msvc": "4.40.0", + "@rollup/rollup-android-arm-eabi": "4.40.1", + "@rollup/rollup-android-arm64": "4.40.1", + "@rollup/rollup-darwin-arm64": "4.40.1", + "@rollup/rollup-darwin-x64": "4.40.1", + "@rollup/rollup-freebsd-arm64": "4.40.1", + "@rollup/rollup-freebsd-x64": "4.40.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", + "@rollup/rollup-linux-arm-musleabihf": "4.40.1", + "@rollup/rollup-linux-arm64-gnu": "4.40.1", + "@rollup/rollup-linux-arm64-musl": "4.40.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", + "@rollup/rollup-linux-riscv64-gnu": "4.40.1", + "@rollup/rollup-linux-riscv64-musl": "4.40.1", + "@rollup/rollup-linux-s390x-gnu": "4.40.1", + "@rollup/rollup-linux-x64-gnu": "4.40.1", + "@rollup/rollup-linux-x64-musl": "4.40.1", + "@rollup/rollup-win32-arm64-msvc": "4.40.1", + "@rollup/rollup-win32-ia32-msvc": "4.40.1", + "@rollup/rollup-win32-x64-msvc": "4.40.1", "fsevents": "~2.3.2" } }, @@ -7247,6 +7516,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT", + "peer": true + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC", + "peer": true + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -7270,7 +7553,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -7284,6 +7566,22 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7636,6 +7934,13 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT", + "peer": true + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -7820,15 +8125,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.30.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.30.1.tgz", - "integrity": "sha512-D7lC0kcehVH7Mb26MRQi64LMyRJsj3dToJxM1+JVTl53DQSV5/7oUGWQLcKl1C1KnoVHxMMU2FNQMffr7F3Row==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.31.0.tgz", + "integrity": "sha512-u+93F0sB0An8WEAPtwxVhFby573E8ckdjwUUQUj9QA4v8JAvgtoDdIyYR3XFwFHq2W1KJ1AurwJCO+w+Y1ixyQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.30.1", - "@typescript-eslint/parser": "8.30.1", - "@typescript-eslint/utils": "8.30.1" + "@typescript-eslint/eslint-plugin": "8.31.0", + "@typescript-eslint/parser": "8.31.0", + "@typescript-eslint/utils": "8.31.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7849,6 +8154,35 @@ "dev": true, "license": "MIT" }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "license": "MIT", + "peer": true, + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -7943,18 +8277,18 @@ } }, "node_modules/vite": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz", - "integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.3.tgz", + "integrity": "sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", - "tinyglobby": "^0.2.12" + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" @@ -8018,9 +8352,9 @@ } }, "node_modules/vite-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.1.tgz", - "integrity": "sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.2.tgz", + "integrity": "sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==", "dev": true, "license": "MIT", "dependencies": { @@ -8083,31 +8417,32 @@ } }, "node_modules/vitest": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.1.tgz", - "integrity": "sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.2.tgz", + "integrity": "sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.1.1", - "@vitest/mocker": "3.1.1", - "@vitest/pretty-format": "^3.1.1", - "@vitest/runner": "3.1.1", - "@vitest/snapshot": "3.1.1", - "@vitest/spy": "3.1.1", - "@vitest/utils": "3.1.1", + "@vitest/expect": "3.1.2", + "@vitest/mocker": "3.1.2", + "@vitest/pretty-format": "^3.1.2", + "@vitest/runner": "3.1.2", + "@vitest/snapshot": "3.1.2", + "@vitest/spy": "3.1.2", + "@vitest/utils": "3.1.2", "chai": "^5.2.0", "debug": "^4.4.0", - "expect-type": "^1.2.0", + "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", - "std-env": "^3.8.1", + "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.13", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.1.1", + "vite-node": "3.1.2", "why-is-node-running": "^2.3.0" }, "bin": { @@ -8123,8 +8458,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.1.1", - "@vitest/ui": "3.1.1", + "@vitest/browser": "3.1.2", + "@vitest/ui": "3.1.2", "happy-dom": "*", "jsdom": "*" }, @@ -8153,14 +8488,14 @@ } }, "node_modules/vitest/node_modules/@vitest/expect": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.1.tgz", - "integrity": "sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.2.tgz", + "integrity": "sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.1.1", - "@vitest/utils": "3.1.1", + "@vitest/spy": "3.1.2", + "@vitest/utils": "3.1.2", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -8169,9 +8504,9 @@ } }, "node_modules/vitest/node_modules/@vitest/pretty-format": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.1.tgz", - "integrity": "sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.2.tgz", + "integrity": "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==", "dev": true, "license": "MIT", "dependencies": { @@ -8182,9 +8517,9 @@ } }, "node_modules/vitest/node_modules/@vitest/spy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.1.tgz", - "integrity": "sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.2.tgz", + "integrity": "sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==", "dev": true, "license": "MIT", "dependencies": { @@ -8195,13 +8530,13 @@ } }, "node_modules/vitest/node_modules/@vitest/utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.1.tgz", - "integrity": "sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.2.tgz", + "integrity": "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.1", + "@vitest/pretty-format": "3.1.2", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -8395,6 +8730,19 @@ } } }, + "node_modules/xmldoc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-2.0.0.tgz", + "integrity": "sha512-6ZsqsqEkIKzWLqGyTN+j+ZRc/vxQHtnlHzSvj3JvM4XZPoZVJxj6fyz0XvwKAf1vh+kSN/HibO1/iJLf3F3LRw==", + "license": "MIT", + "peer": true, + "dependencies": { + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 082bf8e..6f0ba2a 100644 --- a/package.json +++ b/package.json @@ -17,14 +17,15 @@ "dist" ], "peerDependencies": { - "react": "^18.3.1", - "react-dom": "^18.3.1", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@mui/icons-material": "^7.0.2", "@mui/material": "^7.0.2", "@mui/x-date-pickers": "^8.0.0", - "material-react-table": "^3.2.1" + "material-react-table": "^3.2.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "pdfmake": "^0.2.18" }, "devDependencies": { "@biomejs/biome": "1.9.4", @@ -53,7 +54,9 @@ "typescript-eslint": "^8.26.1", "vite": "^6.3.1", "vite-plugin-dts": "^4.5.3", - "vitest": "^3.1.1" + "vitest": "^3.1.1", + "@types/pdfmake": "^0.2.11" + }, "eslintConfig": { "extends": [ diff --git a/src/components/smart_report_mrt/handleDownloadPdf.ts b/src/components/smart_report_mrt/handleDownloadPdf.ts new file mode 100644 index 0000000..2c6318a --- /dev/null +++ b/src/components/smart_report_mrt/handleDownloadPdf.ts @@ -0,0 +1,20 @@ +import { getPdfMakeDocDefinition } from "../../pdf/getPdfMakeDocDefinition"; +import { downloadPdf } from "../../pdf/generatePdf"; +import { + headerSettings, + tableData, + sampleContent +} from "../../pdf/staticpdfContent"; + +export const handleDownloadPdf = async () => { + const docDefinition = await getPdfMakeDocDefinition( + { + content: sampleContent, + }, + headerSettings, + tableData // Include the ledger data from staticpdfContent + ); + + // Download the PDF + downloadPdf(docDefinition, 'document.pdf'); + }; diff --git a/src/components/smart_report_mrt/smart_report_mrt.tsx b/src/components/smart_report_mrt/smart_report_mrt.tsx index d62d553..a80b07e 100644 --- a/src/components/smart_report_mrt/smart_report_mrt.tsx +++ b/src/components/smart_report_mrt/smart_report_mrt.tsx @@ -1,10 +1,10 @@ import TableViewIcon from '@mui/icons-material/TableView'; import ViewModuleIcon from '@mui/icons-material/ViewModule'; +import PictureAsPdfIcon from '@mui/icons-material/PictureAsPdf'; import { Button } from "@mui/material"; import { MaterialReactTable, MaterialReactTableProps, MRT_RowData } from "material-react-table"; import { useState } from "react"; -import "./smart_report_mrt.css"; - +import { handleDownloadPdf } from "./handleDownloadPdf"; /* TODO: (Responsive Card View) - Add a field `showInCardView` to the column definition. Default to false. @@ -29,16 +29,22 @@ export const SmartReportMRT = (props: MaterialReactTableP muiTableBodyCellProps = {({ cell }) => ({ 'data-label': cell.column.columnDef.header, })} - renderTopToolbar = {() => ( -
- -
- )} + renderTopToolbar = {() => [ + , + + ]} {...props} /> diff --git a/src/pdf/generatePdf.ts b/src/pdf/generatePdf.ts new file mode 100644 index 0000000..54596ab --- /dev/null +++ b/src/pdf/generatePdf.ts @@ -0,0 +1,9 @@ +import * as pdfMake from 'pdfmake/build/pdfmake'; +import * as pdfFonts from 'pdfmake/build/vfs_fonts'; +import { TDocumentDefinitions } from 'pdfmake/interfaces'; + +(pdfMake as any).vfs = (pdfFonts as any).vfs; + +export const openPdf = (docDefinition: TDocumentDefinitions) => pdfMake.createPdf(docDefinition).open(); + +export const downloadPdf = (docDefinition: TDocumentDefinitions, filename: 'document.pdf') => pdfMake.createPdf(docDefinition).download(filename); \ No newline at end of file diff --git a/src/pdf/getPdfMakeDocDefinition.ts b/src/pdf/getPdfMakeDocDefinition.ts new file mode 100644 index 0000000..9f8aa02 --- /dev/null +++ b/src/pdf/getPdfMakeDocDefinition.ts @@ -0,0 +1,118 @@ +import { Content, TDocumentDefinitions, ImageDefinition } from 'pdfmake/interfaces'; +import { getHeaderDefinition } from './headers/getHeaderDefinition'; +import { HeaderSettings } from './types/PdfMake'; +import { generatePrimaryTable, TableData } from './outstanding/primaryTable'; + +export const getPdfMakeDocDefinition = async ( + inputDocDefinition: Omit, + headerSettings?: HeaderSettings, + tableData?: TableData[] +) => { + let docDefinition: TDocumentDefinitions = { + pageMargins: [20, 10, 20, 20], + ...inputDocDefinition, + }; + + if (headerSettings) { + // Get header images and styles + const { images, styles } = await getHeaderDefinition(headerSettings); + + // Add images to document definition + docDefinition.images = { + ...(docDefinition.images || {}), + ...(images as Record), + }; + + // Add styles to document definition + docDefinition.styles = { + ...(docDefinition.styles || {}), + ...styles, + ledgerTitle: { + alignment: 'center', + bold: true, + fontSize: 14, + }, + ledgerSubtitle: { + alignment: 'center', + bold: true, + fontSize: 10 + }, + ledgerRightStrings: { + alignment: 'right', + fontSize: 8, + }, + supplierRightStrings: { + alignment: 'right', + fontSize: 8, + fillColor: '#eeeeee' + }, + ledgerTotals: { + alignment: 'left', + fontSize: 8 + }, + ledgerCell: { + fontSize: 8, + alignment: 'left', + margin: [0, 2, 0, 2] + }, + ledgerHeader: { + fontSize: 10, + bold: true, + alignment: 'left', + fillColor: '#eeeeee', + margin: [0, 2, 0, 2], + }, + tableCellSummable:{ + alignment: 'right', + fontSize: 8, + margin: [0, 2, 0, 2] + } + }; + + // Get existing content as array + const existingContent = Array.isArray(docDefinition.content) + ? docDefinition.content + : docDefinition.content + ? [docDefinition.content] + : []; + + // Create an array for content + const contentArray: Content[] = []; + + // Add primary table with repeating header if data is provided + if (tableData && tableData.length > 0) { + // Always include the header content on at least the first page + const { content: headerContent } = await getHeaderDefinition(headerSettings); + + // Generate the table with repeating headers only if headerOnEveryPage is true + const table = await generatePrimaryTable({ + data: tableData, + headerSettings, + }); + + // If header should not repeat on every page, add it separately before the table + if (!headerSettings.headerOnEveryPage) { + contentArray.push( + headerContent as Content, + { text: '', margin: [0, 10, 0, 0] } as Content + ); + } + + contentArray.push(table); + } else { + // If no table data, add the header content separately + const { content } = await getHeaderDefinition(headerSettings); + contentArray.push( + content as Content, + { text: '', margin: [0, 10, 0, 0] } as Content + ); + } + + // Add the existing content + contentArray.push(...existingContent); + + docDefinition.content = contentArray; + } + + return docDefinition; +}; \ No newline at end of file diff --git a/src/pdf/headers/getHeaderDefinition.ts b/src/pdf/headers/getHeaderDefinition.ts new file mode 100644 index 0000000..e390299 --- /dev/null +++ b/src/pdf/headers/getHeaderDefinition.ts @@ -0,0 +1,11 @@ +import { HeaderSettings } from "../types/PdfMake"; +import { getHeaderRegularDocDef } from "./templates/headerRegularPdfMake"; + +export const headerTemplates = { + regular: getHeaderRegularDocDef +} + +export const getHeaderDefinition = (headerSettings: HeaderSettings) => { + const { template } = headerSettings; + return headerTemplates[template](headerSettings); +} \ No newline at end of file diff --git a/src/pdf/headers/templates/headerRegularPdfMake.ts b/src/pdf/headers/templates/headerRegularPdfMake.ts new file mode 100644 index 0000000..6dcaf22 --- /dev/null +++ b/src/pdf/headers/templates/headerRegularPdfMake.ts @@ -0,0 +1,87 @@ +import { HeaderSettings } from '../../types/PdfMake'; +import { StyleDictionary, ImageDefinition } from 'pdfmake/interfaces'; +import { checkImageValidGetDef } from '../../utils/fetchValidImageURL'; + +// Main function to assemble the header +export const getHeaderRegularDocDef = async ({ + headerContent, + headerRightStrings, +}: HeaderSettings) => { + // Get validated image if available + const logoSection = headerContent.image + ? await checkImageValidGetDef({ + url: headerContent.image.url, + ...(headerContent.image.headers && { headers: headerContent.image.headers }), + } as ImageDefinition) + : undefined; + + const styles: StyleDictionary = { + headerContent: { + alignment: 'left', + margin: [0, 0, 0, 5], + fontSize: 10, + bold: false, + }, + headerImage: { + alignment: 'center', + margin: [10, 10, 0, 0], + }, + headerRightStrings: { + margin: [0, 0, 10, 5], + alignment: 'right', + fontSize: 10, + bold: false, + }, + headerTopSection: { + alignment: 'center', + color: 'red', + fontSize: 8, + bold: true, + margin: [0, 0, 0, 0], + }, + }; + + // Set up images dictionary with the validated URL + const images = logoSection?.image || {}; + + const docDef = { + images, // Use the image dictionary with headerLogo key + content: [ + // Add top section above the table if it exists + ...(headerContent.topSection ? [{ stack: headerContent.topSection }] : []), + { + table: { + widths: ['20%', '40%', '40%'], + body: [ + [ + ...(logoSection?.imageDef && images.headerLogo + ? [ + { + image: 'headerLogo', // Reference the image key + fit: [100, 100], + margin: [0, 0, 0, 0], + style: 'headerImage', + }, + ] + : [{ text: '' }]), + headerContent.content ? { stack: headerContent.content } : { text: '' }, + headerRightStrings ? { stack: headerRightStrings } : { text: '' }, + ], + ], + }, + layout: 'noBorders', + }, + { + table: { + headerRows: 1, + widths: ['*'], + body: [[''], ['']], + }, + layout: 'headerLineOnly', + }, + ], + styles, + }; + + return docDef; +}; \ No newline at end of file diff --git a/src/pdf/outstanding/primaryTable.ts b/src/pdf/outstanding/primaryTable.ts new file mode 100644 index 0000000..a302a5a --- /dev/null +++ b/src/pdf/outstanding/primaryTable.ts @@ -0,0 +1,372 @@ +import { Content, CustomTableLayout, TableCell } from 'pdfmake/interfaces'; +import { HeaderSettings, TableData, TableConfig } from '../types/PdfMake'; +import { getHeaderDefinition } from '../headers/getHeaderDefinition'; + +export const generatePrimaryTable = async ({ + data, + headerSettings, + tableLayout, + borders = { + useBorderColor: true, + outerBorderWidth: 1.3, + innerBorderWidth: 0.5, + outerBorderColor: '#000000', + innerBorderColor: '#aaaaaa' + } +}: TableConfig): Promise => { + // Determine total columns from headers or provided columnCount + const totalColumns = data[0].columnCount || data[0].headers.length; + const emptyColumns = Array(totalColumns - 1).fill({}); + + // Create one unified table with all content + const tableBody: TableCell[][] = []; + let headerRowsCount = 0; + + // Add page header rows if requested + if (headerSettings && headerSettings.headerOnEveryPage) { + headerRowsCount = await addHeaderRows(tableBody, headerSettings, totalColumns, emptyColumns); + } + + // Non-repeating title/subtitle section (outside of headerRows) + const nonRepeatingRows = headerRowsCount; + + // Add title and subtitle section for the first supplier + if (data[0].title?.text || data[0].subtitle?.text) { + addTitleSubtitleRows(tableBody, data[0], totalColumns, emptyColumns); + } + + // Track indices of special rows for border styling + const specialRowIndices: number[] = []; + + // Process all suppliers data + processSupplierData(tableBody, data, totalColumns, specialRowIndices); + + // Generate equal widths for all columns + const widths = Array(totalColumns).fill('*'); + + // Create a single unified table with all content + return { + table: { + headerRows: headerSettings?.headerOnEveryPage ? headerRowsCount : 0, + widths, + body: tableBody, + dontBreakRows: true, + }, + layout: tableLayout || createTableLayout(nonRepeatingRows, headerRowsCount, specialRowIndices, data, borders) + }; +}; + +// Helper function to add header rows +async function addHeaderRows( + tableBody: TableCell[][], + headerSettings: HeaderSettings, + totalColumns: number, + emptyColumns: TableCell[] +): Promise { + let headerRowsCount = 0; + + // Get header definition from the template + const headerDef = await getHeaderDefinition(headerSettings); + + // Add top section if it exists + if (headerSettings.headerContent.topSection) { + tableBody.push([ + { + stack: headerSettings.headerContent.topSection, + colSpan: totalColumns, + }, + ...emptyColumns + ]); + headerRowsCount++; + } + + // Extract the main header content from headerDef + const headerTable = headerDef.content.find(item => + (item).table?.widths?.length + ) as { table: { body: TableCell[][] } }; + + if (headerTable) { + // Add header content row with logo, content and right strings + tableBody.push([ + { + colSpan: totalColumns, + table: { + widths: ['20%', '40%', '40%'], + body: headerTable.table.body + }, + layout: 'noBorders' + }, + ...emptyColumns + ]); + headerRowsCount++; + } + + // Add header separator line + tableBody.push([ + { + colSpan: totalColumns, + table: { + widths: ['*'], + body: [['']], + }, + layout: { + hLineWidth: function(i) { + return (i === 1) ? 2 : 0; + }, + vLineWidth: function() { return 0; }, + }, + margin: [0, 0, 0, 5] + }, + ...emptyColumns + ]); + headerRowsCount++; + + return headerRowsCount; +} + +// Helper function to add title and subtitle section +function addTitleSubtitleRows( + tableBody: TableCell[][], + data: TableData, + totalColumns: number, + emptyColumns: TableCell[] +): void { + // Add title if exists + if (data.title?.text) { + tableBody.push([ + { + ...data.title, + colSpan: totalColumns + }, + ...emptyColumns + ]); + } + + // Add subtitle if exists + if (data.subtitle?.text) { + tableBody.push([ + { + ...data.subtitle, + colSpan: totalColumns, + }, + ...emptyColumns + ]); + + // Handle subtitle level totals and right strings + addSubtitleDetailsRows(tableBody, data, totalColumns); + } +} + +// Helper function to add subtitle details (totals and right strings) +function addSubtitleDetailsRows( + tableBody: TableCell[][], + data: TableData, + totalColumns: number +): void { + if (!data.subtitleTotals?.length && !data.subtitleRightStrings?.length) return; + + const maxSubtitleRows = Math.max( + data.subtitleTotals?.length || 0, + data.subtitleRightStrings?.length || 0 + ); + + const leftColSpan = data.rightStringsLayout?.leftColSpan || Math.ceil(totalColumns / 2); + const rightColSpan = data.rightStringsLayout?.rightColSpan || Math.floor(totalColumns / 2); + + for (let i = 0; i < maxSubtitleRows; i++) { + const isLastRow = i === maxSubtitleRows - 1; + + const totalItem = data.subtitleTotals && i < data.subtitleTotals.length + ? data.subtitleTotals[i] + : { text: '', border: [true, false, true, false] }; + + const rightString = data.subtitleRightStrings && i < data.subtitleRightStrings.length + ? data.subtitleRightStrings[i] + : { text: '', border: [true, false, true, false] }; + + const leftCells = Array(leftColSpan - 1).fill({}); + const rightCells = Array(rightColSpan - 1).fill({}); + + tableBody.push([ + { + ...totalItem, + colSpan: leftColSpan, + border: [true, false, false, isLastRow ? true : false], + }, + ...leftCells, + { + ...rightString, + colSpan: rightColSpan, + border: [false, false, true, isLastRow ? true : false], + }, + ...rightCells + ]); + } +} + +// Helper function to process supplier data +function processSupplierData( + tableBody: TableCell[][], + data: TableData[], + totalColumns: number, + specialRowIndices: number[] +): void { + data.forEach((supplierData, dataIndex) => { + const leftColSpan = supplierData.rightStringsLayout?.leftColSpan || Math.ceil(totalColumns / 2); + const rightColSpan = supplierData.rightStringsLayout?.rightColSpan || Math.floor(totalColumns / 2); + + // Mark supplier info row as special + specialRowIndices.push(tableBody.length); // Supplier row + + const leftCells = Array(leftColSpan - 1).fill({}); + const rightCells = Array(rightColSpan - 1).fill({}); + + // Add supplier info and right strings + tableBody.push([ + { + text: supplierData.supplierInfo.text, + style: supplierData.supplierInfo.style, + border: [true, true, false, true], + colSpan: leftColSpan + }, + ...leftCells, + { + stack: supplierData.rightStrings, + style: 'supplierRightStrings', + border: [false, true, true, true], + colSpan: rightColSpan + }, + ...rightCells + ]); + + // Add headers only for first supplier - with black borders + if (dataIndex === 0) { + specialRowIndices.push(tableBody.length); // Headers row + tableBody.push(supplierData.headers.map(header => ({ + ...header, + style: header.style, + border: [true, true, true, true], + }))); + } + + // Add rows + const rowStartIndex = tableBody.length; + tableBody.push(...supplierData.rows.map((row, rowIndex) => { + // Check if this is a total row + const isTotal = row.some(c => (c).text === "Total" && (c).bold === true); + + if (isTotal) { + // Mark total rows as special + specialRowIndices.push(rowStartIndex + rowIndex); + } + + return row.map((cell, cellIndex) => { + // Check if leftmost or rightmost cell + const isLeftmost = cellIndex === 0; + const isRightmost = cellIndex === row.length - 1; + + // For total rows, use black borders on left/right and top/bottom, but grey for internal borders + if (isTotal) { + return { + ...cell, + style: cell.style || 'ledgerCell', + border: [true, true, true, true], + borderColor: [ + isLeftmost ? '#000000' : '#aaaaaa', // Left border + '#000000', // Top border (keep black) + isRightmost ? '#000000' : '#aaaaaa', // Right border + '#000000' // Bottom border (keep black) + ] + }; + } + + // For regular rows, show only vertical borders with grey color + // But make leftmost and rightmost borders black + return { + ...cell, + style: cell.style || 'ledgerCell', + border: [true, false, true, false], + borderColor: [ + isLeftmost ? '#000000' : '#aaaaaa', // Left border + '#aaaaaa', // Top border + isRightmost ? '#000000' : '#aaaaaa', // Right border + '#aaaaaa' // Bottom border + ] + }; + }); + })); + }); +} + +// Create dynamic table layout +function createTableLayout( + nonRepeatingRows: number, + headerRowsCount: number, + specialRowIndices: number[], + data: TableData[], + borders: TableConfig['borders'] +): CustomTableLayout { + return { + defaultBorder: false, + hLineWidth: function(i, node) { + // Top and bottom of table + if (i === 0 || i === node.table.body.length) return borders?.outerBorderWidth || 1.3; + + // Headers section + if (i <= nonRepeatingRows + headerRowsCount) return borders?.outerBorderWidth || 1.3; + + // Special rows + if (specialRowIndices.includes(i) || specialRowIndices.includes(i-1)) { + return borders?.outerBorderWidth || 1.3; + } + + // Force border between title/subtitle section and supplier section + if (i === nonRepeatingRows + (data[0].title ? 1 : 0) + + (data[0].subtitle ? 1 : 0) + + (data[0].subtitleTotals?.length || data[0].subtitleRightStrings?.length || 0)) { + return borders?.outerBorderWidth || 1.3; + } + + return 0; // No horizontal lines between regular rows + }, + vLineWidth: function(i, node) { + // Outer borders are full width + if (i === 0 || (node.table.widths && i === node.table.widths.length)) { + return borders?.outerBorderWidth || 1.3; + } + + // For internal lines, use thinner lines + return borders?.innerBorderWidth || 0.5; + }, + hLineColor: function(i, node) { + // Top and bottom borders of the entire table + if (i === 0 || i === node.table.body.length) { + return borders?.outerBorderColor || '#000000'; + } + + // Special rows get black horizontal borders + if (specialRowIndices.includes(i) || specialRowIndices.includes(i-1)) { + return borders?.outerBorderColor || '#000000'; + } + + // Force black border between title/subtitle section and supplier section + if (i === nonRepeatingRows + (data[0].title ? 1 : 0) + + (data[0].subtitle ? 1 : 0) + + (data[0].subtitleTotals?.length || data[0].subtitleRightStrings?.length || 0)) { + return borders?.outerBorderColor || '#000000'; + } + + return null; + }, + vLineColor: function(i, node) { + // Outer borders are black + if (i === 0 || (node.table.widths && i === node.table.widths.length)) { + return borders?.outerBorderColor || '#000000'; + } + + return borders?.innerBorderColor || '#aaaaaa'; // Grey for all internal vertical lines + }, + paddingLeft: () => 4, + paddingRight: () => 4 + }; +} diff --git a/src/pdf/staticpdfContent.ts b/src/pdf/staticpdfContent.ts new file mode 100644 index 0000000..dd7dd2a --- /dev/null +++ b/src/pdf/staticpdfContent.ts @@ -0,0 +1,1202 @@ +import type { Content, ImageDefinition } from 'pdfmake/interfaces'; +import { HeaderSettings } from './types/PdfMake'; +import { TableData } from './types/PdfMake'; + +// Company details content array +const companyDetailsContent: Content[] = [ + { text: 'Sample Company Name', style: 'headerContent', bold: true}, + { text: '123 Business Street, City, State, ZIP', style: 'headerContent' }, + { text: 'ph:+1 234-567-8900', style: 'headerContent' }, + { text: 'www.samplecompany.com', style: 'headerContent' }, + { text: 'GSTIN: GST123456789', style: 'headerContent' } +]; + +// Default company details +const defaultHeaderImage: ImageDefinition = { + url: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQRQOq_KQn9qYIzTMHclBSe1zQcH3CMxPVBUw&s' +}; + +const defaultHeaderTopSection: Content[] = [ + { text: '** !! Shree Ganeshay Namah !! **', style: 'headerTopSection'}, +]; + +// Default header right strings +export const headerRightStrings: Content[] = [ + { text: `Date: ${new Date().toLocaleDateString('en-IN')}`, style: 'headerRightStrings' }, + { text: 'Total Amount: 0.00', style: 'headerRightStrings' }, + { text: 'Outstanding: 0.00', style: 'headerRightStrings' } +]; + +// Convert company details to proper format with image and top section +const headerContent = { + image: defaultHeaderImage, + topSection: defaultHeaderTopSection, + content: companyDetailsContent +}; + +// Sample table data with styling +export const tableData: TableData[] = [{ + title: { + text: "OUTSTANDING", + style: 'ledgerTitle', + border: [true, true, true, true], + alignment: 'center' + }, + subtitle: { + text: "AALFA TEXTILE", + style: 'ledgerSubtitle', + border: [true, true, true, false], + alignment: 'center', + bold: true + }, + subtitleTotals: [ + { text: "Total Inv. : 5,07,51,251.00", style: 'ledgerTotals', alignment: 'left' }, + { text: "Total Out. : 2,89,93,158.06", style: 'ledgerTotals', alignment: 'left' }, + ], + subtitleRightStrings: [ + { text: "> 90 days : 25,456.00", style: 'ledgerRightStrings' }, + { text: "> 60 days : 15,456.00", style: 'ledgerRightStrings' } + ], + supplierInfo: { + text: "Supplier: AARADHANA TRADING CO", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 60 days : -12,456.00", style: 'supplierRightStrings', color: 'red' }, + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings', color: 'green' } + ], + totals: [ + { text: "Inv. Amt. : 3,07,51,251.00", style: 'ledgerTotals', alignment: 'left' }, + { text: "Out. Amt. : 1,89,93,158.06", style: 'ledgerTotals', alignment: 'left' }, + { text: "GR : -15,300.00", style: 'ledgerTotals', alignment: 'left' }, + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "22-02-25", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-1,05,000.00", style: 'tableCellSummable' }, + { text: "-5,000.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "1,00,000.00", style: 'tableCellSummable' }, + { text: "-1,05,000.00", style: 'tableCellSummable' }, + { text: "54", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'tableCellSummable' }, + { text: "Total", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-1,05,000.00", style: 'tableCellSummable', bold: true }, + { text: "-5,000.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "1,00,000.00", style: 'tableCellSummable', bold: true }, + { text: "-1,05,000.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] + }, + { + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, +{ + supplierInfo: { + text: "Supplier: ARROW FASHION", + style: 'ledgerHeader', + border: [true, true, true, true] + }, + rightStrings: [ + { text: "> 30 days : -12,456.00", style: 'supplierRightStrings' } + ], + headers: [ + { text: "Date", style: 'ledgerHeader' }, + { text: "Particulars", style: 'ledgerHeader' }, + { text: "Debit", style: 'ledgerHeader' }, + { text: "Credit", style: 'ledgerHeader' }, + { text: "GR", style: 'ledgerHeader' }, + { text: "Cheque", style: 'ledgerHeader' }, + { text: "Received", style: 'ledgerHeader' }, + { text: "Balance", style: 'ledgerHeader' }, + { text: "Days", style: 'ledgerHeader' } + ], + rows: [ + [ + { text: "11-12-24", style: 'ledgerCell' }, + { text: "ON ACCOUNT", style: 'ledgerCell' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "-12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "12,456.00", style: 'tableCellSummable' }, + { text: "0.00", style: 'tableCellSummable' }, + { text: "127", style: 'tableCellSummable' } + ], + [ + { text: "", style: 'ledgerCell' }, + { text: "Total", style: 'ledgerCell', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "-12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "12,456.00", style: 'tableCellSummable', bold: true }, + { text: "0.00", style: 'tableCellSummable', bold: true }, + { text: "", style: 'tableCellSummable' } + ] + ] +}, + + +]; + +export const headerSettings: HeaderSettings = { + template: 'regular', + headerContent, + headerOnEveryPage: true, + headerRightStrings: headerRightStrings +}; + +// Sample PDF content sections - keeping it empty since table is added in getPdfMakeDocDefinition +export const sampleContent: Content = []; diff --git a/src/pdf/types/PdfMake.ts b/src/pdf/types/PdfMake.ts new file mode 100644 index 0000000..058c57a --- /dev/null +++ b/src/pdf/types/PdfMake.ts @@ -0,0 +1,57 @@ +import { ContentText, TableCellProperties, TableLayout, CustomTableLayout, Content, ImageDefinition } from "pdfmake/interfaces"; +import { headerTemplates } from "../headers/getHeaderDefinition"; + +export interface HeaderContent { + image?: ImageDefinition; + content: Content[]; + topSection?: Content[]; +} + +export interface PdfHeader { + table: { + widths: string[] | number[]; + headerRows?: number; + }; + layout: string; +} + +export interface HeaderImage { + logoImage: ImageDefinition; +} + +export interface HeaderSettings { + template: keyof typeof headerTemplates; + headerContent: HeaderContent; + headerOnEveryPage?: boolean; + headerRightStrings?: Content[]; +} + +export interface TableData { + title?: ContentText & TableCellProperties; + subtitle?: ContentText & TableCellProperties; + rightStrings: ContentText[]; + totals?: ContentText[]; + subtitleRightStrings?: ContentText[]; + subtitleTotals?: ContentText[]; + headers: ContentText[]; + rows: ContentText[][]; + supplierInfo: ContentText & TableCellProperties; + columnCount?: number; + rightStringsLayout?: { + leftColSpan?: number; + rightColSpan?: number; + }; +} + +export interface TableConfig { + data: TableData[]; + headerSettings?: HeaderSettings; + tableLayout?: TableLayout | CustomTableLayout; + borders?: { + useBorderColor?: boolean; + outerBorderWidth?: number; + innerBorderWidth?: number; + outerBorderColor?: string; + innerBorderColor?: string; + }; +} \ No newline at end of file diff --git a/src/pdf/utils/fetchValidImageURL.ts b/src/pdf/utils/fetchValidImageURL.ts new file mode 100644 index 0000000..8dc2d6a --- /dev/null +++ b/src/pdf/utils/fetchValidImageURL.ts @@ -0,0 +1,33 @@ +import { ImageDefinition } from 'pdfmake/interfaces'; + +export const checkImageValidGetDef = async (inputImageDef: ImageDefinition) => { + try { + const response = await fetch(inputImageDef.url, { + headers: inputImageDef.headers || {}, + method: 'HEAD', // Use HEAD to validate without downloading the image + }); + + if (!response.ok) { + throw new Error('Image URL is invalid'); + } + + const validUrl = inputImageDef.url; + const imageValue = inputImageDef.headers + ? { url: validUrl, headers: inputImageDef.headers } + : validUrl; + + return { + imageDef: inputImageDef, + image: { headerLogo: imageValue }, // Use 'headerLogo' as the key for pdfmake + }; + } catch (error) { + console.error('Error validating image URL:', error); + return { + imageDef: { + ...inputImageDef, + text: '', // Fallback if URL is invalid + } as ImageDefinition, + image: {}, + }; + } +}; \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -///