diff --git a/package-lock.json b/package-lock.json index ea854d8..c92183a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", + "@themesberg/flowbite": "^1.3.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-icons": "^4.3.1", @@ -24,6 +25,7 @@ "redux": "^4.1.2", "sass": "^1.45.0", "sweetalert2": "^11.3.4", + "tw-elements": "^1.0.0-alpha8", "web-vitals": "^2.1.2" }, "devDependencies": { @@ -32,6 +34,146 @@ "tailwindcss": "^3.0.7" } }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.0.tgz", + "integrity": "sha512-E7+VJwcvwMM8vPeaVn7fNUgix8WHV8A1WUeHDi2KHemCaaGc8lvUnP3QnvhMxiDhTe7OpMEv4o2TBUMyDgThaw==", + "dependencies": { + "@algolia/autocomplete-shared": "1.5.0" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.0.tgz", + "integrity": "sha512-iiFxKERGHkvkiupmrFJbvESpP/zv5jSgH714XRiP5LDvUHaYOo4GLAwZCFf2ef/L5tdtPBARvekn6k1Xf33gjA==", + "dependencies": { + "@algolia/autocomplete-shared": "1.5.0" + }, + "peerDependencies": { + "@algolia/client-search": "^4.9.1", + "algoliasearch": "^4.9.1" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.0.tgz", + "integrity": "sha512-bRSkqHHHSwZYbFY3w9hgMyQRm86Wz27bRaGCbNldLfbk0zUjApmE4ajx+ZCVSLqxvcUEjMqZFJzDsder12eKsg==" + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.0.tgz", + "integrity": "sha512-l+G560B6N1k0rIcOjTO1yCzFUbg2Zy2HCii9s03e13jGgqduVQmk79UUCYszjsJ5GPJpUEKcVEtAIpP7tjsXVA==", + "dependencies": { + "@algolia/cache-common": "4.12.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.0.tgz", + "integrity": "sha512-2Z8BV+NX7oN7RmmQbLqmW8lfN9aAjOexX1FJjzB0YfKC9ifpi9Jl4nSxlnbU+iLR6QhHo0IfuyQ7wcnucCGCGQ==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.0.tgz", + "integrity": "sha512-b6ANkZF6vGAo+sYv6g25W5a0u3o6F549gEAgtTDTVA1aHcdWwe/HG/dTJ7NsnHbuR+A831tIwnNYQjRp3/V/Jw==", + "dependencies": { + "@algolia/cache-common": "4.12.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.0.tgz", + "integrity": "sha512-gzXN75ZydNheNXUN3epS+aLsKnB/PHFVlGUUjXL8WHs4lJP3B5FtHvaA/NCN5DsM3aamhuY5p0ff1XIA+Lbcrw==", + "dependencies": { + "@algolia/client-common": "4.12.0", + "@algolia/client-search": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.0.tgz", + "integrity": "sha512-rO2cZCt00Opk66QBZb7IBGfCq4ZE3EiuGkXssf2Monb5urujy0r8CknK2i7bzaKtPbd2vlvhmLP4CEHQqF6SLQ==", + "dependencies": { + "@algolia/client-common": "4.12.0", + "@algolia/client-search": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.0.tgz", + "integrity": "sha512-fcrFN7FBmxiSyjeu3sF4OnPkC1l7/8oyQ8RMM8CHpVY8cad6/ay35MrfRfgfqdzdFA8LzcBYO7fykuJv0eOqxw==", + "dependencies": { + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.0.tgz", + "integrity": "sha512-wCJfSQEmX6ZOuJBJGjy+sbXiW0iy7tMNAhsVMV9RRaJE4727e5WAqwFWZssD877WQ74+/nF/VyTaB1+wejo33Q==", + "dependencies": { + "@algolia/client-common": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.0.tgz", + "integrity": "sha512-ik6dswcTQtOdZN+8aKntI9X2E6Qpqjtyda/+VANiHThY9GD2PBXuNuuC2HvlF26AbBYp5xaSE/EKxn1DIiIJ4Q==", + "dependencies": { + "@algolia/client-common": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.0.tgz", + "integrity": "sha512-V//9rzLdJujA3iZ/tPhmKR/m2kjSZrymxOfUiF3024u2/7UyOpH92OOCrHUf023uMGYHRzyhBz5ESfL1oCdh7g==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.0.tgz", + "integrity": "sha512-pHvoGv53KXRIJHLk9uxBwKirwEo12G9+uo0sJLWESThAN3v5M+ycliU1AkUXQN8+9rds2KxfULAb+vfyfBKf8A==", + "dependencies": { + "@algolia/logger-common": "4.12.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.0.tgz", + "integrity": "sha512-rGlHNMM3jIZBwSpz33CVkeXHilzuzHuFXEEW1icP/k3KW7kwBrKFJwBy42RzAJa5BYlLsTCFTS3xkPhYwTQKLg==", + "dependencies": { + "@algolia/requester-common": "4.12.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.0.tgz", + "integrity": "sha512-qgfdc73nXqpVyOMr6CMTx3nXvud9dP6GcMGDqPct+fnxogGcJsp24cY2nMqUrAfgmTJe9Nmy7Lddv0FyHjONMg==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.0.tgz", + "integrity": "sha512-mOTRGf/v/dXshBoZKNhMG00ZGxoUH9QdSpuMKYnuWwIgstN24uj3DQx+Ho3c+uq0TYfq7n2v71uoJWuiW32NMQ==", + "dependencies": { + "@algolia/requester-common": "4.12.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.0.tgz", + "integrity": "sha512-MOQVHZ4BcBpf3LtOY/3fqXHAcvI8MahrXDHk9QrBE/iGensQhDiZby5Dn3o2JN/zd9FMnVbdPQ8gnkiMwZiakQ==", + "dependencies": { + "@algolia/cache-common": "4.12.0", + "@algolia/logger-common": "4.12.0", + "@algolia/requester-common": "4.12.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", @@ -1856,6 +1998,36 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" }, + "node_modules/@docsearch/css": { + "version": "3.0.0-alpha.42", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.42.tgz", + "integrity": "sha512-AGwI2AXUacYhVOHmYnsXoYDJKO6Ued2W+QO80GERbMLhC7GH5tfvtW5REs/s7jSdcU3vzFoxT8iPDBCh/PkrlQ==" + }, + "node_modules/@docsearch/js": { + "version": "3.0.0-alpha.42", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.42.tgz", + "integrity": "sha512-8rxxsvFKS5GzDX2MYMETeib4EOwAkoxVUHFP5R4tSENXojhuCEy3np+k3Q0c9WPT+MUmWLxKJab5jyl0jmaeBQ==", + "dependencies": { + "@docsearch/react": "3.0.0-alpha.42", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.0.0-alpha.42", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.42.tgz", + "integrity": "sha512-1aOslZJDxwUUcm2QRNmlEePUgL8P5fOAeFdOLDMctHQkV2iTja9/rKVbkP8FZbIUnZxuuCCn8ErLrjD/oXWOag==", + "dependencies": { + "@algolia/autocomplete-core": "1.5.0", + "@algolia/autocomplete-preset-algolia": "1.5.0", + "@docsearch/css": "3.0.0-alpha.42", + "algoliasearch": "^4.0.0" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 18.0.0", + "react": ">= 16.8.0 < 18.0.0", + "react-dom": ">= 16.8.0 < 18.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -2755,6 +2927,15 @@ "node": ">= 8" } }, + "node_modules/@popperjs/core": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", + "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@reduxjs/toolkit": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.7.1.tgz", @@ -3302,6 +3483,16 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@themesberg/flowbite": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@themesberg/flowbite/-/flowbite-1.3.0.tgz", + "integrity": "sha512-Tyrk2bbmhuzYK/3DwO6L7oSkMVil/VMiFpy6lFLoz3oD0lwCJhX3NhtNuzgveIX4l9zZ5GxYqKlp2BOzY+LiMQ==", + "dependencies": { + "@docsearch/js": "^3.0.0-alpha.42", + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -4099,6 +4290,27 @@ "ajv": "^6.9.1" } }, + "node_modules/algoliasearch": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.0.tgz", + "integrity": "sha512-fZOMMm+F3Bi5M/MoFIz7hiuyCitJza0Hu+r8Wzz4LIQClC6YGMRq7kT6NNU1fSSoFDSeJIwMfedbbi5G9dJoVQ==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.12.0", + "@algolia/cache-common": "4.12.0", + "@algolia/cache-in-memory": "4.12.0", + "@algolia/client-account": "4.12.0", + "@algolia/client-analytics": "4.12.0", + "@algolia/client-common": "4.12.0", + "@algolia/client-personalization": "4.12.0", + "@algolia/client-search": "4.12.0", + "@algolia/logger-common": "4.12.0", + "@algolia/logger-console": "4.12.0", + "@algolia/requester-browser-xhr": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/requester-node-http": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, "node_modules/alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -4764,6 +4976,18 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "node_modules/bootstrap": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + }, + "peerDependencies": { + "@popperjs/core": "^2.10.2" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4945,6 +5169,40 @@ "node": ">=10" } }, + "node_modules/chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "dependencies": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "node_modules/chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "dependencies": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "node_modules/chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/chartjs-plugin-datalabels": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-0.7.0.tgz", + "integrity": "sha512-PKVUX14nYhH0wcdCpgOoC39Gbzvn6cZ7O9n+bwc02yKD9FTnJ7/TSrBcfebmolFZp1Rcicr9xbT0a5HUbigS7g==", + "peerDependencies": { + "chart.js": ">= 2.7.0 < 3" + } + }, "node_modules/check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -5728,6 +5986,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" }, + "node_modules/custom-event-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" + }, "node_modules/damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", @@ -5886,6 +6149,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "node_modules/detect-autofill": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/detect-autofill/-/detect-autofill-1.1.4.tgz", + "integrity": "sha512-utCBQwCR/beSnADQmBC7C4tTueBBkYCl6WSpfGUkYKO/+MzPxqYGj6G4MvHzcKmH1gCTK+VunX2vaagvkRXPvA==", + "dependencies": { + "custom-event-polyfill": "^1.0.7" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -11079,6 +11350,14 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -11111,6 +11390,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -11621,6 +11908,11 @@ "node": ">=8" } }, + "node_modules/perfect-scrollbar": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", + "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -11789,6 +12081,16 @@ "node": ">=4" } }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -12872,6 +13174,15 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/preact": { + "version": "10.6.4", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.4.tgz", + "integrity": "sha512-WyosM7pxGcndU8hY0OQlLd54tOU+qmG45QXj2dAYrL11HoyU/EzOSTlpJsirbBr1QW7lICxSsVJJmcmUglovHQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15077,6 +15388,22 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/tw-elements": { + "version": "1.0.0-alpha8", + "resolved": "https://registry.npmjs.org/tw-elements/-/tw-elements-1.0.0-alpha8.tgz", + "integrity": "sha512-feqb4XmHWH8KUOT7KEC3lc258VmypcI6ettdR9adN/dEfk9wXcp/G+XPOhnAAQiXeyTDOCuDF/GNo6kMN++YXw==", + "dependencies": { + "@popperjs/core": "^2.6.0", + "bootstrap": "^5.1.3", + "chart.js": "^2.9.4", + "chartjs-plugin-datalabels": "^0.7.0", + "deepmerge": "^4.2.2", + "detect-autofill": "^1.1.3", + "perfect-scrollbar": "^1.5.0", + "popper.js": "^1.16.1", + "tailwindcss": "^3.0.7" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -16262,6 +16589,142 @@ } }, "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.0.tgz", + "integrity": "sha512-E7+VJwcvwMM8vPeaVn7fNUgix8WHV8A1WUeHDi2KHemCaaGc8lvUnP3QnvhMxiDhTe7OpMEv4o2TBUMyDgThaw==", + "requires": { + "@algolia/autocomplete-shared": "1.5.0" + } + }, + "@algolia/autocomplete-preset-algolia": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.0.tgz", + "integrity": "sha512-iiFxKERGHkvkiupmrFJbvESpP/zv5jSgH714XRiP5LDvUHaYOo4GLAwZCFf2ef/L5tdtPBARvekn6k1Xf33gjA==", + "requires": { + "@algolia/autocomplete-shared": "1.5.0" + } + }, + "@algolia/autocomplete-shared": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.0.tgz", + "integrity": "sha512-bRSkqHHHSwZYbFY3w9hgMyQRm86Wz27bRaGCbNldLfbk0zUjApmE4ajx+ZCVSLqxvcUEjMqZFJzDsder12eKsg==" + }, + "@algolia/cache-browser-local-storage": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.0.tgz", + "integrity": "sha512-l+G560B6N1k0rIcOjTO1yCzFUbg2Zy2HCii9s03e13jGgqduVQmk79UUCYszjsJ5GPJpUEKcVEtAIpP7tjsXVA==", + "requires": { + "@algolia/cache-common": "4.12.0" + } + }, + "@algolia/cache-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.0.tgz", + "integrity": "sha512-2Z8BV+NX7oN7RmmQbLqmW8lfN9aAjOexX1FJjzB0YfKC9ifpi9Jl4nSxlnbU+iLR6QhHo0IfuyQ7wcnucCGCGQ==" + }, + "@algolia/cache-in-memory": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.0.tgz", + "integrity": "sha512-b6ANkZF6vGAo+sYv6g25W5a0u3o6F549gEAgtTDTVA1aHcdWwe/HG/dTJ7NsnHbuR+A831tIwnNYQjRp3/V/Jw==", + "requires": { + "@algolia/cache-common": "4.12.0" + } + }, + "@algolia/client-account": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.0.tgz", + "integrity": "sha512-gzXN75ZydNheNXUN3epS+aLsKnB/PHFVlGUUjXL8WHs4lJP3B5FtHvaA/NCN5DsM3aamhuY5p0ff1XIA+Lbcrw==", + "requires": { + "@algolia/client-common": "4.12.0", + "@algolia/client-search": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "@algolia/client-analytics": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.0.tgz", + "integrity": "sha512-rO2cZCt00Opk66QBZb7IBGfCq4ZE3EiuGkXssf2Monb5urujy0r8CknK2i7bzaKtPbd2vlvhmLP4CEHQqF6SLQ==", + "requires": { + "@algolia/client-common": "4.12.0", + "@algolia/client-search": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "@algolia/client-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.0.tgz", + "integrity": "sha512-fcrFN7FBmxiSyjeu3sF4OnPkC1l7/8oyQ8RMM8CHpVY8cad6/ay35MrfRfgfqdzdFA8LzcBYO7fykuJv0eOqxw==", + "requires": { + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "@algolia/client-personalization": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.0.tgz", + "integrity": "sha512-wCJfSQEmX6ZOuJBJGjy+sbXiW0iy7tMNAhsVMV9RRaJE4727e5WAqwFWZssD877WQ74+/nF/VyTaB1+wejo33Q==", + "requires": { + "@algolia/client-common": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "@algolia/client-search": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.0.tgz", + "integrity": "sha512-ik6dswcTQtOdZN+8aKntI9X2E6Qpqjtyda/+VANiHThY9GD2PBXuNuuC2HvlF26AbBYp5xaSE/EKxn1DIiIJ4Q==", + "requires": { + "@algolia/client-common": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, + "@algolia/logger-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.0.tgz", + "integrity": "sha512-V//9rzLdJujA3iZ/tPhmKR/m2kjSZrymxOfUiF3024u2/7UyOpH92OOCrHUf023uMGYHRzyhBz5ESfL1oCdh7g==" + }, + "@algolia/logger-console": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.0.tgz", + "integrity": "sha512-pHvoGv53KXRIJHLk9uxBwKirwEo12G9+uo0sJLWESThAN3v5M+ycliU1AkUXQN8+9rds2KxfULAb+vfyfBKf8A==", + "requires": { + "@algolia/logger-common": "4.12.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.0.tgz", + "integrity": "sha512-rGlHNMM3jIZBwSpz33CVkeXHilzuzHuFXEEW1icP/k3KW7kwBrKFJwBy42RzAJa5BYlLsTCFTS3xkPhYwTQKLg==", + "requires": { + "@algolia/requester-common": "4.12.0" + } + }, + "@algolia/requester-common": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.0.tgz", + "integrity": "sha512-qgfdc73nXqpVyOMr6CMTx3nXvud9dP6GcMGDqPct+fnxogGcJsp24cY2nMqUrAfgmTJe9Nmy7Lddv0FyHjONMg==" + }, + "@algolia/requester-node-http": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.0.tgz", + "integrity": "sha512-mOTRGf/v/dXshBoZKNhMG00ZGxoUH9QdSpuMKYnuWwIgstN24uj3DQx+Ho3c+uq0TYfq7n2v71uoJWuiW32NMQ==", + "requires": { + "@algolia/requester-common": "4.12.0" + } + }, + "@algolia/transporter": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.0.tgz", + "integrity": "sha512-MOQVHZ4BcBpf3LtOY/3fqXHAcvI8MahrXDHk9QrBE/iGensQhDiZby5Dn3o2JN/zd9FMnVbdPQ8gnkiMwZiakQ==", + "requires": { + "@algolia/cache-common": "4.12.0", + "@algolia/logger-common": "4.12.0", + "@algolia/requester-common": "4.12.0" + } + }, "@babel/code-frame": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", @@ -17490,6 +17953,31 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" }, + "@docsearch/css": { + "version": "3.0.0-alpha.42", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.42.tgz", + "integrity": "sha512-AGwI2AXUacYhVOHmYnsXoYDJKO6Ued2W+QO80GERbMLhC7GH5tfvtW5REs/s7jSdcU3vzFoxT8iPDBCh/PkrlQ==" + }, + "@docsearch/js": { + "version": "3.0.0-alpha.42", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.42.tgz", + "integrity": "sha512-8rxxsvFKS5GzDX2MYMETeib4EOwAkoxVUHFP5R4tSENXojhuCEy3np+k3Q0c9WPT+MUmWLxKJab5jyl0jmaeBQ==", + "requires": { + "@docsearch/react": "3.0.0-alpha.42", + "preact": "^10.0.0" + } + }, + "@docsearch/react": { + "version": "3.0.0-alpha.42", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.42.tgz", + "integrity": "sha512-1aOslZJDxwUUcm2QRNmlEePUgL8P5fOAeFdOLDMctHQkV2iTja9/rKVbkP8FZbIUnZxuuCCn8ErLrjD/oXWOag==", + "requires": { + "@algolia/autocomplete-core": "1.5.0", + "@algolia/autocomplete-preset-algolia": "1.5.0", + "@docsearch/css": "3.0.0-alpha.42", + "algoliasearch": "^4.0.0" + } + }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -18128,6 +18616,11 @@ } } }, + "@popperjs/core": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", + "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==" + }, "@reduxjs/toolkit": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.7.1.tgz", @@ -18476,6 +18969,16 @@ "@babel/runtime": "^7.12.5" } }, + "@themesberg/flowbite": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@themesberg/flowbite/-/flowbite-1.3.0.tgz", + "integrity": "sha512-Tyrk2bbmhuzYK/3DwO6L7oSkMVil/VMiFpy6lFLoz3oD0lwCJhX3NhtNuzgveIX4l9zZ5GxYqKlp2BOzY+LiMQ==", + "requires": { + "@docsearch/js": "^3.0.0-alpha.42", + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -19128,6 +19631,27 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "requires": {} }, + "algoliasearch": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.0.tgz", + "integrity": "sha512-fZOMMm+F3Bi5M/MoFIz7hiuyCitJza0Hu+r8Wzz4LIQClC6YGMRq7kT6NNU1fSSoFDSeJIwMfedbbi5G9dJoVQ==", + "requires": { + "@algolia/cache-browser-local-storage": "4.12.0", + "@algolia/cache-common": "4.12.0", + "@algolia/cache-in-memory": "4.12.0", + "@algolia/client-account": "4.12.0", + "@algolia/client-analytics": "4.12.0", + "@algolia/client-common": "4.12.0", + "@algolia/client-personalization": "4.12.0", + "@algolia/client-search": "4.12.0", + "@algolia/logger-common": "4.12.0", + "@algolia/logger-console": "4.12.0", + "@algolia/requester-browser-xhr": "4.12.0", + "@algolia/requester-common": "4.12.0", + "@algolia/requester-node-http": "4.12.0", + "@algolia/transporter": "4.12.0" + } + }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -19630,6 +20154,12 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "bootstrap": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "requires": {} + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -19761,6 +20291,38 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.0" + } + }, + "chartjs-plugin-datalabels": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-0.7.0.tgz", + "integrity": "sha512-PKVUX14nYhH0wcdCpgOoC39Gbzvn6cZ7O9n+bwc02yKD9FTnJ7/TSrBcfebmolFZp1Rcicr9xbT0a5HUbigS7g==", + "requires": {} + }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -20333,6 +20895,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" }, + "custom-event-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" + }, "damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", @@ -20450,6 +21017,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-autofill": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/detect-autofill/-/detect-autofill-1.1.4.tgz", + "integrity": "sha512-utCBQwCR/beSnADQmBC7C4tTueBBkYCl6WSpfGUkYKO/+MzPxqYGj6G4MvHzcKmH1gCTK+VunX2vaagvkRXPvA==", + "requires": { + "custom-event-polyfill": "^1.0.7" + } + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -24217,6 +24792,11 @@ } } }, + "mini-svg-data-uri": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==" + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -24243,6 +24823,11 @@ "minimist": "^1.2.5" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -24603,6 +25188,11 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "perfect-scrollbar": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", + "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -24724,6 +25314,11 @@ } } }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, "portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -25359,6 +25954,11 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "preact": { + "version": "10.6.4", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.4.tgz", + "integrity": "sha512-WyosM7pxGcndU8hY0OQlLd54tOU+qmG45QXj2dAYrL11HoyU/EzOSTlpJsirbBr1QW7lICxSsVJJmcmUglovHQ==" + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -26992,6 +27592,22 @@ } } }, + "tw-elements": { + "version": "1.0.0-alpha8", + "resolved": "https://registry.npmjs.org/tw-elements/-/tw-elements-1.0.0-alpha8.tgz", + "integrity": "sha512-feqb4XmHWH8KUOT7KEC3lc258VmypcI6ettdR9adN/dEfk9wXcp/G+XPOhnAAQiXeyTDOCuDF/GNo6kMN++YXw==", + "requires": { + "@popperjs/core": "^2.6.0", + "bootstrap": "^5.1.3", + "chart.js": "^2.9.4", + "chartjs-plugin-datalabels": "^0.7.0", + "deepmerge": "^4.2.2", + "detect-autofill": "^1.1.3", + "perfect-scrollbar": "^1.5.0", + "popper.js": "^1.16.1", + "tailwindcss": "^3.0.7" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index be0d853..e4c8a6d 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^12.1.2", "@testing-library/user-event": "^13.5.0", + "@themesberg/flowbite": "^1.3.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-icons": "^4.3.1", @@ -19,6 +20,7 @@ "redux": "^4.1.2", "sass": "^1.45.0", "sweetalert2": "^11.3.4", + "tw-elements": "^1.0.0-alpha8", "web-vitals": "^2.1.2" }, "scripts": { diff --git a/src/App.js b/src/App.js index 0f32a40..f45dd1c 100644 --- a/src/App.js +++ b/src/App.js @@ -25,6 +25,17 @@ import Feedback from "./components/Feedback/index"; import Alert from "./components/Alert"; import Toast from "./components/Toast"; import ProductSuggestion from "./components/ProductSuggestion"; +import ProductImage from "./components/ProductImage"; +import VodProduct from "./components/VodProduct"; +import VodProductNew from "./components/VodProductNew"; +import ProductTab from "./components/ProductTab"; +import ProductStatusCard from "./components/ProductStatusCard"; +import AdvertisementDesign1 from "./components/Advertisement/design1"; +import AdvertisementDesign2 from "./components/Advertisement/design2"; +import AdvertisementDesign3 from "./components/Advertisement/design3"; +import CourseChapter from "./components/CourseChapter"; +import SidebarMenu from "./components/SidebarMenu"; +import Switch from "./components/Switch"; function App() { return ( @@ -32,6 +43,8 @@ function App() {
{/* */} {/* */} + {/* */} + {/* */} {/* */} {/* */} {/* */} @@ -51,7 +64,15 @@ function App() { {/* */} {/* */} {/* */} - + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} +
); diff --git a/src/components/Advertisement/design1/index.js b/src/components/Advertisement/design1/index.js new file mode 100644 index 0000000..48ac1bd --- /dev/null +++ b/src/components/Advertisement/design1/index.js @@ -0,0 +1,52 @@ +import React from "react"; + +const AdvertisementDesign1 = () => { + return ( +
+
+
+
+
+
+

تبلیغات دانوینی

+

+ لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با + استفاده از طراحان گرافیک است. +

+
+ +
+
+ ); +}; + +export default AdvertisementDesign1; diff --git a/src/components/Advertisement/design2/index.js b/src/components/Advertisement/design2/index.js new file mode 100644 index 0000000..b6be859 --- /dev/null +++ b/src/components/Advertisement/design2/index.js @@ -0,0 +1,55 @@ +import React from "react"; + +const AdvertisementDesign2 = () => { + return ( +
+
+
+

تبلیغات دانوینی

+

+ لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با + استفاده از طراحان گرافیک است. +

+ +
+
+
+
+
+
+ ); +}; + +export default AdvertisementDesign2; diff --git a/src/components/Advertisement/design3/cart-icon.svg b/src/components/Advertisement/design3/cart-icon.svg new file mode 100644 index 0000000..d411410 --- /dev/null +++ b/src/components/Advertisement/design3/cart-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/components/Advertisement/design3/index.js b/src/components/Advertisement/design3/index.js new file mode 100644 index 0000000..890dfa7 --- /dev/null +++ b/src/components/Advertisement/design3/index.js @@ -0,0 +1,91 @@ +import React from "react"; + +import cart from "./cart-icon.svg"; +import map from "./map-icon.svg"; +import setting from "./setting-icon.svg"; + +const AdvertisementDesign3 = ({ features }) => { + return ( +
+
+
+

تبلیغات دانوینی

+

+ لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با + استفاده از طراحان گرافیک است. +

+
+ {features.map((feature, i) => ( +
+ +

+ {feature.title} +

+
+ ))} +
+
+
+
+
+
+ + +
+
+
+ ); +}; + +export default AdvertisementDesign3; + +AdvertisementDesign3.defaultProps = { + features: [ + { + icon: cart, + title: "قابلیت های فروشگاهی بسیار پیشرفته و ساده", + }, + { + icon: map, + title: "ارسال به تمام نقاط ایران", + }, + { + icon: setting, + title: "تنظیمات پیشرفته و بیش از 2000 ماژول اختصاصی", + }, + ], +}; diff --git a/src/components/Advertisement/design3/map-icon.svg b/src/components/Advertisement/design3/map-icon.svg new file mode 100644 index 0000000..afd0bbc --- /dev/null +++ b/src/components/Advertisement/design3/map-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/components/Advertisement/design3/setting-icon.svg b/src/components/Advertisement/design3/setting-icon.svg new file mode 100644 index 0000000..8bbf82c --- /dev/null +++ b/src/components/Advertisement/design3/setting-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/components/Blogs/design2/BlogDesign2.js b/src/components/Blogs/design2/BlogDesign2.js index 6b72558..eb2984e 100644 --- a/src/components/Blogs/design2/BlogDesign2.js +++ b/src/components/Blogs/design2/BlogDesign2.js @@ -8,6 +8,8 @@ import blogAuthorImg from "../../../assets/images/blog-author.png"; import commentIcon from "../../../assets/icons/light-gray-comment-icon.svg"; import whiteCommentIcon from "../../../assets/icons/white-comment-icon.svg"; +import playBtn from "./play-button.svg"; + const BlogDesign2 = ({ blogSubTitle, dateButton, @@ -45,6 +47,7 @@ const BlogDesign2 = ({ // minHeight: "300px", height: "calc(100vh/3)", maxHeight: "300px", + backgroundColor: "red", }} > {dateButton && ( @@ -100,6 +103,13 @@ const BlogDesign2 = ({ }} className="absolute right-0 bottom-0 h-full w-full" > +
+
+ +
+
); diff --git a/src/components/Blogs/design2/play-button.svg b/src/components/Blogs/design2/play-button.svg new file mode 100644 index 0000000..1be0b07 --- /dev/null +++ b/src/components/Blogs/design2/play-button.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/CourseChapter/index.js b/src/components/CourseChapter/index.js new file mode 100644 index 0000000..8c024ed --- /dev/null +++ b/src/components/CourseChapter/index.js @@ -0,0 +1,139 @@ +import React, { useState } from "react"; + +const CourseChapter = ({ chapters }) => { + const [selectedLesson, setSelectedLesson] = useState(null); + + return ( +
+
+ {/* top */} +
+
+

سرفصل دوره

+
+
+ علوم تجربی + پایه ششم +
+
+ {/* divider */} +
+ {/* course title */} + {chapters.map((chapter, index) => ( +
+
+

{chapter.title}

+ {chapter.duration} +
+ {/* course lessons */} + {chapter.lessons.map((lesson, i) => ( +
+ {/* right div dot dot */} +
+
+ +
+ {/* left div content */} +
setSelectedLesson(lesson)} + > + {/* top */} +
+

+ {lesson.title} +

+ + {lesson.duration} + +
+ {/* divider */} +
+ {/* bottom */} + + {lesson.play} + +
+
+ ))} +
+ ))} + {/* blue left border */} +
+
+
+ ); +}; + +export default CourseChapter; + +CourseChapter.defaultProps = { + chapters: [ + { + title: "فصل اول: مباحث جوشش مواد مذاب در مرکز", + duration: "2:30:13", + lessons: [ + { + title: "آیا گوگل از ما دزدی میکند؟", + duration: "14:30", + play: "پخش", + passed: true, + }, + { + title: "چگونگی ساخت نیروگاه های برقی", + duration: "22:31", + play: "در حال پخش", + passed: true, + }, + { + title: "آیا از اینترنت می توان درآمد داشت؟", + duration: "10:09", + play: "نمایش", + passed: false, + }, + { + title: "زمین سبز و آسمان آبی", + duration: "56:09", + play: "نمایش", + passed: false, + }, + ], + }, + ], +}; diff --git a/src/components/ProductImage/index.js b/src/components/ProductImage/index.js new file mode 100644 index 0000000..195898d --- /dev/null +++ b/src/components/ProductImage/index.js @@ -0,0 +1,62 @@ +import React from "react"; + +import "./index.scss"; + +import productImg from "./productImg.svg"; + +const ProductImage = ({ images }) => { + console.log(images.length); + + return ( +
+
+
+ {images.slice(0, 4).map((image, index) => ( +
+ + {/* این خط پایین که نوشتم برای این است که ایندکس که جنسش استرینگ است رو به نامبر تبدیل کند */} + {Number(index) === 3 && ( +
+ + {images.length - 3} +
+ )} +
+ ))} +
+ +
+
+ ); +}; +// {[0, 1, 2, 3, 4].map((item, index) => ( + +// ))} + +export default ProductImage; + +ProductImage.defaultProps = { + images: [ + { + image: productImg, + }, + { + image: productImg, + }, + { + image: productImg, + }, + { + image: productImg, + }, + { + image: productImg, + }, + ], +}; diff --git a/src/components/ProductImage/index.scss b/src/components/ProductImage/index.scss new file mode 100644 index 0000000..f0bf785 --- /dev/null +++ b/src/components/ProductImage/index.scss @@ -0,0 +1,9 @@ +.no-scrollbar::-webkit-scrollbar { + display: none; +} + +/* Hide scrollbar for IE, Edge and Firefox */ +.no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} diff --git a/src/components/ProductImage/product-chair.svg b/src/components/ProductImage/product-chair.svg new file mode 100644 index 0000000..f5bb26c --- /dev/null +++ b/src/components/ProductImage/product-chair.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/components/ProductImage/productImg.svg b/src/components/ProductImage/productImg.svg new file mode 100644 index 0000000..69a3c12 --- /dev/null +++ b/src/components/ProductImage/productImg.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/components/ProductStatusCard/arrow-icon.svg b/src/components/ProductStatusCard/arrow-icon.svg new file mode 100644 index 0000000..930bd30 --- /dev/null +++ b/src/components/ProductStatusCard/arrow-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/components/ProductStatusCard/delivery-icon.svg b/src/components/ProductStatusCard/delivery-icon.svg new file mode 100644 index 0000000..e4cc601 --- /dev/null +++ b/src/components/ProductStatusCard/delivery-icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/components/ProductStatusCard/icon-shop.svg b/src/components/ProductStatusCard/icon-shop.svg new file mode 100644 index 0000000..564b601 --- /dev/null +++ b/src/components/ProductStatusCard/icon-shop.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/components/ProductStatusCard/icon1.svg b/src/components/ProductStatusCard/icon1.svg new file mode 100644 index 0000000..b4287d7 --- /dev/null +++ b/src/components/ProductStatusCard/icon1.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/ProductStatusCard/index.js b/src/components/ProductStatusCard/index.js new file mode 100644 index 0000000..49c6b1f --- /dev/null +++ b/src/components/ProductStatusCard/index.js @@ -0,0 +1,120 @@ +import React from "react"; + +import arrow from "./arrow-icon.svg"; +import delivery from "./delivery-icon.svg"; +import checked from "./icon1.svg"; +import circle from "./info-circle.svg"; +import shield from "./shield-tick.svg"; +import tick from "./tick-circle.svg"; +import shop from "./icon-shop.svg"; + +const ProductStatusCard = ({ items, productPrice, discountPrice }) => { + console.log(items.alertIcon); + + return ( +
+
+ {items.map((item, index) => ( +
+
+
+ +
+

+ {item.subtitle} + {item.title} +

+ {item.customerSatisfaction && ( +

+ رضایت خریداران: + + {item.customerSatisfactionPercent} + +

+ )} +
+
+ {item.alertIcon && } +
+
+
+ ))} +
+

+ {productPrice} + تومان +

+

+ با خرید این کالا + {discountPrice} + صرفه جویی کنید +

+
+
+ +
+
+
+
+ +
+
+

+ بازگشت بی چون و چرا +

+

+ از اونجایی که ما خیلی خوب هستیم و دوستون داریم در صورتی که از کالایی + خوشتون نیومده میتونید بی قید و شرط پس بدید +

+
+
+
+ ); +}; + +export default ProductStatusCard; + +ProductStatusCard.defaultProps = { + items: [ + { + icon: tick, + title: "توصیه به خرید توسط 4420 نفر", + subtitle: null, + alertIcon: false, + customerSatisfaction: false, + customerSatisfactionPercent: null, + }, + { + icon: shop, + title: " آپادانا ", + subtitle: " فروشنده", + alertIcon: true, + customerSatisfaction: true, + customerSatisfactionPercent: " 91.5 ", + }, + { + icon: delivery, + title: " 20 روز کاری پس از سفارش ", + subtitle: "زمان ارسال", + alertIcon: false, + customerSatisfaction: false, + customerSatisfactionPercent: null, + }, + { + icon: shield, + title: "اصالت و سلامت فیزیکی", + subtitle: "گارانتی ", + alertIcon: true, + customerSatisfaction: false, + customerSatisfactionPercent: null, + }, + ], + + productPrice: " 56/894/000 ", + discountPrice: " 540.000 ", +}; diff --git a/src/components/ProductStatusCard/info-circle.svg b/src/components/ProductStatusCard/info-circle.svg new file mode 100644 index 0000000..4910bd7 --- /dev/null +++ b/src/components/ProductStatusCard/info-circle.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/ProductStatusCard/shield-tick.svg b/src/components/ProductStatusCard/shield-tick.svg new file mode 100644 index 0000000..fd2e0f8 --- /dev/null +++ b/src/components/ProductStatusCard/shield-tick.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/components/ProductStatusCard/tick-circle.svg b/src/components/ProductStatusCard/tick-circle.svg new file mode 100644 index 0000000..d969ba7 --- /dev/null +++ b/src/components/ProductStatusCard/tick-circle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/components/ProductSuggestion/index.js b/src/components/ProductSuggestion/index.js index 6848402..16add84 100644 --- a/src/components/ProductSuggestion/index.js +++ b/src/components/ProductSuggestion/index.js @@ -3,7 +3,7 @@ import React, { useState } from "react"; import productImg from "./product-chair.svg"; import plus from "./plus.svg"; -const ProductSuggestion = ({ suggestions }) => { +const ProductSuggestion = ({ suggestions, selected }) => { const [selectedProduct, setSelectedProduct] = useState(null); return ( @@ -14,11 +14,11 @@ const ProductSuggestion = ({ suggestions }) => { {/* product design */}
{suggestions.map((suggestion, index) => ( -
+
setSelectedProduct(suggestion)} > { {suggestion.productPrice} تومان

-
- انتخاب شما +
+ {/* {suggestion.selected && ( + انتخاب شما + )} */} + {selectedProduct === suggestion && ( + انتخاب شما + )} setSelectedProduct(suggestion)} + className="checkbox-input mt-4 cursor-pointer w-4 h-4" type="checkbox" />
@@ -47,16 +55,16 @@ const ProductSuggestion = ({ suggestions }) => { {/* bottom */}
-

+

جمع لوازم اختیاری خریداری شده 56/894/400 تومان

- + 1 کالا
-

+

در صورت تمایل می توانید موارد بالا را به سبد خرید اضافه کنید

+//
+// +// ); +// }; + +// export default ProductSuggestion; + +// ProductSuggestion.defaultProps = { +// suggestions: [ +// { +// productImage: productImg, +// productTitle: "لپ تاپ گیمینگ ایسوس", +// productPrice: "750000", +// plusIcon: null, +// }, +// { +// productImage: productImg, +// productTitle: "مانیتور 40 اینچ", +// productPrice: "3.000.000", +// plusIcon: plus, +// }, +// { +// productImage: productImg, +// productTitle: "ماوس گیمینگ", +// productPrice: "650/000", +// plusIcon: plus, +// }, +// { +// productImage: productImg, +// productTitle: "لپ تاپ مک بوک پرو 2022", +// productPrice: "2000", +// plusIcon: plus, +// }, +// ], +// }; diff --git a/src/components/ProductTab/index.js b/src/components/ProductTab/index.js new file mode 100644 index 0000000..8db9adb --- /dev/null +++ b/src/components/ProductTab/index.js @@ -0,0 +1,51 @@ +import React, { useState } from "react"; +import Table from "./table"; + +const ProductTab = ({ tabs }) => { + const [selectedTab, setSelectedTab] = useState(null); + + return ( +
+
+
    + {tabs.map((tab, index) => ( +
  • setSelectedTab(tab)} + key={index} + > + {tab.title} +
  • + ))} +
+
+
+ {selectedTab?.components} +
+
+ ); +}; + +export default ProductTab; + +ProductTab.defaultProps = { + tabs: [ + { + title: "مشخصات", + components: , + bg: "bg-transparent", + }, + { + title: "پرسش", + components: "نقد و بررسی", + bg: "bg-blue-500", + }, + { + title: "سوال", + components: "پرسش و پاسخ", + bg: "bg-yellow-500", + }, + ], +}; diff --git a/src/components/ProductTab/table/index.js b/src/components/ProductTab/table/index.js new file mode 100644 index 0000000..da4da44 --- /dev/null +++ b/src/components/ProductTab/table/index.js @@ -0,0 +1,47 @@ +import React from "react"; + +const persian = { + weight: "وزن", + pageNumber: "تعداد صفحات", + pageType: "نوع کاغذ", + bookNumber: "شماره شابک", + publisher: "انتشارات", + author: "نویسنده", + bookType: "قطع", + publishedYear: "سال انتشار", +}; + +const Table = ({ specifications }) => { + return ( +
    + {Object.keys(specifications).map((specification, index) => ( +
  • +
    + {persian[specification]} +
    +
    + {specifications[specification]} +
    +
  • + ))} +
+ ); +}; + +export default Table; + +Table.defaultProps = { + specifications: { + weight: "1 کیلوگرم", + pageNumber: "400 صفحه", + pageType: "گلاسه", + bookNumber: "124900985340561870112312499", + publisher: "رزمندگان", + author: "یک نویسنده گمنام", + bookType: "خشتی", + publishedYear: "1399", + }, +}; diff --git a/src/components/SidebarMenu/Vector.svg b/src/components/SidebarMenu/Vector.svg new file mode 100644 index 0000000..2940c95 --- /dev/null +++ b/src/components/SidebarMenu/Vector.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/SidebarMenu/arrow-down.svg b/src/components/SidebarMenu/arrow-down.svg new file mode 100644 index 0000000..d05315f --- /dev/null +++ b/src/components/SidebarMenu/arrow-down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/components/SidebarMenu/element-4.svg b/src/components/SidebarMenu/element-4.svg new file mode 100644 index 0000000..2132509 --- /dev/null +++ b/src/components/SidebarMenu/element-4.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/components/SidebarMenu/folder-open.svg b/src/components/SidebarMenu/folder-open.svg new file mode 100644 index 0000000..9d7fe32 --- /dev/null +++ b/src/components/SidebarMenu/folder-open.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/SidebarMenu/index.js b/src/components/SidebarMenu/index.js new file mode 100644 index 0000000..977a2c3 --- /dev/null +++ b/src/components/SidebarMenu/index.js @@ -0,0 +1,159 @@ +import React from "react"; + +import "./index.scss"; + +import downwardArrow from "./arrow-down.svg"; +import profilePic from "./profile-pic.svg"; +import element from "./element-4.svg"; +import folderOpen from "./folder-open.svg"; +import wallet from "./wallet-money.svg"; +import logout from "./logout.svg"; +import messageText from "./message-text.svg"; +import moon from "./moon.svg"; +import sms from "./sms.svg"; +import userEdit from "./user-edit.svg"; +import Switch from "../Switch"; + +const SidebarMenu = ({ items, buttons }) => { + return ( +
+
+ {/* profile */} +
+ +

+ کامران کوهستانی شیرازی +

+ +
+ {/* divider */} +
+

منوی کاربری

+ {/* items */} + {items.map((item, i) => ( +
+ {/* menu items */} +
+ +

{item.title}

+ {item.notification && ( +
+ + {item.notification} + +
+ )} +
+ {/* sub items */} + {item.subItems.map((subItem, i) => ( +
+ {subItem.name && ( +

+ {subItem.name} +

+ )} + {subItem.num && ( +
+ {subItem.num} +
+ )} +
+ ))} +
+ ))} + {/* buttons */} + {buttons.map((button, i) => ( +
+ {/* divider */} +
+
+ +

+ {button.title} +

+ {button.leftIcon && } +
+
+ ))} +
+
+ ); +}; + +export default SidebarMenu; + +SidebarMenu.defaultProps = { + items: [ + { + icon: element, + title: "داشبورد مدیریت", + notification: null, + subItems: [], + }, + { + icon: folderOpen, + title: "پروژه ها", + notification: null, + subItems: [ + { name: "افزدون پروژه", num: null }, + { name: "مدیریت پروژه ها", num: null }, + { name: "پروژه های حذف شده", num: null }, + ], + }, + { + icon: wallet, + title: "مالی و حسابداری", + notification: null, + subItems: [ + { name: "تمدید سرویس", num: null }, + { name: "بسته های اشتراکی", num: null }, + { name: "فاکتور ها", num: 1 }, + { name: "درخواست تسویه حساب", num: null }, + ], + }, + { + icon: userEdit, + title: "دیدگاه ها", + notification: null, + subItems: [], + }, + { + icon: userEdit, + title: "حساب کاربری", + notification: null, + subItems: [{ name: "ویرایش حساب کاربری", num: null }], + }, + { + icon: sms, + title: "پشتیبانی", + notification: 7, + subItems: [ + { name: "تیکت ها", num: null }, + { name: "ارسال تیکت جدید", num: null }, + { name: "ویکی", num: null }, + ], + }, + { + icon: messageText, + title: "متستندات", + notification: null, + subItems: [{ name: "API توسعه دهندگان", num: null }], + }, + ], + buttons: [ + { icon: moon, title: "حالت شب", leftIcon: moon }, + { icon: logout, title: "خروج از حساب کاربری", leftIcon: null }, + ], +}; diff --git a/src/components/SidebarMenu/index.scss b/src/components/SidebarMenu/index.scss new file mode 100644 index 0000000..f0bf785 --- /dev/null +++ b/src/components/SidebarMenu/index.scss @@ -0,0 +1,9 @@ +.no-scrollbar::-webkit-scrollbar { + display: none; +} + +/* Hide scrollbar for IE, Edge and Firefox */ +.no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} diff --git a/src/components/SidebarMenu/logout.svg b/src/components/SidebarMenu/logout.svg new file mode 100644 index 0000000..94c72a1 --- /dev/null +++ b/src/components/SidebarMenu/logout.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/components/SidebarMenu/message-text.svg b/src/components/SidebarMenu/message-text.svg new file mode 100644 index 0000000..cf188b0 --- /dev/null +++ b/src/components/SidebarMenu/message-text.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/components/SidebarMenu/moon.svg b/src/components/SidebarMenu/moon.svg new file mode 100644 index 0000000..ca740b6 --- /dev/null +++ b/src/components/SidebarMenu/moon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/components/SidebarMenu/profile-pic.svg b/src/components/SidebarMenu/profile-pic.svg new file mode 100644 index 0000000..a51292a --- /dev/null +++ b/src/components/SidebarMenu/profile-pic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/components/SidebarMenu/sms.svg b/src/components/SidebarMenu/sms.svg new file mode 100644 index 0000000..642cf99 --- /dev/null +++ b/src/components/SidebarMenu/sms.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/components/SidebarMenu/user-edit.svg b/src/components/SidebarMenu/user-edit.svg new file mode 100644 index 0000000..60a9d85 --- /dev/null +++ b/src/components/SidebarMenu/user-edit.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/components/SidebarMenu/wallet-money.svg b/src/components/SidebarMenu/wallet-money.svg new file mode 100644 index 0000000..68de02d --- /dev/null +++ b/src/components/SidebarMenu/wallet-money.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/components/Switch/index.js b/src/components/Switch/index.js new file mode 100644 index 0000000..9e9d48e --- /dev/null +++ b/src/components/Switch/index.js @@ -0,0 +1,13 @@ +import React from "react"; +import "./index.scss"; + +const Switch = () => { + return ( +
+ + +
+ ); +}; + +export default Switch; diff --git a/src/components/Switch/index.scss b/src/components/Switch/index.scss new file mode 100644 index 0000000..9f74f26 --- /dev/null +++ b/src/components/Switch/index.scss @@ -0,0 +1,52 @@ +// *, *:after, *:before { +// // box-sizing: border-box; +// } + +// body { +// min-height: 100vh; +// display: flex; +// align-items: center; +// justify-content: center; +// } + +.switch { + position: relative; + input[type="checkbox"] { + visibility: hidden; + position : absolute; + &:checked + label { + transform: rotate(0deg); + background-color: #000; + &:before { + transform: translateX(35.5px); + background-color: #fff; + } + } + } + + label { + display: flex; + width: 70px; + height: 34px; + border: 3px solid; + border-radius: 99em; + position: relative; + transition: transform 0.3s ease-in-out; + transform-origin: 50% 50%; + cursor: pointer; + + &:before { + transition: transform 0.3s ease; + transition-delay: 0s; + content: ""; + display: block; + position: absolute; + width: 24px; + height: 24px; + background-color: #000; + border-radius: 50%; + top: 2px; + left: 3px; + } + } +} diff --git a/src/components/VodProduct/danovin.mp4 b/src/components/VodProduct/danovin.mp4 new file mode 100644 index 0000000..faba880 Binary files /dev/null and b/src/components/VodProduct/danovin.mp4 differ diff --git a/src/components/VodProduct/index.js b/src/components/VodProduct/index.js new file mode 100644 index 0000000..6f0a0e9 --- /dev/null +++ b/src/components/VodProduct/index.js @@ -0,0 +1,323 @@ +import React, { useEffect, useState } from "react"; + +import StarRating from "../starRating/StarRating"; +import ReactTooltip from "react-tooltip"; + +import watermelon from "../../assets/images/watermelon.png"; +import video from "./danovin.mp4"; + +import discountImg from "../../assets/icons/discount.png"; + +import heart from "../../assets/icons/vuesax-linear-heart.svg"; +import YellowDotIcon from "../../assets/icons/yellowDotIcon.svg"; +import RedDotIcon from "../../assets/icons/redDotIcon.svg"; +import PurpleDotIcon from "../../assets/icons/purpleDotIcon.svg"; +import LightBlueDotIcon from "../../assets/icons/lightBlueDotIcon.svg"; +import whitePlayIcon from "../../assets/icons/white-play-button-icon.svg"; + +const VodProduct = ({ + productColor, + colors, + likeBtn, + discount, + discountPricePercent, + discountPrice, + productContent, + star, + productTags, + priceDirection, + productTitleAlignment, + priceHolder, + productCat, + rangeHolder, + priceTitle, + addToCartHolder, + productTitleCategoryHolder, + productTitleCategoryHolderAlignment, + priceStarHolder, + priceStarAlignment, + rangeWidth, +}) => { + const [progressFlag, setProgressFlag] = useState(false); + const [openModal, setOpenModal] = useState(false); + // const [closeModal, setCloseModal] = useState(false); + + useEffect(() => { + setTimeout(() => { + setProgressFlag(true); + }, 1000); + }); + return ( +
+ {/* product UI Design */} +
+
+
+ {/* product image */} +
setOpenModal(true)} + > + {/* icons on image */} +
+ {discountPricePercent && ( +
+

+ 23% +

+
+ )} + {likeBtn && ( +
+ +
+ )} + {discount && ( +
+ +
+ )} +
+ {/* play button */} +
setOpenModal(true)} + > + setOpenModal(true)} + /> +
+ {/* select Color */} + {productColor && ( +
+ {/* {colors.map((color,index))} */} + + +
+ )} +
+ {/* product content */} +
+ {/* content */} +
+
+

