pembaruan tanggal
This commit is contained in:
267
bun.lock
267
bun.lock
@@ -30,6 +30,7 @@
|
||||
"react-dom": "^19.2.0",
|
||||
"react-router-dom": "^7.9.6",
|
||||
"swr": "^2.3.6",
|
||||
"tailwindcss": "^4.0.0",
|
||||
"zod": "^4.1.13",
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -42,14 +43,18 @@
|
||||
"@types/lodash": "^4.17.21",
|
||||
"@types/react": "^19.2.6",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@unocss/cli": "^66.5.10",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-preset-mantine": "^1.18.0",
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"prisma": "^6.19.0",
|
||||
"unocss": "^66.5.10",
|
||||
},
|
||||
},
|
||||
},
|
||||
"packages": {
|
||||
"@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="],
|
||||
|
||||
"@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="],
|
||||
|
||||
"@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="],
|
||||
@@ -84,6 +89,58 @@
|
||||
|
||||
"@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="],
|
||||
|
||||
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="],
|
||||
|
||||
"@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="],
|
||||
|
||||
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="],
|
||||
|
||||
"@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="],
|
||||
|
||||
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="],
|
||||
|
||||
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="],
|
||||
|
||||
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="],
|
||||
|
||||
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="],
|
||||
|
||||
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="],
|
||||
|
||||
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="],
|
||||
|
||||
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="],
|
||||
|
||||
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="],
|
||||
|
||||
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="],
|
||||
|
||||
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="],
|
||||
|
||||
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="],
|
||||
|
||||
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="],
|
||||
|
||||
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="],
|
||||
|
||||
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="],
|
||||
|
||||
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="],
|
||||
|
||||
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="],
|
||||
|
||||
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="],
|
||||
|
||||
"@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="],
|
||||
|
||||
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="],
|
||||
|
||||
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="],
|
||||
|
||||
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="],
|
||||
|
||||
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="],
|
||||
|
||||
"@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, ""],
|
||||
|
||||
"@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, ""],
|
||||
@@ -94,6 +151,10 @@
|
||||
|
||||
"@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, ""],
|
||||
|
||||
"@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
|
||||
|
||||
"@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="],
|
||||
|
||||
"@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="],
|
||||
|
||||
"@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="],
|
||||
@@ -146,6 +207,8 @@
|
||||
|
||||
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
|
||||
|
||||
"@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="],
|
||||
|
||||
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
|
||||
|
||||
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
|
||||
@@ -204,6 +267,8 @@
|
||||
|
||||
"@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.3.4", "", { "os": "win32", "cpu": "x64" }, "sha512-ZQiSDFfSUdOrPTiL2GvkxlC/kMED4fsJwdZnwJK6S9ylXnk9xY/9ZXfe1615SFLQl2LsVRzJAtjQLeM0BifIKQ=="],
|
||||
|
||||
"@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
|
||||
|
||||
"@prisma/client": ["@prisma/client@6.19.0", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-QXFT+N/bva/QI2qoXmjBzL7D6aliPffIwP+81AdTGq0FXDoLxLkWivGMawG8iM5B9BKfxLIXxfWWAF6wbuJU6g=="],
|
||||
|
||||
"@prisma/config": ["@prisma/config@6.19.0", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-zwCayme+NzI/WfrvFEtkFhhOaZb/hI+X8TTjzjJ252VbPxAl2hWHK5NMczmnG9sXck2lsXrxIZuK524E25UNmg=="],
|
||||
@@ -218,6 +283,52 @@
|
||||
|
||||
"@prisma/get-platform": ["@prisma/get-platform@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-ym85WDO2yDhC3fIXHWYpG3kVMBA49cL1XD2GCsCF8xbwoy2OkDQY44gEbAt2X46IQ4Apq9H6g0Ex1iFfPqEkHA=="],
|
||||
|
||||
"@quansync/fs": ["@quansync/fs@1.0.0", "", { "dependencies": { "quansync": "^1.0.0" } }, "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ=="],
|
||||
|
||||
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.53.3", "", { "os": "android", "cpu": "arm" }, "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w=="],
|
||||
|
||||
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.53.3", "", { "os": "android", "cpu": "arm64" }, "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w=="],
|
||||
|
||||
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.53.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA=="],
|
||||
|
||||
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.53.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ=="],
|
||||
|
||||
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.53.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w=="],
|
||||
|
||||
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.53.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q=="],
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw=="],
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg=="],
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w=="],
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A=="],
|
||||
|
||||
"@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g=="],
|
||||
|
||||
"@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.53.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw=="],
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g=="],
|
||||
|
||||
"@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A=="],
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.53.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg=="],
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w=="],
|
||||
|
||||
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q=="],
|
||||
|
||||
"@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.53.3", "", { "os": "none", "cpu": "arm64" }, "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw=="],
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.53.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw=="],
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.53.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA=="],
|
||||
|
||||
"@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg=="],
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ=="],
|
||||
|
||||
"@scalar/openapi-types": ["@scalar/openapi-types@0.1.1", "", {}, ""],
|
||||
|
||||
"@scalar/themes": ["@scalar/themes@0.9.86", "", { "dependencies": { "@scalar/types": "0.1.7" } }, ""],
|
||||
@@ -244,6 +355,8 @@
|
||||
|
||||
"@types/bun": ["@types/bun@1.2.23", "", { "dependencies": { "bun-types": "1.2.23" } }, "sha512-le8ueOY5b6VKYf19xT3McVbXqLqmxzPXHsQT/q9JHgikJ2X22wyTW3g3ohz2ZMnp7dod6aduIiq8A14Xyimm0A=="],
|
||||
|
||||
"@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
|
||||
|
||||
"@types/jwt-decode": ["@types/jwt-decode@3.1.0", "", { "dependencies": { "jwt-decode": "*" } }, "sha512-tthwik7TKkou3mVnBnvVuHnHElbjtdbM63pdBCbZTirCt3WAdM73Y79mOri7+ljsS99ZVwUFZHLMxJuJnv/z1w=="],
|
||||
|
||||
"@types/lodash": ["@types/lodash@4.17.21", "", {}, "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ=="],
|
||||
@@ -256,14 +369,70 @@
|
||||
|
||||
"@unhead/schema": ["@unhead/schema@1.11.20", "", { "dependencies": { "hookable": "^5.5.3", "zhead": "^2.2.4" } }, ""],
|
||||
|
||||
"@unocss/astro": ["@unocss/astro@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/reset": "66.5.10", "@unocss/vite": "66.5.10" }, "peerDependencies": { "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" }, "optionalPeers": ["vite"] }, "sha512-R1UU8lfIqcuorGpiuU+9pQEmK8uBBk1sf5re1db9kr23924Ia/aBCmfs4W2xyVCwJ0cGBv9C3ywDgOsgkHFCbQ=="],
|
||||
|
||||
"@unocss/cli": ["@unocss/cli@66.5.10", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "@unocss/config": "66.5.10", "@unocss/core": "66.5.10", "@unocss/preset-uno": "66.5.10", "cac": "^6.7.14", "chokidar": "^3.6.0", "colorette": "^2.0.20", "consola": "^3.4.2", "magic-string": "^0.30.21", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "tinyglobby": "^0.2.15", "unplugin-utils": "^0.3.1" }, "bin": { "unocss": "bin/unocss.mjs" } }, "sha512-3tGBTGLLTtwGEwXGWsL77K4bTvNG115VJvYPPit68Z7uXnA6S8xpkwaFFDJ3kbrsWtgXBpIgM06HhtT6/3MILg=="],
|
||||
|
||||
"@unocss/config": ["@unocss/config@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "unconfig": "^7.4.1" } }, "sha512-udBhfMe+2MU70ZdjnRLnwLQ+0EHYJ4f5JjjvHsfmQ0If4KeYmSStWBuX+/LHNQidhl487JiwW1lBDQ8pKHmbiw=="],
|
||||
|
||||
"@unocss/core": ["@unocss/core@66.5.10", "", {}, "sha512-SEmPE4pWNn9VcCvZqovPwFGuG/j69W3zh+x1Ky4z/I2pnyoB0Y0lBmq22KVu/dwExe+ZKKTQpxa0j5rbE27rDQ=="],
|
||||
|
||||
"@unocss/extractor-arbitrary-variants": ["@unocss/extractor-arbitrary-variants@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10" } }, "sha512-9JsAY1a68WZaIbSiwQa7LLAO+t4T5nnhgmNxY3MGaK58k6Qa9ayZb4AG4fqOpw+Zn8tmKd7yXJ0s+27sx1n2BA=="],
|
||||
|
||||
"@unocss/inspector": ["@unocss/inspector@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/rule-utils": "66.5.10", "colorette": "^2.0.20", "gzip-size": "^6.0.0", "sirv": "^3.0.2", "vue-flow-layout": "^0.2.0" } }, "sha512-L/Nvi4bkXFxbGNOi7TPNnIIDfY1zKghfJ+cF7To/WrXplP1Y4nEZa2kGwcVBcsaysACri0whU19Dh3yf+bG+Pg=="],
|
||||
|
||||
"@unocss/postcss": ["@unocss/postcss@66.5.10", "", { "dependencies": { "@unocss/config": "66.5.10", "@unocss/core": "66.5.10", "@unocss/rule-utils": "66.5.10", "css-tree": "^3.1.0", "postcss": "^8.5.6", "tinyglobby": "^0.2.15" } }, "sha512-Hp9k+1AB0qxc6b7Sh7JPKwYgcklIvRhleYtQldFbdU5eAY5InOy9m7gSZxRsz2WQb6IzliqO7Or34PbhnMlcFQ=="],
|
||||
|
||||
"@unocss/preset-attributify": ["@unocss/preset-attributify@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10" } }, "sha512-dEFs8kXC9xoqolQBFvtgXvdzWQqHoWqSj/eosX2oDmy8REk7UErpBvMmqR4pCP7mqdtG8yZ2l34Gtb42hDM3JA=="],
|
||||
|
||||
"@unocss/preset-icons": ["@unocss/preset-icons@66.5.10", "", { "dependencies": { "@iconify/utils": "^3.0.2", "@unocss/core": "66.5.10", "ofetch": "^1.5.1" } }, "sha512-zf4Sev/F2QQgVjGjKBCw3BKc15HQAtvUrNX2zymXXbAjt83Lf27ofYzTAUVUO9mi/oQhXcP5sQrIGIe7iQX3hw=="],
|
||||
|
||||
"@unocss/preset-mini": ["@unocss/preset-mini@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/extractor-arbitrary-variants": "66.5.10", "@unocss/rule-utils": "66.5.10" } }, "sha512-jRmweaPhaTGBSDKFuhEGayGyuGr66rTRRqzv5EAdHH4x43TFlJ1RO5SVlzzJdo1zJy4vyGSINIVKeI49FYhEKQ=="],
|
||||
|
||||
"@unocss/preset-tagify": ["@unocss/preset-tagify@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10" } }, "sha512-SLfMhNQCFEXspp/zREZv61dmuvRQ+CVI04zcpGpg4LnqvMKkLVyPPetlhgJwW1hd9D7OWkUGoQm9JA0O4+9XJA=="],
|
||||
|
||||
"@unocss/preset-typography": ["@unocss/preset-typography@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/rule-utils": "66.5.10" } }, "sha512-GMchTwywSA6vwiZ2w8svBY9U9br/OW7vIjwyYis0c9kp4h8apKCrLtAv2LjmlKyg12IDy9d8jp/hZ1zP9umung=="],
|
||||
|
||||
"@unocss/preset-uno": ["@unocss/preset-uno@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/preset-wind3": "66.5.10" } }, "sha512-O3R99td+Jt3XAJh1pVbOSTu3z7jUosg80y90iu6JQIpvXI/pGanWJEhoEz95SgJmRV+vXNEn4f6tIvfUXkTd/w=="],
|
||||
|
||||
"@unocss/preset-web-fonts": ["@unocss/preset-web-fonts@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "ofetch": "^1.5.1" } }, "sha512-rA9pjL+CuDpyEekawX54pkWHc4n+kfhoYsAFBWBtNHl4akDYsbnSA+2EF/XiEbRvz1YVFYDucZ9KpUiaq9+xtQ=="],
|
||||
|
||||
"@unocss/preset-wind": ["@unocss/preset-wind@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/preset-wind3": "66.5.10" } }, "sha512-tR8JaXHnL006qcIEbD4lalZoqvW78SE+OvD7Sv5yj6s5FjwLZTiaJP8/0RTlx8SvhM6bw+NDxKQq678ntiZdiA=="],
|
||||
|
||||
"@unocss/preset-wind3": ["@unocss/preset-wind3@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/preset-mini": "66.5.10", "@unocss/rule-utils": "66.5.10" } }, "sha512-N2Wgu+AnTSr4jIEAfajOfUtwESE/Zzr0GxwW88+MHIw6Tzj6tZeCEKNNKFzsgwfGkoNjvwIeIbkaIrIGJ7SveA=="],
|
||||
|
||||
"@unocss/preset-wind4": ["@unocss/preset-wind4@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/extractor-arbitrary-variants": "66.5.10", "@unocss/rule-utils": "66.5.10" } }, "sha512-PXLxEcYJUsysQvK4xj3iA7plvq5RcAt9S1vLlOmBtl2X66dWU6XqiGEu7lLfqoypip1bPCOGlRB7HbfMuQpftQ=="],
|
||||
|
||||
"@unocss/reset": ["@unocss/reset@66.5.10", "", {}, "sha512-xlydsCqbmVtA8QbVWv8+R66v4MJzeDXYsdoGDz7xsa2r65RD4UvJFZuyueY7+/bhzns9QhNOxltEiPi06j3Gvw=="],
|
||||
|
||||
"@unocss/rule-utils": ["@unocss/rule-utils@66.5.10", "", { "dependencies": { "@unocss/core": "^66.5.10", "magic-string": "^0.30.21" } }, "sha512-497GPWZpArNG25cto0Yq3/Yw+i0x7/N/ySq1HHeE3lB43sdmCv6+m6QEv14I/9/e5WJhQOmrY5LmHZYXC7xxMw=="],
|
||||
|
||||
"@unocss/transformer-attributify-jsx": ["@unocss/transformer-attributify-jsx@66.5.10", "", { "dependencies": { "@babel/parser": "7.27.7", "@babel/traverse": "7.27.7", "@unocss/core": "66.5.10" } }, "sha512-WAAVWWx/BVQ9dk1W9FCP7UL9dLScmNDrRwBRah5WJMtKaV890RaL4wLItfQH0SN31C+quTwuaU0Hi6BiBsc9qw=="],
|
||||
|
||||
"@unocss/transformer-compile-class": ["@unocss/transformer-compile-class@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10" } }, "sha512-NFXf5qTVJXZNnZTpnCSQmNwJhQrmCQv/tgmX69rwNDYKmYcBufpaKfwKzO+EkVQz4A6ySv09Q9PaNBCH5N0FTQ=="],
|
||||
|
||||
"@unocss/transformer-directives": ["@unocss/transformer-directives@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10", "@unocss/rule-utils": "66.5.10", "css-tree": "^3.1.0" } }, "sha512-EDak3DGW+rSYjoZNwU8xJIXbwif+q9e3cjhCZy48ll1nfyg2E1Znqtwv/X8vLRr8fJ0gWn75P2uGi4jfGLZzMg=="],
|
||||
|
||||
"@unocss/transformer-variant-group": ["@unocss/transformer-variant-group@66.5.10", "", { "dependencies": { "@unocss/core": "66.5.10" } }, "sha512-9DWi9bLOGwdw6whCTdywVD9+lA5lkeqcgy9sMoizfUa4CfT1bSdMT27VoAbYhxeEznV92BCW2jCYt0I8M00phw=="],
|
||||
|
||||
"@unocss/vite": ["@unocss/vite@66.5.10", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "@unocss/config": "66.5.10", "@unocss/core": "66.5.10", "@unocss/inspector": "66.5.10", "chokidar": "^3.6.0", "magic-string": "^0.30.21", "pathe": "^2.0.3", "tinyglobby": "^0.2.15", "unplugin-utils": "^0.3.1" }, "peerDependencies": { "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" } }, "sha512-GegFDmcWe0V2CR/uN1f+iQuDh2R1vA6EAwSvl1nyL+6ue0/zLyF9yhdVnypIVlJnS6RK/xaLPOP6vWJnqRGhZg=="],
|
||||
|
||||
"acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="],
|
||||
|
||||
"add": ["add@2.0.6", "", {}, "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q=="],
|
||||
|
||||
"adhan": ["adhan@4.4.3", "", {}, "sha512-568KkQd8OMLUj7o7+d2FDcm6vZHWQrE7vsm/Evssh8sfUDpPyaboj3PVsScZAr7L7sNRgPrtLMmDZZfM7VeAYw=="],
|
||||
|
||||
"anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
|
||||
|
||||
"argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
|
||||
|
||||
"astronomia": ["astronomia@4.2.0", "", {}, "sha512-mTvpBGyXB80aSsDhAAiuwza5VqAyqmj5yzhjBrFhRy17DcWDzJrb8Vdl4Sm+g276S+mY7bk/5hi6akZ5RQFeHg=="],
|
||||
|
||||
"binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
|
||||
|
||||
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
||||
|
||||
"bun": ["bun@1.3.4", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.3.4", "@oven/bun-darwin-x64": "1.3.4", "@oven/bun-darwin-x64-baseline": "1.3.4", "@oven/bun-linux-aarch64": "1.3.4", "@oven/bun-linux-aarch64-musl": "1.3.4", "@oven/bun-linux-x64": "1.3.4", "@oven/bun-linux-x64-baseline": "1.3.4", "@oven/bun-linux-x64-musl": "1.3.4", "@oven/bun-linux-x64-musl-baseline": "1.3.4", "@oven/bun-windows-x64": "1.3.4", "@oven/bun-windows-x64-baseline": "1.3.4" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bunx.exe" } }, "sha512-xV6KgD5ImquuKsoghzbWmYzeCXmmSgN6yJGz444hri2W+NGKNRFUNrEhy9+/rRXbvNA2qF0K0jAwqFNy1/GhBg=="],
|
||||
|
||||
"bun-types": ["bun-types@1.2.23", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, ""],
|
||||
@@ -272,13 +441,15 @@
|
||||
|
||||
"c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="],
|
||||
|
||||
"cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="],
|
||||
|
||||
"caldate": ["caldate@2.0.5", "", { "dependencies": { "moment-timezone": "^0.5.43" } }, "sha512-JndhrUuDuE975KUhFqJaVR1OQkCHZqpOrJur/CFXEIEhWhBMjxO85cRSK8q4FW+B+yyPq6GYua2u4KvNzTcq0w=="],
|
||||
|
||||
"camelcase-css": ["camelcase-css@2.0.1", "", {}, ""],
|
||||
|
||||
"caniuse-lite": ["caniuse-lite@1.0.30001760", "", {}, "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw=="],
|
||||
|
||||
"chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
||||
"chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
|
||||
|
||||
"citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="],
|
||||
|
||||
@@ -286,12 +457,16 @@
|
||||
|
||||
"clsx": ["clsx@2.1.1", "", {}, ""],
|
||||
|
||||
"colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="],
|
||||
|
||||
"confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="],
|
||||
|
||||
"consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="],
|
||||
|
||||
"cookie": ["cookie@1.0.2", "", {}, ""],
|
||||
|
||||
"css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="],
|
||||
|
||||
"cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, ""],
|
||||
|
||||
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
|
||||
@@ -328,12 +503,16 @@
|
||||
|
||||
"dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="],
|
||||
|
||||
"duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="],
|
||||
|
||||
"effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="],
|
||||
|
||||
"elysia": ["elysia@1.4.16", "", { "dependencies": { "cookie": "^1.0.2", "exact-mirror": "0.2.3", "fast-decode-uri-component": "^1.0.1", "memoirist": "^0.4.0" }, "peerDependencies": { "@sinclair/typebox": ">= 0.34.0 < 1", "@types/bun": ">= 1.2.0", "file-type": ">= 20.0.0", "openapi-types": ">= 12.0.0", "typescript": ">= 5.0.0" }, "optionalPeers": ["@types/bun", "typescript"] }, "sha512-KZtKN160/bdWVKg2hEgyoNXY8jRRquc+m6PboyisaLZL891I+Ufb7Ja6lDAD7vMQur8sLEWIcidZOzj5lWw9UA=="],
|
||||
|
||||
"empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="],
|
||||
|
||||
"esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="],
|
||||
|
||||
"exact-mirror": ["exact-mirror@0.2.3", "", { "peerDependencies": { "@sinclair/typebox": "^0.34.15" }, "optionalPeers": ["@sinclair/typebox"] }, "sha512-aLdARfO0W0ntufjDyytUJQMbNXoB9g+BbA8KcgIq4XOOTYRw48yUGON/Pr64iDrYNZKcKvKbqE0MPW56FF2BXA=="],
|
||||
|
||||
"exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="],
|
||||
@@ -346,14 +525,32 @@
|
||||
|
||||
"file-type": ["file-type@21.1.1", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-ifJXo8zUqbQ/bLbl9sFoqHNTNWbnPY1COImFfM6CCy7z+E+jC1eY9YfOKkx0fckIg+VljAy2/87T61fp0+eEkg=="],
|
||||
|
||||
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
||||
|
||||
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
|
||||
|
||||
"get-nonce": ["get-nonce@1.0.1", "", {}, ""],
|
||||
|
||||
"giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="],
|
||||
|
||||
"glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
|
||||
|
||||
"globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="],
|
||||
|
||||
"gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="],
|
||||
|
||||
"hookable": ["hookable@5.5.3", "", {}, ""],
|
||||
|
||||
"ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
|
||||
|
||||
"is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
|
||||
|
||||
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
|
||||
|
||||
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
|
||||
|
||||
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
|
||||
|
||||
"jalaali-js": ["jalaali-js@1.2.8", "", {}, "sha512-Jl/EwY84JwjW2wsWqeU4pNd22VNQ7EkjI36bDuLw31wH98WQW4fPjD0+mG7cdCK+Y8D6s9R3zLiQ3LaKu6bD8A=="],
|
||||
|
||||
"jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="],
|
||||
@@ -372,12 +569,20 @@
|
||||
|
||||
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
|
||||
|
||||
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
|
||||
|
||||
"mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="],
|
||||
|
||||
"memoirist": ["memoirist@0.4.0", "", {}, "sha512-zxTgA0mSYELa66DimuNQDvyLq36AwDlTuVRbnQtB+VuTcKWm5Qc4z3WkSpgsFWHNhexqkIooqpv4hdcqrX5Nmg=="],
|
||||
|
||||
"mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="],
|
||||
|
||||
"moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="],
|
||||
|
||||
"moment-timezone": ["moment-timezone@0.5.48", "", { "dependencies": { "moment": "^2.29.4" } }, "sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw=="],
|
||||
|
||||
"mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="],
|
||||
|
||||
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
||||
|
||||
"nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, ""],
|
||||
@@ -386,15 +591,21 @@
|
||||
|
||||
"node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="],
|
||||
|
||||
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
||||
|
||||
"nypm": ["nypm@0.6.2", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.2", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "tinyexec": "^1.0.1" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g=="],
|
||||
|
||||
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
|
||||
|
||||
"ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="],
|
||||
|
||||
"ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="],
|
||||
|
||||
"openapi-types": ["openapi-types@12.1.3", "", {}, ""],
|
||||
|
||||
"pathe": ["pathe@1.1.2", "", {}, ""],
|
||||
"package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="],
|
||||
|
||||
"pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
||||
|
||||
"perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="],
|
||||
|
||||
@@ -426,6 +637,8 @@
|
||||
|
||||
"pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="],
|
||||
|
||||
"quansync": ["quansync@1.0.0", "", {}, "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA=="],
|
||||
|
||||
"rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="],
|
||||
|
||||
"react": ["react@19.2.0", "", {}, ""],
|
||||
@@ -452,7 +665,9 @@
|
||||
|
||||
"react-transition-group": ["react-transition-group@4.4.5", "", { "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g=="],
|
||||
|
||||
"readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
||||
"readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
|
||||
|
||||
"rollup": ["rollup@4.53.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.3", "@rollup/rollup-android-arm64": "4.53.3", "@rollup/rollup-darwin-arm64": "4.53.3", "@rollup/rollup-darwin-x64": "4.53.3", "@rollup/rollup-freebsd-arm64": "4.53.3", "@rollup/rollup-freebsd-x64": "4.53.3", "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", "@rollup/rollup-linux-arm-musleabihf": "4.53.3", "@rollup/rollup-linux-arm64-gnu": "4.53.3", "@rollup/rollup-linux-arm64-musl": "4.53.3", "@rollup/rollup-linux-loong64-gnu": "4.53.3", "@rollup/rollup-linux-ppc64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-musl": "4.53.3", "@rollup/rollup-linux-s390x-gnu": "4.53.3", "@rollup/rollup-linux-x64-gnu": "4.53.3", "@rollup/rollup-linux-x64-musl": "4.53.3", "@rollup/rollup-openharmony-arm64": "4.53.3", "@rollup/rollup-win32-arm64-msvc": "4.53.3", "@rollup/rollup-win32-ia32-msvc": "4.53.3", "@rollup/rollup-win32-x64-gnu": "4.53.3", "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA=="],
|
||||
|
||||
"scheduler": ["scheduler@0.27.0", "", {}, ""],
|
||||
|
||||
@@ -462,6 +677,8 @@
|
||||
|
||||
"sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
|
||||
|
||||
"sirv": ["sirv@3.0.2", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g=="],
|
||||
|
||||
"source-map-js": ["source-map-js@1.2.1", "", {}, ""],
|
||||
|
||||
"streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="],
|
||||
@@ -476,20 +693,36 @@
|
||||
|
||||
"tabbable": ["tabbable@6.2.0", "", {}, ""],
|
||||
|
||||
"tailwindcss": ["tailwindcss@4.0.0", "", {}, "sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ=="],
|
||||
|
||||
"tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="],
|
||||
|
||||
"tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, ""],
|
||||
|
||||
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
||||
|
||||
"token-types": ["token-types@6.1.1", "", { "dependencies": { "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ=="],
|
||||
|
||||
"totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="],
|
||||
|
||||
"tslib": ["tslib@2.8.1", "", {}, ""],
|
||||
|
||||
"type-fest": ["type-fest@4.41.0", "", {}, ""],
|
||||
|
||||
"ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="],
|
||||
|
||||
"uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="],
|
||||
|
||||
"unconfig": ["unconfig@7.4.2", "", { "dependencies": { "@quansync/fs": "^1.0.0", "defu": "^6.1.4", "jiti": "^2.6.1", "quansync": "^1.0.0", "unconfig-core": "7.4.2" } }, "sha512-nrMlWRQ1xdTjSnSUqvYqJzbTBFugoqHobQj58B2bc8qxHKBBHMNNsWQFP3Cd3/JZK907voM2geYPWqD4VK3MPQ=="],
|
||||
|
||||
"unconfig-core": ["unconfig-core@7.4.2", "", { "dependencies": { "@quansync/fs": "^1.0.0", "quansync": "^1.0.0" } }, "sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg=="],
|
||||
|
||||
"undici-types": ["undici-types@7.14.0", "", {}, ""],
|
||||
|
||||
"unocss": ["unocss@66.5.10", "", { "dependencies": { "@unocss/astro": "66.5.10", "@unocss/cli": "66.5.10", "@unocss/core": "66.5.10", "@unocss/postcss": "66.5.10", "@unocss/preset-attributify": "66.5.10", "@unocss/preset-icons": "66.5.10", "@unocss/preset-mini": "66.5.10", "@unocss/preset-tagify": "66.5.10", "@unocss/preset-typography": "66.5.10", "@unocss/preset-uno": "66.5.10", "@unocss/preset-web-fonts": "66.5.10", "@unocss/preset-wind": "66.5.10", "@unocss/preset-wind3": "66.5.10", "@unocss/preset-wind4": "66.5.10", "@unocss/transformer-attributify-jsx": "66.5.10", "@unocss/transformer-compile-class": "66.5.10", "@unocss/transformer-directives": "66.5.10", "@unocss/transformer-variant-group": "66.5.10", "@unocss/vite": "66.5.10" }, "peerDependencies": { "@unocss/webpack": "66.5.10", "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" }, "optionalPeers": ["@unocss/webpack", "vite"] }, "sha512-h3OjHVKsYFiet7ZSgxD6+odC1bpx+N0JYP2bWy/vcqjrApaZmYg4CKmvxCFNxw1+qVoxyfhhjcVZHGUpf9jaKA=="],
|
||||
|
||||
"unplugin-utils": ["unplugin-utils@0.3.1", "", { "dependencies": { "pathe": "^2.0.3", "picomatch": "^4.0.3" } }, "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog=="],
|
||||
|
||||
"use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, ""],
|
||||
|
||||
"use-composed-ref": ["use-composed-ref@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, ""],
|
||||
@@ -504,28 +737,44 @@
|
||||
|
||||
"util-deprecate": ["util-deprecate@1.0.2", "", {}, ""],
|
||||
|
||||
"vite": ["vite@7.2.7", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ=="],
|
||||
|
||||
"vue-flow-layout": ["vue-flow-layout@0.2.0", "", {}, "sha512-zKgsWWkXq0xrus7H4Mc+uFs1ESrmdTXlO0YNbR6wMdPaFvosL3fMB8N7uTV308UhGy9UvTrGhIY7mVz9eN+L0Q=="],
|
||||
|
||||
"zhead": ["zhead@2.2.4", "", {}, ""],
|
||||
|
||||
"zod": ["zod@4.1.13", "", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="],
|
||||
|
||||
"@elysiajs/swagger/pathe": ["pathe@1.1.2", "", {}, ""],
|
||||
|
||||
"@scalar/themes/@scalar/types": ["@scalar/types@0.1.7", "", { "dependencies": { "@scalar/openapi-types": "0.2.0", "@unhead/schema": "^1.11.11", "nanoid": "^5.1.5", "type-fest": "^4.20.0", "zod": "^3.23.8" } }, ""],
|
||||
|
||||
"@unocss/transformer-attributify-jsx/@babel/parser": ["@babel/parser@7.27.7", "", { "dependencies": { "@babel/types": "^7.27.7" }, "bin": "./bin/babel-parser.js" }, "sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q=="],
|
||||
|
||||
"@unocss/transformer-attributify-jsx/@babel/traverse": ["@babel/traverse@7.27.7", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.7", "@babel/template": "^7.27.2", "@babel/types": "^7.27.7", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw=="],
|
||||
|
||||
"anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
||||
|
||||
"c12/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
||||
|
||||
"c12/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="],
|
||||
|
||||
"c12/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
||||
|
||||
"giget/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
||||
"mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="],
|
||||
|
||||
"next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="],
|
||||
|
||||
"nypm/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
||||
|
||||
"pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
||||
"readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
||||
|
||||
"@scalar/themes/@scalar/types/@scalar/openapi-types": ["@scalar/openapi-types@0.2.0", "", { "dependencies": { "zod": "^3.23.8" } }, ""],
|
||||
|
||||
"@scalar/themes/@scalar/types/nanoid": ["nanoid@5.1.6", "", { "bin": "bin/nanoid.js" }, ""],
|
||||
|
||||
"@scalar/themes/@scalar/types/zod": ["zod@3.25.76", "", {}, ""],
|
||||
|
||||
"@unocss/transformer-attributify-jsx/@babel/traverse/@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="],
|
||||
|
||||
"c12/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
||||
|
||||
"mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="],
|
||||
}
|
||||
}
|
||||
|
||||
20
package.json
20
package.json
@@ -9,7 +9,8 @@
|
||||
"start": "NODE_ENV=production bun src/index.tsx",
|
||||
"seed": "bun prisma/seed.ts",
|
||||
"generate:route": "bun bin/route.generate.ts",
|
||||
"generate:env": "bun bin/env.generate.ts"
|
||||
"generate:env": "bun bin/env.generate.ts",
|
||||
"unocss": "unocss \"src/**/*.{html,js,jsx,ts,tsx}\" \"public/**/*.html\" -o public/unocss.css -w"
|
||||
},
|
||||
"dependencies": {
|
||||
"@elysiajs/cors": "^1.4.0",
|
||||
@@ -38,21 +39,24 @@
|
||||
"react-dom": "^19.2.0",
|
||||
"react-router-dom": "^7.9.6",
|
||||
"swr": "^2.3.6",
|
||||
"tailwindcss": "^4.0.0",
|
||||
"zod": "^4.1.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"prisma": "^6.19.0",
|
||||
"@types/bun": "latest",
|
||||
"@types/react": "^19.2.6",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/lodash": "^4.17.21",
|
||||
"@types/jwt-decode": "^3.1.0",
|
||||
"@babel/parser": "^7.28.5",
|
||||
"@babel/traverse": "^7.28.5",
|
||||
"@babel/types": "^7.28.5",
|
||||
"@types/babel__traverse": "^7.28.0",
|
||||
"@types/bun": "latest",
|
||||
"@types/jwt-decode": "^3.1.0",
|
||||
"@types/lodash": "^4.17.21",
|
||||
"@types/react": "^19.2.6",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@unocss/cli": "^66.5.10",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-preset-mantine": "^1.18.0",
|
||||
"postcss-simple-vars": "^7.0.1"
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"prisma": "^6.19.0",
|
||||
"unocss": "^66.5.10"
|
||||
}
|
||||
}
|
||||
|
||||
138
public/README.md
Normal file
138
public/README.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Bun React Template Starter
|
||||
|
||||
This template is a starting point for building modern full-stack web applications using Bun, React, ElysiaJS, and Prisma. This project is designed to provide a fast, efficient, and structured development experience with a cutting-edge technology stack.
|
||||
|
||||
## Key Features
|
||||
|
||||
- **Super-Fast Runtime**: Built on top of [Bun](https://bun.sh/), a high-performance JavaScript runtime.
|
||||
- **End-to-End Typesafe Backend**: Utilizes [ElysiaJS](https://elysiajs.com/) for a type-safe API from the backend to the frontend.
|
||||
- **Automatic API Documentation**: Comes with [Elysia Swagger](https://elysiajs.com/plugins/swagger) to automatically generate interactive API documentation.
|
||||
- **Modern Frontend**: A feature-rich and customizable user interface using [React](https://react.dev/) and [Mantine UI](https://mantine.dev/).
|
||||
- **Easy Database Access**: Integrated with [Prisma](https://www.prisma.io/) as an ORM for intuitive and secure database interactions.
|
||||
- **Clear Project Structure**: Logical file and folder organization to facilitate easy navigation and development.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Runtime**: Bun
|
||||
- **Backend**:
|
||||
- **Framework**: ElysiaJS
|
||||
- **ElysiaJS Modules**:
|
||||
- `@elysiajs/cors`: Manages Cross-Origin Resource Sharing policies.
|
||||
- `@elysiajs/jwt`: JSON Web Token-based authentication.
|
||||
- `@elysiajs/swagger`: Creates API documentation (Swagger/OpenAPI).
|
||||
- `@elysiajs/eden`: A typesafe RPC-like client to connect the frontend with the Elysia API.
|
||||
- **Frontend**:
|
||||
- **Library**: React
|
||||
- **UI Framework**: Mantine
|
||||
- **Routing**: React Router
|
||||
- **Data Fetching**: SWR
|
||||
- **Database**:
|
||||
- **ORM**: Prisma
|
||||
- **Supported Databases**: PostgreSQL (default), MySQL, SQLite, etc.
|
||||
- **Language**: TypeScript
|
||||
|
||||
## Getting Started
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-username/bun-react-template-starter.git
|
||||
cd bun-react-template-starter
|
||||
```
|
||||
|
||||
### 2. Install Dependencies
|
||||
|
||||
Ensure you have [Bun](https://bun.sh/docs/installation) installed. Then, run the following command:
|
||||
|
||||
```bash
|
||||
bun install
|
||||
```
|
||||
|
||||
### 3. Configure Environment Variables
|
||||
|
||||
Copy the `.env.example` file to `.env` and customize the values.
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Fill in your `.env` file similar to the example below:
|
||||
|
||||
```
|
||||
DATABASE_URL="postgresql://user:password@host:port/database?schema=public"
|
||||
JWT_SECRET=a_super_long_and_secure_secret
|
||||
BUN_PUBLIC_BASE_URL=http://localhost:3000
|
||||
PORT=3000
|
||||
```
|
||||
|
||||
After that, create TypeScript type declarations for your environment variables with the provided script:
|
||||
|
||||
```bash
|
||||
bun run generate:env
|
||||
```
|
||||
|
||||
This command will generate a `types/env.d.ts` file based on your `.env`.
|
||||
|
||||
### 4. Database Preparation
|
||||
|
||||
Make sure your PostgreSQL database server is running. Then, apply the Prisma schema to your database:
|
||||
|
||||
```bash
|
||||
bunx prisma db push
|
||||
```
|
||||
|
||||
You can also seed the database with initial data using the following script:
|
||||
|
||||
```bash
|
||||
bun run seed
|
||||
```
|
||||
|
||||
### 5. Running the Development Server
|
||||
|
||||
```bash
|
||||
bun run dev
|
||||
```
|
||||
|
||||
The application will be running at `http://localhost:3000`. The server supports hot-reloading, so changes in the code will be reflected instantly without needing a manual restart.
|
||||
|
||||
### 6. Accessing API Documentation (Swagger)
|
||||
|
||||
Once the server is running, you can access the automatically generated API documentation at:
|
||||
|
||||
`http://localhost:3000/swagger`
|
||||
|
||||
## Available Scripts
|
||||
|
||||
- `bun run dev`: Runs the development server with hot-reloading.
|
||||
- `bun run build`: Builds the frontend application for production into the `dist` directory.
|
||||
- `bun run start`: Runs the application in production mode.
|
||||
- `bun run seed`: Executes the database seeding script located in `prisma/seed.ts`.
|
||||
- `bun run generate:route`: A utility to create new route files in the backend.
|
||||
- `bun run generate:env`: Generates a type definition file (`.d.ts`) from the variables in `.env`.
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
/
|
||||
├── bin/ # Utility scripts (generators)
|
||||
├── prisma/ # Database schema, migrations, and seed
|
||||
├── src/ # Main source code
|
||||
│ ├── App.tsx # Root application component
|
||||
│ ├── clientRoutes.ts # Route definitions for the frontend
|
||||
│ ├── frontend.tsx # Entry point for client-side rendering (React)
|
||||
│ ├── index.css # Global CSS file
|
||||
│ ├── index.html # Main HTML template
|
||||
│ ├── index.tsx # Main entry point for the app (server and client)
|
||||
│ ├── components/ # Reusable React components
|
||||
│ ├── lib/ # Shared libraries/helpers (e.g., apiFetch)
|
||||
│ ├── pages/ # React page components
|
||||
│ └── server/ # Backend code (ElysiaJS)
|
||||
│ ├── lib/ # Server-specific libraries (e.g., prisma client)
|
||||
│ ├── middlewares/ # Middleware for the API
|
||||
│ └── routes/ # API route files
|
||||
└── types/ # TypeScript type definitions
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are highly welcome! Please feel free to create a pull request to add features, fix bugs, or improve the documentation.
|
||||
205
public/unocss.css
Normal file
205
public/unocss.css
Normal file
@@ -0,0 +1,205 @@
|
||||
/* layer: preflights */
|
||||
*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / 0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}
|
||||
/* layer: shortcuts */
|
||||
.container{width:100%;}
|
||||
@media (min-width: 640px){
|
||||
.container{max-width:640px;}
|
||||
}
|
||||
@media (min-width: 768px){
|
||||
.container{max-width:768px;}
|
||||
}
|
||||
@media (min-width: 1024px){
|
||||
.container{max-width:1024px;}
|
||||
}
|
||||
@media (min-width: 1280px){
|
||||
.container{max-width:1280px;}
|
||||
}
|
||||
@media (min-width: 1536px){
|
||||
.container{max-width:1536px;}
|
||||
}
|
||||
/* layer: default */
|
||||
.visible{visibility:visible;}
|
||||
.sticky{position:sticky;}
|
||||
.static{position:static;}
|
||||
.top-0{top:0;}
|
||||
.z-50{z-index:50;}
|
||||
[order~="\32 "]{order:2;}
|
||||
[order~="\33 "]{order:3;}
|
||||
[order~="\34 "]{order:4;}
|
||||
.grid{display:grid;}
|
||||
.grid-cols-2,
|
||||
[cols~="\32 "]{grid-template-columns:repeat(2,minmax(0,1fr));}
|
||||
.grid-cols-7,
|
||||
[cols~="\37 "]{grid-template-columns:repeat(7,minmax(0,1fr));}
|
||||
[cols~="\34 "]{grid-template-columns:repeat(4,minmax(0,1fr));}
|
||||
.mx-auto{margin-left:auto;margin-right:auto;}
|
||||
.mb-2{margin-bottom:0.5rem;}
|
||||
.mb-3{margin-bottom:0.75rem;}
|
||||
.mb-4{margin-bottom:1rem;}
|
||||
.mb-6{margin-bottom:1.5rem;}
|
||||
.mt-10{margin-top:2.5rem;}
|
||||
.mt-2{margin-top:0.5rem;}
|
||||
.mt-3{margin-top:0.75rem;}
|
||||
.mt-4{margin-top:1rem;}
|
||||
.mt-7{margin-top:1.75rem;}
|
||||
[mb~="lg"]{margin-bottom:1.125rem;}
|
||||
[mb~="sm"]{margin-bottom:0.875rem;}
|
||||
[mt~="sm"]{margin-top:0.875rem;}
|
||||
.inline-block{display:inline-block;}
|
||||
.hidden{display:none;}
|
||||
[size~="\31 6"]{width:4rem;height:4rem;}
|
||||
[size~="\31 rem"]{width:1rem;height:1rem;}
|
||||
[size~="\32 2"]{width:5.5rem;height:5.5rem;}
|
||||
[size~="\32 rem"]{width:2rem;height:2rem;}
|
||||
[size~="\34 20"]{width:105rem;height:105rem;}
|
||||
[size~="\36 rem"]{width:6rem;height:6rem;}
|
||||
[size~="lg"]{width:32rem;height:32rem;}
|
||||
[size~="md"]{width:28rem;height:28rem;}
|
||||
[size~="sm"]{width:24rem;height:24rem;}
|
||||
[size~="xl"]{width:36rem;height:36rem;}
|
||||
[size~="xs"]{width:20rem;height:20rem;}
|
||||
.h-11{height:2.75rem;}
|
||||
.h1{height:0.25rem;}
|
||||
.h2{height:0.5rem;}
|
||||
.h3{height:0.75rem;}
|
||||
.max-w-\[1200px\]{max-width:1200px;}
|
||||
.max-w-2xl{max-width:42rem;}
|
||||
.max-w-xl{max-width:36rem;}
|
||||
.min-h-screen{min-height:100vh;}
|
||||
.w-11{width:2.75rem;}
|
||||
[h~="\31 00\%"]{height:100%;}
|
||||
[w~="\31 00"]{width:25rem;}
|
||||
[w~="\31 00\%"]{width:100%;}
|
||||
[w~="\32 00"]{width:50rem;}
|
||||
.flex{display:flex;}
|
||||
.grow,
|
||||
[grow=""]{flex-grow:1;}
|
||||
.flex-wrap{flex-wrap:wrap;}
|
||||
.hover\:-translate-y-2:hover{--un-translate-y:-0.5rem;transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
|
||||
.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
|
||||
.place-items-center{place-items:center;}
|
||||
.items-center{align-items:center;}
|
||||
[justify~="end"]{justify-content:flex-end;}
|
||||
[justify~="center"]{justify-content:center;}
|
||||
.justify-between{justify-content:space-between;}
|
||||
.gap-1{gap:0.25rem;}
|
||||
.gap-2,
|
||||
[gap~="\32 "]{gap:0.5rem;}
|
||||
.gap-3,
|
||||
[gap~="xs"]{gap:0.75rem;}
|
||||
.gap-4{gap:1rem;}
|
||||
.gap-5,
|
||||
[gap~="xl"]{gap:1.25rem;}
|
||||
.gap-8{gap:2rem;}
|
||||
[gap~="\30 "]{gap:0;}
|
||||
[gap~="\32 0"]{gap:5rem;}
|
||||
[gap~="\36 "]{gap:1.5rem;}
|
||||
[gap~="\37 0"]{gap:17.5rem;}
|
||||
[gap~="lg"]{gap:1.125rem;}
|
||||
[gap~="sm"]{gap:0.875rem;}
|
||||
.overflow-x-hidden{overflow-x:hidden;}
|
||||
.b,
|
||||
.border{border-width:1px;}
|
||||
.border-b{border-bottom-width:1px;}
|
||||
.border-t{border-top-width:1px;}
|
||||
.border-red-500\/20{border-color:rgb(239 68 68 / 0.2);}
|
||||
.border-white\/10{border-color:rgb(255 255 255 / 0.1);}
|
||||
.border-white\/15{border-color:rgb(255 255 255 / 0.15);}
|
||||
.rounded-2xl{border-radius:1rem;}
|
||||
.rounded-full{border-radius:9999px;}
|
||||
.rounded-lg{border-radius:0.5rem;}
|
||||
.rounded-xl{border-radius:0.75rem;}
|
||||
.bg-\[linear-gradient\(180deg\,rgba\(7\,10\,20\,0\.6\)\,rgba\(7\,10\,20\,0\.35\)\)\]{background-image:linear-gradient(180deg,rgba(7,10,20,0.6),rgba(7,10,20,0.35));}
|
||||
.bg-\[radial-gradient\(1000px_400px_at_90\%_90\%\,rgba\(79\,70\,229\,0\.10\)\,transparent_8\%\)\]{background-image:radial-gradient(1000px 400px at 90% 90%,rgba(79,70,229,0.10),transparent 8%);}
|
||||
.bg-\[radial-gradient\(1200px_600px_at_10\%_10\%\,rgba\(124\,58\,237\,0\.12\)\,transparent_8\%\)\]{background-image:radial-gradient(1200px 600px at 10% 10%,rgba(124,58,237,0.12),transparent 8%);}
|
||||
.bg-cyan-600{--un-bg-opacity:1;background-color:rgb(8 145 178 / var(--un-bg-opacity)) /* #0891b2 */;}
|
||||
.bg-red-900\/30{background-color:rgb(127 29 29 / 0.3) /* #7f1d1d */;}
|
||||
.bg-white\/5{background-color:rgb(255 255 255 / 0.05) /* #fff */;}
|
||||
[bg~="gray"]{--un-bg-opacity:1;background-color:rgb(156 163 175 / var(--un-bg-opacity)) /* #9ca3af */;}
|
||||
.hover\:bg-white\/10:hover{background-color:rgb(255 255 255 / 0.1) /* #fff */;}
|
||||
.from-\[\#071024\]{--un-gradient-from-position:0%;--un-gradient-from:rgb(7 16 36 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(7 16 36 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.from-indigo-600{--un-gradient-from-position:0%;--un-gradient-from:rgb(79 70 229 / var(--un-from-opacity, 1)) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(79 70 229 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.from-transparent{--un-gradient-from-position:0%;--un-gradient-from:transparent var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.from-white\/5{--un-gradient-from-position:0%;--un-gradient-from:rgb(255 255 255 / 0.05) var(--un-gradient-from-position);--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);--un-gradient-stops:var(--un-gradient-from), var(--un-gradient-to);}
|
||||
.via-\[\#071229\]{--un-gradient-via-position:50%;--un-gradient-to:rgb(7 18 41 / 0);--un-gradient-stops:var(--un-gradient-from), rgb(7 18 41 / var(--un-via-opacity, 1)) var(--un-gradient-via-position), var(--un-gradient-to);}
|
||||
.to-\[\#08162f\]{--un-gradient-to-position:100%;--un-gradient-to:rgb(8 22 47 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}
|
||||
.to-black\/25{--un-gradient-to-position:100%;--un-gradient-to:rgb(0 0 0 / 0.25) var(--un-gradient-to-position);}
|
||||
.to-violet-600{--un-gradient-to-position:100%;--un-gradient-to:rgb(124 58 237 / var(--un-to-opacity, 1)) var(--un-gradient-to-position);}
|
||||
.to-white\/0{--un-gradient-to-position:100%;--un-gradient-to:rgb(255 255 255 / 0) var(--un-gradient-to-position);}
|
||||
.bg-gradient-to-b{--un-gradient-shape:to bottom in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}
|
||||
.bg-gradient-to-br{--un-gradient-shape:to bottom right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}
|
||||
.bg-gradient-to-r{--un-gradient-shape:to right in oklch;--un-gradient:var(--un-gradient-shape), var(--un-gradient-stops);background-image:linear-gradient(var(--un-gradient));}
|
||||
[stroke~="\31 \.3"]{stroke-width:1.3px;}
|
||||
.p-3{padding:0.75rem;}
|
||||
.p-5{padding:1.25rem;}
|
||||
[p~="sm"]{padding:0.875rem;}
|
||||
.px-2{padding-left:0.5rem;padding-right:0.5rem;}
|
||||
.px-3{padding-left:0.75rem;padding-right:0.75rem;}
|
||||
.px-4,
|
||||
[px=""]{padding-left:1rem;padding-right:1rem;}
|
||||
.px-5{padding-left:1.25rem;padding-right:1.25rem;}
|
||||
.py-1{padding-top:0.25rem;padding-bottom:0.25rem;}
|
||||
.py-10{padding-top:2.5rem;padding-bottom:2.5rem;}
|
||||
.py-2{padding-top:0.5rem;padding-bottom:0.5rem;}
|
||||
.py-20{padding-top:5rem;padding-bottom:5rem;}
|
||||
.py-24{padding-top:6rem;padding-bottom:6rem;}
|
||||
.py-3{padding-top:0.75rem;padding-bottom:0.75rem;}
|
||||
[px~="sm"]{padding-left:0.875rem;padding-right:0.875rem;}
|
||||
[py~="\38 0"]{padding-top:20rem;padding-bottom:20rem;}
|
||||
[py~="lg"]{padding-top:1.125rem;padding-bottom:1.125rem;}
|
||||
.pb-20{padding-bottom:5rem;}
|
||||
.text-center{text-align:center;}
|
||||
.text-right{text-align:right;}
|
||||
.text-\[12px\]{font-size:12px;}
|
||||
.text-\[13px\]{font-size:13px;}
|
||||
.text-\[14px\]{font-size:14px;}
|
||||
.text-\[15px\]{font-size:15px;}
|
||||
.text-\[16px\]{font-size:16px;}
|
||||
.text-\[18px\]{font-size:18px;}
|
||||
.text-\[22px\]{font-size:22px;}
|
||||
.text-3xl{font-size:1.875rem;line-height:2.25rem;}
|
||||
.text-4xl{font-size:2.25rem;line-height:2.5rem;}
|
||||
.text-indigo-100{--un-text-opacity:1;color:rgb(224 231 255 / var(--un-text-opacity)) /* #e0e7ff */;}
|
||||
.text-red-200{--un-text-opacity:1;color:rgb(254 202 202 / var(--un-text-opacity)) /* #fecaca */;}
|
||||
.text-slate-200{--un-text-opacity:1;color:rgb(226 232 240 / var(--un-text-opacity)) /* #e2e8f0 */;}
|
||||
.text-slate-400{--un-text-opacity:1;color:rgb(148 163 184 / var(--un-text-opacity)) /* #94a3b8 */;}
|
||||
.text-white{--un-text-opacity:1;color:rgb(255 255 255 / var(--un-text-opacity)) /* #fff */;}
|
||||
[c~="blue"],
|
||||
[color~="blue"]{--un-text-opacity:1;color:rgb(96 165 250 / var(--un-text-opacity)) /* #60a5fa */;}
|
||||
[c~="dark"]{--un-text-opacity:1;color:rgb(34 34 34 / var(--un-text-opacity)) /* #222222 */;}
|
||||
[c~="red"],
|
||||
[color~="red"]{--un-text-opacity:1;color:rgb(248 113 113 / var(--un-text-opacity)) /* #f87171 */;}
|
||||
[color~="cyan"]{--un-text-opacity:1;color:rgb(34 211 238 / var(--un-text-opacity)) /* #22d3ee */;}
|
||||
[color~="gray"]{--un-text-opacity:1;color:rgb(156 163 175 / var(--un-text-opacity)) /* #9ca3af */;}
|
||||
[color~="green"]{--un-text-opacity:1;color:rgb(74 222 128 / var(--un-text-opacity)) /* #4ade80 */;}
|
||||
[color~="orange"]{--un-text-opacity:1;color:rgb(251 146 60 / var(--un-text-opacity)) /* #fb923c */;}
|
||||
.font-bold,
|
||||
[fw~="\37 00"]{font-weight:700;}
|
||||
.font-extrabold{font-weight:800;}
|
||||
.font-semibold,
|
||||
[fw~="\36 00"]{font-weight:600;}
|
||||
[fw~="\35 00"]{font-weight:500;}
|
||||
.leading-tight{line-height:1.25;}
|
||||
.capitalize{text-transform:capitalize;}
|
||||
.opacity-70{opacity:0.7;}
|
||||
.opacity-75{opacity:0.75;}
|
||||
.opacity-80{opacity:0.8;}
|
||||
.opacity-85{opacity:0.85;}
|
||||
.opacity-90{opacity:0.9;}
|
||||
.opacity-95{opacity:0.95;}
|
||||
.shadow-lg{--un-shadow:var(--un-shadow-inset) 0 10px 15px -3px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 4px 6px -4px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
.shadow-xl{--un-shadow:var(--un-shadow-inset) 0 20px 25px -5px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 8px 10px -6px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
[shadow~="md"]{--un-shadow:var(--un-shadow-inset) 0 4px 6px -1px var(--un-shadow-color, rgb(0 0 0 / 0.1)),var(--un-shadow-inset) 0 2px 4px -2px var(--un-shadow-color, rgb(0 0 0 / 0.1));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
[shadow~="sm"]{--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color, rgb(0 0 0 / 0.05));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
.hover\:shadow-2xl:hover{--un-shadow:var(--un-shadow-inset) 0 25px 50px -12px var(--un-shadow-color, rgb(0 0 0 / 0.25));box-shadow:var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow);}
|
||||
.outline{outline-style:solid;}
|
||||
.backdrop-blur-md{--un-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}
|
||||
.backdrop-filter{-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);}
|
||||
.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
|
||||
.ease{transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);}
|
||||
@media (min-width: 768px){
|
||||
.md\:grid-cols-\[1fr_420px\]{grid-template-columns:1fr 420px;}
|
||||
.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}
|
||||
.md\:flex{display:flex;}
|
||||
.md\:text-5xl{font-size:3rem;line-height:1;}
|
||||
}
|
||||
@@ -3,10 +3,12 @@ import { ModalsProvider } from "@mantine/modals";
|
||||
import { MantineProvider } from "@mantine/core";
|
||||
import AppRoutes from "./AppRoutes";
|
||||
|
||||
|
||||
import "@mantine/core/styles.css";
|
||||
import "@mantine/notifications/styles.css";
|
||||
import "@mantine/dates/styles.css";
|
||||
|
||||
|
||||
export function App() {
|
||||
return (
|
||||
<MantineProvider defaultColorScheme="dark">
|
||||
|
||||
187
src/index.css
187
src/index.css
@@ -1,187 +0,0 @@
|
||||
:root {
|
||||
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
color-scheme: light dark;
|
||||
color: rgba(255, 255, 255, 0.87);
|
||||
background-color: #242424;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
min-width: 320px;
|
||||
min-height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
body::before {
|
||||
content: "";
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: -1;
|
||||
opacity: 0.05;
|
||||
background: url("./logo.svg");
|
||||
background-size: 256px;
|
||||
transform: rotate(-12deg) scale(1.35);
|
||||
animation: slide 30s linear infinite;
|
||||
pointer-events: none;
|
||||
}
|
||||
@keyframes slide {
|
||||
from {
|
||||
background-position: 0 0;
|
||||
}
|
||||
to {
|
||||
background-position: 256px 224px;
|
||||
}
|
||||
}
|
||||
.app {
|
||||
max-width: 1280px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.logo-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.logo {
|
||||
height: 6em;
|
||||
padding: 1.5em;
|
||||
will-change: filter;
|
||||
transition: filter 0.3s;
|
||||
}
|
||||
.logo:hover {
|
||||
filter: drop-shadow(0 0 2em #646cffaa);
|
||||
}
|
||||
.bun-logo {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
.bun-logo:hover {
|
||||
filter: drop-shadow(0 0 2em #fbf0dfaa);
|
||||
}
|
||||
.react-logo {
|
||||
animation: spin 20s linear infinite;
|
||||
}
|
||||
.react-logo:hover {
|
||||
filter: drop-shadow(0 0 2em #61dafbaa);
|
||||
}
|
||||
@keyframes spin {
|
||||
from {
|
||||
transform: rotate(0);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
h1 {
|
||||
font-size: 3.2em;
|
||||
line-height: 1.1;
|
||||
}
|
||||
code {
|
||||
background-color: #1a1a1a;
|
||||
padding: 0.2em 0.4em;
|
||||
border-radius: 0.3em;
|
||||
font-family: monospace;
|
||||
}
|
||||
.api-tester {
|
||||
margin: 2rem auto 0;
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
text-align: left;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
.endpoint-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
background: #1a1a1a;
|
||||
padding: 0.75rem;
|
||||
border-radius: 12px;
|
||||
font: monospace;
|
||||
border: 2px solid #fbf0df;
|
||||
transition: 0.3s;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.endpoint-row:focus-within {
|
||||
border-color: #f3d5a3;
|
||||
}
|
||||
.method {
|
||||
background: #fbf0df;
|
||||
color: #1a1a1a;
|
||||
padding: 0.3rem 0.7rem;
|
||||
border-radius: 8px;
|
||||
font-weight: 700;
|
||||
font-size: 0.9em;
|
||||
appearance: none;
|
||||
margin: 0;
|
||||
width: min-content;
|
||||
display: block;
|
||||
flex-shrink: 0;
|
||||
border: none;
|
||||
}
|
||||
.method option {
|
||||
text-align: left;
|
||||
}
|
||||
.url-input {
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
background: 0;
|
||||
border: 0;
|
||||
color: #fbf0df;
|
||||
font: 1em monospace;
|
||||
padding: 0.2rem;
|
||||
outline: 0;
|
||||
}
|
||||
.url-input:focus {
|
||||
color: #fff;
|
||||
}
|
||||
.url-input::placeholder {
|
||||
color: rgba(251, 240, 223, 0.4);
|
||||
}
|
||||
.send-button {
|
||||
background: #fbf0df;
|
||||
color: #1a1a1a;
|
||||
border: 0;
|
||||
padding: 0.4rem 1.2rem;
|
||||
border-radius: 8px;
|
||||
font-weight: 700;
|
||||
transition: 0.1s;
|
||||
cursor: var(--bun-cursor);
|
||||
}
|
||||
.send-button:hover {
|
||||
background: #f3d5a3;
|
||||
transform: translateY(-1px);
|
||||
cursor: pointer;
|
||||
}
|
||||
.response-area {
|
||||
width: 100%;
|
||||
min-height: 120px;
|
||||
background: #1a1a1a;
|
||||
border: 2px solid #fbf0df;
|
||||
border-radius: 12px;
|
||||
padding: 0.75rem;
|
||||
color: #fbf0df;
|
||||
font: monospace;
|
||||
resize: vertical;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.response-area:focus {
|
||||
border-color: #f3d5a3;
|
||||
}
|
||||
.response-area::placeholder {
|
||||
color: rgba(251, 240, 223, 0.4);
|
||||
}
|
||||
@media (prefers-reduced-motion) {
|
||||
*,
|
||||
::before,
|
||||
::after {
|
||||
animation: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="icon" type="image/svg+xml" href="./logo.svg" />
|
||||
<link rel="stylesheet" href="/public/unocss.css">
|
||||
<title>Bun + React</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -81,12 +81,7 @@ const Api = new Elysia({
|
||||
|
||||
const app = new Elysia()
|
||||
.use(cors())
|
||||
// .use(
|
||||
// staticPlugin({
|
||||
// assets: "dist",
|
||||
// prefix: "/",
|
||||
// })
|
||||
// )
|
||||
.use(staticPlugin())
|
||||
.use(Api)
|
||||
.use(Docs)
|
||||
.use(Auth)
|
||||
|
||||
@@ -2,364 +2,56 @@ import clientRoutes from "../clientRoutes";
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<html lang="id">
|
||||
<html lang="id" className="dark">
|
||||
<head>
|
||||
<meta charSet="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Jadwal Sholat & Imam — Semua dalam Satu Genggaman</title>
|
||||
|
||||
<style>{`
|
||||
:root{
|
||||
--bg-1: #0f172a;
|
||||
--accent: #4F46E5;
|
||||
--accent-2: #7c3aed;
|
||||
--glass: rgba(255,255,255,0.06);
|
||||
--muted: rgba(255,255,255,0.85);
|
||||
--card: rgba(255,255,255,0.04);
|
||||
--glass-strong: rgba(255,255,255,0.08);
|
||||
--radius-lg: 16px;
|
||||
--radius-sm: 8px;
|
||||
--max-w: 1200px;
|
||||
--glass-border: rgba(255,255,255,0.06);
|
||||
--shadow: 0 10px 30px rgba(2,6,23,0.6);
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
html,body,#root{height:100%}
|
||||
body{
|
||||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial;
|
||||
background:
|
||||
radial-gradient(1200px 600px at 10% 10%, rgba(124,58,237,0.12), transparent 8%),
|
||||
radial-gradient(1000px 400px at 90% 90%, rgba(79,70,229,0.10), transparent 8%),
|
||||
linear-gradient(180deg, #071024 0%, #071229 40%, #08162f 100%);
|
||||
color: var(--muted);
|
||||
-webkit-font-smoothing:antialiased;
|
||||
-moz-osx-font-smoothing:grayscale;
|
||||
overflow-x:hidden;
|
||||
padding-bottom:80px;
|
||||
}
|
||||
|
||||
.container{
|
||||
max-width:var(--max-w);
|
||||
margin:0 auto;
|
||||
padding:0 20px;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
/* NAVBAR */
|
||||
nav{
|
||||
position:sticky;
|
||||
top:0;
|
||||
z-index:60;
|
||||
backdrop-filter: blur(8px);
|
||||
background: linear-gradient(180deg, rgba(7,10,20,0.6), rgba(7,10,20,0.35));
|
||||
border-bottom: 1px solid var(--glass-border);
|
||||
padding:14px 0;
|
||||
}
|
||||
.nav-row{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
justify-content:space-between;
|
||||
gap:12px;
|
||||
}
|
||||
.brand{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
gap:12px;
|
||||
}
|
||||
.logo{
|
||||
width:44px;
|
||||
height:44px;
|
||||
border-radius:10px;
|
||||
background: linear-gradient(135deg,var(--accent),var(--accent-2));
|
||||
display:grid;
|
||||
place-items:center;
|
||||
font-weight:700;
|
||||
color:white;
|
||||
box-shadow: var(--shadow);
|
||||
font-family: Inter, sans-serif;
|
||||
}
|
||||
.brand-title{
|
||||
font-weight:700;
|
||||
font-size:16px;
|
||||
letter-spacing:0.2px;
|
||||
color:white;
|
||||
}
|
||||
|
||||
.nav-links{
|
||||
display:flex;
|
||||
gap:18px;
|
||||
align-items:center;
|
||||
}
|
||||
.nav-links a{
|
||||
color:var(--muted);
|
||||
text-decoration:none;
|
||||
font-weight:600;
|
||||
font-size:14px;
|
||||
padding:8px 10px;
|
||||
border-radius:8px;
|
||||
}
|
||||
.nav-links a:hover{background:var(--glass-strong)}
|
||||
.cta{
|
||||
padding:10px 18px;
|
||||
background: linear-gradient(90deg,var(--accent),var(--accent-2));
|
||||
color:white;
|
||||
border-radius:12px;
|
||||
font-weight:700;
|
||||
text-decoration:none;
|
||||
box-shadow: 0 8px 30px rgba(79,70,229,0.18);
|
||||
display:inline-flex;
|
||||
gap:10px;
|
||||
align-items:center;
|
||||
}
|
||||
|
||||
/* HERO */
|
||||
.hero{
|
||||
padding:100px 0 60px;
|
||||
display:grid;
|
||||
grid-template-columns: 1fr 420px;
|
||||
gap:36px;
|
||||
align-items:center;
|
||||
}
|
||||
.hero-left h1{
|
||||
font-size:40px;
|
||||
line-height:1.05;
|
||||
margin-bottom:12px;
|
||||
color: #fff;
|
||||
font-weight:800;
|
||||
}
|
||||
.kicker{
|
||||
display:inline-block;
|
||||
padding:6px 12px;
|
||||
border-radius:999px;
|
||||
background:rgba(255,255,255,0.04);
|
||||
color: #e6e9ff;
|
||||
font-weight:700;
|
||||
margin-bottom:18px;
|
||||
font-size:13px;
|
||||
}
|
||||
.hero-lead{
|
||||
font-size:18px;
|
||||
opacity:0.95;
|
||||
margin-bottom:22px;
|
||||
max-width:680px;
|
||||
}
|
||||
.hero-ctas{display:flex;gap:12px;flex-wrap:wrap}
|
||||
.btn-primary{
|
||||
background: linear-gradient(90deg,var(--accent),var(--accent-2));
|
||||
color:white;
|
||||
padding:12px 20px;
|
||||
border-radius:12px;
|
||||
font-weight:700;
|
||||
text-decoration:none;
|
||||
display:inline-flex;
|
||||
gap:10px;
|
||||
align-items:center;
|
||||
box-shadow: 0 10px 30px rgba(79,70,229,0.14);
|
||||
}
|
||||
.btn-ghost{
|
||||
background:transparent;
|
||||
border:1px solid var(--glass-border);
|
||||
color:var(--muted);
|
||||
padding:10px 18px;
|
||||
border-radius:12px;
|
||||
font-weight:700;
|
||||
text-decoration:none;
|
||||
}
|
||||
.micro-note{
|
||||
margin-top:12px;
|
||||
font-size:13px;
|
||||
opacity:0.8;
|
||||
}
|
||||
|
||||
/* HERO RIGHT: preview card (calendar + next prayer) */
|
||||
.preview-card{
|
||||
background: linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0.01));
|
||||
border: 1px solid var(--glass-border);
|
||||
padding:18px;
|
||||
border-radius:var(--radius-lg);
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
.preview-head{
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
align-items:center;
|
||||
gap:8px;
|
||||
margin-bottom:12px;
|
||||
}
|
||||
.location{
|
||||
font-weight:700;
|
||||
color:white;
|
||||
}
|
||||
.next-prayer{
|
||||
display:flex;
|
||||
gap:12px;
|
||||
align-items:center;
|
||||
}
|
||||
.next-prayer .time{
|
||||
font-weight:800;
|
||||
font-size:22px;
|
||||
color:white;
|
||||
}
|
||||
.countdown{
|
||||
font-size:13px;
|
||||
opacity:0.9;
|
||||
}
|
||||
|
||||
.mini-calendar{
|
||||
margin-top:12px;
|
||||
display:grid;
|
||||
grid-template-columns: repeat(7, 1fr);
|
||||
gap:6px;
|
||||
}
|
||||
.mini-calendar .day{
|
||||
padding:8px 6px;
|
||||
text-align:center;
|
||||
border-radius:8px;
|
||||
font-size:13px;
|
||||
background:transparent;
|
||||
color:var(--muted);
|
||||
border:1px solid transparent;
|
||||
}
|
||||
.mini-calendar .holiday{
|
||||
background: rgba(220,38,38,0.15);
|
||||
color: #ffd7d7;
|
||||
border:1px solid rgba(220,38,38,0.2);
|
||||
}
|
||||
.mini-calendar .today{
|
||||
background: linear-gradient(90deg,#0ea5a4, #06b6d4);
|
||||
color:white;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
/* FEATURES */
|
||||
.section{
|
||||
padding:72px 0;
|
||||
}
|
||||
.section h2{
|
||||
font-size:28px;
|
||||
color:#fff;
|
||||
margin-bottom:18px;
|
||||
font-weight:800;
|
||||
}
|
||||
.lead{
|
||||
color:var(--muted);
|
||||
margin-bottom:28px;
|
||||
font-size:15px;
|
||||
max-width:760px;
|
||||
}
|
||||
.features-grid{
|
||||
display:grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap:20px;
|
||||
}
|
||||
.card{
|
||||
background:var(--card);
|
||||
border-radius:12px;
|
||||
padding:20px;
|
||||
border:1px solid var(--glass-border);
|
||||
transition: transform 0.18s ease, box-shadow 0.18s ease;
|
||||
}
|
||||
.card:hover{ transform: translateY(-8px); box-shadow: 0 20px 40px rgba(2,6,23,0.6) }
|
||||
.card h3{ font-size:16px; margin-bottom:10px; color:white; font-weight:800 }
|
||||
.card p{ font-size:14px; opacity:0.9; line-height:1.5 }
|
||||
|
||||
/* STATS / BADGES */
|
||||
.badges{
|
||||
display:flex;
|
||||
gap:12px;
|
||||
margin-top:18px;
|
||||
flex-wrap:wrap;
|
||||
}
|
||||
.badge{
|
||||
padding:10px 14px;
|
||||
border-radius:999px;
|
||||
background: rgba(255,255,255,0.03);
|
||||
font-weight:700;
|
||||
font-size:13px;
|
||||
}
|
||||
|
||||
/* CTA BAR */
|
||||
.cta-bar{
|
||||
margin-top:30px;
|
||||
display:flex;
|
||||
gap:12px;
|
||||
align-items:center;
|
||||
justify-content:center;
|
||||
flex-wrap:wrap;
|
||||
padding:18px;
|
||||
border-radius:12px;
|
||||
background: linear-gradient(180deg, rgba(255,255,255,0.02), transparent);
|
||||
border:1px solid var(--glass-border);
|
||||
}
|
||||
|
||||
/* FOOTER */
|
||||
footer{
|
||||
margin-top:40px;
|
||||
padding:40px 0 80px;
|
||||
color:var(--muted);
|
||||
text-align:center;
|
||||
border-top:1px solid var(--glass-border);
|
||||
background: linear-gradient(180deg, transparent, rgba(0,0,0,0.25));
|
||||
}
|
||||
footer .frow{
|
||||
display:flex;
|
||||
justify-content:space-between;
|
||||
gap:20px;
|
||||
align-items:center;
|
||||
max-width:var(--max-w);
|
||||
margin:0 auto;
|
||||
padding:0 20px;
|
||||
}
|
||||
.contact{
|
||||
text-align:right;
|
||||
}
|
||||
.contact a{ color:var(--muted); text-decoration:none; font-weight:700 }
|
||||
.copyright{ margin-top:18px; font-size:13px; opacity:0.8 }
|
||||
|
||||
/* RESPONSIVE */
|
||||
@media (max-width:1000px){
|
||||
.hero{ grid-template-columns: 1fr 360px }
|
||||
.features-grid{ grid-template-columns: repeat(2, 1fr) }
|
||||
}
|
||||
@media (max-width:768px){
|
||||
.nav-links{ display:none }
|
||||
.hero{ grid-template-columns: 1fr; padding:64px 0 32px; gap:18px }
|
||||
.preview-card{ order: -1 }
|
||||
.features-grid{ grid-template-columns: 1fr }
|
||||
.frow{ flex-direction:column; text-align:center }
|
||||
.contact{ text-align:center }
|
||||
}
|
||||
|
||||
/* small helpers */
|
||||
.muted { opacity:0.86; font-size:14px }
|
||||
a.reset { color:inherit; text-decoration:none; }
|
||||
`}</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav>
|
||||
<div className="container">
|
||||
<div className="nav-row">
|
||||
<div className="brand">
|
||||
<div className="logo" aria-hidden>
|
||||
<body className="
|
||||
min-h-screen text-slate-200
|
||||
bg-gradient-to-b from-[#071024] via-[#071229] to-[#08162f]
|
||||
bg-[radial-gradient(1200px_600px_at_10%_10%,rgba(124,58,237,0.12),transparent_8%)]
|
||||
bg-[radial-gradient(1000px_400px_at_90%_90%,rgba(79,70,229,0.10),transparent_8%)]
|
||||
overflow-x-hidden pb-20
|
||||
">
|
||||
{/* NAVBAR */}
|
||||
<nav className="
|
||||
sticky top-0 z-50
|
||||
backdrop-blur-md
|
||||
bg-[linear-gradient(180deg,rgba(7,10,20,0.6),rgba(7,10,20,0.35))]
|
||||
border-b border-white/10 py-3
|
||||
">
|
||||
<div className="max-w-[1200px] mx-auto px-5">
|
||||
<div className="flex items-center justify-between gap-3">
|
||||
<div className="flex items-center gap-3">
|
||||
<div className="
|
||||
w-11 h-11 rounded-xl
|
||||
bg-gradient-to-br from-indigo-600 to-violet-600
|
||||
grid place-items-center font-bold text-white shadow-xl
|
||||
">
|
||||
𝕵
|
||||
</div>
|
||||
<div>
|
||||
<div className="brand-title">Jadwal Sholat & Imam</div>
|
||||
<div style={{ fontSize: 12, opacity: 0.75 }}>
|
||||
<div className="text-white font-bold text-[16px]">
|
||||
Jadwal Sholat & Imam
|
||||
</div>
|
||||
<div className="text-[12px] opacity-75">
|
||||
Semua jadwal, imam, & libur — satu genggaman
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="nav-links" role="navigation" aria-label="Main">
|
||||
<a href="#features">Fitur</a>
|
||||
<a href="#calendar">Kalender</a>
|
||||
<a href="#imams">Jadwal Imam</a>
|
||||
<a href="#docs">Dokumentasi</a>
|
||||
<a href={clientRoutes["/dashboard"]} className="cta">
|
||||
<div className="hidden md:flex items-center gap-4 text-[14px] font-semibold">
|
||||
<a href="#features" className="px-2 py-1 rounded-lg hover:bg-white/10 text-white">Fitur</a>
|
||||
<a href="#calendar" className="px-2 py-1 rounded-lg hover:bg-white/10 text-white">Kalender</a>
|
||||
<a href="#imams" className="px-2 py-1 rounded-lg hover:bg-white/10 text-white">Jadwal Imam</a>
|
||||
<a href="#docs" className="px-2 py-1 rounded-lg hover:bg-white/10 text-white">Dokumentasi</a>
|
||||
<a
|
||||
href={clientRoutes["/dashboard"]}
|
||||
className="text-white px-4 py-2 rounded-xl bg-gradient-to-r from-indigo-600 to-violet-600 font-bold shadow-lg"
|
||||
>
|
||||
Masjid Saya
|
||||
</a>
|
||||
</div>
|
||||
@@ -367,350 +59,191 @@ export default function Home() {
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
{/* MAIN CONTENT */}
|
||||
<main>
|
||||
<section className="hero">
|
||||
<div className="container hero-left">
|
||||
<div className="kicker">PWA · Open Source · API</div>
|
||||
<h1>
|
||||
Semua jadwal shalat, imam, dan hari libur — dalam satu
|
||||
genggaman.
|
||||
{/* HERO */}
|
||||
<section className="grid md:grid-cols-[1fr_420px] gap-8 max-w-[1200px] mx-auto px-5 py-24">
|
||||
<div>
|
||||
<div className="inline-block px-3 py-1 rounded-full bg-white/5 text-indigo-100 font-bold text-[13px] mb-4">
|
||||
PWA · Open Source · API
|
||||
</div>
|
||||
|
||||
<h1 className="text-4xl md:text-5xl font-extrabold text-white mb-3 leading-tight">
|
||||
Semua jadwal shalat, imam, dan hari libur — dalam satu genggaman.
|
||||
</h1>
|
||||
<p className="hero-lead">
|
||||
Waktu adhan otomatis berdasarkan koordinat Anda. Countdown
|
||||
real-time menuju iqomah, kalender interaktif, dan daftar libur
|
||||
nasional yang ter-update setiap tahun — ringan, cepat, dan bisa
|
||||
dipasang di layar masjid.
|
||||
|
||||
<p className="text-[18px] opacity-95 mb-6 max-w-xl">
|
||||
Waktu adhan otomatis berdasarkan koordinat Anda. Countdown real-time menuju iqomah,
|
||||
kalender interaktif, dan daftar libur nasional yang ter-update setiap tahun —
|
||||
ringan, cepat, dan bisa dipasang di layar masjid.
|
||||
</p>
|
||||
|
||||
<div className="hero-ctas">
|
||||
<a href={clientRoutes["/shalat"]} className="btn-primary">
|
||||
<div className="flex flex-wrap gap-3">
|
||||
<a
|
||||
href={clientRoutes["/shalat"]}
|
||||
className="px-4 py-3 rounded-xl bg-gradient-to-r from-indigo-600 to-violet-600 font-bold shadow-xl"
|
||||
>
|
||||
Lihat Demo
|
||||
</a>
|
||||
<a href="#docs" className="btn-ghost">
|
||||
|
||||
<a
|
||||
href="#docs"
|
||||
className="px-4 py-3 rounded-xl border border-white/15 font-bold text-slate-200"
|
||||
>
|
||||
Dokumentasi API
|
||||
</a>
|
||||
<a href={clientRoutes["/dashboard"]} className="btn-ghost">
|
||||
|
||||
<a
|
||||
href={clientRoutes["/dashboard"]}
|
||||
className="px-4 py-3 rounded-xl border border-white/15 font-bold text-slate-200"
|
||||
>
|
||||
Pasang di Masjid Saya
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="micro-note">
|
||||
<strong>Tips:</strong> Izinkan akses lokasi untuk akurasi adhan.
|
||||
Bisa di-install sebagai PWA untuk akses 1-tap.
|
||||
<div className="text-[13px] mt-3 opacity-80">
|
||||
<strong>Tips:</strong> Izinkan akses lokasi untuk akurasi adhan. Bisa di-install
|
||||
sebagai PWA untuk akses 1-tap.
|
||||
</div>
|
||||
|
||||
<div style={{ marginTop: 28 }}>
|
||||
<div className="badges" aria-hidden>
|
||||
<div className="badge">Next.js + SWR</div>
|
||||
<div className="badge">Skeleton & Offline</div>
|
||||
<div className="badge">Auto-load Hari Libur ID</div>
|
||||
<div className="badge">REST API & Webhooks</div>
|
||||
</div>
|
||||
{/* BADGES */}
|
||||
<div className="flex flex-wrap gap-3 mt-7">
|
||||
{["Next.js + SWR", "Skeleton & Offline", "Auto-load Hari Libur ID", "REST API & Webhooks"]
|
||||
.map((b) => (
|
||||
<div
|
||||
key={b}
|
||||
className="px-4 py-2 rounded-full bg-white/5 text-[13px] font-bold"
|
||||
>
|
||||
{b}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside
|
||||
className="container preview-card"
|
||||
aria-label="Preview jadwal"
|
||||
>
|
||||
<div className="preview-head">
|
||||
{/* PREVIEW CARD */}
|
||||
<aside className="
|
||||
p-5 rounded-2xl border border-white/10 shadow-xl
|
||||
bg-gradient-to-b from-white/5 to-white/0
|
||||
">
|
||||
<div className="flex justify-between items-center mb-3">
|
||||
<div>
|
||||
<div className="location">Masjid Al-Hikmah • Makassar</div>
|
||||
<div className="muted" style={{ fontSize: 13 }}>
|
||||
<div className="font-bold text-white">
|
||||
Masjid Al-Hikmah • Makassar
|
||||
</div>
|
||||
<div className="text-[13px] opacity-80">
|
||||
Koordinat: 5.1477° S, 119.4327° E
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="next-prayer" aria-live="polite">
|
||||
<div style={{ textAlign: "right" }}>
|
||||
<div style={{ fontSize: 12, opacity: 0.85 }}>
|
||||
Sholat berikutnya
|
||||
</div>
|
||||
<div className="time">Maghrib — 18:03</div>
|
||||
<div className="countdown">
|
||||
Iqomah dalam <strong>15m 12s</strong>
|
||||
</div>
|
||||
<div className="text-right">
|
||||
<div className="text-[12px] opacity-80">Sholat berikutnya</div>
|
||||
<div className="text-[22px] font-extrabold text-white">Maghrib — 18:03</div>
|
||||
<div className="text-[13px] opacity-90">
|
||||
Iqomah dalam <strong>15m 12s</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ marginTop: 8 }}>
|
||||
<div
|
||||
style={{
|
||||
fontSize: 13,
|
||||
marginBottom: 8,
|
||||
color: "var(--muted)",
|
||||
}}
|
||||
>
|
||||
Waktu adhan hari ini
|
||||
</div>
|
||||
<div
|
||||
style={{
|
||||
display: "grid",
|
||||
gridTemplateColumns: "repeat(2,1fr)",
|
||||
gap: 8,
|
||||
}}
|
||||
>
|
||||
<div className="card" style={{ padding: 12 }}>
|
||||
<div style={{ fontSize: 13, opacity: 0.9 }}>Subuh</div>
|
||||
<div style={{ fontWeight: 800, fontSize: 16 }}>04:31</div>
|
||||
</div>
|
||||
<div className="card" style={{ padding: 12 }}>
|
||||
<div style={{ fontSize: 13, opacity: 0.9 }}>Dzuhur</div>
|
||||
<div style={{ fontWeight: 800, fontSize: 16 }}>12:03</div>
|
||||
</div>
|
||||
<div className="card" style={{ padding: 12 }}>
|
||||
<div style={{ fontSize: 13, opacity: 0.9 }}>Ashr</div>
|
||||
<div style={{ fontWeight: 800, fontSize: 16 }}>15:24</div>
|
||||
</div>
|
||||
<div className="card" style={{ padding: 12 }}>
|
||||
<div style={{ fontSize: 13, opacity: 0.9 }}>Isya</div>
|
||||
<div style={{ fontWeight: 800, fontSize: 16 }}>19:10</div>
|
||||
</div>
|
||||
{/* WAKTU ADHAN */}
|
||||
<div className="mt-2">
|
||||
<div className="text-[13px] mb-2 opacity-80">Waktu adhan hari ini</div>
|
||||
|
||||
<div className="grid grid-cols-2 gap-2">
|
||||
{[
|
||||
["Subuh", "04:31"],
|
||||
["Dzuhur", "12:03"],
|
||||
["Ashr", "15:24"],
|
||||
["Isya", "19:10"],
|
||||
].map(([name, t]) => (
|
||||
<div
|
||||
key={name}
|
||||
className="rounded-xl p-3 border border-white/10 bg-white/5"
|
||||
>
|
||||
<div className="text-[13px] opacity-90">{name}</div>
|
||||
<div className="font-extrabold text-[16px] text-white">{t}</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style={{ marginTop: 14 }}>
|
||||
<div
|
||||
style={{
|
||||
fontSize: 13,
|
||||
marginBottom: 8,
|
||||
color: "var(--muted)",
|
||||
}}
|
||||
>
|
||||
{/* MINI CALENDAR */}
|
||||
<div className="mt-4">
|
||||
<div className="text-[13px] mb-2 opacity-80">
|
||||
Mini kalender — klik tanggal untuk lihat imam
|
||||
</div>
|
||||
<div
|
||||
className="mini-calendar"
|
||||
role="grid"
|
||||
aria-label="Mini kalender"
|
||||
>
|
||||
{/* Static example days — highlight classes indicate holiday/today */}
|
||||
<div className="day muted">Min</div>
|
||||
<div className="day muted">Sen</div>
|
||||
<div className="day muted">Sel</div>
|
||||
<div className="day muted">Rab</div>
|
||||
<div className="day muted">Kam</div>
|
||||
<div className="day muted">Jum</div>
|
||||
<div className="day muted">Sab</div>
|
||||
|
||||
<div className="day">1</div>
|
||||
<div className="day">2</div>
|
||||
<div className="day holiday">3</div>
|
||||
<div className="day">4</div>
|
||||
<div className="day">5</div>
|
||||
<div className="day">6</div>
|
||||
<div className="day today">7</div>
|
||||
<div className="grid grid-cols-7 gap-1 text-center text-[13px]">
|
||||
{["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"].map((d) => (
|
||||
<div key={d} className="opacity-70">{d}</div>
|
||||
))}
|
||||
|
||||
{/* more days... */}
|
||||
<div className="py-2 rounded-lg">1</div>
|
||||
<div className="py-2 rounded-lg">2</div>
|
||||
<div className="py-2 rounded-lg bg-red-900/30 border border-red-500/20 text-red-200">
|
||||
3
|
||||
</div>
|
||||
<div className="py-2 rounded-lg">4</div>
|
||||
<div className="py-2 rounded-lg">5</div>
|
||||
<div className="py-2 rounded-lg">6</div>
|
||||
<div className="py-2 rounded-lg bg-cyan-600 text-white font-bold">
|
||||
7
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<section id="features" className="section container">
|
||||
<h2>Mengapa pilih Jadwal Sholat & Imam?</h2>
|
||||
<p className="lead">
|
||||
Satu tampilan untuk semua informasi: adhan otomatis sesuai
|
||||
koordinat, countdown iqomah real-time, kalender interaktif, dan
|
||||
daftar libur nasional yang diambil otomatis tiap tahun.
|
||||
{/* FEATURES */}
|
||||
<section id="features" className="max-w-[1200px] mx-auto px-5 py-20">
|
||||
<h2 className="text-3xl font-extrabold text-white mb-3">
|
||||
Mengapa pilih Jadwal Sholat & Imam?
|
||||
</h2>
|
||||
<p className="text-[15px] opacity-85 mb-6 max-w-2xl">
|
||||
Satu tampilan untuk semua informasi: adhan otomatis sesuai koordinat,
|
||||
countdown iqomah real-time, kalender interaktif, dan daftar libur nasional
|
||||
yang diambil otomatis tiap tahun.
|
||||
</p>
|
||||
|
||||
<div className="features-grid" style={{ marginTop: 12 }}>
|
||||
<div className="card" role="article" aria-labelledby="f1">
|
||||
<h3 id="f1">Satu tampilan, semua informasi</h3>
|
||||
<p>
|
||||
Waktu adhan (fajr, dhuhr, asr, maghrib, isha) otomatis
|
||||
menyesuaikan lokasi Anda. Icon dinamis membantu membaca
|
||||
kondisi (matahari, senja, bulan).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="card" role="article" aria-labelledby="f2">
|
||||
<h3 id="f2">Kalender interaktif</h3>
|
||||
<p>
|
||||
Klik tanggal untuk melihat jadwal imam dan waktu adhan di hari
|
||||
tersebut. Hari libur nasional berwarna merah; hari ini
|
||||
di-highlight biru. Navigasi bulan & tahun cepat seperti swipe.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="card" role="article" aria-labelledby="f3">
|
||||
<h3 id="f3">Jadwal imam bulanan</h3>
|
||||
<p>
|
||||
Tabel ringkasan 30 hari menampilkan siapa imam & menit iqomah
|
||||
setiap hari — cocok untuk pengingat, laporan, atau tampilan
|
||||
papan pengumuman di masjid.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="card" role="article" aria-labelledby="f4">
|
||||
<h3 id="f4">Daftar libur nasional otomatis</h3>
|
||||
<p>
|
||||
Auto-load libur Indonesia tiap tahun lengkap dengan tipe
|
||||
(libur nasional / cuti bersama) dan keterangan tambahan untuk
|
||||
perencanaan kegiatan masjid.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="card" role="article" aria-labelledby="f5">
|
||||
<h3 id="f5">Ringan & cepat</h3>
|
||||
<p>
|
||||
Menggunakan strategi cache dan incremental fetch (SWR /
|
||||
stale-while-revalidate) — hanya data berubah diambil ulang.
|
||||
Skeleton screen & PWA untuk pengalaman stabil di jaringan
|
||||
lambat.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="card" role="article" aria-labelledby="f6">
|
||||
<h3 id="f6">Open source & mudah dikustom</h3>
|
||||
<p>
|
||||
Kode tersedia di GitHub. Ganti koordinat, tema, atau aktifkan
|
||||
push-notification dengan cepat. REST API internal siap dipakai
|
||||
untuk mobile atau display LED.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="cta-bar" style={{ marginTop: 26 }}>
|
||||
<a href={clientRoutes["/shalat"]} className="btn-primary">
|
||||
Coba Demo Sekarang
|
||||
</a>
|
||||
<a href="#docs" className="btn-ghost">
|
||||
Buka Dokumentasi API
|
||||
</a>
|
||||
<a href={clientRoutes["/dashboard"]} className="btn-ghost">
|
||||
Pasang di Masjid Saya
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section
|
||||
id="imams"
|
||||
className="section container"
|
||||
style={{ paddingTop: 20 }}
|
||||
>
|
||||
<h2>Contoh — Jadwal Imam Bulanan</h2>
|
||||
<p className="lead">
|
||||
Ringkasan 30 hari: lihat siapa imam setiap hari, menit iqomah, dan
|
||||
catatan (cuti / acara khusus).
|
||||
</p>
|
||||
|
||||
<div style={{ marginTop: 12, overflowX: "auto" }}>
|
||||
<table
|
||||
style={{
|
||||
width: "100%",
|
||||
borderCollapse: "collapse",
|
||||
minWidth: 720,
|
||||
}}
|
||||
>
|
||||
<thead>
|
||||
<tr
|
||||
style={{
|
||||
textAlign: "left",
|
||||
borderBottom: "1px solid var(--glass-border)",
|
||||
}}
|
||||
>
|
||||
<th style={{ padding: 12 }}>Tanggal</th>
|
||||
<th style={{ padding: 12 }}>Imam</th>
|
||||
<th style={{ padding: 12 }}>Iqomah (menit)</th>
|
||||
<th style={{ padding: 12 }}>Catatan</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr
|
||||
style={{ borderBottom: "1px solid rgba(255,255,255,0.03)" }}
|
||||
>
|
||||
<td style={{ padding: 12 }}>2025-12-07</td>
|
||||
<td style={{ padding: 12 }}>Ust. Ahmad</td>
|
||||
<td style={{ padding: 12 }}>10</td>
|
||||
<td style={{ padding: 12 }}>—</td>
|
||||
</tr>
|
||||
<tr
|
||||
style={{ borderBottom: "1px solid rgba(255,255,255,0.03)" }}
|
||||
>
|
||||
<td style={{ padding: 12 }}>2025-12-08</td>
|
||||
<td style={{ padding: 12 }}>Ust. Budi</td>
|
||||
<td style={{ padding: 12 }}>8</td>
|
||||
<td style={{ padding: 12 }}>Libur Nasional</td>
|
||||
</tr>
|
||||
{/* more rows — replace with dynamic data in real app */}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section
|
||||
id="docs"
|
||||
className="section container"
|
||||
style={{ paddingTop: 8 }}
|
||||
>
|
||||
<h2>Cepat Mulai</h2>
|
||||
<p className="lead">
|
||||
1) Kunjungi{" "}
|
||||
<a href="https://jadwalsholat.example.com" className="reset">
|
||||
jadwalsholat.example.com
|
||||
</a>
|
||||
<br />
|
||||
2) Izinkan akses lokasi → waktu adhan otomatis.
|
||||
<br />
|
||||
3) Klik tanggal di kalender untuk melihat jadwal imam.
|
||||
<br />
|
||||
4) Tambahkan ke layar utama sebagai PWA untuk akses 1-tap.
|
||||
</p>
|
||||
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
gap: 12,
|
||||
marginTop: 10,
|
||||
flexWrap: "wrap",
|
||||
}}
|
||||
>
|
||||
<a href={clientRoutes["/shalat"]} className="btn-primary">
|
||||
Lihat Demo
|
||||
</a>
|
||||
<a href="#docs" className="btn-ghost">
|
||||
Dokumentasi API
|
||||
</a>
|
||||
<a href={clientRoutes["/dashboard"]} className="btn-ghost">
|
||||
Pasang di Masjid Saya
|
||||
</a>
|
||||
<div className="grid md:grid-cols-3 gap-5">
|
||||
{[
|
||||
[
|
||||
"Satu tampilan, semua informasi",
|
||||
"Waktu adhan otomatis menyesuaikan lokasi Anda."
|
||||
],
|
||||
[
|
||||
"Kalender interaktif",
|
||||
"Klik tanggal untuk melihat jadwal imam & waktu adhan."
|
||||
],
|
||||
[
|
||||
"Jadwal imam bulanan",
|
||||
"Tabel ringkasan 30 hari dengan imam & iqomah."
|
||||
],
|
||||
].map(([title, desc], i) => (
|
||||
<div
|
||||
key={i}
|
||||
className="p-5 rounded-xl bg-white/5 border border-white/10 hover:-translate-y-2 hover:shadow-2xl transition"
|
||||
>
|
||||
<h3 className="text-white font-extrabold text-[16px] mb-2">
|
||||
{title}
|
||||
</h3>
|
||||
<p className="text-[14px] opacity-90">{desc}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div className="frow">
|
||||
<div style={{ textAlign: "left" }}>
|
||||
<div style={{ fontWeight: 800, fontSize: 16, color: "#fff" }}>
|
||||
Jadwal Sholat & Imam
|
||||
</div>
|
||||
<div style={{ marginTop: 6, fontSize: 13, opacity: 0.8 }}>
|
||||
Perangkat lunak open-source untuk manajemen jadwal masjid.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="contact">
|
||||
<div style={{ fontWeight: 700 }}>Hubungi kami</div>
|
||||
<div style={{ marginTop: 6 }}>
|
||||
<a href="mailto:hi@jadwalsholat.example.com">
|
||||
hi@jadwalsholat.example.com
|
||||
</a>
|
||||
</div>
|
||||
<div style={{ marginTop: 6 }}>
|
||||
<a href="tel:+6281234567890">+62 812 3456 7890</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="container copyright">
|
||||
<div>PERCOBAAN GRATIS · TANPA IKLAN · DATA AMAN</div>
|
||||
<div style={{ marginTop: 8 }}>
|
||||
© {new Date().getFullYear()} Jadwal Sholat & Imam. All rights
|
||||
reserved.
|
||||
</div>
|
||||
{/* FOOTER */}
|
||||
<footer className="
|
||||
mt-10 py-10
|
||||
border-t border-white/10
|
||||
text-center text-slate-400
|
||||
bg-gradient-to-b from-transparent to-black/25
|
||||
">
|
||||
<div className="max-w-[1200px] mx-auto px-5">
|
||||
<p className="text-[13px] opacity-80">
|
||||
© {new Date().getFullYear()} Jadwal Sholat & Imam — All rights reserved.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
@@ -257,29 +257,39 @@ export default function AdhanPage() {
|
||||
</Group>
|
||||
<DatePicker
|
||||
locale="id"
|
||||
value={date}
|
||||
// date={date || undefined}
|
||||
renderDay={(d) => (
|
||||
<Text
|
||||
c={
|
||||
dayjs(d).date() === dayjs(date).date()
|
||||
dayjs(d).isSame(dayjs(date), "day")
|
||||
? "green"
|
||||
: isHoliday(dayjs(d).format("YYYY-MM-DD"))
|
||||
? "red"
|
||||
: ""
|
||||
: undefined
|
||||
}
|
||||
>
|
||||
{dayjs(d).format("DD")}
|
||||
{dayjs(d).date()}
|
||||
</Text>
|
||||
)}
|
||||
minDate={dayjs("2025-01-01").toDate()}
|
||||
defaultDate={dayjs(date).toDate()}
|
||||
minDate={dayjs("2024-01-01").toDate()}
|
||||
maxDate={dayjs().add(40, "year").toDate()}
|
||||
// defaultDate={date || undefined}
|
||||
onChange={(date) => setDate(dayjs(date).toDate())}
|
||||
onYearSelect={(year) => setDate(dayjs(year).toDate())}
|
||||
onMonthSelect={(month) => setDate(dayjs(month).toDate())}
|
||||
|
||||
onChange={(d) => setDate(dayjs(d).toDate())}
|
||||
onYearSelect={(d) =>
|
||||
setDate(
|
||||
dayjs(date)
|
||||
.year(dayjs(d).year())
|
||||
.toDate()
|
||||
)
|
||||
}
|
||||
onMonthSelect={(d) =>
|
||||
setDate(
|
||||
dayjs(date)
|
||||
.month(dayjs(d).month())
|
||||
.toDate()
|
||||
)
|
||||
}
|
||||
/>
|
||||
|
||||
</Stack>
|
||||
</Card>
|
||||
</SimpleGrid>
|
||||
|
||||
15
uno.config.ts
Normal file
15
uno.config.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { defineConfig, presetUno, presetAttributify, presetIcons } from 'unocss'
|
||||
|
||||
export default defineConfig({
|
||||
presets: [
|
||||
presetUno(),
|
||||
presetAttributify(),
|
||||
presetIcons(),
|
||||
],
|
||||
content: {
|
||||
filesystem: [
|
||||
'src/**/*.{html,js,jsx,ts,tsx}',
|
||||
'public/**/*.html',
|
||||
],
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user