From 02d915604c72db866b6017b6e8d669c29875e851 Mon Sep 17 00:00:00 2001 From: rishav vajpayee <46602331+rishavvajpayee@users.noreply.github.com> Date: Sat, 28 Sep 2024 20:17:06 +0530 Subject: [PATCH] feat: project init structure with basic layout (#4) --- .gitignore | 5 + README.md | 48 + next.config.mjs | 13 +- package-lock.json | 1034 +++++++++++++++++++++- package.json | 9 +- public/logo.png | Bin 14759 -> 0 bytes src/app/layout.tsx | 7 +- src/app/page.tsx | 18 +- src/components/CLI/CLI.tsx | 78 +- src/components/Footer/Footer.tsx | 79 ++ src/components/Header/Header.tsx | 10 + src/components/Playground/Playground.tsx | 104 +++ src/components/Search/SearchBox.tsx | 27 + src/shared/components/Button.tsx | 20 + src/styles/globals.css | 10 +- 15 files changed, 1407 insertions(+), 55 deletions(-) delete mode 100644 public/logo.png create mode 100644 src/components/Footer/Footer.tsx create mode 100644 src/components/Header/Header.tsx create mode 100644 src/components/Playground/Playground.tsx create mode 100644 src/components/Search/SearchBox.tsx diff --git a/.gitignore b/.gitignore index fd3dbb5..ac5bc13 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,10 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# IDEs and editors +.idea/ +.vscode/ +.env + # dependencies /node_modules /.pnp diff --git a/README.md b/README.md index fc31831..a6f8796 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,54 @@ Allows users to search and play with various DiceDB commands in real-time. This repository hosts frontend service implementation of the Playground. +## Prerequisites + +Ensure you have the following installed: +- **Node.js** (v16.x or later) +- **Yarn** (or npm) +- **Next.js** (v13.x or later) + +## Installation +Clone the repository and install the dependencies: + +```bash +git clone +cd playground-web +npm install +``` + +## Development + +To start the development server, run: + +```bash +npm run dev +``` + +This will launch the app on [http://localhost:3000](http://localhost:3000). The app will automatically reload if you make changes to the code. + +## Building for Production + +To create a production build: + +```bash +npm run build +``` + +After the build is complete, you can start the production server with: + +```bash +npm run start +``` + +## Project Structure + +The main components of the DiceDB Playground include: +- **Terminal Component**: A basic terminal interface for interacting with DiceDB commands. +- **Search Component**: Allows searching through mock commands or documentation. + +Feel free to extend or modify the components to suit your needs. + ## How to contribute The Code Contribution Guidelines are published at [CONTRIBUTING.md](CONTRIBUTING.md); please read them before you start making any changes. This would allow us to have a consistent standard of coding practices and developer experience. diff --git a/next.config.mjs b/next.config.mjs index 4678774..be5327c 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,4 +1,15 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {}; +const nextConfig = { + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "dicedb.io", + port: "", + pathname: "/**", + }, + ], + }, +}; export default nextConfig; diff --git a/package-lock.json b/package-lock.json index 0aa5c45..f1a6074 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,16 @@ "name": "playground-web", "version": "0.1.0", "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@mui/icons-material": "^6.1.1", + "@mui/material": "^6.1.1", + "autoprefixer": "^10.4.20", + "lucide-react": "^0.446.0", "next": "14.2.13", "react": "^18", - "react-dom": "^18" + "react-dom": "^18", + "react-terminal-ui": "^1.3.0" }, "devDependencies": { "@types/node": "^20", @@ -36,6 +43,379 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", + "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", + "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -185,7 +565,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -200,7 +579,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -210,7 +588,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -220,20 +597,259 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.1.tgz", + "integrity": "sha512-VdQC1tPIIcZAnf62L2M1eQif0x2vlKg3YK4kGYbtijSH4niEgI21GnstykW1vQIs+Bc6L+Hua2GATYVjilJ22A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.1.tgz", + "integrity": "sha512-sy/YKwcLPW8VcacNP2uWMYR9xyWuwO9NN9FXuGEU90bRshBXj8pdKk+joe3TCW7oviVS3zXLHlc94wQ0jNsQRQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^6.1.1", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.1.tgz", + "integrity": "sha512-b+eULldTqtqTCbN++2BtBWCir/1LwEYw+2mIlOt2GiEUh1EBBw4/wIukGKKNt3xrCZqRA80yLLkV6tF61Lq3cA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/core-downloads-tracker": "^6.1.1", + "@mui/system": "^6.1.1", + "@mui/types": "^7.2.17", + "@mui/utils": "^6.1.1", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.11", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.3.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^6.1.1", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/@mui/private-theming": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.1.tgz", + "integrity": "sha512-JlrjIdhyZUtewtdAuUsvi3ZnO0YS49IW4Mfz19ZWTlQ0sDGga6LNPVwHClWr2/zJK2we2BQx9/i8M32rgKuzrg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/utils": "^6.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.1.tgz", + "integrity": "sha512-HJyIoMpFb11fnHuRtUILOXgq6vj4LhIlE8maG4SwP/W+E5sa7HFexhnB3vOMT7bKys4UKNxhobC8jwWxYilGsA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@emotion/cache": "^11.13.1", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.1.tgz", + "integrity": "sha512-PaYsCz2tUOcpu3T0okDEsSuP/yCDIj9JZ4Tox1JovRSKIjltHpXPsXZSGr3RiWdtM1MTQMFMCZzu0+CKbyy+Kw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/private-theming": "^6.1.1", + "@mui/styled-engine": "^6.1.1", + "@mui/types": "^7.2.17", + "@mui/utils": "^6.1.1", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.17", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.17.tgz", + "integrity": "sha512-oyumoJgB6jDV8JFzRqjBo2daUuHpzDjoO/e3IrRhhHo/FxJlaVhET6mcNrKHUq2E+R+q3ql0qAtvQ4rfWHhAeQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.1.tgz", + "integrity": "sha512-HlRrgdJSPbYDXPpoVMWZV8AE7WcFtAk13rWNWAEVWKSanzBBkymjz3km+Th/Srowsh4pf1fTSP1B0L116wQBYw==", "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@babel/runtime": "^7.25.6", + "@mui/types": "^7.2.17", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, "node_modules/@next/env": { "version": "14.2.13", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.13.tgz", @@ -453,6 +1069,16 @@ "node": ">=14" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -500,18 +1126,22 @@ "undici-types": "~6.19.2" } }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, "node_modules/@types/prop-types": { "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "dev": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.10", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.10.tgz", "integrity": "sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==", - "dev": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -528,6 +1158,15 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", @@ -1027,6 +1666,43 @@ "dev": true, "license": "MIT" }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1063,6 +1739,21 @@ "node": ">= 0.4" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1107,6 +1798,38 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -1142,7 +1865,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1239,6 +1961,15 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1276,6 +2007,37 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1308,7 +2070,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -1376,7 +2137,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1493,6 +2253,16 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -1500,6 +2270,12 @@ "dev": true, "license": "MIT" }, + "node_modules/electron-to-chromium": { + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz", + "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==", + "license": "ISC" + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -1521,6 +2297,15 @@ "node": ">=10.13.0" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -1708,11 +2493,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2254,6 +3047,12 @@ "node": ">=8" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2320,6 +3119,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2346,7 +3158,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2632,7 +3443,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -2641,6 +3451,15 @@ "node": ">= 0.4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -2655,7 +3474,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -2746,6 +3564,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -2832,7 +3656,6 @@ "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -3213,6 +4036,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3220,6 +4055,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3321,7 +4162,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, "license": "MIT" }, "node_modules/locate-path": { @@ -3366,6 +4206,15 @@ "dev": true, "license": "ISC" }, + "node_modules/lucide-react": { + "version": "0.446.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.446.0.tgz", + "integrity": "sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3427,7 +4276,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/mz": { @@ -3545,6 +4393,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3555,11 +4409,19 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3765,7 +4627,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -3774,6 +4635,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3808,7 +4687,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-scurry": { @@ -3828,6 +4706,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", @@ -3881,7 +4768,6 @@ "version": "8.4.47", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4037,7 +4923,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, "license": "MIT" }, "node_modules/prelude-ls": { @@ -4054,7 +4939,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -4122,9 +5006,34 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, "license": "MIT" }, + "node_modules/react-terminal-ui": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-terminal-ui/-/react-terminal-ui-1.3.0.tgz", + "integrity": "sha512-UhCDuYmvBFicduM3QxF5EQrI6ACt4coNt6bMgxX9BEr/v8NRFnYlwuPXtN4a5Q5yE8F090zsP9zIKZzZrxglZg==", + "license": "MIT", + "peerDependencies": { + "react": ">16.13.0", + "react-dom": ">16.13.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -4170,6 +5079,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -4193,7 +5108,6 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -4211,7 +5125,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -4449,6 +5362,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4723,6 +5645,12 @@ } } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -4763,7 +5691,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4850,6 +5777,15 @@ "node": ">=0.8" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5042,6 +5978,36 @@ "dev": true, "license": "MIT" }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 5a1f8a1..da7afde 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,16 @@ "type-check": "tsc --noEmit" }, "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@mui/icons-material": "^6.1.1", + "@mui/material": "^6.1.1", + "autoprefixer": "^10.4.20", + "lucide-react": "^0.446.0", "next": "14.2.13", "react": "^18", - "react-dom": "^18" + "react-dom": "^18", + "react-terminal-ui": "^1.3.0" }, "devDependencies": { "@types/node": "^20", diff --git a/public/logo.png b/public/logo.png deleted file mode 100644 index 998dbabd4bbc3f0c2de1d7e7b122e845e76a16c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14759 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 -
- Next.js logo +
+ +
- ); -} +} \ No newline at end of file diff --git a/src/components/CLI/CLI.tsx b/src/components/CLI/CLI.tsx index baf9288..b3be03e 100644 --- a/src/components/CLI/CLI.tsx +++ b/src/components/CLI/CLI.tsx @@ -1 +1,77 @@ -// Feature specific \ No newline at end of file +'use client'; + +import React, { useEffect, useRef, useState } from 'react'; + +interface CliProps { + output: string[]; + command: string; + setCommand: React.Dispatch>; + handleCommand: React.KeyboardEventHandler; +} + +export default function Cli({ output, command, setCommand, handleCommand }: CliProps) { + const terminalRef = useRef(null); + const inputRef = useRef(null); + const [cursorPosition, setCursorPosition] = useState(0); + + useEffect(() => { + if (terminalRef.current) { + terminalRef.current.scrollTop = terminalRef.current.scrollHeight; + } + }, [output]); + + useEffect(() => { + if (inputRef.current) { + inputRef.current.focus(); + } + }, []); + + const handleInputChange = (e: React.ChangeEvent) => { + setCommand(e.target.value); + setCursorPosition(e.target.selectionStart || 0); + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + handleCommand(e); + setCursorPosition(0); + } else { + setTimeout(() => { + setCursorPosition(inputRef.current?.selectionStart || 0); + }, 0); + } + }; + + return ( +
inputRef.current?.focus()} + > + {output.map((line, index) => ( +
') ? 'text-gray-300' : 'text-white'}> + {line} +
+ ))} +
+ dice > +
+ + +
+
+
+ ); +} diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx new file mode 100644 index 0000000..a6db849 --- /dev/null +++ b/src/components/Footer/Footer.tsx @@ -0,0 +1,79 @@ +import React from "react"; +import { Button } from "@mui/material"; +import { Twitter } from "@mui/icons-material"; +import GitHub from "@mui/icons-material/GitHub"; +import People from "@mui/icons-material/People"; + +export default function Footer() { + return ( + + ); +} diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx new file mode 100644 index 0000000..e0f9ee7 --- /dev/null +++ b/src/components/Header/Header.tsx @@ -0,0 +1,10 @@ +'use client'; + + +export default function Header() { + return ( +
+

DiceDB PlayGround

+
+ ); +} \ No newline at end of file diff --git a/src/components/Playground/Playground.tsx b/src/components/Playground/Playground.tsx new file mode 100644 index 0000000..93f7bee --- /dev/null +++ b/src/components/Playground/Playground.tsx @@ -0,0 +1,104 @@ +"use client"; + +import Image from "next/image"; +import React from "react"; +import { useState, useEffect } from "react"; +import Cli from "@/components/CLI/CLI"; +import SearchBox from "@/components/Search/SearchBox"; + +export default function Playground() { + const [command, setCommand] = useState(""); + const [output, setOutput] = useState([]); + const [triggers, setTriggers] = useState(998); + const [search, setSearch] = useState(""); + const [timeLeft, setTimeLeft] = useState(14 * 60 + 40); + const [store, setStore] = useState<{ [key: string]: string }>({}); + + const handleCommand = (e: React.KeyboardEvent) => { + if (e.key === "Enter") { + const newOutput = `dice > ${command}`; + let result = ""; + + const [cmd, ...args] = command.split(" "); + + switch (cmd.toUpperCase()) { + case "GET": + result = store[args[0]] || "(nil)"; + break; + case "SET": + if (args.length === 2) { + const [key, value] = args; + setStore((prevStore) => ({ ...prevStore, [key]: value })); + result = "OK"; + } else { + result = "Invalid command. Usage: SET key value"; + } + break; + default: + result = `Unknown command: ${cmd}`; + } + + setOutput([...output, newOutput, result]); + setCommand(""); + setTriggers((prev) => prev - 1); + } + }; + + useEffect(() => { + const timer = setInterval(() => { + setTimeLeft((prev) => (prev > 0 ? prev - 1 : 0)); + }, 1000); + + return () => clearInterval(timer); + }, []); + + const formatTime = (seconds: number): string => { + const minutes = Math.floor(seconds / 60); + const remainingSeconds = seconds % 60; + return `${minutes}:${remainingSeconds < 10 ? "0" : ""}${remainingSeconds}`; + }; + + return ( +
+
+
+
+ DiceDB logo +

PlayGround

+
+
+
+
+
+ +
+
+
+ Cleanup in : {formatTime(timeLeft)} mins +
+
+ Command left: {triggers} +
+
+
+
+
+ +
+
+
+
+
+ ); +} diff --git a/src/components/Search/SearchBox.tsx b/src/components/Search/SearchBox.tsx new file mode 100644 index 0000000..e2b63e7 --- /dev/null +++ b/src/components/Search/SearchBox.tsx @@ -0,0 +1,27 @@ +'use client'; + +import React from 'react'; +import { Search } from 'lucide-react'; +interface SearchBoxProps { + search: string; + setSearch: React.Dispatch> +} + +export default function SearchBox({ search , setSearch}: SearchBoxProps) { + return ( +
+
+
+ + setSearch(e.target.value)} + placeholder="Search commands..." + className="bg-transparent border-none outline-none w-full py-2 text-gray-900" + /> +
+
+
+ ); +} \ No newline at end of file diff --git a/src/shared/components/Button.tsx b/src/shared/components/Button.tsx index e69de29..6d1ec81 100644 --- a/src/shared/components/Button.tsx +++ b/src/shared/components/Button.tsx @@ -0,0 +1,20 @@ + +'use client'; + +import React from 'react'; + +interface ButtonProps { + children: React.ReactNode; + className?: string; + variant?: 'outline'; +} + +export function Button({ children, className }: ButtonProps) { + return ( + + ); +} \ No newline at end of file diff --git a/src/styles/globals.css b/src/styles/globals.css index 13d40b8..1fbd607 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,6 +1,8 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; +@import 'tailwindcss/utilities'; + +@import url('https://fonts.googleapis.com/css2?family=Assistant:wght@400;700&display=swap'); :root { --background: #ffffff; @@ -17,7 +19,7 @@ body { color: var(--foreground); background: var(--background); - font-family: Arial, Helvetica, sans-serif; + font-family: 'Assistant', sans-serif; } @layer utilities {