+ نسخه چاپی علموم تجربه هفتم +

+ {productCat && ( + + پایه سوم + + )} +
+ {productContent && ( +

+ این کتاب شامل گلدان و گیاه و خاک می باشد و همچنین آپشن های + خوب دیگری نیز دارد. +

+ )} +
+ {/* price */} +
+ {priceHolder && ( +
+ {/* price */} +
+
+ {priceTitle && ( + + قیمت + + )} + {discountPrice && ( +

+ قیمت 140تومان +

+ )} +
+

+ 111.000تومان +

+
+ {/* add to cart */} + {addToCartHolder && ( + + )} +
+ )} + {star && ( +
+ + + 39 + +
+ )} +
+ {productTags && ( +
+ + + +
+ )} + {rangeHolder && ( +
+
+
+ )} +
+
+
+
+
setOpenModal(false)} + > + +
+
+ ); +}; +// hover:-translate-y-2 +export default VodProduct; + +// text colors i used for product title: +// text-darkCrimsonTextColor +// text-productTitle + +// text color i used for product excerpt: +// text-productContent + +// text color i used for product cat: +// text-darkCrimsonTextColor + +// bg color i used for play button icon: +// bg-playButtonIcon +// bg-playButtonIcon2 + +VodProduct.defaultProps = { + colors: [ + { + icon: YellowDotIcon, + dataType: "زرد", + }, + { + icon: RedDotIcon, + dataType: "قرمز", + }, + { + icon: PurpleDotIcon, + dataType: "بنفش", + }, + { + icon: LightBlueDotIcon, + dataType: "آبی", + }, + + LightBlueDotIcon, + ], + + // icons on product image + productColor: true, + likeBtn: true, + discount: true, + discountPricePercent: true, + // product price + discountPrice: true, + priceHolder: true, + priceTitle: false, + + productContent: false, + star: true, + productTags: false, + productCat: true, + rangeHolder: true, + + addToCartHolder: false, + + productTitleAlignment: "text-justify", + + // برای درصد دادن به عرض رنج + rangeWidth: "75%", + + priceDirection: "flex-row", + + productTitleCategoryHolder: "flex-row", + productTitleCategoryHolderAlignment: "items-center", + + // برای اینکه بتونیم ستاره هارو بالا قیمت بزاریم و دیزاین را مثل کتاب ها در بیاریم + // یادمون باشه که حتما رویه + // flex-col-reverse + // بزاریم + + // دیفالتش باید این باشه: + // priceStarHolder: flex-row + priceStarHolder: "flex-row", + // دیفالتش باید این باشه: + // priceStarHolder: items-center + priceStarAlignment: "items-center", +}; diff --git a/src/components/VodProductNew/danovin.mp4 b/src/components/VodProductNew/danovin.mp4 new file mode 100644 index 0000000..faba880 Binary files /dev/null and b/src/components/VodProductNew/danovin.mp4 differ diff --git a/src/components/VodProductNew/index.js b/src/components/VodProductNew/index.js new file mode 100644 index 0000000..6edaf48 --- /dev/null +++ b/src/components/VodProductNew/index.js @@ -0,0 +1,344 @@ +import React, { useEffect, useState } from "react"; + +import StarRating from "../starRating/StarRating"; +import ReactTooltip from "react-tooltip"; + +import watermelon from "../../assets/images/watermelon.png"; +import video from "./danovin.mp4"; + +import discountImg from "../../assets/icons/discount.png"; + +import heart from "../../assets/icons/vuesax-linear-heart.svg"; +import YellowDotIcon from "../../assets/icons/yellowDotIcon.svg"; +import RedDotIcon from "../../assets/icons/redDotIcon.svg"; +import PurpleDotIcon from "../../assets/icons/purpleDotIcon.svg"; +import LightBlueDotIcon from "../../assets/icons/lightBlueDotIcon.svg"; +import whitePlayIcon from "../../assets/icons/white-play-button-icon.svg"; + +const VodProduct = ({ + productColor, + colors, + likeBtn, + discount, + discountPricePercent, + discountPrice, + productContent, + star, + productTags, + priceDirection, + productTitleAlignment, + priceHolder, + productCat, + rangeHolder, + priceTitle, + addToCartHolder, + productTitleCategoryHolder, + productTitleCategoryHolderAlignment, + priceStarHolder, + priceStarAlignment, + rangeWidth, +}) => { + const [progressFlag, setProgressFlag] = useState(false); + // const [openModal, setOpenModal] = useState(false); + useEffect(() => { + setTimeout(() => { + setProgressFlag(true); + }, 1000); + }); + return ( +
+ رویه باتن پلی / عکس کلیک کنید + {/* product UI Design */} +
+
+
+ {/* product image */} +
+ {/* icons on image */} +
+ {discountPricePercent && ( +
+

+ 23% +

+
+ )} + {likeBtn && ( +
+ +
+ )} + {discount && ( +
+ +
+ )} +
+ {/* play button */} +
setOpenModal(true)} + > + setOpenModal(true)} + /> +
+ {/* select Color */} + {productColor && ( +
+ {/* {colors.map((color,index))} */} + + +
+ )} +
+ {/* product content */} +
+ {/* content */} +
+
+

