diff --git a/package-lock.json b/package-lock.json index cf3f70e8..b2eda6d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@headlessui/react": "^1.7.0", "@headlessui/tailwindcss": "^0.1.2", "@monaco-editor/react": "^4.4.6", - "@next/font": "^13.1.6", + "@next/font": "^13.2.1", "@tanstack/react-query": "^4.13.5", "@tanstack/react-virtual": "^3.0.0-beta.32", "@tauri-apps/api": "^1.2.0", @@ -34,7 +34,7 @@ "monaco-editor": "^0.34.0", "msw": "^0.47.4", "msw-storybook-addon": "^1.7.0", - "next": "^13.1.6", + "next": "^13.2.1", "npm": "^8.19.2", "patch-package": "^6.4.7", "rc-tooltip": "^5.2.2", @@ -81,7 +81,7 @@ "autoprefixer": "^10.4.8", "babel-loader": "^8.2.5", "eslint": "^8.22.0", - "eslint-config-next": "^13.0.0", + "eslint-config-next": "^13.2.1", "eslint-config-prettier": "^8.5.0", "eslint-plugin-storybook": "^0.6.10", "eslint-plugin-tailwindcss": "^3.8.0", @@ -2916,14 +2916,14 @@ } }, "node_modules/@next/env": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", - "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.2.1.tgz", + "integrity": "sha512-Hq+6QZ6kgmloCg8Kgrix+4F0HtvLqVK3FZAnlAoS0eonaDemHe1Km4kwjSWRE3JNpJNcKxFHF+jsZrYo0SxWoQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.0.tgz", - "integrity": "sha512-z+gnX4Zizatqatc6f4CQrcC9oN8Us3Vrq/OLyc98h7K/eWctrnV91zFZodmJHUjx0cITY8uYM7LXD7IdYkg3kg==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.1.tgz", + "integrity": "sha512-r0i5rcO6SMAZtqiGarUVMr3k256X0R0j6pEkKg4PxqUW+hG0qgMxRVAJsuoRG5OBFkCOlSfWZJ0mP9fQdCcyNg==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -2950,14 +2950,14 @@ } }, "node_modules/@next/font": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.6.tgz", - "integrity": "sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==" + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/font/-/font-13.2.1.tgz", + "integrity": "sha512-4sergLt7xp9+mZuKME/xM4tLlHGTcmL7naCq0qCTcAlof6NnttshYgiLOdhSiy0NcI+/yM3BjvdEk++O96UzTg==" }, "node_modules/@next/swc-android-arm-eabi": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", - "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.1.tgz", + "integrity": "sha512-Yua7mUpEd1wzIT6Jjl3dpRizIfGp9NR4F2xeRuQv+ae+SDI1Em2WyM9m46UL+oeW5GpMiEHoaBagr47RScZFmQ==", "cpu": [ "arm" ], @@ -2970,9 +2970,9 @@ } }, "node_modules/@next/swc-android-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", - "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.2.1.tgz", + "integrity": "sha512-Bifcr2f6VwInOdq1uH/9lp8fH7Nf7XGkIx4XceVd32LPJqG2c6FZU8ZRBvTdhxzXVpt5TPtuXhOP4Ij9UPqsVw==", "cpu": [ "arm64" ], @@ -2985,9 +2985,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", - "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.1.tgz", + "integrity": "sha512-gvqm+fGMYxAkwBapH0Vvng5yrb6HTkIvZfY4oEdwwYrwuLdkjqnJygCMgpNqIFmAHSXgtlWxfYv1VC8sjN81Kw==", "cpu": [ "arm64" ], @@ -3000,9 +3000,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", - "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.1.tgz", + "integrity": "sha512-HGqVqmaZWj6zomqOZUVbO5NhlABL0iIaxTmd0O5B0MoMa5zpDGoaHSG+fxgcWMXcGcxmUNchv1NfNOYiTKoHOg==", "cpu": [ "x64" ], @@ -3015,9 +3015,9 @@ } }, "node_modules/@next/swc-freebsd-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", - "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.1.tgz", + "integrity": "sha512-N/a4JarAq+E+g+9K2ywJUmDIgU2xs2nA+BBldH0oq4zYJMRiUhL0iaN9G4e72VmGOJ61L/3W6VN8RIUOwTLoqQ==", "cpu": [ "x64" ], @@ -3030,9 +3030,9 @@ } }, "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", - "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.1.tgz", + "integrity": "sha512-WaFoerF/eRbhbE57TaIGJXbQAERADZ/RZ45u6qox9beb5xnWsyYgzX+WuN7Tkhyvga0/aMuVYFzS9CEay7D+bw==", "cpu": [ "arm" ], @@ -3045,9 +3045,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", - "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.1.tgz", + "integrity": "sha512-R+Jhc1/RJTnncE9fkePboHDNOCm1WJ8daanWbjKhfPySMyeniKYRwGn5SLYW3S8YlRS0QVdZaaszDSZWgUcsmA==", "cpu": [ "arm64" ], @@ -3060,9 +3060,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", - "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.1.tgz", + "integrity": "sha512-oI1UfZPidGAVddlL2eOTmfsuKV9EaT1aktIzVIxIAgxzQSdwsV371gU3G55ggkurzfdlgF3GThFePDWF0d8dmw==", "cpu": [ "arm64" ], @@ -3075,9 +3075,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", - "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.1.tgz", + "integrity": "sha512-PCygPwrQmS+7WUuAWWioWMZCzZm4PG91lfRxToLDg7yIm/3YfAw5N2EK2TaM9pzlWdvHQAqRMX/oLvv027xUiA==", "cpu": [ "x64" ], @@ -3090,9 +3090,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", - "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.1.tgz", + "integrity": "sha512-sUAKxo7CFZYGHNxheGh9nIBElLYBM6md/liEGfOTwh/xna4/GTTcmkGWkF7PdnvaYNgcPIQgHIMYiAa6yBKAVw==", "cpu": [ "x64" ], @@ -3105,9 +3105,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", - "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.1.tgz", + "integrity": "sha512-qDmyEjDBpl/vBXxuOOKKWmPQOcARcZIMach1s7kjzaien0SySut/PHRlj56sosa81Wt4hTGhfhZ1R7g1n7+B8w==", "cpu": [ "arm64" ], @@ -3120,9 +3120,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", - "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.1.tgz", + "integrity": "sha512-2joqFQ81ZYPg6DcikIzQn3DgjKglNhPAozx6dL5sCNkr1CPMD0YIkJgT3CnYyMHQ04Qi3Npv0XX3MD6LJO8OCA==", "cpu": [ "ia32" ], @@ -3135,9 +3135,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", - "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.1.tgz", + "integrity": "sha512-r3+0fSaIZT6N237iMzwUhfNwjhAFvXjqB+4iuW+wcpxW+LHm1g/IoxN8eSRcb8jPItC86JxjAxpke0QL97qd6g==", "cpu": [ "x64" ], @@ -3213,6 +3213,26 @@ "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==" }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.8.tgz", @@ -14707,16 +14727,16 @@ } }, "node_modules/eslint-config-next": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.0.0.tgz", - "integrity": "sha512-y2nqWS2tycWySdVhb+rhp6CuDmDazGySqkzzQZf3UTyfHyC7og1m5m/AtMFwCo5mtvDqvw1BENin52kV9733lg==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.2.1.tgz", + "integrity": "sha512-2GAx7EjSiCzJN6H2L/v1kbYrNiwQxzkyjy6eWSjuhAKt+P6d3nVNHGy9mON8ZcYd72w/M8kyMjm4UB9cvijgrw==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.0.0", + "@next/eslint-plugin-next": "13.2.1", "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", + "@typescript-eslint/parser": "^5.42.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", + "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.31.7", @@ -14764,25 +14784,61 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", + "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", "dev": true, "dependencies": { "debug": "^4.3.4", - "glob": "^7.2.0", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "synckit": "^0.8.4" }, "engines": { - "node": ">=4" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-module-utils": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", @@ -16738,6 +16794,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", + "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -16838,6 +16903,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -16858,6 +16929,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -20186,11 +20263,11 @@ "dev": true }, "node_modules/next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", - "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/next/-/next-13.2.1.tgz", + "integrity": "sha512-qhgJlDtG0xidNViJUPeQHLGJJoT4zDj/El7fP3D3OzpxJDUfxsm16cK4WTMyvSX1ciIfAq05u+0HqFAa+VJ+Hg==", "dependencies": { - "@next/env": "13.1.6", + "@next/env": "13.2.1", "@swc/helpers": "0.4.14", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", @@ -20203,21 +20280,22 @@ "node": ">=14.6.0" }, "optionalDependencies": { - "@next/swc-android-arm-eabi": "13.1.6", - "@next/swc-android-arm64": "13.1.6", - "@next/swc-darwin-arm64": "13.1.6", - "@next/swc-darwin-x64": "13.1.6", - "@next/swc-freebsd-x64": "13.1.6", - "@next/swc-linux-arm-gnueabihf": "13.1.6", - "@next/swc-linux-arm64-gnu": "13.1.6", - "@next/swc-linux-arm64-musl": "13.1.6", - "@next/swc-linux-x64-gnu": "13.1.6", - "@next/swc-linux-x64-musl": "13.1.6", - "@next/swc-win32-arm64-msvc": "13.1.6", - "@next/swc-win32-ia32-msvc": "13.1.6", - "@next/swc-win32-x64-msvc": "13.1.6" + "@next/swc-android-arm-eabi": "13.2.1", + "@next/swc-android-arm64": "13.2.1", + "@next/swc-darwin-arm64": "13.2.1", + "@next/swc-darwin-x64": "13.2.1", + "@next/swc-freebsd-x64": "13.2.1", + "@next/swc-linux-arm-gnueabihf": "13.2.1", + "@next/swc-linux-arm64-gnu": "13.2.1", + "@next/swc-linux-arm64-musl": "13.2.1", + "@next/swc-linux-x64-gnu": "13.2.1", + "@next/swc-linux-x64-musl": "13.2.1", + "@next/swc-win32-arm64-msvc": "13.2.1", + "@next/swc-win32-ia32-msvc": "13.2.1", + "@next/swc-win32-x64-msvc": "13.2.1" }, "peerDependencies": { + "@opentelemetry/api": "^1.4.0", "fibers": ">= 3.1.0", "node-sass": "^6.0.0 || ^7.0.0", "react": "^18.2.0", @@ -20225,6 +20303,9 @@ "sass": "^1.3.0" }, "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, "fibers": { "optional": true }, @@ -27448,6 +27529,22 @@ "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", "dev": true }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tailwind-merge": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.8.1.tgz", @@ -27743,6 +27840,16 @@ "node": ">=0.6.0" } }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", @@ -27938,9 +28045,9 @@ } }, "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, "node_modules/tsutils": { "version": "3.21.0", diff --git a/package.json b/package.json index 647fc522..b3845fd3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "@headlessui/react": "^1.7.0", "@headlessui/tailwindcss": "^0.1.2", "@monaco-editor/react": "^4.4.6", - "@next/font": "^13.1.6", + "@next/font": "^13.2.1", "@tanstack/react-query": "^4.13.5", "@tanstack/react-virtual": "^3.0.0-beta.32", "@tauri-apps/api": "^1.2.0", @@ -38,7 +38,7 @@ "monaco-editor": "^0.34.0", "msw": "^0.47.4", "msw-storybook-addon": "^1.7.0", - "next": "^13.1.6", + "next": "^13.2.1", "npm": "^8.19.2", "patch-package": "^6.4.7", "rc-tooltip": "^5.2.2", @@ -85,7 +85,7 @@ "autoprefixer": "^10.4.8", "babel-loader": "^8.2.5", "eslint": "^8.22.0", - "eslint-config-next": "^13.0.0", + "eslint-config-next": "^13.2.1", "eslint-config-prettier": "^8.5.0", "eslint-plugin-storybook": "^0.6.10", "eslint-plugin-tailwindcss": "^3.8.0", diff --git a/src/bindings/InstanceInfo.ts b/src/bindings/InstanceInfo.ts index ccccd557..9c4b1845 100644 --- a/src/bindings/InstanceInfo.ts +++ b/src/bindings/InstanceInfo.ts @@ -1,6 +1,7 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { InstanceState } from './InstanceState'; import type { InstanceUuid } from './InstanceUuid'; +import type { Player } from './Player'; export type GameType = 'minecraft'; @@ -22,4 +23,5 @@ export interface InstanceInfo { state: InstanceState; player_count: number | null; max_player_count: number | null; + player_list: Array | null; } diff --git a/src/components/Minecraft/MinecraftPlayerList.tsx b/src/components/Minecraft/MinecraftPlayerList.tsx new file mode 100644 index 00000000..065ca013 --- /dev/null +++ b/src/components/Minecraft/MinecraftPlayerList.tsx @@ -0,0 +1,100 @@ +import { InstanceContext } from 'data/InstanceContext'; +import { useContext } from 'react'; +import { PlayerListItem, PlayerListCard } from 'components/PlayerListCard'; +import { useState, useMemo } from 'react'; +import { faArrowDown, faArrowUp } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +// import { Player } from 'bindings/Player'; + +export default function MinecraftPlayerList() { + + const { selectedInstance: instance } = useContext(InstanceContext); + const uuid = instance?.uuid; + + // Ascending order is referring to alphabetical order + // Note: Arrow will point DOWN when sorting in ascending order, as seen on the figma + const [sortAscending, setSortAscending] = useState(true); + + // Update playerList every time there a player leaves or joins + // Also sorts and updates when sort button is pressed + const updatedPlayerList = useMemo(() => { + if (!instance?.player_list) return null; + const playerList = [...instance.player_list]; + playerList.sort((a, b) => { + if (sortAscending) { + return a.name.localeCompare(b.name); + } else { + return b.name.localeCompare(a.name); + } + }); + return playerList; + }, [instance, sortAscending]); + + // Catch case where server instance is not available; return early + if (!instance || !uuid) { + return ( +
+
+
+

+ Instance not found +

+
+
+
+ ); + } + + // API to get the avatar head png 16x16 px + const mcHeadURL = 'https://mc-heads.net/avatar/'; + const avatarDimension = 16; + + return ( +
+

