From 17930832dde2a7415e6674b6935d09c921fb753b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 02:11:26 +0000 Subject: [PATCH 01/18] chore(deps): bump @hono/node-server from 1.19.9 to 1.19.13 Bumps [@hono/node-server](https://github.com/honojs/node-server) from 1.19.9 to 1.19.13. - [Release notes](https://github.com/honojs/node-server/releases) - [Commits](https://github.com/honojs/node-server/compare/v1.19.9...v1.19.13) --- updated-dependencies: - dependency-name: "@hono/node-server" dependency-version: 1.19.13 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- pnpm-lock.yaml | 469 ++++++++++++++++++++++++++++--------------------- 1 file changed, 273 insertions(+), 196 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20e4ac7..19134ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@base-ui/react': + specifier: ^1.3.0 + version: 1.3.0(@types/react@19.2.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@hookform/resolvers': specifier: ^5.2.2 version: 5.2.2(react-hook-form@7.71.1(react@19.2.4)) @@ -126,11 +129,11 @@ importers: specifier: ^1.4.2 version: 1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) lucide-react: - specifier: ^0.564.0 - version: 0.564.0(react@19.2.4) + specifier: ^1.7.0 + version: 1.7.0(react@19.2.4) next: - specifier: 16.1.6 - version: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 16.2.1 + version: 16.2.1(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -141,8 +144,8 @@ importers: specifier: 19.2.4 version: 19.2.4 react-day-picker: - specifier: ^9.13.2 - version: 9.13.2(react@19.2.4) + specifier: ^9.14.0 + version: 9.14.0(react@19.2.4) react-dom: specifier: 19.2.4 version: 19.2.4(react@19.2.4) @@ -150,23 +153,23 @@ importers: specifier: ^7.71.1 version: 7.71.1(react@19.2.4) react-resizable-panels: - specifier: ^4.6.3 - version: 4.6.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: ^4.7.6 + version: 4.9.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react-snowfall: specifier: ^2.4.0 version: 2.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) recharts: - specifier: 2.15.4 - version: 2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 3.8.0 + version: 3.8.0(@types/react@19.2.2)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1) shadcn: - specifier: ^3.8.4 - version: 3.8.4(@types/node@25.2.3)(typescript@5.9.3) + specifier: ^4.1.0 + version: 4.2.0(@types/node@25.2.3)(typescript@5.9.3) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) tailwind-merge: - specifier: ^3.4.0 - version: 3.4.0 + specifier: ^3.5.0 + version: 3.5.0 vaul: specifier: ^1.1.2 version: 1.1.2(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -205,10 +208,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@antfu/ni@25.0.0': - resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==} - hasBin: true - '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -342,6 +341,27 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@base-ui/react@1.3.0': + resolution: {integrity: sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + + '@base-ui/utils@0.2.6': + resolution: {integrity: sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + '@biomejs/biome@2.3.15': resolution: {integrity: sha512-u+jlPBAU2B45LDkjjNNYpc1PvqrM/co4loNommS9/sl9oSxsAQKsNZejYuUztvToB5oXi1tN/e62iNd6ESiY3g==} engines: {node: '>=14.21.3'} @@ -414,18 +434,33 @@ packages: '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/dom@1.7.4': resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@floating-ui/react-dom@2.1.6': resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/react-dom@2.1.8': + resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@hono/node-server@1.19.9': resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} engines: {node: '>=18.14.1'} @@ -660,8 +695,8 @@ packages: resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} engines: {node: '>=18'} - '@next/env@16.1.6': - resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} + '@next/env@16.2.1': + resolution: {integrity: sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==} '@next/mdx@16.1.6': resolution: {integrity: sha512-PT5JR4WPPYOls7WD6xEqUVVI9HDY8kY7XLQsNYB2lSZk5eJSXWu3ECtIYmfR0hZpx8Sg7BKZYKi2+u5OTSEx0w==} @@ -674,50 +709,50 @@ packages: '@mdx-js/react': optional: true - '@next/swc-darwin-arm64@16.1.6': - resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==} + '@next/swc-darwin-arm64@16.2.1': + resolution: {integrity: sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.1.6': - resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==} + '@next/swc-darwin-x64@16.2.1': + resolution: {integrity: sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.1.6': - resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==} + '@next/swc-linux-arm64-gnu@16.2.1': + resolution: {integrity: sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@16.1.6': - resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==} + '@next/swc-linux-arm64-musl@16.2.1': + resolution: {integrity: sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@16.1.6': - resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==} + '@next/swc-linux-x64-gnu@16.2.1': + resolution: {integrity: sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@16.1.6': - resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==} + '@next/swc-linux-x64-musl@16.2.1': + resolution: {integrity: sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@16.1.6': - resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==} + '@next/swc-win32-arm64-msvc@16.2.1': + resolution: {integrity: sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.1.6': - resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==} + '@next/swc-win32-x64-msvc@16.2.1': + resolution: {integrity: sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1541,6 +1576,17 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@reduxjs/toolkit@2.11.2': + resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -1548,12 +1594,19 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tabby_ai/hijri-converter@1.0.5': + resolution: {integrity: sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==} + engines: {node: '>=16.0.0'} + '@tailwindcss/node@4.1.18': resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} @@ -1713,6 +1766,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/validate-npm-package-name@4.0.2': resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==} @@ -1760,10 +1816,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} - engines: {node: '>=14'} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -2071,9 +2123,6 @@ packages: resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} engines: {node: '>=0.3.1'} - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dotenv@17.3.1: resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} engines: {node: '>=12'} @@ -2138,6 +2187,9 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-toolkit@1.45.1: + resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} + esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -2181,8 +2233,8 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} eventsource-parser@3.0.6: resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} @@ -2220,10 +2272,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.4.0: - resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} - engines: {node: '>=6.0.0'} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2295,9 +2343,6 @@ packages: fuzzysort@3.1.0: resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} - fzf@0.5.2: - resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2405,6 +2450,12 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immer@10.2.0: + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} + + immer@11.1.4: + resolution: {integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -2660,9 +2711,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} @@ -2670,15 +2718,11 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.564.0: - resolution: {integrity: sha512-JJ8GVTQqFwuliifD48U6+h7DXEHdkhJ/E87kksGByII3qHxtPciVb8T8woQONHBQgHVOl7rSMrrip3SeVNy7Fg==} + lucide-react@1.7.0: + resolution: {integrity: sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2884,8 +2928,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@16.1.6: - resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==} + next@16.2.1: + resolution: {integrity: sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -2963,9 +3007,6 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -3041,9 +3082,6 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -3079,8 +3117,8 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} - react-day-picker@9.13.2: - resolution: {integrity: sha512-IMPiXfXVIAuR5Yk58DDPBC8QKClrhdXV+Tr/alBrwrHUw0qDDYB1m5zPNuTnnPIr/gmJ4ChMxmtqPdxm8+R4Eg==} + react-day-picker@9.14.0: + resolution: {integrity: sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==} engines: {node: '>=18'} peerDependencies: react: '>=16.8.0' @@ -3099,12 +3137,21 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -3125,18 +3172,12 @@ packages: '@types/react': optional: true - react-resizable-panels@4.6.3: - resolution: {integrity: sha512-nO5ksnCTdnV4YrRNw/OrZrX8ffh0sPA+2uM8kJbF19c8PRNuhH7ojJFE+UisAg2HFQFqIPmmW8bANrJNtIdXeA==} + react-resizable-panels@4.9.0: + resolution: {integrity: sha512-sEl+hA6y9/kxa0aPlrUC+G1lcShAf/PiIjoeC8kWXxa53RfAVplVCIxEl01Nwa4L2iRa5JXBXq1/mI8ch6qOZQ==} peerDependencies: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 - react-smooth@4.0.4: - resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-snowfall@2.4.0: resolution: {integrity: sha512-KAPMiGnxt11PEgC2pTVrTQsvk5jt1kLUtG+ZamiKLphTZ7GiYT1Aa5kX6jp4jKWq1kqJHchnGT9CDm4g86A5Gg==} peerDependencies: @@ -3153,12 +3194,6 @@ packages: '@types/react': optional: true - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - react@19.2.4: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} @@ -3167,15 +3202,13 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} - recharts-scale@0.4.5: - resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} - - recharts@2.15.4: - resolution: {integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==} - engines: {node: '>=14'} + recharts@3.8.0: + resolution: {integrity: sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ==} + engines: {node: '>=18'} peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -3191,6 +3224,14 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + redux-thunk@3.1.0: + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} @@ -3211,6 +3252,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3267,8 +3311,8 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shadcn@3.8.4: - resolution: {integrity: sha512-pSad/m1+PGzB0aLsRBV0EkyGg9al1nJqYUuucg6d8v8xZspPZ5/ehGNEp5M4b1KQYqdO5/gGPbkhVbgmXqG9Pw==} + shadcn@4.2.0: + resolution: {integrity: sha512-ZDuV340itidaUd4Gi1BxQX+Y7Ush6BHp6URZBM2RyxUUBZ6yFtOWIr4nVY+Ro+YRSpo82v7JrsmtcU5xoBCMJQ==} hasBin: true sharp@0.34.5: @@ -3402,12 +3446,15 @@ packages: babel-plugin-macros: optional: true + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + tagged-tag@1.0.0: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwind-merge@3.4.0: - resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} tailwindcss@4.1.18: resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} @@ -3419,10 +3466,6 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} - engines: {node: '>=18'} - tldts-core@7.0.23: resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} @@ -3567,8 +3610,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - victory-vendor@36.9.2: - resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} + victory-vendor@37.3.6: + resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} @@ -3640,13 +3683,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@antfu/ni@25.0.0': - dependencies: - ansis: 4.2.0 - fzf: 0.5.2 - package-manager-detector: 1.6.0 - tinyexec: 1.0.2 - '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -3835,6 +3871,30 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@base-ui/react@1.3.0(@types/react@19.2.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 7.28.6 + '@base-ui/utils': 0.2.6(@types/react@19.2.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@floating-ui/utils': 0.2.11 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + tabbable: 6.4.0 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.2 + + '@base-ui/utils@0.2.6(@types/react@19.2.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 7.28.6 + '@floating-ui/utils': 0.2.11 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + reselect: 5.1.1 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.2 + '@biomejs/biome@2.3.15': optionalDependencies: '@biomejs/cli-darwin-arm64': 2.3.15 @@ -3897,19 +3957,36 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.10 + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + '@floating-ui/dom@1.7.4': dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + '@floating-ui/react-dom@2.1.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@floating-ui/dom': 1.7.4 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.11': {} + '@hono/node-server@1.19.9(hono@4.11.9)': dependencies: hono: 4.11.9 @@ -4139,7 +4216,7 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@next/env@16.1.6': {} + '@next/env@16.2.1': {} '@next/mdx@16.1.6(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.4))': dependencies: @@ -4148,28 +4225,28 @@ snapshots: '@mdx-js/loader': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.4) - '@next/swc-darwin-arm64@16.1.6': + '@next/swc-darwin-arm64@16.2.1': optional: true - '@next/swc-darwin-x64@16.1.6': + '@next/swc-darwin-x64@16.2.1': optional: true - '@next/swc-linux-arm64-gnu@16.1.6': + '@next/swc-linux-arm64-gnu@16.2.1': optional: true - '@next/swc-linux-arm64-musl@16.1.6': + '@next/swc-linux-arm64-musl@16.2.1': optional: true - '@next/swc-linux-x64-gnu@16.1.6': + '@next/swc-linux-x64-gnu@16.2.1': optional: true - '@next/swc-linux-x64-musl@16.1.6': + '@next/swc-linux-x64-musl@16.2.1': optional: true - '@next/swc-win32-arm64-msvc@16.1.6': + '@next/swc-win32-arm64-msvc@16.2.1': optional: true - '@next/swc-win32-x64-msvc@16.1.6': + '@next/swc-win32-x64-msvc@16.2.1': optional: true '@noble/ciphers@1.3.0': {} @@ -5020,16 +5097,32 @@ snapshots: '@radix-ui/rect@1.1.1': {} + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.4)(redux@5.0.1))(react@19.2.4)': + dependencies: + '@standard-schema/spec': 1.1.0 + '@standard-schema/utils': 0.3.0 + immer: 11.1.4 + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.1.1 + optionalDependencies: + react: 19.2.4 + react-redux: 9.2.0(@types/react@19.2.2)(react@19.2.4)(redux@5.0.1) + '@sec-ant/readable-stream@0.4.1': {} '@sindresorhus/merge-streams@4.0.0': {} + '@standard-schema/spec@1.1.0': {} + '@standard-schema/utils@0.3.0': {} '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@tabby_ai/hijri-converter@1.0.5': {} + '@tailwindcss/node@4.1.18': dependencies: '@jridgewell/remapping': 2.3.5 @@ -5169,6 +5262,8 @@ snapshots: '@types/unist@3.0.3': {} + '@types/use-sync-external-store@0.0.6': {} + '@types/validate-npm-package-name@4.0.2': {} '@ungap/structured-clone@1.3.0': {} @@ -5205,8 +5300,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansis@4.2.0: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -5460,11 +5553,6 @@ snapshots: diff@8.0.3: {} - dom-helpers@5.2.1: - dependencies: - '@babel/runtime': 7.28.6 - csstype: 3.2.3 - dotenv@17.3.1: {} dunder-proto@1.0.1: @@ -5521,6 +5609,8 @@ snapshots: dependencies: es-errors: 1.3.0 + es-toolkit@1.45.1: {} + esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -5576,7 +5666,7 @@ snapshots: etag@1.8.1: {} - eventemitter3@4.0.7: {} + eventemitter3@5.0.4: {} eventsource-parser@3.0.6: {} @@ -5657,8 +5747,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.4.0: {} - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5728,8 +5816,6 @@ snapshots: fuzzysort@3.1.0: {} - fzf@0.5.2: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -5864,6 +5950,10 @@ snapshots: ignore@5.3.2: {} + immer@10.2.0: {} + + immer@11.1.4: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -6037,8 +6127,6 @@ snapshots: lines-and-columns@1.2.4: {} - lodash@4.17.23: {} - log-symbols@6.0.0: dependencies: chalk: 5.6.2 @@ -6046,15 +6134,11 @@ snapshots: longest-streak@3.1.0: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lucide-react@0.564.0(react@19.2.4): + lucide-react@1.7.0(react@19.2.4): dependencies: react: 19.2.4 @@ -6444,9 +6528,9 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.2.1(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@next/env': 16.1.6 + '@next/env': 16.2.1 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.9.19 caniuse-lite: 1.0.30001760 @@ -6455,14 +6539,14 @@ snapshots: react-dom: 19.2.4(react@19.2.4) styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4) optionalDependencies: - '@next/swc-darwin-arm64': 16.1.6 - '@next/swc-darwin-x64': 16.1.6 - '@next/swc-linux-arm64-gnu': 16.1.6 - '@next/swc-linux-arm64-musl': 16.1.6 - '@next/swc-linux-x64-gnu': 16.1.6 - '@next/swc-linux-x64-musl': 16.1.6 - '@next/swc-win32-arm64-msvc': 16.1.6 - '@next/swc-win32-x64-msvc': 16.1.6 + '@next/swc-darwin-arm64': 16.2.1 + '@next/swc-darwin-x64': 16.2.1 + '@next/swc-linux-arm64-gnu': 16.2.1 + '@next/swc-linux-arm64-musl': 16.2.1 + '@next/swc-linux-x64-gnu': 16.2.1 + '@next/swc-linux-x64-musl': 16.2.1 + '@next/swc-win32-arm64-msvc': 16.2.1 + '@next/swc-win32-x64-msvc': 16.2.1 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -6532,8 +6616,6 @@ snapshots: outvariant@1.4.3: {} - package-manager-detector@1.6.0: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -6605,12 +6687,6 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - property-information@7.1.0: {} proxy-addr@2.0.7: @@ -6696,9 +6772,10 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - react-day-picker@9.13.2(react@19.2.4): + react-day-picker@9.14.0(react@19.2.4): dependencies: '@date-fns/tz': 1.4.1 + '@tabby_ai/hijri-converter': 1.0.5 date-fns: 4.1.0 date-fns-jalali: 4.1.0-0 react: 19.2.4 @@ -6714,10 +6791,17 @@ snapshots: dependencies: react: 19.2.4 - react-is@16.13.1: {} - react-is@18.3.1: {} + react-redux@9.2.0(@types/react@19.2.2)(react@19.2.4)(redux@5.0.1): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.2 + redux: 5.0.1 + react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.4): dependencies: react: 19.2.4 @@ -6737,19 +6821,11 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - react-resizable-panels@4.6.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + react-resizable-panels@4.9.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-smooth@4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - fast-equals: 5.4.0 - prop-types: 15.8.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-transition-group: 4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react-snowfall@2.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: react: 19.2.4 @@ -6764,15 +6840,6 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - react-transition-group@4.4.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - '@babel/runtime': 7.28.6 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react@19.2.4: {} recast@0.23.11: @@ -6783,22 +6850,25 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - recharts-scale@0.4.5: - dependencies: - decimal.js-light: 2.5.1 - - recharts@2.15.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + recharts@3.8.0(@types/react@19.2.2)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1): dependencies: + '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@19.2.2)(react@19.2.4)(redux@5.0.1))(react@19.2.4) clsx: 2.1.1 - eventemitter3: 4.0.7 - lodash: 4.17.23 + decimal.js-light: 2.5.1 + es-toolkit: 1.45.1 + eventemitter3: 5.0.4 + immer: 10.2.0 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) react-is: 18.3.1 - react-smooth: 4.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - recharts-scale: 0.4.5 + react-redux: 9.2.0(@types/react@19.2.2)(react@19.2.4)(redux@5.0.1) + reselect: 5.1.1 tiny-invariant: 1.3.3 - victory-vendor: 36.9.2 + use-sync-external-store: 1.6.0(react@19.2.4) + victory-vendor: 37.3.6 + transitivePeerDependencies: + - '@types/react' + - redux recma-build-jsx@1.0.0: dependencies: @@ -6829,6 +6899,12 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 + redux-thunk@3.1.0(redux@5.0.1): + dependencies: + redux: 5.0.1 + + redux@5.0.1: {} + rehype-recma@1.0.0: dependencies: '@types/estree': 1.0.8 @@ -6865,6 +6941,8 @@ snapshots: require-from-string@2.0.2: {} + reselect@5.1.1: {} + resolve-from@4.0.0: {} restore-cursor@5.1.0: @@ -6933,9 +7011,8 @@ snapshots: setprototypeof@1.2.0: {} - shadcn@3.8.4(@types/node@25.2.3)(typescript@5.9.3): + shadcn@4.2.0(@types/node@25.2.3)(typescript@5.9.3): dependencies: - '@antfu/ni': 25.0.0 '@babel/core': 7.29.0 '@babel/parser': 7.29.0 '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) @@ -6964,7 +7041,7 @@ snapshots: prompts: 2.4.2 recast: 0.23.11 stringify-object: 5.0.0 - tailwind-merge: 3.4.0 + tailwind-merge: 3.5.0 ts-morph: 26.0.0 tsconfig-paths: 4.2.0 validate-npm-package-name: 7.0.2 @@ -7124,9 +7201,11 @@ snapshots: optionalDependencies: '@babel/core': 7.29.0 + tabbable@6.4.0: {} + tagged-tag@1.0.0: {} - tailwind-merge@3.4.0: {} + tailwind-merge@3.5.0: {} tailwindcss@4.1.18: {} @@ -7134,8 +7213,6 @@ snapshots: tiny-invariant@1.3.3: {} - tinyexec@1.0.2: {} - tldts-core@7.0.23: {} tldts@7.0.23: @@ -7280,7 +7357,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - victory-vendor@36.9.2: + victory-vendor@37.3.6: dependencies: '@types/d3-array': 3.2.2 '@types/d3-ease': 3.0.2 From 2e491845a596528405bb0db2991a4ecbf9cd9817 Mon Sep 17 00:00:00 2001 From: imnyang Date: Sat, 11 Apr 2026 09:25:23 +0000 Subject: [PATCH 02/18] Update .github/workflows/main.yml --- .github/workflows/main.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e148f5c..d089cd6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,7 +7,7 @@ on: name: Web Build jobs: build: - runs-on: ubuntu-latest + runs-on: x86_64 steps: - name: Checkout uses: actions/checkout@v5 @@ -41,11 +41,11 @@ jobs: tags: | ghcr.io/imnyang/imnya.ng:latest ghcr.io/imnyang/imnya.ng:${{ github.run_id }} - update: - runs-on: self-hosted - steps: - - name: Pull and restart container - run: | - docker-compose -f /home/neko/Git/imnya.ng/compose.yml pull web - docker-compose -f /home/neko/Git/imnya.ng/compose.yml up -d web - needs: build + # update: + # runs-on: self-hosted + # steps: + # - name: Pull and restart container + # run: | + # docker-compose -f /home/neko/Git/imnya.ng/compose.yml pull web + # docker-compose -f /home/neko/Git/imnya.ng/compose.yml up -d web + # needs: build From 168839499e68fd74a051d2868fae9ebfa07ef5d4 Mon Sep 17 00:00:00 2001 From: imnyang Date: Sat, 11 Apr 2026 09:26:39 +0000 Subject: [PATCH 03/18] Update .github/workflows/main.yml --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d089cd6..77ed2f8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,8 +27,8 @@ jobs: uses: docker/login-action@v3 with: registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push Docker image uses: docker/build-push-action@v3 @@ -39,8 +39,8 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max tags: | - ghcr.io/imnyang/imnya.ng:latest - ghcr.io/imnyang/imnya.ng:${{ github.run_id }} + git.mizuki.guru/imnyang/imnya.ng:latest + git.mizuki.guru/imnyang/imnya.ng:${{ github.run_id }} # update: # runs-on: self-hosted # steps: From e874470ca45810bf1c65013dc68c681d44b35e55 Mon Sep 17 00:00:00 2001 From: imnyang Date: Sat, 11 Apr 2026 09:28:08 +0000 Subject: [PATCH 04/18] Update .github/workflows/main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 77ed2f8..0965073 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,7 +26,7 @@ jobs: - name: Login to GHCR uses: docker/login-action@v3 with: - registry: ghcr.io + registry: git.mizuki.guru username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} From 28ffd0bce9dca1e086a41b65da7a352eafdcf89a Mon Sep 17 00:00:00 2001 From: imnyang Date: Sat, 11 Apr 2026 18:30:26 +0900 Subject: [PATCH 05/18] chore: update dependencies in package.json - upgraded @next/mdx from ^16.1.6 to ^16.2.3 - upgraded framer-motion from ^12.34.0 to ^12.38.0 - upgraded lucide-react from ^1.7.0 to ^1.8.0 - upgraded next from 16.2.1 to 16.2.3 - upgraded react from 19.2.4 to 19.2.5 - upgraded react-dom from 19.2.4 to 19.2.5 - upgraded react-hook-form from ^7.71.1 to ^7.72.1 - upgraded react-resizable-panels from ^4.7.6 to ^4.9.0 - upgraded recharts from 3.8.0 to 3.8.1 - upgraded shadcn from ^4.1.0 to ^4.2.0 - upgraded @biomejs/biome from 2.3.15 to 2.4.11 - upgraded @tailwindcss/postcss from ^4.1.18 to ^4.2.2 - upgraded @types/node from ^25.2.3 to ^25.6.0 - upgraded @types/react from 19.2.2 to 19.2.14 - upgraded @types/react-dom from 19.2.2 to 19.2.3 - upgraded tailwindcss from ^4.1.18 to ^4.2.2 - upgraded typescript from ^5.9.3 to ^6.0.2 --- bun.lock | 166 ++++++++++++++++++++++++++------------------------- package.json | 34 +++++------ 2 files changed, 101 insertions(+), 99 deletions(-) diff --git a/bun.lock b/bun.lock index c3f2478..42877f8 100644 --- a/bun.lock +++ b/bun.lock @@ -9,7 +9,7 @@ "@hookform/resolvers": "^5.2.2", "@mdx-js/loader": "^3.1.1", "@mdx-js/react": "^3.1.1", - "@next/mdx": "^16.1.6", + "@next/mdx": "^16.2.3", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-aspect-ratio": "^1.1.8", @@ -41,36 +41,36 @@ "cmdk": "^1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", - "framer-motion": "^12.34.0", + "framer-motion": "^12.38.0", "gray-matter": "^4.0.3", "highlight.js": "^11.11.1", "input-otp": "^1.4.2", - "lucide-react": "^1.7.0", - "next": "16.2.1", + "lucide-react": "^1.8.0", + "next": "16.2.3", "next-themes": "^0.4.6", "radix-ui": "^1.4.3", - "react": "19.2.4", + "react": "19.2.5", "react-day-picker": "^9.14.0", - "react-dom": "19.2.4", - "react-hook-form": "^7.71.1", - "react-resizable-panels": "^4.7.6", + "react-dom": "19.2.5", + "react-hook-form": "^7.72.1", + "react-resizable-panels": "^4.9.0", "react-snowfall": "^2.4.0", - "recharts": "3.8.0", - "shadcn": "^4.1.0", + "recharts": "3.8.1", + "shadcn": "^4.2.0", "sonner": "^2.0.7", "tailwind-merge": "^3.5.0", "vaul": "^1.1.2", "zod": "^4.3.6", }, "devDependencies": { - "@biomejs/biome": "2.3.15", - "@tailwindcss/postcss": "^4.1.18", - "@types/node": "^25.2.3", - "@types/react": "19.2.2", - "@types/react-dom": "19.2.2", - "tailwindcss": "^4.1.18", + "@biomejs/biome": "2.4.11", + "@tailwindcss/postcss": "^4.2.2", + "@types/node": "^25.6.0", + "@types/react": "19.2.14", + "@types/react-dom": "19.2.3", + "tailwindcss": "^4.2.2", "tw-animate-css": "^1.4.0", - "typescript": "^5.9.3", + "typescript": "^6.0.2", }, }, }, @@ -143,23 +143,23 @@ "@base-ui/utils": ["@base-ui/utils@0.2.6", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw=="], - "@biomejs/biome": ["@biomejs/biome@2.3.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.15", "@biomejs/cli-darwin-x64": "2.3.15", "@biomejs/cli-linux-arm64": "2.3.15", "@biomejs/cli-linux-arm64-musl": "2.3.15", "@biomejs/cli-linux-x64": "2.3.15", "@biomejs/cli-linux-x64-musl": "2.3.15", "@biomejs/cli-win32-arm64": "2.3.15", "@biomejs/cli-win32-x64": "2.3.15" }, "bin": { "biome": "bin/biome" } }, "sha512-u+jlPBAU2B45LDkjjNNYpc1PvqrM/co4loNommS9/sl9oSxsAQKsNZejYuUztvToB5oXi1tN/e62iNd6ESiY3g=="], + "@biomejs/biome": ["@biomejs/biome@2.4.11", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.11", "@biomejs/cli-darwin-x64": "2.4.11", "@biomejs/cli-linux-arm64": "2.4.11", "@biomejs/cli-linux-arm64-musl": "2.4.11", "@biomejs/cli-linux-x64": "2.4.11", "@biomejs/cli-linux-x64-musl": "2.4.11", "@biomejs/cli-win32-arm64": "2.4.11", "@biomejs/cli-win32-x64": "2.4.11" }, "bin": { "biome": "bin/biome" } }, "sha512-nWxHX8tf3Opb/qRgZpBbsTOqOodkbrkJ7S+JxJAruxOReaDPPmPuLBAGQ8vigyUgo0QBB+oQltNEAvalLcjggA=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SDCdrJ4COim1r8SNHg19oqT50JfkI/xGZHSyC6mGzMfKrpNe/217Eq6y98XhNTc0vGWDjznSDNXdUc6Kg24jbw=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wOt+ed+L2dgZanWyL6i29qlXMc088N11optzpo10peayObBaAshbTcxKUchzEMp9QSY8rh5h6VfAFE3WTS1rqg=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.3.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-RkyeSosBtn3C3Un8zQnl9upX0Qbq4E3QmBa0qjpOh1MebRbHhNlRC16jk8HdTe/9ym5zlfnpbb8cKXzW+vlTxw=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-gZ6zR8XmZlExfi/Pz/PffmdpWOQ8Qhy7oBztgkR8/ylSRyLwfRPSadmiVCV8WQ8PoJ2MWUy2fgID9zmtgUUJmw=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.3.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-FN83KxrdVWANOn5tDmW6UBC0grojchbGmcEz6JkRs2YY6DY63sTZhwkQ56x6YtKhDVV1Unz7FJexy8o7KwuIhg=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-avdJaEElXrKceK0va9FkJ4P5ci3N01TGkc6ni3P8l3BElqbOz42Wg2IyX3gbh0ZLEd4HVKEIrmuVu/AMuSeFFA=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.3.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-SSSIj2yMkFdSkXqASzIBdjySBXOe65RJlhKEDlri7MN19RC4cpez+C0kEwPrhXOTgJbwQR9QH1F4+VnHkC35pg=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-+Sbo1OAmlegtdwqFE8iOxFIWLh1B3OEgsuZfBpyyN/kWuqZ8dx9ZEes6zVnDMo+zRHF2wLynRVhoQmV7ohxl2Q=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.3.15", "", { "os": "linux", "cpu": "x64" }, "sha512-T8n9p8aiIKOrAD7SwC7opiBM1LYGrE5G3OQRXWgbeo/merBk8m+uxJ1nOXMPzfYyFLfPlKF92QS06KN1UW+Zbg=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.11", "", { "os": "linux", "cpu": "x64" }, "sha512-TagWV0iomp5LnEnxWFg4nQO+e52Fow349vaX0Q/PIcX6Zhk4GGBgp3qqZ8PVkpC+cuehRctMf3+6+FgQ8jCEFQ=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.3.15", "", { "os": "linux", "cpu": "x64" }, "sha512-dbjPzTh+ijmmNwojFYbQNMFp332019ZDioBYAMMJj5Ux9d8MkM+u+J68SBJGVwVeSHMYj+T9504CoxEzQxrdNw=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.11", "", { "os": "linux", "cpu": "x64" }, "sha512-bexd2IklK7ZgPhrz6jXzpIL6dEAH9MlJU1xGTrypx+FICxrXUp4CqtwfiuoDKse+UlgAlWtzML3jrMqeEAHEhA=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.3.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-puMuenu/2brQdgqtQ7geNwQlNVxiABKEZJhMRX6AGWcmrMO8EObMXniFQywy2b81qmC+q+SDvlOpspNwz0WiOA=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-RJhaTnY8byzxDt4bDVb7AFPHkPcjOPK3xBip4ZRTrN3TEfyhjLRm3r3mqknqydgVTB74XG8l4jMLwEACEeihVg=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.3.15", "", { "os": "win32", "cpu": "x64" }, "sha512-kDZr/hgg+igo5Emi0LcjlgfkoGZtgIpJKhnvKTRmMBv6FF/3SDyEV4khBwqNebZIyMZTzvpca9sQNSXJ39pI2A=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.11", "", { "os": "win32", "cpu": "x64" }, "sha512-A8D3JM/00C2KQgUV3oj8Ba15EHEYwebAGCy5Sf9GAjr5Y3+kJIYOiESoqRDeuRZueuMdCsbLZIUqmPhpYXJE9A=="], "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], @@ -265,25 +265,25 @@ "@mswjs/interceptors": ["@mswjs/interceptors@0.40.0", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ=="], - "@next/env": ["@next/env@16.2.1", "", {}, "sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg=="], + "@next/env": ["@next/env@16.2.3", "", {}, "sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA=="], - "@next/mdx": ["@next/mdx@16.1.6", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-PT5JR4WPPYOls7WD6xEqUVVI9HDY8kY7XLQsNYB2lSZk5eJSXWu3ECtIYmfR0hZpx8Sg7BKZYKi2+u5OTSEx0w=="], + "@next/mdx": ["@next/mdx@16.2.3", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-mm7XNfPagSIcN8jFtozB9toeh5ESES0KCLRoo0gu6xydijvnIrV7dRIK3akNL3Tecc8AHX1FNzYZOZTeFU6RCw=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-u37KDKTKQ+OQLvY+z7SNXixwo4Q2/IAJFDzU1fYe66IbCE51aDSAzkNDkWmLN0yjTUh4BKBd+hb69jYn6qqqSg=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-gHjL/qy6Q6CG3176FWbAKyKh9IfntKZTB3RY/YOJdDFpHGsUDXVH38U4mMNpHVGXmeYW4wj22dMp1lTfmu/bTQ=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-U6vtblPtU/P14Y/b/n9ZY0GOxbbIhTFuaFR7F4/uMBidCi2nSdaOFhA0Go81L61Zd6527+yvuX44T4ksnf8T+Q=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-/YV0LgjHUmfhQpn9bVoGc4x4nan64pkhWR5wyEV8yCOfwwrH630KpvRg86olQHTwHIn1z59uh6JwKvHq1h4QEw=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-/HiWEcp+WMZ7VajuiMEFGZ6cg0+aYZPqCJD3YJEfpVWQsKYSjXQG06vJP6F1rdA03COD9Fef4aODs3YxKx+RDQ=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Kt44hGJfZSefebhk/7nIdivoDr3Ugp5+oNz9VvF3GUtfxutucUIHfIO0ZYO8QlOPDQloUVQn4NVC/9JvHRk9hw=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2NZ9ie3Tq6xj5Z5CSwBT3+aWAMW2PIZ4egUi9MaWLkwaehgtB7YZjPm+UpcNpKOme0IQuqDcor7BsW6QBiQBw=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.3", "", { "os": "win32", "cpu": "x64" }, "sha512-Ibm29/GgB/ab5n7XKqlStkm54qqZE8v2FnijUPBgrd67FWrac45o/RsNlaOWjme/B5UqeWt/8KM4aWBwA1D2Kw=="], "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], @@ -437,35 +437,35 @@ "@tabby_ai/hijri-converter": ["@tabby_ai/hijri-converter@1.0.5", "", {}, "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ=="], - "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="], + "@tailwindcss/node": ["@tailwindcss/node@4.2.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.2" } }, "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.2", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.2", "@tailwindcss/oxide-darwin-arm64": "4.2.2", "@tailwindcss/oxide-darwin-x64": "4.2.2", "@tailwindcss/oxide-freebsd-x64": "4.2.2", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", "@tailwindcss/oxide-linux-x64-musl": "4.2.2", "@tailwindcss/oxide-wasm32-wasi": "4.2.2", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" } }, "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.18", "", { "os": "android", "cpu": "arm64" }, "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.2", "", { "os": "android", "cpu": "arm64" }, "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.18", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18", "", { "os": "linux", "cpu": "arm" }, "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2", "", { "os": "linux", "cpu": "arm" }, "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.18", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.0", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.2", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.18", "", { "os": "win32", "cpu": "x64" }, "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.2", "", { "os": "win32", "cpu": "x64" }, "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.18", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "postcss": "^8.4.41", "tailwindcss": "4.1.18" } }, "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.2.2", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.2.2", "@tailwindcss/oxide": "4.2.2", "postcss": "^8.5.6", "tailwindcss": "4.2.2" } }, "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ=="], "@ts-morph/common": ["@ts-morph/common@0.27.0", "", { "dependencies": { "fast-glob": "^3.3.3", "minimatch": "^10.0.1", "path-browserify": "^1.0.1" } }, "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ=="], @@ -501,7 +501,7 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@25.2.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ=="], + "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], "@types/react": ["@types/react@19.2.2", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA=="], @@ -699,7 +699,7 @@ "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - "enhanced-resolve": ["enhanced-resolve@5.18.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="], + "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], @@ -777,7 +777,7 @@ "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - "framer-motion": ["framer-motion@12.34.0", "", { "dependencies": { "motion-dom": "^12.34.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg=="], + "framer-motion": ["framer-motion@12.38.0", "", { "dependencies": { "motion-dom": "^12.38.0", "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g=="], "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], @@ -925,29 +925,29 @@ "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], - "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], - "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="], + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], @@ -957,7 +957,7 @@ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - "lucide-react": ["lucide-react@1.7.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg=="], + "lucide-react": ["lucide-react@1.8.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], @@ -1061,9 +1061,9 @@ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - "motion-dom": ["motion-dom@12.34.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q=="], + "motion-dom": ["motion-dom@12.38.0", "", { "dependencies": { "motion-utils": "^12.36.0" } }, "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA=="], - "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="], + "motion-utils": ["motion-utils@12.36.0", "", {}, "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1075,7 +1075,7 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "next": ["next@16.2.1", "", { "dependencies": { "@next/env": "16.2.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.1", "@next/swc-darwin-x64": "16.2.1", "@next/swc-linux-arm64-gnu": "16.2.1", "@next/swc-linux-arm64-musl": "16.2.1", "@next/swc-linux-x64-gnu": "16.2.1", "@next/swc-linux-x64-musl": "16.2.1", "@next/swc-win32-arm64-msvc": "16.2.1", "@next/swc-win32-x64-msvc": "16.2.1", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q=="], + "next": ["next@16.2.3", "", { "dependencies": { "@next/env": "16.2.3", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.3", "@next/swc-darwin-x64": "16.2.3", "@next/swc-linux-arm64-gnu": "16.2.3", "@next/swc-linux-arm64-musl": "16.2.3", "@next/swc-linux-x64-gnu": "16.2.3", "@next/swc-linux-x64-musl": "16.2.3", "@next/swc-win32-arm64-msvc": "16.2.3", "@next/swc-win32-x64-msvc": "16.2.3", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-9V3zV4oZFza3PVev5/poB9g0dEafVcgNyQ8eTRop8GvxZjV2G15FC5ARuG1eFD42QgeYkzJBJzHghNP8Ad9xtA=="], "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], @@ -1151,15 +1151,15 @@ "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + "react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="], "react-day-picker": ["react-day-picker@9.14.0", "", { "dependencies": { "@date-fns/tz": "^1.4.1", "@tabby_ai/hijri-converter": "1.0.5", "date-fns": "^4.1.0", "date-fns-jalali": "4.1.0-0" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA=="], - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], + "react-dom": ["react-dom@19.2.5", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.5" } }, "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag=="], "react-fast-compare": ["react-fast-compare@3.2.2", "", {}, "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="], - "react-hook-form": ["react-hook-form@7.71.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w=="], + "react-hook-form": ["react-hook-form@7.72.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-RhwBoy2ygeVZje+C+bwJ8g0NjTdBmDlJvAUHTxRjTmSUKPYsKfMphkS2sgEMotsY03bP358yEYlnUeZy//D9Ig=="], "react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], @@ -1169,7 +1169,7 @@ "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], - "react-resizable-panels": ["react-resizable-panels@4.7.6", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-w3gbmUihfvH2Ho0iV1ULS2c/E/7HW/6g0GihogsIHjZf+JmmyVnKhryB3+I4JSxO8++uD3cKsSpOVTJV+GWEuA=="], + "react-resizable-panels": ["react-resizable-panels@4.9.0", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-sEl+hA6y9/kxa0aPlrUC+G1lcShAf/PiIjoeC8kWXxa53RfAVplVCIxEl01Nwa4L2iRa5JXBXq1/mI8ch6qOZQ=="], "react-snowfall": ["react-snowfall@2.4.0", "", { "dependencies": { "react-fast-compare": "^3.2.2" }, "peerDependencies": { "react": "^16.8 || 17.x || 18.x || 19.x", "react-dom": "^16.8 || 17.x || 18.x || 19.x" } }, "sha512-KAPMiGnxt11PEgC2pTVrTQsvk5jt1kLUtG+ZamiKLphTZ7GiYT1Aa5kX6jp4jKWq1kqJHchnGT9CDm4g86A5Gg=="], @@ -1177,7 +1177,7 @@ "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="], - "recharts": ["recharts@3.8.0", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ=="], + "recharts": ["recharts@3.8.1", "", { "dependencies": { "@reduxjs/toolkit": "^1.9.0 || 2.x.x", "clsx": "^2.1.1", "decimal.js-light": "^2.5.1", "es-toolkit": "^1.39.3", "eventemitter3": "^5.0.1", "immer": "^10.1.1", "react-redux": "8.x.x || 9.x.x", "reselect": "5.1.1", "tiny-invariant": "^1.3.3", "use-sync-external-store": "^1.2.2", "victory-vendor": "^37.0.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg=="], "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], @@ -1233,7 +1233,7 @@ "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - "shadcn": ["shadcn@4.1.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-3zETJ+0Ezj69FS6RL0HOkLKKAR5yXisXx1iISJdfLQfrUqj/VIQlanQi1Ukk+9OE+XHZVj4FQNTBSfbr2CyCYg=="], + "shadcn": ["shadcn@4.2.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-ZDuV340itidaUd4Gi1BxQX+Y7Ush6BHp6URZBM2RyxUUBZ6yFtOWIr4nVY+Ro+YRSpo82v7JrsmtcU5xoBCMJQ=="], "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=="], @@ -1295,7 +1295,7 @@ "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], - "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], + "tailwindcss": ["tailwindcss@4.2.2", "", {}, "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q=="], "tapable": ["tapable@2.3.0", "", {}, "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="], @@ -1327,9 +1327,9 @@ "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], @@ -1451,13 +1451,13 @@ "@reduxjs/toolkit/immer": ["immer@11.1.4", "", {}, "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.0", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.3", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ=="], "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], @@ -1531,6 +1531,8 @@ "@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], diff --git a/package.json b/package.json index c49d4ac..988352b 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "@hookform/resolvers": "^5.2.2", "@mdx-js/loader": "^3.1.1", "@mdx-js/react": "^3.1.1", - "@next/mdx": "^16.1.6", + "@next/mdx": "^16.2.3", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-aspect-ratio": "^1.1.8", @@ -46,36 +46,36 @@ "cmdk": "^1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", - "framer-motion": "^12.34.0", + "framer-motion": "^12.38.0", "gray-matter": "^4.0.3", "highlight.js": "^11.11.1", "input-otp": "^1.4.2", - "lucide-react": "^1.7.0", - "next": "16.2.1", + "lucide-react": "^1.8.0", + "next": "16.2.3", "next-themes": "^0.4.6", "radix-ui": "^1.4.3", - "react": "19.2.4", + "react": "19.2.5", "react-day-picker": "^9.14.0", - "react-dom": "19.2.4", - "react-hook-form": "^7.71.1", - "react-resizable-panels": "^4.7.6", + "react-dom": "19.2.5", + "react-hook-form": "^7.72.1", + "react-resizable-panels": "^4.9.0", "react-snowfall": "^2.4.0", - "recharts": "3.8.0", - "shadcn": "^4.1.0", + "recharts": "3.8.1", + "shadcn": "^4.2.0", "sonner": "^2.0.7", "tailwind-merge": "^3.5.0", "vaul": "^1.1.2", "zod": "^4.3.6" }, "devDependencies": { - "@biomejs/biome": "2.3.15", - "@tailwindcss/postcss": "^4.1.18", - "@types/node": "^25.2.3", - "@types/react": "19.2.2", - "@types/react-dom": "19.2.2", - "tailwindcss": "^4.1.18", + "@biomejs/biome": "2.4.11", + "@tailwindcss/postcss": "^4.2.2", + "@types/node": "^25.6.0", + "@types/react": "19.2.14", + "@types/react-dom": "19.2.3", + "tailwindcss": "^4.2.2", "tw-animate-css": "^1.4.0", - "typescript": "^5.9.3" + "typescript": "^6.0.2" }, "overrides": { "@types/react": "19.2.2", From aaf3ed3b8c4490ad523f71c4a4690cf8bd76d293 Mon Sep 17 00:00:00 2001 From: imnyang Date: Sun, 26 Apr 2026 17:14:32 +0900 Subject: [PATCH 06/18] wow --- next.config.ts | 10 +++--- public/34b47ba35448cc74a659bcec443c3fbc.webp | Bin 0 -> 17152 bytes src/app/page.tsx | 35 ++++++++----------- src/components/Contact.tsx | 4 +-- src/components/timeline.tsx | 4 +-- 5 files changed, 24 insertions(+), 29 deletions(-) create mode 100644 public/34b47ba35448cc74a659bcec443c3fbc.webp diff --git a/next.config.ts b/next.config.ts index f5c1fb6..5382fc3 100644 --- a/next.config.ts +++ b/next.config.ts @@ -3,15 +3,15 @@ import type { NextConfig } from "next"; const path = require('path') const nextConfig: NextConfig = { - pageExtensions: ['ts', 'tsx', 'mdx'], + // pageExtensions: ['ts', 'tsx', 'mdx'], allowedDevOrigins: ['imnyang.dev'], - turbopack: { - root: path.join(__dirname, '.'), - }, + // turbopack: { + // root: path.join(__dirname, '.'), + // }, images: { remotePatterns: [new URL('https://api.imnya.ng/**')], }, - output: 'standalone', + // output: 'standalone', }; export default nextConfig; diff --git a/public/34b47ba35448cc74a659bcec443c3fbc.webp b/public/34b47ba35448cc74a659bcec443c3fbc.webp new file mode 100644 index 0000000000000000000000000000000000000000..caf050e21fa0edba7d31747f5fb2d25b0fd50a01 GIT binary patch literal 17152 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 bJW^(=(h)np%kb`}9j46tCYDWLU|;|M^6tlx literal 0 HcmV?d00001 diff --git a/src/app/page.tsx b/src/app/page.tsx index 8247754..16b3648 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,15 +1,12 @@ + import Projects from "@/components/Projects"; import TimelineComponent from "@/components/timeline"; import Image from "next/image"; -// import DraggableWindow from "@/components/DraggableWindow"; import ReadmeWindow from "@/components/ReadmeWindow"; import Contact from "@/components/Contact"; import DDayComponent from "@/components/dday"; -export default async function Page({ searchParams }: { searchParams: Promise<{ nowindow?: string }> }) { - const params = await searchParams; - const showWindow = params.nowindow === undefined; - +export default async function Page() { return (
@@ -21,32 +18,30 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ n width={30} height={30} /> -

- me@imnya.ng -

+
+

+ me@imnya.ng +

+
-
- -
-
+
-

더 멋진 세상을 만들기 위해 노력하는 암냥입니다.

-

초등학교 시절 운영체제에 흥미를 느껴 컴퓨터를 시작했고, 이후 프로그래밍에 관심을 갖게 되었습니다.

-

초등학교 4학년 때 Python으로 프로그래밍을 시작했으며, 현재는 TypeScript를 주로 사용합니다.

-

최근에는 정보보안 분야 중 웹 해킹에 관심이 많습니다.

+
- -
-

대표적인 프로젝트들은 아래와 같습니다.

+

하고 싶은 꿈을 현실로 만들어보는 암냥입니다.

+

언제나 새로운 것을 배우고, 도전하고 있습니다.

+

현재는 정보보안 분야쪽에 관심이 많으며 원래는 소프트웨어 개발에 관심 많았습니다.

+
+



-

© 2026 imnyang. All rights reserved.

+

© 2026 imnyanle.g. All rights reserved.


diff --git a/src/components/Contact.tsx b/src/components/Contact.tsx index 78d5134..f99395b 100644 --- a/src/components/Contact.tsx +++ b/src/components/Contact.tsx @@ -93,7 +93,7 @@ export default function Contact() { return (
{contact.map((method) => ( - +
+ + + + + diff --git a/src/components/Contact.tsx b/src/components/Contact.tsx deleted file mode 100644 index f99395b..0000000 --- a/src/components/Contact.tsx +++ /dev/null @@ -1,157 +0,0 @@ -"use client"; -import { MailIcon, Rss, GitBranch, Copy, Check } from "lucide-react"; -import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; -import Image from "next/image"; -import { Dialog, DialogContent, DialogHeader, DialogDescription, DialogFooter, DialogClose, DialogTitle } from "./ui/dialog"; -import React from "react"; -import { Button } from "./ui/button"; - -import { - Item, - ItemActions, - ItemContent, - ItemMedia, - ItemTitle, -} from "@/components/ui/item" - -type ContactMethod = { - name: string; - icon: React.ReactNode; - url?: string; - onClick?: () => void; -}; - -type EmailContact = { - label: string; - address: string; -}; - - -export default function Contact() { - const [isDialogOpen, setIsDialogOpen] = React.useState(false); - const [copiedEmail, setCopiedEmail] = React.useState(null); - const emailContacts: EmailContact[] = [ - { label: "Personal", address: "me@imnya.ng" }, - { label: "ADOFAI.gg", address: "imnyang@adofai.gg" }, - { label: "Dazzle.st", address: "imnyang@dazzle.st" }, - ]; - - const contact: ContactMethod[] = [ - { - "name": "Email", - "onClick": () => setIsDialogOpen(true), - "icon": , - }, - { - "name": "Blog", - "url": "https://blog.imnya.ng", - "icon": - }, - { - "name": "GitHub", - "url": "https://github.com/imnyang", - "icon": GitHub - }, - { - "name": "git.mizuki.guru", - "url": "https://git.mizuki.guru/imnyang", - "icon": - }, - { - "name": "Instagram", - "url": "https://instagram.com/imnya.ng", - "icon": Instagram - }, - { - "name": "𝕏", - "url": "https://x.com/imnya_ng", - "icon":

𝕏

- } - ] - - const handleClick = (method: ContactMethod) => { - if (method.onClick) { - method.onClick(); - } else if (method.url) { - window.open(method.url, "_blank", "noopener,noreferrer"); - } - }; - - const copyEmail = (email: string) => { - void navigator.clipboard.writeText(email); - setCopiedEmail(email); - - setTimeout(() => { - setCopiedEmail((currentEmail) => (currentEmail === email ? null : currentEmail)); - }, 1200); - }; - - const openMailTo = (email: string) => { - window.location.href = `mailto:${email}`; - }; - - return ( -
- {contact.map((method) => ( - - - - - -

{method.name}

-
-
- ))} - - - - - Contact Me - -
- {emailContacts.map((emailContact) => ( -
-

{emailContact.label} :

- - - -
- ))} -
-
-
- - - - - -
-
-
- ); -} diff --git a/src/components/DDay.astro b/src/components/DDay.astro new file mode 100644 index 0000000..a7ed4a9 --- /dev/null +++ b/src/components/DDay.astro @@ -0,0 +1,27 @@ +--- +export interface Props { + targetDate: string; + label: string; +} + +const { targetDate, label } = Astro.props; +--- + +
+ D-Day + {label} | {new Date(targetDate).toDateString()} +
+ + diff --git a/src/components/DraggableWindose.tsx b/src/components/DraggableWindose.tsx deleted file mode 100644 index 61f4c44..0000000 --- a/src/components/DraggableWindose.tsx +++ /dev/null @@ -1,141 +0,0 @@ -'use client'; - -import { useState, useRef, useEffect } from 'react'; -import Image from 'next/image'; -import { useIsMobile } from '@/hooks/use-mobile'; - -export default function DraggableWindose({ targetPosition, isVisible, onClose, onDragStart }: { targetPosition: { x: number; y: number } | null; isVisible: boolean; onClose: () => void; onDragStart?: () => void }) { - const isMobile = useIsMobile(); - const [position, setPosition] = useState({ x: 100, y: 100 }); - const [isDragging, setIsDragging] = useState(false); - const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 }); - const [shakeCount, setShakeCount] = useState(0); - const windowRef = useRef(null); - const lastPositionRef = useRef({ x: 100, y: 100 }); - const shakeThresholdRef = useRef(0); - - const handleMouseDown = (e: React.MouseEvent) => { - if (e.button !== 0) return; // Only left click - setIsDragging(true); - setShakeCount(0); - shakeThresholdRef.current = 0; - onDragStart?.(); - if (windowRef.current) { - const rect = windowRef.current.getBoundingClientRect(); - setDragOffset({ - x: e.clientX - rect.left, - y: e.clientY - rect.top, - }); - } - }; - - useEffect(() => { - if (!isDragging) return; - - const handleMouseMove = (e: MouseEvent) => { - const newX = e.clientX - dragOffset.x; - const newY = e.clientY - dragOffset.y; - - setPosition({ - x: newX, - y: newY, - }); - - // 흔드는 감지 - const distance = Math.sqrt( - Math.pow(newX - lastPositionRef.current.x, 2) + - Math.pow(newY - lastPositionRef.current.y, 2) - ); - - lastPositionRef.current = { x: newX, y: newY }; - shakeThresholdRef.current += distance; - - if (shakeThresholdRef.current > 2000) { - setShakeCount(prev => prev + 1); - shakeThresholdRef.current = 0; - - if (shakeCount >= 2) { - onClose(); - setIsDragging(false); - } - } - }; - - const handleMouseUp = () => { - setIsDragging(false); - }; - - document.addEventListener('mousemove', handleMouseMove); - document.addEventListener('mouseup', handleMouseUp); - - return () => { - document.removeEventListener('mousemove', handleMouseMove); - document.removeEventListener('mouseup', handleMouseUp); - }; - }, [isDragging, dragOffset, shakeCount]); - - // useEffect(() => { - // if (isDragging || targetPosition) return; - - // const interval = setInterval(() => { - // setPosition({ - // x: Math.random() * (window.innerWidth - 500), - // y: Math.random() * (window.innerHeight - 400), - // }); - // }, 500); - - // return () => clearInterval(interval); - // }, [isDragging, targetPosition]); - - useEffect(() => { - if (targetPosition && !isDragging) { - setPosition(targetPosition); - } - }, [targetPosition, isDragging]); - - return ( - isMobile ? ( -
- - Banner - -
- ) : ( - isVisible && ( -
-
- Draggable Window -
-
- ) - ) - ); -} diff --git a/src/components/DraggableWindow.tsx b/src/components/DraggableWindow.tsx deleted file mode 100644 index 4721e52..0000000 --- a/src/components/DraggableWindow.tsx +++ /dev/null @@ -1,147 +0,0 @@ -'use client'; - -import { useState, useRef, useEffect } from 'react'; -import Image from 'next/image'; -import { useIsMobile } from '@/hooks/use-mobile'; - -export default function DraggableWindow() { - const isMobile = useIsMobile(); - const [isVisible, setIsVisible] = useState(true); - const [position, setPosition] = useState({ x: 100, y: 100 }); - const [isDragging, setIsDragging] = useState(false); - const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 }); - const [isNadaeVisible, setIsNadaeVisible] = useState(false); - const windowRef = useRef(null); - const audioRef = useRef(null); - const nadaeTimeoutRef = useRef | null>(null); - - const handleMouseDown = (e: React.MouseEvent) => { - setIsDragging(true); - if (windowRef.current) { - const rect = windowRef.current.getBoundingClientRect(); - setDragOffset({ - x: e.clientX - rect.left, - y: e.clientY - rect.top, - }); - } - }; - - const handleActivate = () => { - if (!audioRef.current) { - audioRef.current = new Audio('/audio.opus'); - } - - audioRef.current.currentTime = 0; - void audioRef.current.play(); - void fetch('https://api.imnya.ng/nadae', { - method: 'PUT', - }).catch(() => null); - - setIsNadaeVisible(true); - - if (nadaeTimeoutRef.current) { - clearTimeout(nadaeTimeoutRef.current); - } - - nadaeTimeoutRef.current = setTimeout(() => { - setIsNadaeVisible(false); - nadaeTimeoutRef.current = null; - }, 1000); - }; - - useEffect(() => { - const handleMouseMove = (e: MouseEvent) => { - if (!isDragging) return; - - setPosition({ - x: e.clientX - dragOffset.x, - y: e.clientY - dragOffset.y, - }); - }; - - const handleMouseUp = () => { - setIsDragging(false); - }; - - if (isDragging) { - document.addEventListener('mousemove', handleMouseMove); - document.addEventListener('mouseup', handleMouseUp); - } - - return () => { - document.removeEventListener('mousemove', handleMouseMove); - document.removeEventListener('mouseup', handleMouseUp); - }; - }, [isDragging, dragOffset]); - - useEffect(() => { - return () => { - audioRef.current?.pause(); - audioRef.current = null; - - if (nadaeTimeoutRef.current) { - clearTimeout(nadaeTimeoutRef.current); - } - }; - }, []); - - return ( - isMobile ? ( -
- -
- ) : ( - isVisible && ( -
-
- Draggable Window -
-
- ) - ) - ); -} diff --git a/src/components/Projects.astro b/src/components/Projects.astro new file mode 100644 index 0000000..fae0d1c --- /dev/null +++ b/src/components/Projects.astro @@ -0,0 +1,90 @@ +--- +const projects = [ + { + name: 'EPC 2025 Broadcast Manager', + url: 'https://www.youtube.com/playlist?list=PLZeYZotn5_IOJDek6e35NKzUtJm09yxZD', + desc: 'ADOFAI is web-scale', + detail: '달성이 주관하고 ADOFAI.gg가 공동 주최하는 Effect Playing Contest 2025 방송 화면의 대부분의 기능을 개발하였습니다.', + tags: ['React', 'ElysiaJS'], + }, + { + name: 'newsletter', + url: 'https://github.com/imnyang/newsletter', + desc: 'For Memos', + detail: '그저 이메일이 오면 Discord 웹훅으로 포워딩합니다.', + tags: ['Rust', 'IMAP'] + }, + { + name: 'memos-rss', + url: 'https://github.com/imnyang/memos-rss', + desc: 'For Memos', + detail: 'Discord 포럼 채널에 RSS 피드에 올라온 내용을 포워딩합니다.', + tags: ['Rust', 'Discord Bot', 'RSS'] + }, + { + name: 'today.isangjeong', + url: 'https://instagram.com/today.isangjeong', + desc: 'Instagram Bot', + detail: '매일 학교의 급식 메뉴를 자동으로 업로드하는 인스타그램 봇입니다.', + tags: ['TypeScript', 'Instagram', '@napi-rs/canvas'] + } +]; +--- + +
+
+ {projects.map((project, idx) => ( +
= 3 ? 'hidden' : ''}`}> +
+
+ {project.url ? ( + + {project.name} + + + ) : ( + {project.name} + )} + {project.desc} +
+
+

{project.detail}

+
+
+
+ {project.tags.map((tag) => ( + {tag} + ))} +
+
+ ))} +
+ {projects.length > 3 && ( + + )} +
+ + diff --git a/src/components/Projects.tsx b/src/components/Projects.tsx deleted file mode 100644 index f508cc3..0000000 --- a/src/components/Projects.tsx +++ /dev/null @@ -1,79 +0,0 @@ -"use client"; -import { SquareArrowOutUpRight } from 'lucide-react'; -import React from 'react'; -import { Button } from './ui/button'; - -const projects = [ - { - name: 'EPC 2025 Broadcast Manager', - url: 'https://www.youtube.com/playlist?list=PLZeYZotn5_IOJDek6e35NKzUtJm09yxZD', - desc: 'ADOFAI is web-scale', - detail: '달성이 주관하고 ADOFAI.gg가 공동 주최하는 Effect Playing Contest 2025 방송 화면의 대부분의 기능을 개발하였습니다.', - tags: ['React', 'ElysiaJS'], - }, - { - name: 'newsletter', - url: 'https://github.com/imnyang/newsletter', - desc: 'For Memos', - detail: '그저 이메일이 오면 Discord 웹훅으로 포워딩합니다.', - tags: ['Rust', 'IMAP'] - }, - { - name: 'memos-rss', - url: 'https://github.com/imnyang/memos-rss', - desc: 'For Memos', - detail: 'Discord 포럼 채널에 RSS 피드에 올라온 내용을 포워딩합니다.', - tags: ['Rust', 'Discord Bot', 'RSS'] - }, - { - name: 'today.isangjeong', - url: 'https://instagram.com/today.isangjeong', - desc: 'Instagram Bot', - detail: '매일 학교의 급식 메뉴를 자동으로 업로드하는 인스타그램 봇입니다.', - tags: ['TypeScript', 'Instagram', '@napi-rs/canvas'] - } -]; - -export default function Projects() { - const [visibleCount, setVisibleCount] = React.useState(3); - - return ( -
-
- {projects.slice(0, visibleCount).map((project, idx) => ( -
-
-
- {project.url ? ( - - {project.name} - - - ) : ( - {project.name} - )} - {project.desc} -
-
-

{project.detail}

-
-
-
- {project.tags.map((tag, i) => ( - {tag} - ))} -
-
- ))} -
- {visibleCount < projects.length && ( - - )} -
- ); -} diff --git a/src/components/ReadmeWindow.tsx b/src/components/ReadmeWindow.tsx deleted file mode 100644 index 74398a3..0000000 --- a/src/components/ReadmeWindow.tsx +++ /dev/null @@ -1,21 +0,0 @@ -'use client'; - -import { useState, useRef, useEffect } from 'react'; -import { useReadmeWaka } from '@/hooks/use-readme-waka'; - -export default function ReadmeWindow() { - const { wakaContent, isLoading, error } = useReadmeWaka(); - - if (!wakaContent) return null; - - return ( -
-
-

WakaTime Stats

-
-                    {wakaContent.replace(/```(txt)?/g, '')}
-                
-
-
- ); -} diff --git a/src/components/Timeline.astro b/src/components/Timeline.astro new file mode 100644 index 0000000..ed22b97 --- /dev/null +++ b/src/components/Timeline.astro @@ -0,0 +1,135 @@ +--- +import { events } from "@/lib/events"; + +const years = [ + ...new Set(events.map((e) => new Date(e.date).getFullYear())), +].sort((a, b) => b - a); + +const eventsByYear: Record = {}; +for (const year of years) { + eventsByYear[year] = events.filter( + (e) => new Date(e.date).getFullYear() === year, + ); +} + +const currentYear = new Date().getFullYear(); +const daysUntilYearEnd = Math.ceil( + (new Date(currentYear + 1, 0, 1).getTime() - new Date().getTime()) / + (1000 * 60 * 60 * 24), +); +--- + +
+
+
+ +
+ { + years.map((year, i) => ( + + )) + } +
+ + +
+ { + years.map((year, i) => ( +
+ {eventsByYear[year].map((event) => ( +
+
+ + {new Date(event.date).toLocaleDateString("en-US", { + month: "short", + day: "2-digit", + })} + + + ㆍ{event.category} + +
+ {event.link ? ( + + {event.description}{" "} + + + + + + ) : ( + {event.description} + )} +
+ ))} + {year === currentYear && ( +
+
+ + ✨ | D-{daysUntilYearEnd}동안 만들어나갈 멋진 것들을 + 기대해주세요. + +
+
+ )} +
+ )) + } +
+
+
+
+ + diff --git a/src/components/dday.tsx b/src/components/dday.tsx deleted file mode 100644 index 54c13de..0000000 --- a/src/components/dday.tsx +++ /dev/null @@ -1,26 +0,0 @@ -"use client"; - -interface DDayComponentProps { - targetDate: Date; - label: string; - -} - -export default function DDayComponent({ targetDate, label }: DDayComponentProps) { - const today = new Date(); - const diffTime = targetDate.getTime() - today.getTime(); - const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); - - const getLabel = () => { - if (diffDays > 0) return `D-${diffDays}`; - if (diffDays < 0) return `D+${Math.abs(diffDays)}`; - return `D-Day`; - }; - - return ( -
- {getLabel()} - {label} | {targetDate.toDateString()} -
- ); -} \ No newline at end of file diff --git a/src/components/theme-provider.tsx b/src/components/theme-provider.tsx deleted file mode 100644 index e018a73..0000000 --- a/src/components/theme-provider.tsx +++ /dev/null @@ -1,11 +0,0 @@ -"use client" - -import * as React from "react" -import { ThemeProvider as NextThemesProvider } from "next-themes" - -export function ThemeProvider({ - children, - ...props -}: React.ComponentProps) { - return {children} -} \ No newline at end of file diff --git a/src/components/timeline.tsx b/src/components/timeline.tsx deleted file mode 100644 index c407515..0000000 --- a/src/components/timeline.tsx +++ /dev/null @@ -1,91 +0,0 @@ -"use client"; -import { events } from "@/lib/events"; -import { LinkIcon } from "lucide-react"; -import { useEffect, useState, useRef } from "react"; -import { Button } from "@/components/ui/button"; - -export default function TimelineComponent() { - const [selectedYear, setSelectedYear] = useState(null); - - const years = Array.from( - new Set(events.map((event) => new Date(event.date).getFullYear())) - ).sort((a, b) => b - a); - - useEffect(() => { - if (years.length > 0 && selectedYear === null) { - setSelectedYear(years[0]); - } - }, [years, selectedYear]); - - const filteredEvents = selectedYear - ? events.filter( - (event) => new Date(event.date).getFullYear() === selectedYear - ) - : []; - - return ( -
-
- {/*

💫 이 사람은 무엇을 하나요?

*/} - {/*
*/} -
- {/* Left column - Year buttons */} -
- {years.map((year) => ( - - ))} -
- - {/* Right column - Events */} -
-
- {filteredEvents.map((event, index) => ( -
-
- - {new Date(event.date).toLocaleDateString("en-US", { - month: "short", - day: "2-digit", - })} - - - ㆍ{event.category} - -
- {event.link ? ( - - {event.description}{" "} - - - ) : ( - {event.description} - )} -
- ))} - {selectedYear === new Date().getFullYear() && ( -
-
- ✨ | D-{Math.ceil((new Date(new Date().getFullYear() + 1, 0, 1).getTime() - new Date().getTime()) / (1000 * 60 * 60 * 24))}동안 만들어나갈 멋진 것들을 기대해주세요. -
-
- )} -
-
-
-
-
- ); -} diff --git a/src/components/txt.tsx b/src/components/txt.tsx deleted file mode 100644 index 014892b..0000000 --- a/src/components/txt.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import Image from "next/image"; -import { useState } from "react"; -import { useIsMobile } from "@/hooks/use-mobile"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog"; -import { Input } from "@/components/ui/input"; -import { Button } from "@/components/ui/button"; - -interface TXTProps { - onHover?: (position: { x: number; y: number } | null) => void; -} - -export default function TXT({ onHover }: TXTProps) { - const isMobile = useIsMobile(); - const [openInput, setOpenInput] = useState(false); - const [openResult, setOpenResult] = useState(false); - const [key, setKey] = useState(""); - const [error, setError] = useState(""); - const [content, setContent] = useState(""); - - const handleSubmit = async () => { - setError(""); - setContent(""); - try { - const response = await fetch(`https://api.imnya.ng/secret?key=${encodeURIComponent(key)}`); - const data = await response.text(); - if (data === "false") { - setError("아니요?"); - } else { - setOpenInput(false); - setOpenResult(true); - setContent(data); - } - } catch (_err) { - console.error(_err); - setError("오류가 발생했습니다"); - } - }; - - if (isMobile) return null; - - return ( - <> - - - - - 비밀 코드 입력 - - 비밀 코드를 입력하세요. - - -
- setKey(e.target.value)} - /> - {error &&

{error}

} -
- - - -
-
- - - - 비밀.txt - - {content.split('\n').map((line, idx) => ( - - {line} -
-
- ))} -
-
- - - -
-
- - ); -} \ No newline at end of file diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx deleted file mode 100644 index f5c5984..0000000 --- a/src/components/ui/accordion.tsx +++ /dev/null @@ -1,81 +0,0 @@ -"use client" - -import * as React from "react" -import { Accordion as AccordionPrimitive } from "radix-ui" - -import { cn } from "@/lib/utils" -import { ChevronDownIcon, ChevronUpIcon } from "lucide-react" - -function Accordion({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AccordionItem({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AccordionTrigger({ - className, - children, - ...props -}: React.ComponentProps) { - return ( - - - {children} - - - - - ) -} - -function AccordionContent({ - className, - children, - ...props -}: React.ComponentProps) { - return ( - -
- {children} -
-
- ) -} - -export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx deleted file mode 100644 index 40e9934..0000000 --- a/src/components/ui/alert-dialog.tsx +++ /dev/null @@ -1,199 +0,0 @@ -"use client" - -import * as React from "react" -import { AlertDialog as AlertDialogPrimitive } from "radix-ui" - -import { cn } from "@/lib/utils" -import { Button } from "@/components/ui/button" - -function AlertDialog({ - ...props -}: React.ComponentProps) { - return -} - -function AlertDialogTrigger({ - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AlertDialogPortal({ - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AlertDialogOverlay({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AlertDialogContent({ - className, - size = "default", - ...props -}: React.ComponentProps & { - size?: "default" | "sm" -}) { - return ( - - - - - ) -} - -function AlertDialogHeader({ - className, - ...props -}: React.ComponentProps<"div">) { - return ( -
- ) -} - -function AlertDialogFooter({ - className, - ...props -}: React.ComponentProps<"div">) { - return ( -
- ) -} - -function AlertDialogMedia({ - className, - ...props -}: React.ComponentProps<"div">) { - return ( -
- ) -} - -function AlertDialogTitle({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AlertDialogDescription({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AlertDialogAction({ - className, - variant = "default", - size = "default", - ...props -}: React.ComponentProps & - Pick, "variant" | "size">) { - return ( - - ) -} - -function AlertDialogCancel({ - className, - variant = "outline", - size = "default", - ...props -}: React.ComponentProps & - Pick, "variant" | "size">) { - return ( - - ) -} - -export { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogMedia, - AlertDialogOverlay, - AlertDialogPortal, - AlertDialogTitle, - AlertDialogTrigger, -} diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx deleted file mode 100644 index 1fe3176..0000000 --- a/src/components/ui/alert.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import * as React from "react" -import { cva, type VariantProps } from "class-variance-authority" - -import { cn } from "@/lib/utils" - -const alertVariants = cva( - "group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", - { - variants: { - variant: { - default: "bg-card text-card-foreground", - destructive: - "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - -function Alert({ - className, - variant, - ...props -}: React.ComponentProps<"div"> & VariantProps) { - return ( -
- ) -} - -function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { - return ( -
svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", - className - )} - {...props} - /> - ) -} - -function AlertDescription({ - className, - ...props -}: React.ComponentProps<"div">) { - return ( -
- ) -} - -function AlertAction({ className, ...props }: React.ComponentProps<"div">) { - return ( -
- ) -} - -export { Alert, AlertTitle, AlertDescription, AlertAction } diff --git a/src/components/ui/aspect-ratio.tsx b/src/components/ui/aspect-ratio.tsx deleted file mode 100644 index 57e38fa..0000000 --- a/src/components/ui/aspect-ratio.tsx +++ /dev/null @@ -1,11 +0,0 @@ -"use client" - -import { AspectRatio as AspectRatioPrimitive } from "radix-ui" - -function AspectRatio({ - ...props -}: React.ComponentProps) { - return -} - -export { AspectRatio } diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx deleted file mode 100644 index 47ff2e2..0000000 --- a/src/components/ui/avatar.tsx +++ /dev/null @@ -1,112 +0,0 @@ -"use client" - -import * as React from "react" -import { Avatar as AvatarPrimitive } from "radix-ui" - -import { cn } from "@/lib/utils" - -function Avatar({ - className, - size = "default", - ...props -}: React.ComponentProps & { - size?: "default" | "sm" | "lg" -}) { - return ( - - ) -} - -function AvatarImage({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AvatarFallback({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) { - return ( - svg]:hidden", - "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", - "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", - className - )} - {...props} - /> - ) -} - -function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) { - return ( -
- ) -} - -function AvatarGroupCount({ - className, - ...props -}: React.ComponentProps<"div">) { - return ( -
svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", - className - )} - {...props} - /> - ) -} - -export { - Avatar, - AvatarImage, - AvatarFallback, - AvatarGroup, - AvatarGroupCount, - AvatarBadge, -} diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx deleted file mode 100644 index cacff11..0000000 --- a/src/components/ui/badge.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from "react" -import { cva, type VariantProps } from "class-variance-authority" -import { Slot } from "radix-ui" - -import { cn } from "@/lib/utils" - -const badgeVariants = cva( - "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", - { - variants: { - variant: { - default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", - secondary: - "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80", - destructive: - "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20", - outline: - "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground", - ghost: - "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50", - link: "text-primary underline-offset-4 hover:underline", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - -function Badge({ - className, - variant = "default", - asChild = false, - ...props -}: React.ComponentProps<"span"> & - VariantProps & { asChild?: boolean }) { - const Comp = asChild ? Slot.Root : "span" - - return ( - - ) -} - -export { Badge, badgeVariants } diff --git a/src/components/ui/banner.tsx b/src/components/ui/banner.tsx deleted file mode 100644 index 86f88f8..0000000 --- a/src/components/ui/banner.tsx +++ /dev/null @@ -1,123 +0,0 @@ -"use client" - -import * as React from "react" -import { X } from "lucide-react" -import { cn } from "@/lib/utils" - -function Grid({ - cellSize = 12, - strokeWidth = 1, - patternOffset = [0, 0], - className, -}: { - cellSize?: number - strokeWidth?: number - patternOffset?: [number, number] - className?: string -}) { - const id = React.useId() - - return ( - - - - - - - - - ) -} - -interface BannerProps { - show: boolean - onHide: () => void - icon?: React.ReactNode - title: React.ReactNode - action: { - label: string - onClick: () => void - } - learnMoreUrl?: string -} - -export function Banner({ - show, - onHide, - icon, - title, - action, - learnMoreUrl, -}: BannerProps) { - if (!show) return null - - return ( -
- - -
- {icon && ( -
- {icon} -
- )} -

- {title} - {learnMoreUrl && ( - <> - {" "} - - Learn more - - - )} -

-
- -
- -
- - -
- ) -} \ No newline at end of file diff --git a/src/components/ui/breadcrumb.tsx b/src/components/ui/breadcrumb.tsx deleted file mode 100644 index db9afc0..0000000 --- a/src/components/ui/breadcrumb.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import * as React from "react" -import { Slot } from "radix-ui" - -import { cn } from "@/lib/utils" -import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react" - -function Breadcrumb({ className, ...props }: React.ComponentProps<"nav">) { - return ( -