From 91b35d070b08696b99d9f173b5bd1c98e151bb08 Mon Sep 17 00:00:00 2001 From: Dorian Grasset Date: Sat, 9 Nov 2024 10:48:30 +0100 Subject: [PATCH 1/4] bump dependencies --- eslint.config.mjs | 14 + package.json | 15 +- pnpm-lock.yaml | 664 ++++++++++++++++++++++++++++++++-------------- 3 files changed, 495 insertions(+), 198 deletions(-) create mode 100644 eslint.config.mjs diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..ac5942f --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,14 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; +import tseslint from "typescript-eslint"; +import pluginReact from "eslint-plugin-react"; + + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, + {languageOptions: { globals: globals.browser }}, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, +]; \ No newline at end of file diff --git a/package.json b/package.json index 5067a3f..cd66d93 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "gsap": "^3.12.5", "input-otp": "^1.2.4", "ky": "^1.7.2", - "lucide-react": "^0.419.0", + "lucide-react": "^0.456.0", "next": "14.2.10", "next-themes": "^0.3.0", "react": "^18.3.1", @@ -42,15 +42,22 @@ }, "devDependencies": { "@codedependant/semantic-release-docker": "^5.0.3", + "@eslint/js": "^9.14.0", "@iconify/react": "^5.0.2", - "@types/node": "^20.16.10", + "@types/node": "^22.9.0", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", - "eslint": "^8.57.1", + "eslint": "^9.14.0", "eslint-config-next": "14.2.5", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.2", + "globals": "^15.12.0", "husky": "^9.1.6", "postcss": "^8.4.47", + "prettier": "3.3.3", "tailwindcss": "^3.4.13", - "typescript": "^5.6.2" + "typescript": "^5.6.2", + "typescript-eslint": "^8.13.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04f6b2f..b510145 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,8 +66,8 @@ importers: specifier: ^1.7.2 version: 1.7.2 lucide-react: - specifier: ^0.419.0 - version: 0.419.0(react@18.3.1) + specifier: ^0.456.0 + version: 0.456.0(react@18.3.1) next: specifier: 14.2.10 version: 14.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -99,12 +99,15 @@ importers: '@codedependant/semantic-release-docker': specifier: ^5.0.3 version: 5.0.3 + '@eslint/js': + specifier: ^9.14.0 + version: 9.14.0 '@iconify/react': specifier: ^5.0.2 version: 5.0.2(react@18.3.1) '@types/node': - specifier: ^20.16.10 - version: 20.17.0 + specifier: ^22.9.0 + version: 22.9.0 '@types/react': specifier: ^18.3.11 version: 18.3.11 @@ -112,23 +115,41 @@ importers: specifier: ^18.3.0 version: 18.3.0 eslint: - specifier: ^8.57.1 - version: 8.57.1 + specifier: ^9.14.0 + version: 9.14.0(jiti@1.21.6) eslint-config-next: specifier: 14.2.5 - version: 14.2.5(eslint@8.57.1)(typescript@5.6.2) + version: 14.2.5(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@9.14.0(jiti@1.21.6)) + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@1.21.6)))(eslint@9.14.0(jiti@1.21.6))(prettier@3.3.3) + eslint-plugin-react: + specifier: ^7.37.2 + version: 7.37.2(eslint@9.14.0(jiti@1.21.6)) + globals: + specifier: ^15.12.0 + version: 15.12.0 husky: specifier: ^9.1.6 version: 9.1.6 postcss: specifier: ^8.4.47 version: 8.4.47 + prettier: + specifier: 3.3.3 + version: 3.3.3 tailwindcss: specifier: ^3.4.13 version: 3.4.13 typescript: specifier: ^5.6.2 version: 5.6.2 + typescript-eslint: + specifier: ^8.13.0 + version: 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) packages: @@ -149,17 +170,33 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/core@0.7.0': + resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.14.0': + resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.2': + resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -176,18 +213,25 @@ packages: '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@iconify/react@5.0.2': resolution: {integrity: sha512-wtmstbYlEbo4NDxFxBJkhkf9gJBDqMGr7FaqLrAUMneRV3Z+fVHLJjOhWbkAF8xDQNFC/wcTYdrWo1lnRhmagQ==} @@ -299,6 +343,10 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@radix-ui/primitive@1.1.0': resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} @@ -730,20 +778,26 @@ packages: peerDependencies: react: ^18.0.0 + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/node@20.17.0': - resolution: {integrity: sha512-a7zRo0f0eLo9K5X9Wp5cAqTUNGzuFLDG2R7C4HY2BhcMAsxgSPuRvAC1ZB6QkuUQXf0YZAgfOX2ZyrBa2n4nHQ==} + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} '@types/prismjs@1.26.4': resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==} @@ -766,6 +820,17 @@ packages: '@types/use-sync-external-store@0.0.3': resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} + '@typescript-eslint/eslint-plugin@8.13.0': + resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@7.2.0': resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -776,14 +841,41 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.13.0': + resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/scope-manager@7.2.0': resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.13.0': + resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.13.0': + resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/types@7.2.0': resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.13.0': + resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@7.2.0': resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -793,10 +885,29 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.13.0': + resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.13.0': + resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/visitor-keys@7.2.0': resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.13.0': + resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@uiw/react-textarea-code-editor@3.0.2': resolution: {integrity: sha512-x5IsB4y8uHx8wMlRJAbdLit+ksCw93btFhZYM1GKjKUJJiOGgq3Ze1az19rn1/TYJy02I/wzwU3fv65EHzsSrw==} peerDependencies: @@ -812,8 +923,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -1086,10 +1197,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1129,6 +1236,10 @@ packages: resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} + es-iterator-helpers@1.2.0: + resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} + engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -1157,6 +1268,12 @@ packages: typescript: optional: true + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -1210,35 +1327,57 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + eslint-plugin-react-hooks@4.6.2: resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.37.1: - resolution: {integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==} + eslint-plugin-react@7.37.2: + resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.14.0: + resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} @@ -1266,6 +1405,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -1279,9 +1421,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -1291,9 +1433,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -1305,9 +1447,6 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1359,13 +1498,13 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@15.12.0: + resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -1475,13 +1614,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - input-otp@1.2.4: resolution: {integrity: sha512-md6rhmD+zmMnUh5crQNSQxq3keBRYvE3odbr4Qb9g2NWzQv9azi+t1a3X4TBTbh98fsGHgEEJlzbe1q860uGCA==} peerDependencies: @@ -1588,10 +1720,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -1644,6 +1772,10 @@ packages: iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} + jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -1722,10 +1854,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lucide-react@0.419.0: - resolution: {integrity: sha512-YkOHuc1uGH2A4G0NRZyeCW6mMFGb8z3amep0fARuKIri68nveAT5C8OuXOPJXpb/iIgSfsjdMjjII7bnEtGkvw==} + lucide-react@0.456.0: + resolution: {integrity: sha512-DIIGJqTT5X05sbAsQ+OhA8OtJYyD4NsEMCA/HQW/Y6ToPQ7gwbtujIoeAaup4HpHzV35SQOarKAWH8LYglB6eA==} peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} @@ -1909,10 +2041,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1996,6 +2124,15 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -2138,11 +2275,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2294,6 +2426,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + engines: {node: ^14.18.0 || >=16.0.0} + tailwind-merge@2.5.3: resolution: {integrity: sha512-d9ZolCAIzom1nf/5p4LdD5zvjmgSxY0BGgdSvmXIoMYAiPdAW/dSpP7joCDYFY7r/HkEa2qmPtkgsu0xjQeQtw==} @@ -2350,10 +2486,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -2370,6 +2502,15 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typescript-eslint@8.13.0: + resolution: {integrity: sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript@5.6.2: resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} @@ -2548,19 +2689,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0(jiti@1.21.6))': dependencies: - eslint: 8.57.1 + eslint: 9.14.0(jiti@1.21.6) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.7.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -2569,7 +2720,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.14.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.2': + dependencies: + levn: 0.4.1 '@floating-ui/core@1.6.8': dependencies: @@ -2588,17 +2745,18 @@ snapshots: '@floating-ui/utils@0.2.8': {} - '@humanwhocodes/config-array@0.13.0': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} '@iconify/react@5.0.2(react@18.3.1)': dependencies: @@ -2683,6 +2841,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@pkgr/core@0.1.1': {} + '@radix-ui/primitive@1.1.0': {} '@radix-ui/react-accordion@1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -3099,6 +3259,8 @@ snapshots: '@tanstack/query-core': 5.21.4 react: 18.3.1 + '@types/estree@1.0.6': {} + '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.11 @@ -3107,13 +3269,15 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/json-schema@7.0.15': {} + '@types/json5@0.0.29': {} '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 - '@types/node@20.17.0': + '@types/node@22.9.0': dependencies: undici-types: 6.19.8 @@ -3136,14 +3300,45 @@ snapshots: '@types/use-sync-external-store@0.0.3': {} - '@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.13.0 + eslint: 9.14.0(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2)': dependencies: '@typescript-eslint/scope-manager': 7.2.0 '@typescript-eslint/types': 7.2.0 '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2) '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.7 - eslint: 8.57.1 + eslint: 9.14.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.13.0 + debug: 4.3.7 + eslint: 9.14.0(jiti@1.21.6) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -3154,8 +3349,27 @@ snapshots: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 + '@typescript-eslint/scope-manager@8.13.0': + dependencies: + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 + + '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + '@typescript-eslint/types@7.2.0': {} + '@typescript-eslint/types@8.13.0': {} + '@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.2)': dependencies: '@typescript-eslint/types': 7.2.0 @@ -3171,11 +3385,42 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.2)': + dependencies: + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.2) + eslint: 9.14.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/visitor-keys@7.2.0': dependencies: '@typescript-eslint/types': 7.2.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.13.0': + dependencies: + '@typescript-eslint/types': 8.13.0 + eslint-visitor-keys: 3.4.3 + '@uiw/react-textarea-code-editor@3.0.2(@babel/runtime@7.25.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.7 @@ -3186,11 +3431,11 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} ajv@6.12.6: dependencies: @@ -3488,10 +3733,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - eastasianwidth@0.2.0: {} emoji-regex@8.0.0: {} @@ -3593,6 +3834,24 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 + es-iterator-helpers@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.3 + safe-array-concat: 1.1.2 + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -3615,18 +3874,18 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@14.2.5(eslint@8.57.1)(typescript@5.6.2): + eslint-config-next@14.2.5(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2): dependencies: '@next/eslint-plugin-next': 14.2.5 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) - eslint: 8.57.1 + '@typescript-eslint/parser': 7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + eslint: 9.14.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) - eslint-plugin-react: 7.37.1(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@1.21.6)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.14.0(jiti@1.21.6)) + eslint-plugin-jsx-a11y: 6.10.0(eslint@9.14.0(jiti@1.21.6)) + eslint-plugin-react: 7.37.2(eslint@9.14.0(jiti@1.21.6)) + eslint-plugin-react-hooks: 4.6.2(eslint@9.14.0(jiti@1.21.6)) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -3634,6 +3893,10 @@ snapshots: - eslint-plugin-import-x - supports-color + eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@1.21.6)): + dependencies: + eslint: 9.14.0(jiti@1.21.6) + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -3642,37 +3905,37 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@1.21.6)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 - eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint: 9.14.0(jiti@1.21.6) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@1.21.6)))(eslint@9.14.0(jiti@1.21.6)) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.14.0(jiti@1.21.6)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@1.21.6)))(eslint@9.14.0(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) - eslint: 8.57.1 + '@typescript-eslint/parser': 7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + eslint: 9.14.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.14.0(jiti@1.21.6)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -3681,9 +3944,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 9.14.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@1.21.6)))(eslint@9.14.0(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -3695,13 +3958,13 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): + eslint-plugin-jsx-a11y@6.10.0(eslint@9.14.0(jiti@1.21.6)): dependencies: aria-query: 5.1.3 array-includes: 3.1.8 @@ -3712,7 +3975,7 @@ snapshots: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.19 - eslint: 8.57.1 + eslint: 9.14.0(jiti@1.21.6) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -3721,19 +3984,28 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.14.0(jiti@1.21.6)))(eslint@9.14.0(jiti@1.21.6))(prettier@3.3.3): dependencies: - eslint: 8.57.1 + eslint: 9.14.0(jiti@1.21.6) + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@9.14.0(jiti@1.21.6)) - eslint-plugin-react@7.37.1(eslint@8.57.1): + eslint-plugin-react-hooks@4.6.2(eslint@9.14.0(jiti@1.21.6)): + dependencies: + eslint: 9.14.0(jiti@1.21.6) + + eslint-plugin-react@7.37.2(eslint@9.14.0(jiti@1.21.6)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 - eslint: 8.57.1 + es-iterator-helpers: 1.2.0 + eslint: 9.14.0(jiti@1.21.6) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -3747,61 +4019,62 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - eslint-scope@7.2.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.2.0: {} + + eslint@9.14.0(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.11.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.7.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.14.0 + '@eslint/plugin-kit': 0.2.2 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.7 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esquery@1.6.0: dependencies: @@ -3831,6 +4104,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3847,9 +4122,9 @@ snapshots: dependencies: reusify: 1.0.4 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 fill-range@7.1.1: dependencies: @@ -3860,11 +4135,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 flatted@3.3.1: {} @@ -3877,8 +4151,6 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fs.realpath@1.0.0: {} - fsevents@2.3.3: optional: true @@ -3942,18 +4214,9 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + globals@14.0.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@15.12.0: {} globalthis@1.0.4: dependencies: @@ -4101,13 +4364,6 @@ snapshots: imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - input-otp@1.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -4207,8 +4463,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@4.1.0: {} is-regex@1.1.4: @@ -4259,6 +4513,14 @@ snapshots: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 + iterator.prototype@1.1.3: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 @@ -4331,7 +4593,7 @@ snapshots: lru-cache@10.4.3: {} - lucide-react@0.419.0(react@18.3.1): + lucide-react@0.456.0(react@18.3.1): dependencies: react: 18.3.1 @@ -4538,8 +4800,6 @@ snapshots: path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -4606,6 +4866,12 @@ snapshots: prelude-ls@1.2.1: {} + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.3.3: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -4771,10 +5037,6 @@ snapshots: reusify@1.0.4: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -4943,6 +5205,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + synckit@0.9.2: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.7.0 + tailwind-merge@2.5.3: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.13): @@ -5015,8 +5282,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 @@ -5049,6 +5314,17 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + typescript-eslint@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + typescript@5.6.2: {} uglify-js@3.19.3: From 36015c5cd056f95fc0a17d16acc351660665830d Mon Sep 17 00:00:00 2001 From: Dorian Grasset Date: Sat, 9 Nov 2024 11:31:09 +0100 Subject: [PATCH 2/4] add config & format all files --- .eslintrc.json | 3 - .husky/pre-commit | 1 + .prettierignore | 5 + .prettierrc | 7 + components.json | 2 +- eslint.config.mjs | 45 +- next.config.mjs | 4 +- package.json | 6 +- pnpm-lock.yaml | 6 + postcss.config.mjs | 4 +- src/app/(gistLayout)/layout-ui.tsx | 101 +++- src/app/(gistLayout)/layout.tsx | 39 +- .../(gistLayout)/mygist/[gistId]/page-ui.tsx | 16 +- src/app/(gistLayout)/mygist/[gistId]/page.tsx | 26 +- src/app/(gistLayout)/mygist/page-ui.tsx | 23 +- src/app/(gistLayout)/mygist/page.tsx | 2 +- .../org/[orgId]/gist/[gistId]/page-ui.tsx | 24 +- .../org/[orgId]/gist/[gistId]/page.tsx | 37 +- src/app/layout.tsx | 76 +-- src/app/login/page-ui.tsx | 70 ++- src/app/login/page.tsx | 68 +-- src/app/page.tsx | 2 +- src/app/robots.ts | 10 +- src/app/sitemap.ts | 2 +- src/components/api/api-provider.tsx | 20 +- src/components/contexts/pagination.tsx | 84 ++- src/components/logic/gists-landing-logic.tsx | 52 +- src/components/logic/mygist-list-logic.tsx | 28 +- src/components/logic/org-list-logic.tsx | 18 +- src/components/shadcn/accordion.tsx | 72 ++- src/components/shadcn/avatar.tsx | 16 +- src/components/shadcn/badge.tsx | 39 +- src/components/shadcn/button.tsx | 44 +- src/components/shadcn/codearea.tsx | 15 +- src/components/shadcn/context-menu.tsx | 165 +++--- src/components/shadcn/dialog.tsx | 70 ++- src/components/shadcn/dropdown-menu.tsx | 169 +++--- src/components/shadcn/input-otp.tsx | 62 +- src/components/shadcn/input.tsx | 8 +- src/components/shadcn/label.tsx | 13 +- src/components/shadcn/pagination.tsx | 107 ++-- src/components/shadcn/separator.tsx | 31 +- src/components/shadcn/sheet.tsx | 105 ++-- src/components/shadcn/sidebar.tsx | 536 ++++++++++-------- src/components/shadcn/skeleton.tsx | 4 +- src/components/shadcn/textarea.tsx | 8 +- src/components/shadcn/toast.tsx | 81 ++- src/components/shadcn/toaster.tsx | 6 +- src/components/shadcn/tooltip.tsx | 35 +- src/components/shadcn/use-toast.ts | 46 +- src/components/theme/theme-provider.tsx | 4 +- src/components/theme/theme-switch.tsx | 18 +- src/components/theme/theme-wrapper.tsx | 6 +- src/components/ui/blur-background.tsx | 12 +- src/components/ui/card.tsx | 22 +- src/components/ui/codeblock.tsx | 19 +- src/components/ui/gist-details.tsx | 87 ++- src/components/ui/gist-landing.tsx | 81 ++- src/components/ui/header-button.tsx | 28 +- src/components/ui/menu-button.tsx | 66 ++- src/components/ui/modal.tsx | 2 +- src/components/ui/mygist-list.tsx | 4 +- src/components/ui/org-gist-section.tsx | 27 +- src/components/ui/org-list.tsx | 22 +- src/components/ui/org-section.tsx | 35 +- src/components/ui/pagination.tsx | 52 +- src/components/ui/profile-dropdown.tsx | 18 +- src/components/ui/shortcut.tsx | 4 +- src/components/ui/tooltip-shortcut.tsx | 29 +- src/lib/hook/use-is-mobile.ts | 10 +- src/lib/hook/use-key-press.ts | 13 +- src/lib/language.ts | 18 +- src/lib/queries/auth.queries.tsx | 72 ++- src/lib/queries/gists.queries.tsx | 192 +++---- src/lib/queries/orgs.queries.tsx | 106 ++-- src/lib/queries/queries.tsx | 20 +- src/lib/queries/user.queries.tsx | 26 +- src/lib/utils.ts | 8 +- src/middleware.ts | 10 +- tailwind.config.ts | 100 ++-- 80 files changed, 1967 insertions(+), 1557 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 .prettierignore create mode 100644 .prettierrc diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index bffb357..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/.husky/pre-commit b/.husky/pre-commit index 234b476..fec151f 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1,3 @@ pnpm lint +pnpm prettier pnpm build \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..175ca03 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +# Ignore artifacts: +build +coverage +node_modules +pnpm-lock.yaml \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..a9a0000 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "printWidth": 120, + "tabWidth": 2, + "semi": false, + "singleQuote": false +} diff --git a/components.json b/components.json index 8c574b7..7559f63 100644 --- a/components.json +++ b/components.json @@ -14,4 +14,4 @@ "components": "@/components", "utils": "@/lib/utils" } -} \ No newline at end of file +} diff --git a/eslint.config.mjs b/eslint.config.mjs index ac5942f..ed9ee0e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,14 +1,35 @@ -import globals from "globals"; -import pluginJs from "@eslint/js"; -import tseslint from "typescript-eslint"; -import pluginReact from "eslint-plugin-react"; +import eslintConfigPrettier from "eslint-config-prettier" +import nextPlugin from "@next/eslint-plugin-next" +import tsPlugin from "@typescript-eslint/eslint-plugin" +import tsParser from "@typescript-eslint/parser" - -/** @type {import('eslint').Linter.Config[]} */ export default [ - {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, - {languageOptions: { globals: globals.browser }}, - pluginJs.configs.recommended, - ...tseslint.configs.recommended, - pluginReact.configs.flat.recommended, -]; \ No newline at end of file + { + ignores: ["node_modules/**", "dist/**", ".next/**", "out/**"], + }, + { + files: ["**/*.{ts,tsx}"], + plugins: { + "@typescript-eslint": tsPlugin, + "@next/next": nextPlugin, + }, + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + }, + }, + rules: { + // Avertissement pour les 'any' + "@typescript-eslint/no-explicit-any": "warn", + + // Avertissement pour les imports/variables non utilisés + "@typescript-eslint/no-unused-vars": "warn", + + // Avertissement pour les types implicites qui pourraient être 'any' + "@typescript-eslint/no-inferrable-types": "warn", + }, + }, + eslintConfigPrettier, +] diff --git a/next.config.mjs b/next.config.mjs index 8c8bab6..3d55197 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { output: "standalone", -}; +} -export default nextConfig; +export default nextConfig diff --git a/package.json b/package.json index cd66d93..3bd1214 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint", + "lint": "npx eslint .", + "prettier": "prettier --check .", + "prettier:format": "prettier --write .", "prepare": "husky" }, "dependencies": { @@ -47,6 +49,8 @@ "@types/node": "^22.9.0", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^8.13.0", + "@typescript-eslint/parser": "^8.13.0", "eslint": "^9.14.0", "eslint-config-next": "14.2.5", "eslint-config-prettier": "^9.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b510145..49d9a61 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,6 +114,12 @@ importers: '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 + '@typescript-eslint/eslint-plugin': + specifier: ^8.13.0 + version: 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/parser': + specifier: ^8.13.0 + version: 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.2) eslint: specifier: ^9.14.0 version: 9.14.0(jiti@1.21.6) diff --git a/postcss.config.mjs b/postcss.config.mjs index 1a69fd2..0dc456a 100644 --- a/postcss.config.mjs +++ b/postcss.config.mjs @@ -3,6 +3,6 @@ const config = { plugins: { tailwindcss: {}, }, -}; +} -export default config; +export default config diff --git a/src/app/(gistLayout)/layout-ui.tsx b/src/app/(gistLayout)/layout-ui.tsx index 7af4fea..78819af 100644 --- a/src/app/(gistLayout)/layout-ui.tsx +++ b/src/app/(gistLayout)/layout-ui.tsx @@ -1,16 +1,16 @@ -import { OrgListFeature } from '@/components/logic/org-list-logic' -import { Avatar, AvatarFallback, AvatarImage } from '@/components/shadcn/avatar' -import { Button } from '@/components/shadcn/button' -import { Codearea } from '@/components/shadcn/codearea' -import { Input } from '@/components/shadcn/input' -import { Sidebar, SidebarContent, SidebarHeader, SidebarProvider } from '@/components/shadcn/sidebar' -import MenuButton from '@/components/ui/menu-button' -import { Modal } from '@/components/ui/modal' -import { ProfileDropdown } from '@/components/ui/profile-dropdown' -import TooltipShortcut, { TooltipShortcutTrigger } from '@/components/ui/tooltip-shortcut' -import { getLanguage } from '@/lib/language' -import { FileCodeIcon, LucidePencil, PlusIcon } from 'lucide-react' -import { useState } from 'react' +import { OrgListFeature } from "@/components/logic/org-list-logic" +import { Avatar, AvatarFallback, AvatarImage } from "@/components/shadcn/avatar" +import { Button } from "@/components/shadcn/button" +import { Codearea } from "@/components/shadcn/codearea" +import { Input } from "@/components/shadcn/input" +import { Sidebar, SidebarContent, SidebarHeader, SidebarProvider } from "@/components/shadcn/sidebar" +import MenuButton from "@/components/ui/menu-button" +import { Modal } from "@/components/ui/modal" +import { ProfileDropdown } from "@/components/ui/profile-dropdown" +import TooltipShortcut, { TooltipShortcutTrigger } from "@/components/ui/tooltip-shortcut" +import { getLanguage } from "@/lib/language" +import { FileCodeIcon, LucidePencil, PlusIcon } from "lucide-react" +import { useState } from "react" interface GistLayoutProps { username: string @@ -22,11 +22,19 @@ interface GistLayoutProps { onLogout: () => void } -export default function GistLayout({ avatar, children, username, onMyGists, onCreateOrg, onCreateGist, onLogout }: GistLayoutProps) { - const [gistName, setGistName] = useState('') - const [gistContent, setGistContent] = useState('') +export default function GistLayout({ + avatar, + children, + username, + onMyGists, + onCreateOrg, + onCreateGist, + onLogout, +}: GistLayoutProps) { + const [gistName, setGistName] = useState("") + const [gistContent, setGistContent] = useState("") const [isGistModalOpen, setIsGistModalOpen] = useState(false) - const [orgName, setOrgName] = useState('') + const [orgName, setOrgName] = useState("") const [isOrgModalOpen, setIsOrgModalOpen] = useState(false) const language = getLanguage(gistName) @@ -124,10 +132,24 @@ function AppSidebar({
- } variant="menu" size="menu" letter="M" onClick={onMyGists} href="/mygist" className="w-full"> + } + variant="menu" + size="menu" + letter="M" + onClick={onMyGists} + href="/mygist" + className="w-full" + > My Gists - +
@@ -147,7 +169,16 @@ interface CreateGistModalProps { language: string } -function CreateGistModal({ gistName, setGistName, isGistModalOpen, setIsGistModalOpen, onCreateGist, gistContent, setGistContent, language }: CreateGistModalProps) { +function CreateGistModal({ + gistName, + setGistName, + isGistModalOpen, + setIsGistModalOpen, + onCreateGist, + gistContent, + setGistContent, + language, +}: CreateGistModalProps) { return ( - + - @@ -166,9 +197,20 @@ function CreateGistModal({ gistName, setGistName, isGistModalOpen, setIsGistModa } content={
- setGistName(e.target.value)} /> + setGistName(e.target.value)} + />
- setGistContent(e.target.value)} /> + setGistContent(e.target.value)} + />
} @@ -178,7 +220,7 @@ function CreateGistModal({ gistName, setGistName, isGistModalOpen, setIsGistModa size="sm" onClick={() => { onCreateGist(gistName, gistContent) - setGistName('') + setGistName("") setIsGistModalOpen(false) }} > @@ -210,7 +252,12 @@ function CreateOrgModal({ orgName, setOrgName, setIsOrgModalOpen, onCreateOrg, i title="Create Org" content={
- setOrgName(e.target.value)} /> + setOrgName(e.target.value)} + />
} footer={ @@ -219,7 +266,7 @@ function CreateOrgModal({ orgName, setOrgName, setIsOrgModalOpen, onCreateOrg, i size="sm" onClick={() => { onCreateOrg(orgName) - setOrgName('') + setOrgName("") setIsOrgModalOpen(false) }} > diff --git a/src/app/(gistLayout)/layout.tsx b/src/app/(gistLayout)/layout.tsx index 043bc6f..1833ae0 100644 --- a/src/app/(gistLayout)/layout.tsx +++ b/src/app/(gistLayout)/layout.tsx @@ -1,12 +1,12 @@ -'use client' +"use client" -import { ReactNode, useCallback } from 'react' -import GistLayout from './layout-ui' -import { useMe } from '@/lib/queries/user.queries' -import { useToast } from '@/components/shadcn/use-toast' -import { useCreateGist } from '@/lib/queries/gists.queries' -import { useCreateOrg } from '@/lib/queries/orgs.queries' -import { useLogout } from '@/lib/queries/auth.queries' +import { ReactNode, useCallback } from "react" +import GistLayout from "./layout-ui" +import { useMe } from "@/lib/queries/user.queries" +import { useToast } from "@/components/shadcn/use-toast" +import { useCreateGist } from "@/lib/queries/gists.queries" +import { useCreateOrg } from "@/lib/queries/orgs.queries" +import { useLogout } from "@/lib/queries/auth.queries" export default function GistLayoutFeature({ children }: { children: ReactNode }) { const { data, error } = useMe() @@ -14,16 +14,16 @@ export default function GistLayoutFeature({ children }: { children: ReactNode }) const { mutate: createGist } = useCreateGist({ onSuccess: () => { toast({ - title: 'Gist Created', - description: 'Your gist has been created successfully', + title: "Gist Created", + description: "Your gist has been created successfully", }) }, }) const { mutate: createOrg } = useCreateOrg({ onSuccess: () => { toast({ - title: 'Organization Created', - description: 'Your org has been created successfully', + title: "Organization Created", + description: "Your org has been created successfully", }) }, }) @@ -31,10 +31,10 @@ export default function GistLayoutFeature({ children }: { children: ReactNode }) const { mutate: logout } = useLogout({ onSuccess: () => { toast({ - title: 'Logged Out', - description: 'You have been logged out successfully', + title: "Logged Out", + description: "You have been logged out successfully", }) - window.location.href = '/' //sorry but couldn't find a way to redirect to the login page + window.location.href = "/" //sorry but couldn't find a way to redirect to the login page }, }) @@ -59,7 +59,14 @@ export default function GistLayoutFeature({ children }: { children: ReactNode }) } return ( - + {children} ) diff --git a/src/app/(gistLayout)/mygist/[gistId]/page-ui.tsx b/src/app/(gistLayout)/mygist/[gistId]/page-ui.tsx index bb32bec..c24fa4f 100644 --- a/src/app/(gistLayout)/mygist/[gistId]/page-ui.tsx +++ b/src/app/(gistLayout)/mygist/[gistId]/page-ui.tsx @@ -1,5 +1,5 @@ -import GistDetails from '@/components/ui/gist-details' -import { Gist } from '@/types' +import GistDetails from "@/components/ui/gist-details" +import { Gist } from "@/types" interface MyGistIdPageProps { gist: Gist @@ -10,5 +10,15 @@ interface MyGistIdPageProps { } export default function MyGistIdPage({ gist, onDownload, onSave, onDelete, onShare }: MyGistIdPageProps) { - return + return ( + + ) } diff --git a/src/app/(gistLayout)/mygist/[gistId]/page.tsx b/src/app/(gistLayout)/mygist/[gistId]/page.tsx index 4ca2b18..a404d84 100644 --- a/src/app/(gistLayout)/mygist/[gistId]/page.tsx +++ b/src/app/(gistLayout)/mygist/[gistId]/page.tsx @@ -1,9 +1,9 @@ -'use client' -import React from 'react' -import MyGistIdPage from './page-ui' -import { useGist, usePatchGistContent, usePatchGistName } from '@/lib/queries/gists.queries' -import { useToast } from '@/components/shadcn/use-toast' -import { useKeyPress } from '@/lib/hook/use-key-press' +"use client" +import React from "react" +import MyGistIdPage from "./page-ui" +import { useGist, usePatchGistContent, usePatchGistName } from "@/lib/queries/gists.queries" +import { useToast } from "@/components/shadcn/use-toast" +import { useKeyPress } from "@/lib/hook/use-key-press" interface MyGistIdFeaturePageProps { params: { @@ -19,8 +19,8 @@ export default function MyGistIdFeaturePage({ params }: MyGistIdFeaturePageProps const { mutate: updateName } = usePatchGistName({ onSuccess: () => { toast({ - title: 'Gist Saved', - description: 'Your gist has been saved successfully', + title: "Gist Saved", + description: "Your gist has been saved successfully", }) }, }) @@ -31,16 +31,16 @@ export default function MyGistIdFeaturePage({ params }: MyGistIdFeaturePageProps const onDownload = () => { toast({ - title: 'Gist Downloaded', - description: 'Your gist has been downloaded successfully', + title: "Gist Downloaded", + description: "Your gist has been downloaded successfully", }) } const onSave = (name: string, code: string) => { updateContent({ id: gistId, content: code }) updateName({ id: gistId, name }) toast({ - title: 'Gist Saved', - description: 'Your gist has been saved successfully', + title: "Gist Saved", + description: "Your gist has been saved successfully", }) } @@ -49,7 +49,7 @@ export default function MyGistIdFeaturePage({ params }: MyGistIdFeaturePageProps } const onShare = () => { - console.log('Share') + console.log("Share") } if (!data) { diff --git a/src/app/(gistLayout)/mygist/page-ui.tsx b/src/app/(gistLayout)/mygist/page-ui.tsx index bc65ef9..fa72e54 100644 --- a/src/app/(gistLayout)/mygist/page-ui.tsx +++ b/src/app/(gistLayout)/mygist/page-ui.tsx @@ -1,12 +1,10 @@ -import { PaginationProvider } from "@/components/contexts/pagination"; -import { MyGistListFeature } from "@/components/logic/mygist-list-logic"; -import { SidebarTrigger } from "@/components/shadcn/sidebar"; -import MenuButton from "@/components/ui/menu-button"; -import { PaginationComponent } from "@/components/ui/pagination"; -import TooltipShortcut, { - TooltipShortcutTrigger, -} from "@/components/ui/tooltip-shortcut"; -import { TornadoIcon } from "lucide-react"; +import { PaginationProvider } from "@/components/contexts/pagination" +import { MyGistListFeature } from "@/components/logic/mygist-list-logic" +import { SidebarTrigger } from "@/components/shadcn/sidebar" +import MenuButton from "@/components/ui/menu-button" +import { PaginationComponent } from "@/components/ui/pagination" +import TooltipShortcut, { TooltipShortcutTrigger } from "@/components/ui/tooltip-shortcut" +import { TornadoIcon } from "lucide-react" interface MyGistPageProps {} @@ -21,10 +19,7 @@ export default function MyGistsPage({}: MyGistPageProps) { - } - variant={"menu"} - > + } variant={"menu"}> Sort by @@ -40,5 +35,5 @@ export default function MyGistsPage({}: MyGistPageProps) { - ); + ) } diff --git a/src/app/(gistLayout)/mygist/page.tsx b/src/app/(gistLayout)/mygist/page.tsx index ae115f1..3df3006 100644 --- a/src/app/(gistLayout)/mygist/page.tsx +++ b/src/app/(gistLayout)/mygist/page.tsx @@ -1,4 +1,4 @@ -import MyGistsPage from './page-ui' +import MyGistsPage from "./page-ui" interface MyGistPageProps {} diff --git a/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page-ui.tsx b/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page-ui.tsx index dd66a7a..2064803 100644 --- a/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page-ui.tsx +++ b/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page-ui.tsx @@ -1,5 +1,5 @@ -import GistDetails from '@/components/ui/gist-details' -import { Gist } from '@/types' +import GistDetails from "@/components/ui/gist-details" +import { Gist } from "@/types" interface MyOrgGistIdPageProps { gist: Gist @@ -10,6 +10,22 @@ interface MyOrgGistIdPageProps { onShare: () => void } -export default function MyOrgGistIdPage({ orgName, gist, onDownload, onSave, onDelete, onShare }: MyOrgGistIdPageProps) { - return +export default function MyOrgGistIdPage({ + orgName, + gist, + onDownload, + onSave, + onDelete, + onShare, +}: MyOrgGistIdPageProps) { + return ( + + ) } diff --git a/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page.tsx b/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page.tsx index 83cb43c..8081401 100644 --- a/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page.tsx +++ b/src/app/(gistLayout)/org/[orgId]/gist/[gistId]/page.tsx @@ -1,9 +1,9 @@ -'use client' -import { useToast } from '@/components/shadcn/use-toast' -import GistDetails from '@/components/ui/gist-details' -import { useGist, usePatchGistContent, usePatchGistName } from '@/lib/queries/gists.queries' -import { useOrg } from '@/lib/queries/orgs.queries' -import React from 'react' +"use client" +import { useToast } from "@/components/shadcn/use-toast" +import GistDetails from "@/components/ui/gist-details" +import { useGist, usePatchGistContent, usePatchGistName } from "@/lib/queries/gists.queries" +import { useOrg } from "@/lib/queries/orgs.queries" +import React from "react" interface MyOrgGistIdFeaturePageProps { params: { @@ -20,8 +20,8 @@ export default function MyOrgGistIdFeaturePage({ params }: MyOrgGistIdFeaturePag const { mutate: updateName } = usePatchGistName({ onSuccess: () => { toast({ - title: 'Gist Saved', - description: 'Your gist has been saved successfully a ', + title: "Gist Saved", + description: "Your gist has been saved successfully a ", }) }, }) @@ -32,8 +32,8 @@ export default function MyOrgGistIdFeaturePage({ params }: MyOrgGistIdFeaturePag const onDownload = () => { toast({ - title: 'Gist Downloaded', - description: 'Your gist has been downloaded successfully', + title: "Gist Downloaded", + description: "Your gist has been downloaded successfully", }) } @@ -41,13 +41,13 @@ export default function MyOrgGistIdFeaturePage({ params }: MyOrgGistIdFeaturePag updateContent({ id: gistId, content: code }) updateName({ id: gistId, name }) toast({ - title: 'Gist Saved', - description: 'Your gist has been saved successfully', + title: "Gist Saved", + description: "Your gist has been saved successfully", }) } const onShare = () => { - console.log('Share') + console.log("Share") } const onDelete = (id: string) => { @@ -58,5 +58,14 @@ export default function MyOrgGistIdFeaturePage({ params }: MyOrgGistIdFeaturePag return null } - return + return ( + + ) } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 068a44e..12ca66b 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,53 +1,53 @@ -import { Inter as FontSans } from 'next/font/google' -import './globals.css' -import { cn } from '@/lib/utils' -import BlurBackground from '@/components/ui/blur-background' -import ThemeWrapper from '@/components/theme/theme-wrapper' -import { Toaster } from '@/components/shadcn/toaster' -import { Providers } from '@/components/theme/theme-provider' -import QueryProvider from '@/components/api/api-provider' -import Script from 'next/script' -import { Metadata } from 'next' +import { Inter as FontSans } from "next/font/google" +import "./globals.css" +import { cn } from "@/lib/utils" +import BlurBackground from "@/components/ui/blur-background" +import ThemeWrapper from "@/components/theme/theme-wrapper" +import { Toaster } from "@/components/shadcn/toaster" +import { Providers } from "@/components/theme/theme-provider" +import QueryProvider from "@/components/api/api-provider" +import Script from "next/script" +import { Metadata } from "next" -const fontSans = FontSans({ subsets: ['latin'] }) +const fontSans = FontSans({ subsets: ["latin"] }) export const metadata: Metadata = { - title: 'Create and share secure code snippets - Gists', - description: 'Gists lets developers create, share, and collaborate on secure code snippets.', - metadataBase: new URL('https://gists.app'), + title: "Create and share secure code snippets - Gists", + description: "Gists lets developers create, share, and collaborate on secure code snippets.", + metadataBase: new URL("https://gists.app"), icons: { - icon: '/favicon.png', + icon: "/favicon.png", }, keywords: [ - 'gists', - 'app', - 'code snippets', - 'code sharing', - 'developer tools', - 'programming', - 'collaboration', - 'open source', - 'project management', - 'code editor', - 'gist platform', - 'coding platform', - 'software development', - 'team collaboration', - 'version control', - 'code storage', + "gists", + "app", + "code snippets", + "code sharing", + "developer tools", + "programming", + "collaboration", + "open source", + "project management", + "code editor", + "gist platform", + "coding platform", + "software development", + "team collaboration", + "version control", + "code storage", ], openGraph: { - title: 'Create and share secure code snippets - Gists', - description: 'Gists lets developers create, share, and collaborate on secure code snippets.', - type: 'website', - url: 'https://gists.app', - siteName: 'Gists', + title: "Create and share secure code snippets - Gists", + description: "Gists lets developers create, share, and collaborate on secure code snippets.", + type: "website", + url: "https://gists.app", + siteName: "Gists", images: [ { - url: 'https://gists.app/og-card.png', + url: "https://gists.app/og-card.png", width: 1200, height: 630, - alt: 'Preview image for Gists.app', + alt: "Preview image for Gists.app", }, ], }, diff --git a/src/app/login/page-ui.tsx b/src/app/login/page-ui.tsx index 7bbb7c0..bc9860b 100644 --- a/src/app/login/page-ui.tsx +++ b/src/app/login/page-ui.tsx @@ -1,15 +1,15 @@ -import React, { useRef, useEffect, useState } from 'react' -import { gsap } from 'gsap' -import { Button } from '@/components/shadcn/button' -import { Input } from '@/components/shadcn/input' -import { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } from '@/components/shadcn/input-otp' -import { UseFormRegisterReturn } from 'react-hook-form' -import { Icon } from '@iconify/react' -import { useKeyPress } from '@/lib/hook/use-key-press' +import React, { useRef, useEffect, useState } from "react" +import { gsap } from "gsap" +import { Button } from "@/components/shadcn/button" +import { Input } from "@/components/shadcn/input" +import { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } from "@/components/shadcn/input-otp" +import { UseFormRegisterReturn } from "react-hook-form" +import { Icon } from "@iconify/react" +import { useKeyPress } from "@/lib/hook/use-key-press" interface LoginProps { - step: 'initial' | 'emailInput' | 'otpInput' - email: UseFormRegisterReturn<'email'> + step: "initial" | "emailInput" | "otpInput" + email: UseFormRegisterReturn<"email"> otpValue: string onEmailClick: () => void onGitHubClick: () => void @@ -49,16 +49,24 @@ export default function Login({ useEffect(() => { if (!shouldAnimate) return - if (step === 'emailInput' && inputRef.current) { - gsap.fromTo(inputRef.current, { opacity: 0, y: -20 }, { opacity: 1, y: 0, duration: 0.5, ease: 'power2.out' }) + if (step === "emailInput" && inputRef.current) { + gsap.fromTo(inputRef.current, { opacity: 0, y: -20 }, { opacity: 1, y: 0, duration: 0.5, ease: "power2.out" }) } - if (step === 'otpInput' && otpContainerRef.current) { - gsap.fromTo(otpContainerRef.current, { opacity: 0, y: 20 }, { opacity: 1, y: 0, duration: 0.5, ease: 'power2.out' }) + if (step === "otpInput" && otpContainerRef.current) { + gsap.fromTo( + otpContainerRef.current, + { opacity: 0, y: 20 }, + { opacity: 1, y: 0, duration: 0.5, ease: "power2.out" } + ) } - if (step === 'initial' && loginContainerRef.current) { - gsap.fromTo(loginContainerRef.current, { opacity: 0, y: 20 }, { opacity: 1, y: 0, duration: 0.5, ease: 'power2.out' }) + if (step === "initial" && loginContainerRef.current) { + gsap.fromTo( + loginContainerRef.current, + { opacity: 0, y: 20 }, + { opacity: 1, y: 0, duration: 0.5, ease: "power2.out" } + ) } }, [step, shouldAnimate]) @@ -68,7 +76,7 @@ export default function Login({ opacity: 0, y: 20, duration: 0.5, - ease: 'power2.in', + ease: "power2.in", onComplete: () => { onBackToLoginClick() setIsAnimating(false) @@ -77,7 +85,7 @@ export default function Login({ } const renderContent = () => { - if (step === 'otpInput') { + if (step === "otpInput") { return (

Check your email

@@ -109,12 +117,18 @@ export default function Login({
- Nothing received ?{' '} - - @@ -125,22 +139,22 @@ export default function Login({

Log in to Gists

- {step === 'emailInput' && ( + {step === "emailInput" && (
{emailError &&

{emailError}

}
)} - - {step === 'emailInput' &&
} + {step === "emailInput" &&
} - - @@ -151,9 +165,7 @@ export default function Login({ return (
-
- {/* */} -
+
{/* */}
{renderContent()}
) diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index ab90942..1c2290f 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,21 +1,21 @@ -'use client' +"use client" -import { useEffect, useState, useCallback } from 'react' -import { useForm, UseFormRegisterReturn } from 'react-hook-form' -import { useToast } from '@/components/shadcn/use-toast' -import { getBackendURL } from '@/lib/utils' -import { useLocalAuth, useLocalAuthVerify } from '@/lib/queries/auth.queries' -import Login from './page-ui' -import { redirect, useRouter } from 'next/navigation' -import { useKeyPress } from '@/lib/hook/use-key-press' +import { useEffect, useState, useCallback } from "react" +import { useForm, UseFormRegisterReturn } from "react-hook-form" +import { useToast } from "@/components/shadcn/use-toast" +import { getBackendURL } from "@/lib/utils" +import { useLocalAuth, useLocalAuthVerify } from "@/lib/queries/auth.queries" +import Login from "./page-ui" +import { redirect, useRouter } from "next/navigation" +import { useKeyPress } from "@/lib/hook/use-key-press" interface FormData { email: string } export default function LoginFeature() { - const [step, setStep] = useState<'initial' | 'emailInput' | 'otpInput'>('initial') - const [otpValue, setOtpValue] = useState('') + const [step, setStep] = useState<"initial" | "emailInput" | "otpInput">("initial") + const [otpValue, setOtpValue] = useState("") const { toast } = useToast() const router = useRouter() @@ -27,40 +27,40 @@ export default function LoginFeature() { handleSubmit, formState: { errors, isValid }, } = useForm({ - mode: 'onChange', + mode: "onChange", }) - const emailRegister = register('email', { - required: 'Email is required', + const emailRegister = register("email", { + required: "Email is required", pattern: { value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i, - message: 'Invalid email address', + message: "Invalid email address", }, }) const onSubmit = useCallback( (data: FormData) => { sendEmail(data.email) - localStorage.setItem('email', data.email) - setStep('otpInput') + localStorage.setItem("email", data.email) + setStep("otpInput") }, [sendEmail] ) const handleEmailClick = useCallback(() => { - if (step === 'initial') { - setStep('emailInput') - } else if (step === 'emailInput' && isValid) { + if (step === "initial") { + setStep("emailInput") + } else if (step === "emailInput" && isValid) { handleSubmit(onSubmit)() } }, [step, isValid, handleSubmit, onSubmit]) const handleGitHubClick = useCallback(() => { - window.location.href = getBackendURL() + '/auth/github' + window.location.href = getBackendURL() + "/auth/github" }, []) const handleGoogleClick = useCallback(() => { - window.location.href = getBackendURL() + '/auth/google' + window.location.href = getBackendURL() + "/auth/google" }, []) const handleOtpChange = useCallback((value: string) => { @@ -68,51 +68,51 @@ export default function LoginFeature() { }, []) const handleContinueClick = useCallback(() => { - const email = localStorage.getItem('email') + const email = localStorage.getItem("email") if (!email) { - console.error('Email not found in local storage.') + console.error("Email not found in local storage.") return } - localStorage.removeItem('email') + localStorage.removeItem("email") verifyEmail({ email: email, token: otpValue }) }, [otpValue, verifyEmail]) const handleTryAgainClick = useCallback(() => { toast({ - title: 'A new one time password has been sent.', - description: 'Please check your email.', + title: "A new one time password has been sent.", + description: "Please check your email.", }) }, [toast]) const handleBackToLoginClick = useCallback(() => { - setStep('initial') - setOtpValue('') + setStep("initial") + setOtpValue("") }, []) const handleEscapeKeyPress = useCallback( (e: KeyboardEvent) => { e.preventDefault() - router.push('/') + router.push("/") }, [router] ) - useKeyPress('Escape', handleEscapeKeyPress); + useKeyPress("Escape", handleEscapeKeyPress) useEffect(() => { if (verified) { toast({ - title: 'You have been verified.', + title: "You have been verified.", }) - redirect('/mygist') + redirect("/mygist") } }, [verified, toast]) return ( } + email={emailRegister as UseFormRegisterReturn<"email">} otpValue={otpValue} onEmailClick={handleEmailClick} onGitHubClick={handleGitHubClick} diff --git a/src/app/page.tsx b/src/app/page.tsx index 1043dcc..0b8df6f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,4 +1,4 @@ -import GistsLandingLogic from '@/components/logic/gists-landing-logic' +import GistsLandingLogic from "@/components/logic/gists-landing-logic" export default function HomePage() { return ( diff --git a/src/app/robots.ts b/src/app/robots.ts index f93caf1..f2c2674 100644 --- a/src/app/robots.ts +++ b/src/app/robots.ts @@ -1,13 +1,13 @@ -import type { MetadataRoute } from 'next' +import type { MetadataRoute } from "next" export default function robots(): MetadataRoute.Robots { - const baseUrl = 'https://gists.app' + const baseUrl = "https://gists.app" return { rules: [ { - userAgent: '*', - allow: ['/', '/login'], - disallow: ['/mygist/', '/org/'], + userAgent: "*", + allow: ["/", "/login"], + disallow: ["/mygist/", "/org/"], }, ], sitemap: `${baseUrl}/sitemap.xml`, diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 4d28f28..ddbb372 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -1,5 +1,5 @@ export default async function sitemap() { - const baseUrl = 'https://gists.app' + const baseUrl = "https://gists.app" return [ { url: baseUrl, diff --git a/src/components/api/api-provider.tsx b/src/components/api/api-provider.tsx index 57705e2..f11e85b 100644 --- a/src/components/api/api-provider.tsx +++ b/src/components/api/api-provider.tsx @@ -1,17 +1,9 @@ -"use client"; +"use client" -import getQueryClient from "@/lib/queries/queries"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { useState } from "react"; +import getQueryClient from "@/lib/queries/queries" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import { useState } from "react" -export default function QueryProvider({ - children, -}: { - children: React.ReactNode; -}) { - return ( - - {children} - - ); +export default function QueryProvider({ children }: { children: React.ReactNode }) { + return {children} } diff --git a/src/components/contexts/pagination.tsx b/src/components/contexts/pagination.tsx index 20166cf..e468ec7 100644 --- a/src/components/contexts/pagination.tsx +++ b/src/components/contexts/pagination.tsx @@ -1,20 +1,14 @@ -"use client"; -import { usePathname, useRouter, useSearchParams } from "next/navigation"; -import { - createContext, - ReactNode, - useCallback, - useEffect, - useState, -} from "react"; +"use client" +import { usePathname, useRouter, useSearchParams } from "next/navigation" +import { createContext, ReactNode, useCallback, useEffect, useState } from "react" interface PaginationContextContent { - offset: number; - limit: number; - nb_pages?: number; - setOffset: (offset: number) => void; - setLimit: (limit: number) => void; - setNbPages: (nb_pages: number) => void; + offset: number + limit: number + nb_pages?: number + setOffset: (offset: number) => void + setLimit: (limit: number) => void + setNbPages: (nb_pages: number) => void } const PaginationInitialState = { @@ -24,59 +18,51 @@ const PaginationInitialState = { setOffset: (offset: number) => {}, setLimit: (limit: number) => {}, setNbPages: (nb_pages: number) => {}, -}; +} -export const PaginationContext = createContext( - PaginationInitialState, -); +export const PaginationContext = createContext(PaginationInitialState) -export function PaginationProvider({ - children, - fromUrl, -}: { - children: ReactNode; - fromUrl: boolean; -}) { - const [offset, setOffset] = useState(PaginationInitialState.offset); - const [limit, setLimit] = useState(PaginationInitialState.limit); - const [nb_pages, setNbPages] = useState(PaginationInitialState.nb_pages); - const searchParams = useSearchParams(); - const pathname = usePathname(); - const router = useRouter(); +export function PaginationProvider({ children, fromUrl }: { children: ReactNode; fromUrl: boolean }) { + const [offset, setOffset] = useState(PaginationInitialState.offset) + const [limit, setLimit] = useState(PaginationInitialState.limit) + const [nb_pages, setNbPages] = useState(PaginationInitialState.nb_pages) + const searchParams = useSearchParams() + const pathname = usePathname() + const router = useRouter() const checkOffset = useCallback( (offset: number) => { if (offset >= 0 && offset <= nb_pages * limit) { - return true; + return true } - return false; + return false }, - [nb_pages, limit], - ); + [nb_pages, limit] + ) const setOffsetHandler = useCallback( (offset: number) => { if (checkOffset(offset)) { if (fromUrl) { - const page = Math.floor(offset / limit) + 1; - router.push(`${pathname}?page=${page}`); + const page = Math.floor(offset / limit) + 1 + router.push(`${pathname}?page=${page}`) } - setOffset(offset); + setOffset(offset) } }, - [checkOffset, fromUrl, limit, pathname, router], - ); + [checkOffset, fromUrl, limit, pathname, router] + ) useEffect(() => { - if (!fromUrl) return; + if (!fromUrl) return if (searchParams.has("page")) { - const page = parseInt(searchParams.get("page") as string); - const offset = (page - 1) * limit; - console.log("offset", offset); - if (!checkOffset(offset)) return; - setOffset(offset); + const page = parseInt(searchParams.get("page") as string) + const offset = (page - 1) * limit + console.log("offset", offset) + if (!checkOffset(offset)) return + setOffset(offset) } - }, [searchParams, fromUrl, setOffset, limit, setOffsetHandler, checkOffset]); + }, [searchParams, fromUrl, setOffset, limit, setOffsetHandler, checkOffset]) return ( {children} - ); + ) } diff --git a/src/components/logic/gists-landing-logic.tsx b/src/components/logic/gists-landing-logic.tsx index b277428..10763cb 100644 --- a/src/components/logic/gists-landing-logic.tsx +++ b/src/components/logic/gists-landing-logic.tsx @@ -1,11 +1,11 @@ -'use client' +"use client" -import { useState, useEffect, useCallback, useRef } from 'react' -import { Gist } from '@/types' -import GistLanding from '@/components/ui/gist-landing' -import { toast } from '../shadcn/use-toast' -import { useRouter } from 'next/navigation' -import { useKeyPress } from '@/lib/hook/use-key-press' +import { useState, useEffect, useCallback, useRef } from "react" +import { Gist } from "@/types" +import GistLanding from "@/components/ui/gist-landing" +import { toast } from "../shadcn/use-toast" +import { useRouter } from "next/navigation" +import { useKeyPress } from "@/lib/hook/use-key-press" console.log(` _______ ________ ______ _________ ______ ________ ______ ______ @@ -22,16 +22,16 @@ console.log(` export default function GistsLandingLogic() { const router = useRouter() const [gist, setGist] = useState({ - id: 'example', - name: 'Welcome to Gists.app', - code: '', + id: "example", + name: "Welcome to Gists.app", + code: "", }) const fileInputRef = useRef(null) const [isShareDialogOpen, setIsShareDialogOpen] = useState(false) useEffect(() => { - const storedGistName = localStorage.getItem('gistName') || 'Welcome to Gists.app' - const storedGistCode = localStorage.getItem('gistCode') || '' + const storedGistName = localStorage.getItem("gistName") || "Welcome to Gists.app" + const storedGistCode = localStorage.getItem("gistCode") || "" setGist((prevGist) => ({ ...prevGist, name: storedGistName, @@ -40,7 +40,7 @@ export default function GistsLandingLogic() { }, []) const handleShare = useCallback(() => { - console.log('Share') + console.log("Share") }, []) const handleShareDialog = useCallback(() => { @@ -49,17 +49,17 @@ export default function GistsLandingLogic() { const handleGistNameChange = useCallback((newName: string) => { setGist((prevGist) => ({ ...prevGist, name: newName })) - localStorage.setItem('gistName', newName) + localStorage.setItem("gistName", newName) }, []) const handleGistCodeChange = useCallback((newCode: string) => { setGist((prevGist) => ({ ...prevGist, code: newCode })) - localStorage.setItem('gistCode', newCode) + localStorage.setItem("gistCode", newCode) }, []) const handleOpenFile = useCallback(() => { - const fileInput = document.createElement('input') - fileInput.type = 'file' + const fileInput = document.createElement("input") + fileInput.type = "file" fileInput.onchange = (event: Event) => { const target = event.target as HTMLInputElement const file = target.files?.[0] @@ -79,22 +79,22 @@ export default function GistsLandingLogic() { const handleKeyPressLogin = useCallback( (e: KeyboardEvent) => { e.preventDefault() - router.push('/login') + router.push("/login") }, [router] ) const handleDownload = useCallback((name: string, code: string) => { - const element = document.createElement('a') - const file = new Blob([code], { type: 'text/plain' }) + const element = document.createElement("a") + const file = new Blob([code], { type: "text/plain" }) element.href = URL.createObjectURL(file) element.download = name document.body.appendChild(element) element.click() document.body.removeChild(element) toast({ - title: 'Gist Downloaded', - description: 'Your gist has been downloaded successfully', + title: "Gist Downloaded", + description: "Your gist has been downloaded successfully", }) }, []) @@ -114,10 +114,10 @@ export default function GistsLandingLogic() { [handleOpenFile] ) - useKeyPress('d', handleKeyPressDownload, ['ctrlKey']) - useKeyPress('l', handleKeyPressLogin, ['ctrlKey']) - useKeyPress('o', handleKeyPressOpenFile, ['ctrlKey']) - useKeyPress('s', handleShareDialog, ['ctrlKey', 'shiftKey']) + useKeyPress("d", handleKeyPressDownload, ["ctrlKey"]) + useKeyPress("l", handleKeyPressLogin, ["ctrlKey"]) + useKeyPress("o", handleKeyPressOpenFile, ["ctrlKey"]) + useKeyPress("s", handleShareDialog, ["ctrlKey", "shiftKey"]) return ( { - setNbPages(nb_pages || 0); - }, [nb_pages, setNbPages]); + setNbPages(nb_pages || 0) + }, [nb_pages, setNbPages]) const { mutate: deleteGist } = useDeleteGist({ onSuccess: (id) => { - console.log(`Deleting gist with ID: ${id}`); + console.log(`Deleting gist with ID: ${id}`) }, - }); + }) const handleDeleteGist = (id: string) => { - deleteGist(id); - }; + deleteGist(id) + } - return ; + return } diff --git a/src/components/logic/org-list-logic.tsx b/src/components/logic/org-list-logic.tsx index 248c653..98ac730 100644 --- a/src/components/logic/org-list-logic.tsx +++ b/src/components/logic/org-list-logic.tsx @@ -1,16 +1,16 @@ -import { OrgList } from '../ui/org-list' -import { useDeleteOrgs, useOrgs } from '@/lib/queries/orgs.queries' +import { OrgList } from "../ui/org-list" +import { useDeleteOrgs, useOrgs } from "@/lib/queries/orgs.queries" export function OrgListFeature() { const { data } = useOrgs() - const { mutate } = useDeleteOrgs({ onSuccess: () => console.log('Deleted') }) + const { mutate } = useDeleteOrgs({ onSuccess: () => console.log("Deleted") }) const onDeleteTeam = (id: string) => { mutate(id) } const onGistOrg = () => { - console.log('Gist Org Clicked') + console.log("Gist Org Clicked") } const onDeleteGist = (id: string) => { @@ -21,5 +21,13 @@ export function OrgListFeature() { console.log(`Updating org with ID: ${id} and name: ${name}`) } - return + return ( + + ) } diff --git a/src/components/shadcn/accordion.tsx b/src/components/shadcn/accordion.tsx index dcc2921..1dcb08c 100644 --- a/src/components/shadcn/accordion.tsx +++ b/src/components/shadcn/accordion.tsx @@ -1,41 +1,53 @@ -'use client' +"use client" -import * as React from 'react' -import * as AccordionPrimitive from '@radix-ui/react-accordion' -import { ChevronDown } from 'lucide-react' +import * as React from "react" +import * as AccordionPrimitive from "@radix-ui/react-accordion" +import { ChevronDown } from "lucide-react" -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils" const Accordion = AccordionPrimitive.Root -const AccordionItem = React.forwardRef, React.ComponentPropsWithoutRef>(({ className, ...props }, ref) => ( - +const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AccordionItem.displayName = "AccordionItem" + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className + )} + {...props} + > + {children} + + + )) -AccordionItem.displayName = 'AccordionItem' - -const AccordionTrigger = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, children, ...props }, ref) => ( - - svg]:rotate-180', className)} - {...props} - > - {children} - - - - ) -) AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName -const AccordionContent = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, children, ...props }, ref) => ( - -
{children}
-
- ) -) +const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +
{children}
+
+)) AccordionContent.displayName = AccordionPrimitive.Content.displayName diff --git a/src/components/shadcn/avatar.tsx b/src/components/shadcn/avatar.tsx index 51e507b..9946eec 100644 --- a/src/components/shadcn/avatar.tsx +++ b/src/components/shadcn/avatar.tsx @@ -11,10 +11,7 @@ const Avatar = React.forwardRef< >(({ className, ...props }, ref) => ( )) @@ -24,11 +21,7 @@ const AvatarImage = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )) AvatarImage.displayName = AvatarPrimitive.Image.displayName @@ -38,10 +31,7 @@ const AvatarFallback = React.forwardRef< >(({ className, ...props }, ref) => ( )) diff --git a/src/components/shadcn/badge.tsx b/src/components/shadcn/badge.tsx index eedc701..747f7e2 100644 --- a/src/components/shadcn/badge.tsx +++ b/src/components/shadcn/badge.tsx @@ -1,23 +1,28 @@ -import * as React from 'react' -import { cva, type VariantProps } from 'class-variance-authority' +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils" -const badgeVariants = cva('inline-flex items-center rounded-lg border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', { - variants: { - variant: { - default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80', - secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80', - destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80', - outline: 'text-foreground', - title: 'group-hover:bg-primary group-hover:border-primary group-hover:text-primary-foreground bg-secondary text-secondary-foreground h-7', - section: 'group-focus-within:bg-primary group-focus-within:border-primary group-focus-within:text-primary-foreground bg-secondary text-secondary-foreground h-7', +const badgeVariants = cva( + "inline-flex items-center rounded-lg border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + title: + "group-hover:bg-primary group-hover:border-primary group-hover:text-primary-foreground bg-secondary text-secondary-foreground h-7", + section: + "group-focus-within:bg-primary group-focus-within:border-primary group-focus-within:text-primary-foreground bg-secondary text-secondary-foreground h-7", + }, }, - }, - defaultVariants: { - variant: 'default', - }, -}) + defaultVariants: { + variant: "default", + }, + } +) export interface BadgeProps extends React.HTMLAttributes, VariantProps {} diff --git a/src/components/shadcn/button.tsx b/src/components/shadcn/button.tsx index 48c9cce..385a217 100644 --- a/src/components/shadcn/button.tsx +++ b/src/components/shadcn/button.tsx @@ -1,8 +1,8 @@ -import * as React from "react"; -import { Slot } from "@radix-ui/react-slot"; -import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" -import { cn } from "@/lib/utils"; +import { cn } from "@/lib/utils" const buttonVariants = cva( "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", @@ -10,15 +10,11 @@ const buttonVariants = cva( variants: { variant: { default: "bg-primary text-primary-foreground hover:bg-primary/90", - destructive: - "bg-destructive text-destructive-foreground hover:bg-destructive/90", - outline: - "border border-input bg-background hover:bg-accent hover:text-accent-foreground", - secondary: - "bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", ghost: "hover:bg-light-background hover:text-foreground", - disabled: - "hover:bg-light-background hover:text-foreground opacity-50 cursor-not-allowed", + disabled: "hover:bg-light-background hover:text-foreground opacity-50 cursor-not-allowed", link: "text-primary text-base underline-offset-4 hover:underline", icon: "text-foreground bg-icon hover:bg-icon/80", menu: "text-primary-foreground hover:bg-primary hover:text-primary-foreground", @@ -37,27 +33,21 @@ const buttonVariants = cva( variant: "default", size: "default", }, - }, -); + } +) export interface ButtonProps extends React.ButtonHTMLAttributes, VariantProps { - asChild?: boolean; + asChild?: boolean } const Button = React.forwardRef( ({ className, variant, size, asChild = false, ...props }, ref) => { - const Comp = asChild ? Slot : "button"; - return ( - - ); - }, -); -Button.displayName = "Button"; + const Comp = asChild ? Slot : "button" + return + } +) +Button.displayName = "Button" -export { Button, buttonVariants }; +export { Button, buttonVariants } diff --git a/src/components/shadcn/codearea.tsx b/src/components/shadcn/codearea.tsx index d933bbe..f3da5e3 100644 --- a/src/components/shadcn/codearea.tsx +++ b/src/components/shadcn/codearea.tsx @@ -1,6 +1,6 @@ -import React from 'react' -import CodeEditor from '@uiw/react-textarea-code-editor' -import { cn } from '@/lib/utils' +import React from "react" +import CodeEditor from "@uiw/react-textarea-code-editor" +import { cn } from "@/lib/utils" export interface CodeareaProps extends React.TextareaHTMLAttributes { className?: string @@ -14,19 +14,18 @@ const Codearea = ({ className, language, ...props }: CodeareaProps) => { language={language} onChange={props.onChange} className={cn( - 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', + "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className )} placeholder={props.placeholder} style={{ - backgroundColor: '#0C0D0E', - fontFamily: 'ui-monospace, SFMono-Regular, SF Mono, Consolas, Liberation Mono, Menlo, monospace' + backgroundColor: "#0C0D0E", + fontFamily: "ui-monospace, SFMono-Regular, SF Mono, Consolas, Liberation Mono, Menlo, monospace", }} /> ) } - -Codearea.displayName = 'Codearea' +Codearea.displayName = "Codearea" export { Codearea } diff --git a/src/components/shadcn/context-menu.tsx b/src/components/shadcn/context-menu.tsx index 55c2f41..3d2cb0e 100644 --- a/src/components/shadcn/context-menu.tsx +++ b/src/components/shadcn/context-menu.tsx @@ -1,10 +1,10 @@ -'use client' +"use client" -import * as React from 'react' -import * as ContextMenuPrimitive from '@radix-ui/react-context-menu' -import { Check, ChevronRight, Circle } from 'lucide-react' +import * as React from "react" +import * as ContextMenuPrimitive from "@radix-ui/react-context-menu" +import { Check, ChevronRight, Circle } from "lucide-react" -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils" const ContextMenu = ContextMenuPrimitive.Root @@ -27,8 +27,8 @@ const ContextMenuSubTrigger = React.forwardRef< , React.ComponentPropsWithoutRef>( - ({ className, ...props }, ref) => ( - , + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName + +const ContextMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + - ) -) -ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName - -const ContextMenuContent = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, ...props }, ref) => ( - - - - ) -) + +)) ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName const ContextMenuItem = React.forwardRef< @@ -78,8 +80,8 @@ const ContextMenuItem = React.forwardRef< , React.ComponentPropsWithoutRef>( - ({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - - ) -) +const ContextMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName -const ContextMenuRadioItem = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, children, ...props }, ref) => ( - - - - - - - {children} - - ) -) +const ContextMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName const ContextMenuLabel = React.forwardRef< @@ -135,18 +139,27 @@ const ContextMenuLabel = React.forwardRef< React.ComponentPropsWithoutRef & { inset?: boolean } ->(({ className, inset, ...props }, ref) => ) +>(({ className, inset, ...props }, ref) => ( + +)) ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName -const ContextMenuSeparator = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, ...props }, ref) => -) +const ContextMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName const ContextMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { - return + return } -ContextMenuShortcut.displayName = 'ContextMenuShortcut' +ContextMenuShortcut.displayName = "ContextMenuShortcut" export { ContextMenu, diff --git a/src/components/shadcn/dialog.tsx b/src/components/shadcn/dialog.tsx index c48972b..13ee8e6 100644 --- a/src/components/shadcn/dialog.tsx +++ b/src/components/shadcn/dialog.tsx @@ -1,10 +1,10 @@ -'use client' +"use client" -import * as React from 'react' -import * as DialogPrimitive from '@radix-ui/react-dialog' -import { X } from 'lucide-react' +import * as React from "react" +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { X } from "lucide-react" -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils" const Dialog = DialogPrimitive.Root @@ -14,22 +14,31 @@ const DialogPortal = DialogPrimitive.Portal const DialogClose = DialogPrimitive.Close -const DialogOverlay = React.forwardRef, React.ComponentPropsWithoutRef>(({ className, ...props }, ref) => ( +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( )) DialogOverlay.displayName = DialogPrimitive.Overlay.displayName -const DialogContent = React.forwardRef, React.ComponentPropsWithoutRef>(({ className, children, ...props }, ref) => ( +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( ) =>
-DialogHeader.displayName = 'DialogHeader' +const DialogHeader = ({ className, ...props }: React.HTMLAttributes) => ( +
+) +DialogHeader.displayName = "DialogHeader" -const DialogFooter = ({ className, ...props }: React.HTMLAttributes) =>
-DialogFooter.displayName = 'DialogFooter' +const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
+) +DialogFooter.displayName = "DialogFooter" -const DialogTitle = React.forwardRef, React.ComponentPropsWithoutRef>(({ className, ...props }, ref) => ( - +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + )) DialogTitle.displayName = DialogPrimitive.Title.displayName -const DialogDescription = React.forwardRef, React.ComponentPropsWithoutRef>(({ className, ...props }, ref) => ( - +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + )) DialogDescription.displayName = DialogPrimitive.Description.displayName -export { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription } +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/src/components/shadcn/dropdown-menu.tsx b/src/components/shadcn/dropdown-menu.tsx index 1bd0691..2d8a21c 100644 --- a/src/components/shadcn/dropdown-menu.tsx +++ b/src/components/shadcn/dropdown-menu.tsx @@ -1,10 +1,10 @@ -'use client' +"use client" -import * as React from 'react' -import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' -import { Check, ChevronRight, Circle } from 'lucide-react' +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils" const DropdownMenu = DropdownMenuPrimitive.Root @@ -26,7 +26,11 @@ const DropdownMenuSubTrigger = React.forwardRef< >(({ className, inset, children, ...props }, ref) => ( {children} @@ -35,35 +39,37 @@ const DropdownMenuSubTrigger = React.forwardRef< )) DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName -const DropdownMenuSubContent = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, ...props }, ref) => ( - , + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + - ) -) -DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName - -const DropdownMenuContent = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, sideOffset = 4, ...props }, ref) => ( - - - - ) -) + +)) DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName const DropdownMenuItem = React.forwardRef< @@ -75,8 +81,8 @@ const DropdownMenuItem = React.forwardRef< , React.ComponentPropsWithoutRef>( - ({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - - ) -) +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName -const DropdownMenuRadioItem = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, children, ...props }, ref) => ( - - - - - - - {children} - - ) -) +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName const DropdownMenuLabel = React.forwardRef< @@ -132,18 +140,27 @@ const DropdownMenuLabel = React.forwardRef< React.ComponentPropsWithoutRef & { inset?: boolean } ->(({ className, inset, ...props }, ref) => ) +>(({ className, inset, ...props }, ref) => ( + +)) DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName -const DropdownMenuSeparator = React.forwardRef, React.ComponentPropsWithoutRef>( - ({ className, ...props }, ref) => -) +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { - return + return } -DropdownMenuShortcut.displayName = 'DropdownMenuShortcut' +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" export { DropdownMenu, diff --git a/src/components/shadcn/input-otp.tsx b/src/components/shadcn/input-otp.tsx index dbade18..b5ccffc 100644 --- a/src/components/shadcn/input-otp.tsx +++ b/src/components/shadcn/input-otp.tsx @@ -1,22 +1,34 @@ -'use client' +"use client" -import * as React from 'react' -import { OTPInput, OTPInputContext } from 'input-otp' -import { Dot } from 'lucide-react' +import * as React from "react" +import { OTPInput, OTPInputContext } from "input-otp" +import { Dot } from "lucide-react" -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils" -const InputOTP = React.forwardRef, React.ComponentPropsWithoutRef>(({ className, containerClassName, ...props }, ref) => ( - -)) -InputOTP.displayName = 'InputOTP' +const InputOTP = React.forwardRef, React.ComponentPropsWithoutRef>( + ({ className, containerClassName, ...props }, ref) => ( + + ) +) +InputOTP.displayName = "InputOTP" -const InputOTPGroup = React.forwardRef, React.ComponentPropsWithoutRef<'div'>>(({ className, ...props }, ref) => ( -
-)) -InputOTPGroup.displayName = 'InputOTPGroup' +const InputOTPGroup = React.forwardRef, React.ComponentPropsWithoutRef<"div">>( + ({ className, ...props }, ref) => ( +
+ ) +) +InputOTPGroup.displayName = "InputOTPGroup" -const InputOTPSlot = React.forwardRef, React.ComponentPropsWithoutRef<'div'> & { index: number }>(({ index, className, ...props }, ref) => { +const InputOTPSlot = React.forwardRef< + React.ElementRef<"div">, + React.ComponentPropsWithoutRef<"div"> & { index: number } +>(({ index, className, ...props }, ref) => { const inputOTPContext = React.useContext(OTPInputContext) const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] @@ -24,8 +36,8 @@ const InputOTPSlot = React.forwardRef, React.ComponentPr
, React.ComponentPr
) }) -InputOTPSlot.displayName = 'InputOTPSlot' - -const InputOTPSeparator = React.forwardRef, React.ComponentPropsWithoutRef<'div'>>(({ ...props }, ref) => ( -
- -
-)) -InputOTPSeparator.displayName = 'InputOTPSeparator' +InputOTPSlot.displayName = "InputOTPSlot" + +const InputOTPSeparator = React.forwardRef, React.ComponentPropsWithoutRef<"div">>( + ({ ...props }, ref) => ( +
+ +
+ ) +) +InputOTPSeparator.displayName = "InputOTPSeparator" export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator } diff --git a/src/components/shadcn/input.tsx b/src/components/shadcn/input.tsx index 589dde8..4a8b350 100644 --- a/src/components/shadcn/input.tsx +++ b/src/components/shadcn/input.tsx @@ -1,6 +1,6 @@ -import * as React from 'react' +import * as React from "react" -import { cn } from '@/lib/utils' +import { cn } from "@/lib/utils" export interface InputProps extends React.InputHTMLAttributes {} @@ -9,7 +9,7 @@ const Input = React.forwardRef(({ className, type, (({ className, type, /> ) }) -Input.displayName = 'Input' +Input.displayName = "Input" export { Input } diff --git a/src/components/shadcn/label.tsx b/src/components/shadcn/label.tsx index 5341821..14be101 100644 --- a/src/components/shadcn/label.tsx +++ b/src/components/shadcn/label.tsx @@ -6,20 +6,13 @@ import { cva, type VariantProps } from "class-variance-authority" import { cn } from "@/lib/utils" -const labelVariants = cva( - "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" -) +const labelVariants = cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70") const Label = React.forwardRef< React.ElementRef, - React.ComponentPropsWithoutRef & - VariantProps + React.ComponentPropsWithoutRef & VariantProps >(({ className, ...props }, ref) => ( - + )) Label.displayName = LabelPrimitive.Root.displayName diff --git a/src/components/shadcn/pagination.tsx b/src/components/shadcn/pagination.tsx index 1f4c286..40fedac 100644 --- a/src/components/shadcn/pagination.tsx +++ b/src/components/shadcn/pagination.tsx @@ -1,8 +1,8 @@ -import * as React from "react"; -import { ChevronLeft, ChevronRight, MoreHorizontal } from "lucide-react"; +import * as React from "react" +import { ChevronLeft, ChevronRight, MoreHorizontal } from "lucide-react" -import { cn } from "@/lib/utils"; -import { ButtonProps, buttonVariants } from "./button"; +import { cn } from "@/lib/utils" +import { ButtonProps, buttonVariants } from "./button" const Pagination = ({ className, ...props }: React.ComponentProps<"nav">) => (