+ نسخه چاپی علموم تجربه هفتم +

+ {productCat && ( + + پایه سوم + + )} +
+ {productContent && ( +

+ این کتاب شامل گلدان و گیاه و خاک می باشد و همچنین آپشن های + خوب دیگری نیز دارد. +

+ )} +
+ {/* price */} +
+ {priceHolder && ( +
+ {/* price */} +
+
+ {priceTitle && ( + + قیمت + + )} + {discountPrice && ( +

+ قیمت 140تومان +

+ )} +
+

+ 111.000تومان +

+
+ {/* add to cart */} + {addToCartHolder && ( + + )} +
+ )} + {star && ( +
+ + + 39 + +
+ )} +
+ {productTags && ( +
+ + + +
+ )} + {rangeHolder && ( +
+
+
+ )} +
+
+
+
+ +
+ ); +}; +// hover:-translate-y-2 +export default VodProduct; + +// text colors i used for product title: +// text-darkCrimsonTextColor +// text-productTitle + +// text color i used for product excerpt: +// text-productContent + +// text color i used for product cat: +// text-darkCrimsonTextColor + +// bg color i used for play button icon: +// bg-playButtonIcon +// bg-playButtonIcon2 + +VodProduct.defaultProps = { + colors: [ + { + icon: YellowDotIcon, + dataType: "زرد", + }, + { + icon: RedDotIcon, + dataType: "قرمز", + }, + { + icon: PurpleDotIcon, + dataType: "بنفش", + }, + { + icon: LightBlueDotIcon, + dataType: "آبی", + }, + + LightBlueDotIcon, + ], + + // icons on product image + productColor: true, + likeBtn: true, + discount: true, + discountPricePercent: true, + // product price + discountPrice: true, + priceHolder: true, + priceTitle: false, + + productContent: false, + star: true, + productTags: false, + productCat: true, + rangeHolder: true, + + addToCartHolder: false, + + productTitleAlignment: "text-justify", + + // برای درصد دادن به عرض رنج + rangeWidth: "75%", + + priceDirection: "flex-row", + + productTitleCategoryHolder: "flex-row", + productTitleCategoryHolderAlignment: "items-center", + + // برای اینکه بتونیم ستاره هارو بالا قیمت بزاریم و دیزاین را مثل کتاب ها در بیاریم + // یادمون باشه که حتما رویه + // flex-col-reverse + // بزاریم + + // دیفالتش باید این باشه: + // priceStarHolder: flex-row + priceStarHolder: "flex-row", + // دیفالتش باید این باشه: + // priceStarHolder: items-center + priceStarAlignment: "items-center", +}; diff --git a/src/components/counterDesign/CounterDesign.js b/src/components/counterDesign/CounterDesign.js index 1ed49ff..86e4a5a 100644 --- a/src/components/counterDesign/CounterDesign.js +++ b/src/components/counterDesign/CounterDesign.js @@ -36,7 +36,7 @@ const CounterDesign = ({ {/* counter design */}
- {/* {likeBtn && ( + {likeBtn && (
setCount(count - 1)} />
- )} */} + )} {counterIncreaseBtn && ( +
{/* title holder */}

آیتم محصولات

diff --git a/src/components/testtttt/Testttt.js b/src/components/testtttt/Testttt.js index 946e521..d74c3ae 100644 --- a/src/components/testtttt/Testttt.js +++ b/src/components/testtttt/Testttt.js @@ -1,25 +1,56 @@ -import React, { useState } from "react"; -import blogImage from "../../assets/images/blog-featured-image.jpg"; +import React from "react"; +import video from "./danovin.mp4"; const Testttt = () => { - const [isHovering, setIsHovering] = useState(false); - return ( -
- +
+
); }; diff --git a/src/components/testtttt/danovin.mp4 b/src/components/testtttt/danovin.mp4 new file mode 100644 index 0000000..faba880 Binary files /dev/null and b/src/components/testtttt/danovin.mp4 differ diff --git a/src/components/vodProductDesign/VodProductDesign.js b/src/components/vodProductDesign/VodProductDesign.js index 7b315e4..b675105 100644 --- a/src/components/vodProductDesign/VodProductDesign.js +++ b/src/components/vodProductDesign/VodProductDesign.js @@ -55,7 +55,7 @@ const VodProductDesign = ({ }, 1000); }); return ( -
+
{/* title holder */}

طراحی محصولات vod

@@ -70,7 +70,7 @@ const VodProductDesign = ({
{/* product UI Design */}
-
+
diff --git a/src/index.js b/src/index.js index f173967..fbcd7b6 100644 --- a/src/index.js +++ b/src/index.js @@ -3,6 +3,7 @@ import ReactDOM from "react-dom"; import "./index.scss"; import App from "./App"; import reportWebVitals from "./reportWebVitals"; +import "@themesberg/flowbite"; ReactDOM.render( diff --git a/src/index.scss b/src/index.scss index aa220f6..b01e364 100644 --- a/src/index.scss +++ b/src/index.scss @@ -24,13 +24,13 @@ body { border-radius: 50%; } -$errorcolor1: #06bace; -$errorcolor2: #3ee924; -$errorcolor7: #c70000; -$errorcolor7button: #e92424; -$white: #fff; -$black: #000; -$contentcolor: #646464; -$toastbgerror: #ffeaea; -$toastbgsuccess: #c3ffb9; -$toastsuccesscolor: #21ae0b; +// $errorcolor1: #06bace; +// $errorcolor2: #3ee924; +// $errorcolor7: #c70000; +// $errorcolor7button: #e92424; +// $white: #fff; +// $black: #000; +// $contentcolor: #646464; +// $toastbgerror: #ffeaea; +// $toastbgsuccess: #c3ffb9; +// $toastsuccesscolor: #21ae0b; diff --git a/tailwind.config.js b/tailwind.config.js index bf4aa9e..a9b04b3 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,5 +1,8 @@ module.exports = { - content: ["./src/**/*.{js,jsx,ts,tsx}"], + content: [ + "./src/**/*.{js,jsx,ts,tsx}", + "./node_modules/@themesberg/flowbite/**/*.js", + ], theme: { extend: {}, textColor: (theme) => ({ @@ -75,5 +78,5 @@ module.exports = { darkCrimsonBorderColor: "#132F52", }), }, - plugins: [], + plugins: [require("@themesberg/flowbite/plugin")], };