Player List

+ {updatedPlayerList && updatedPlayerList.length ? ( + <> +

+ All players currently online +

+ + {updatedPlayerList.length > 0 && ( + + {updatedPlayerList.map((player) => ( + + {`Avatar +
+ {player.name} +
+
+ ))} +
+ )} + + ) : ( +

+ No players online +

+ )} +
+ ); +} diff --git a/src/components/Minecraft/index.ts b/src/components/Minecraft/index.ts new file mode 100644 index 00000000..6bc445a1 --- /dev/null +++ b/src/components/Minecraft/index.ts @@ -0,0 +1,4 @@ +export { default as MinecraftPerformanceCard } from './MinecraftPerformanceCard'; +export { default as MinecraftGeneralCard } from './MinecraftGeneralCard'; +export { default as MinecraftSettingCard } from './MinecraftSettingCard'; +export { default as MinecraftPlayerList } from './MinecraftPlayerList'; diff --git a/src/components/PlayerListCard.tsx b/src/components/PlayerListCard.tsx new file mode 100644 index 00000000..cb3073b2 --- /dev/null +++ b/src/components/PlayerListCard.tsx @@ -0,0 +1,51 @@ +import { ReactNode } from 'react'; +import * as React from 'react'; + +interface ItemProps { + children: ReactNode; + className?: string; +} + +export function PlayerListItem({ children, className = '' }: ItemProps) { + return ( +
+ {children} +
+ ); +} + +interface CardProps { + children: ReactNode; + className?: string; +} + +export function PlayerListCard({ children, className }: CardProps) { + const numItems = React.Children.count(children); + + if (numItems === 0) { + return null; + } + + if (numItems === 1) { + return ( +
+ {children} +
+ ); + } + + return ( +
+ {React.Children.map(children, (child, index) => ( + <> + {index > 0 &&
} + {child} + + ))} +
+ ); +} diff --git a/src/data/EventStream.ts b/src/data/EventStream.ts index 14713737..7703c068 100644 --- a/src/data/EventStream.ts +++ b/src/data/EventStream.ts @@ -13,6 +13,7 @@ import { LODESTONE_PORT } from 'utils/util'; import { UserPermission } from 'bindings/UserPermission'; import { PublicUser } from 'bindings/PublicUser'; import { toast } from 'react-toastify'; +import { Player } from 'bindings/Player'; /** * does not return anything, call this for the side effect of subscribing to the event stream @@ -61,6 +62,17 @@ export const useEventStream = () => { }, [queryClient] ); + const updateInstancePlayerList = useCallback( + (uuid: string, players: Player[]) => { + updateInstance(uuid, queryClient, (oldInfo) => { + return { + ...oldInfo, + player_list: players, + }; + }); + }, + [queryClient] + ); const updatePermission = useCallback( (permission: UserPermission) => { queryClient.setQueryData( @@ -135,7 +147,10 @@ export const useEventStream = () => { console.log(`Got player change on ${name}: ${player_list}`); console.log(`${players_joined} joined ${name}`); console.log(`${players_left} left ${name}`); - if (fresh) updateInstancePlayerCount(uuid, player_list.length); + if (fresh) { + updateInstancePlayerList(uuid, player_list); + updateInstancePlayerCount(uuid, player_list.length); + } // we don't need match statement on the type of player yet because there's only MinecraftPlayyer for now const player_list_names = player_list.map((p) => p.name); diff --git a/src/data/InstanceTabListMap.tsx b/src/data/InstanceTabListMap.tsx index cb746429..0ad5149e 100644 --- a/src/data/InstanceTabListMap.tsx +++ b/src/data/InstanceTabListMap.tsx @@ -1,11 +1,15 @@ +import { + MinecraftPerformanceCard, + MinecraftPlayerList, + MinecraftGeneralCard, + MinecraftSettingCard +} from 'components/Minecraft'; + import GameConsole from 'components/GameConsole'; -import MinecraftGeneralCard from 'components/Minecraft/MinecraftGeneralCard'; -import MinecraftSettingCard from 'components/Minecraft/MinecraftSettingCard'; import FileViewer from 'components/FileViewer'; import DashboardCard from 'components/DashboardCard'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import MinecraftOverview from 'components/Minecraft/MinecraftOverview'; -import MinecraftPerformanceCard from 'components/Minecraft/MinecraftPerformanceCard'; +// import MinecraftOverview from 'components/Minecraft/MinecraftOverview'; import { faChartLine, @@ -23,7 +27,12 @@ const InstanceTabListMap = { path: 'overview', width: 'max-w-4xl', icon: , - content: , + content: ( + <> + + + + ), }, { title: 'Settings',