├── README.md ├── admin-panel ├── .env.example ├── .eslintignore ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .prettierignore ├── .prettierrc ├── README.md ├── index.html ├── jsconfig.json ├── package-lock.json ├── package.json ├── public │ ├── _redirects │ ├── assets │ │ ├── background │ │ │ ├── overlay_1.svg │ │ │ ├── overlay_2.jpg │ │ │ ├── overlay_3.jpg │ │ │ └── overlay_4.jpg │ │ ├── icons │ │ │ ├── glass │ │ │ │ ├── ic_glass_bag.png │ │ │ │ ├── ic_glass_buy.png │ │ │ │ ├── ic_glass_message.png │ │ │ │ └── ic_glass_users.png │ │ │ ├── ic_flag_de.svg │ │ │ ├── ic_flag_en.svg │ │ │ ├── ic_flag_fr.svg │ │ │ ├── ic_notification_chat.svg │ │ │ ├── ic_notification_mail.svg │ │ │ ├── ic_notification_package.svg │ │ │ ├── ic_notification_shipping.svg │ │ │ ├── navbar │ │ │ │ ├── ic_analytics.svg │ │ │ │ ├── ic_blog.svg │ │ │ │ ├── ic_cart.svg │ │ │ │ ├── ic_disabled.svg │ │ │ │ ├── ic_lock.svg │ │ │ │ └── ic_user.svg │ │ │ └── shape-avatar.svg │ │ ├── illustrations │ │ │ ├── illustration_404.svg │ │ │ ├── illustration_avatar.png │ │ │ └── illustration_login.png │ │ ├── images │ │ │ ├── avatars │ │ │ │ ├── avatar_1.jpg │ │ │ │ ├── avatar_10.jpg │ │ │ │ ├── avatar_11.jpg │ │ │ │ ├── avatar_12.jpg │ │ │ │ ├── avatar_13.jpg │ │ │ │ ├── avatar_14.jpg │ │ │ │ ├── avatar_15.jpg │ │ │ │ ├── avatar_16.jpg │ │ │ │ ├── avatar_17.jpg │ │ │ │ ├── avatar_18.jpg │ │ │ │ ├── avatar_19.jpg │ │ │ │ ├── avatar_2.jpg │ │ │ │ ├── avatar_20.jpg │ │ │ │ ├── avatar_21.jpg │ │ │ │ ├── avatar_22.jpg │ │ │ │ ├── avatar_23.jpg │ │ │ │ ├── avatar_24.jpg │ │ │ │ ├── avatar_25.jpg │ │ │ │ ├── avatar_3.jpg │ │ │ │ ├── avatar_4.jpg │ │ │ │ ├── avatar_5.jpg │ │ │ │ ├── avatar_6.jpg │ │ │ │ ├── avatar_7.jpg │ │ │ │ ├── avatar_8.jpg │ │ │ │ └── avatar_9.jpg │ │ │ ├── covers │ │ │ │ ├── cover_1.jpg │ │ │ │ ├── cover_10.jpg │ │ │ │ ├── cover_11.jpg │ │ │ │ ├── cover_12.jpg │ │ │ │ ├── cover_13.jpg │ │ │ │ ├── cover_14.jpg │ │ │ │ ├── cover_15.jpg │ │ │ │ ├── cover_16.jpg │ │ │ │ ├── cover_17.jpg │ │ │ │ ├── cover_18.jpg │ │ │ │ ├── cover_19.jpg │ │ │ │ ├── cover_2.jpg │ │ │ │ ├── cover_20.jpg │ │ │ │ ├── cover_21.jpg │ │ │ │ ├── cover_22.jpg │ │ │ │ ├── cover_23.jpg │ │ │ │ ├── cover_24.jpg │ │ │ │ ├── cover_3.jpg │ │ │ │ ├── cover_4.jpg │ │ │ │ ├── cover_5.jpg │ │ │ │ ├── cover_6.jpg │ │ │ │ ├── cover_7.jpg │ │ │ │ ├── cover_8.jpg │ │ │ │ └── cover_9.jpg │ │ │ └── products │ │ │ │ ├── product_1.jpg │ │ │ │ ├── product_10.jpg │ │ │ │ ├── product_11.jpg │ │ │ │ ├── product_12.jpg │ │ │ │ ├── product_13.jpg │ │ │ │ ├── product_14.jpg │ │ │ │ ├── product_15.jpg │ │ │ │ ├── product_16.jpg │ │ │ │ ├── product_17.jpg │ │ │ │ ├── product_18.jpg │ │ │ │ ├── product_19.jpg │ │ │ │ ├── product_2.jpg │ │ │ │ ├── product_20.jpg │ │ │ │ ├── product_21.jpg │ │ │ │ ├── product_22.jpg │ │ │ │ ├── product_23.jpg │ │ │ │ ├── product_24.jpg │ │ │ │ ├── product_3.jpg │ │ │ │ ├── product_4.jpg │ │ │ │ ├── product_5.jpg │ │ │ │ ├── product_6.jpg │ │ │ │ ├── product_7.jpg │ │ │ │ ├── product_8.jpg │ │ │ │ └── product_9.jpg │ │ ├── logo.svg │ │ ├── placeholder.svg │ │ ├── preview.jpg │ │ └── transparent.png │ └── manifest.json ├── src │ ├── _mock │ │ ├── account.js │ │ ├── blog.js │ │ ├── products.js │ │ └── user.js │ ├── app.jsx │ ├── components │ │ ├── chart │ │ │ ├── chart.js │ │ │ ├── index.js │ │ │ └── use-chart.js │ │ ├── color-utils │ │ │ ├── color-picker.jsx │ │ │ ├── color-preview.jsx │ │ │ └── index.js │ │ ├── iconify │ │ │ ├── iconify.jsx │ │ │ └── index.js │ │ ├── label │ │ │ ├── index.js │ │ │ ├── label.jsx │ │ │ └── styles.js │ │ ├── logo │ │ │ ├── index.js │ │ │ └── logo.jsx │ │ ├── scrollbar │ │ │ ├── index.js │ │ │ ├── scrollbar.jsx │ │ │ └── styles.js │ │ └── svg-color │ │ │ ├── index.js │ │ │ └── svg-color.jsx │ ├── global.css │ ├── hooks │ │ ├── use-responsive.js │ │ └── use-scroll-to-top.js │ ├── layouts │ │ └── dashboard │ │ │ ├── common │ │ │ ├── account-popover.jsx │ │ │ ├── language-popover.jsx │ │ │ ├── notifications-popover.jsx │ │ │ └── searchbar.jsx │ │ │ ├── config-layout.js │ │ │ ├── config-navigation.jsx │ │ │ ├── header.jsx │ │ │ ├── index.jsx │ │ │ ├── main.jsx │ │ │ └── nav.jsx │ ├── main.jsx │ ├── pages │ │ ├── app.jsx │ │ ├── login.jsx │ │ └── user.jsx │ ├── providers │ │ └── AuthProvider.jsx │ ├── routes │ │ ├── components │ │ │ ├── index.js │ │ │ └── router-link.jsx │ │ ├── hooks │ │ │ ├── index.js │ │ │ ├── use-pathname.js │ │ │ └── use-router.js │ │ └── sections.jsx │ ├── sections │ │ ├── login │ │ │ ├── index.js │ │ │ └── login-view.jsx │ │ ├── overview │ │ │ ├── app-conversion-rates.jsx │ │ │ ├── app-current-subject.jsx │ │ │ ├── app-current-visits.jsx │ │ │ ├── app-news-update.jsx │ │ │ ├── app-order-timeline.jsx │ │ │ ├── app-tasks.jsx │ │ │ ├── app-traffic-by-site.jsx │ │ │ ├── app-website-visits.jsx │ │ │ ├── app-widget-summary.jsx │ │ │ └── view │ │ │ │ ├── app-view.jsx │ │ │ │ └── index.js │ │ └── user │ │ │ ├── table-empty-rows.jsx │ │ │ ├── table-no-data.jsx │ │ │ ├── user-table-head.jsx │ │ │ ├── user-table-row.jsx │ │ │ ├── user-table-toolbar.jsx │ │ │ ├── utils.js │ │ │ └── view │ │ │ ├── index.js │ │ │ └── user-view.jsx │ ├── theme │ │ ├── css.js │ │ ├── custom-shadows.js │ │ ├── index.jsx │ │ ├── overrides.js │ │ ├── palette.js │ │ ├── shadows.js │ │ └── typography.js │ └── utils │ │ ├── format-number.js │ │ └── format-time.js ├── vercel.json ├── vite.config.js └── yarn.lock ├── client ├── .env.example ├── .gitattributes ├── .gitignore ├── README.md ├── app │ ├── (auth) │ │ ├── layout.tsx │ │ ├── reset-password │ │ │ └── page.tsx │ │ ├── signin │ │ │ └── page.tsx │ │ └── signup │ │ │ └── page.tsx │ ├── (default) │ │ ├── layout.tsx │ │ └── page.tsx │ ├── css │ │ ├── additional-styles │ │ │ ├── range-slider.css │ │ │ ├── theme.css │ │ │ ├── toggle-switch.css │ │ │ └── utility-patterns.css │ │ └── style.css │ ├── layout.tsx │ └── notes │ │ └── page.tsx ├── components │ ├── Features.tsx │ ├── FeaturesBlocks.tsx │ ├── Hero.tsx │ ├── ModalVideo.tsx │ ├── Newsletter.tsx │ ├── Testimonials.tsx │ ├── notebook │ │ ├── AddNote.tsx │ │ └── DeleteNote.tsx │ └── ui │ │ ├── Footer.tsx │ │ ├── Header.tsx │ │ ├── Logo.tsx │ │ ├── MobileMenu.tsx │ │ ├── SIgnInForm.tsx │ │ └── SIgnUpForm.tsx ├── constants │ └── index.ts ├── middleware.ts ├── next.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public │ ├── favicon.ico │ ├── images │ │ ├── anime.jpeg │ │ ├── feature1.jpeg │ │ ├── feature2.jpeg │ │ ├── feature3.jpeg │ │ └── hero-image.png │ └── videos │ │ └── video.mp4 ├── tailwind.config.js ├── tsconfig.json └── utils │ └── notes.ts ├── makefile └── server ├── .env.example ├── .gitignore ├── README.md ├── cmd └── main.go ├── controllers ├── auth.go └── notes.go ├── database └── connection.go ├── go.mod ├── go.sum ├── middleware ├── auth.go └── role.go ├── models ├── note.go └── user.go └── routes ├── admin.go ├── auth.go └── notes.go /README.md: -------------------------------------------------------------------------------- 1 |

QuickNotes 📜

2 | 3 |

4 | Welcome to QuickNotes - your ultimate tool for note-taking and management. This project consists of the backend server, frontend client, and admin panel, all bundled together for seamless development and deployment. 5 |

6 | 7 | ## 📂 Folder Structure 8 | 9 | - **`server/`**: Contains the backend server written in GoLang. Handles authentication, database manipulation, and serves API endpoints. 10 | - **`client/`**: Houses the frontend client written in Next.js. Provides a user-friendly interface for note-taking and management. 11 | - **`admin-panel/`**: Includes the admin panel frontend built with React.js and Material-UI. Allows admin users to monitor users and their notes. 12 | 13 | ## 🛠️ Technologies Used 14 | 15 | ### Backend Server (server/) 16 | - 🐍 Golang 17 | - 🔑 jwt-go for JWT token-based authentication and authorization 18 | - 🔌 Fiber for web server implementation 19 | - 🛠️ Gorm ORM for database manipulation 20 | 21 | ### Frontend Client (client/) 22 | - 🌐 TS + NextJs 23 | - 🎨 Tailwind CSS for styling 24 | - 🌟 AOS for animations 25 | - 🚀 Headless UI for ready components 26 | 27 | ### Admin Panel (admin-panel/) 28 | - 🌐 JS + ReactJs 29 | - 🎨 Material-UI library for UI components 30 | - 📊 React-apexCharts for chart and visualization 31 | 32 | ## 🚀 How to Use 33 | 34 | 1. 📝 Clone the repository by running: 35 | ``` 36 | git clone https://github.com/mutasim77/quick-notes.git 37 | ``` 38 | 39 | 2. 📂 Navigate to the project directory: 40 | ``` 41 | cd quick-notes 42 | ``` 43 | 44 | 3. 📦 Install dependencies for each component: 45 | ``` 46 | make install 47 | ``` 48 | 49 | 3. ⚙️ Set up the `.env` files for server and client based on their respective `.env.example` files. 50 | 51 | 5. 🏃‍♂️ Run each component: 52 | ``` 53 | make run-server 54 | make run-client 55 | make run-admin-panel 56 | ``` 57 | 58 | 5. 🌐 Access the client and admin panel in your browser at the provided URLs. 59 | 60 | > [!IMPORTANT] 61 | > The project is currently a work in progress and actively under development. That's why, for the time being, I haven't deployed it anywhere (even though I briefly deployed it in development mode and then removed it). Perhaps later, I will consider deploying it on AWS Cloud. 62 | 63 | 64 | ## 📸 Demo 65 | Here, I will provide some screenshots to give you a glimpse of how the project looks. Since it's not deployed yet, viewing these screenshots will provide an overview of the project's user interface and functionality. 66 | 67 | ### Home Page 🧇 68 | 1. 69 | Home Page 70 | 2. 71 | Home Page 72 | 73 | ### Login Page 🥯 74 | 1. 75 | Login Page 76 | 77 | ### Notes Page 🍟 78 | 1. 79 | Notes Page 80 | 81 | ### Admin Panel 🌯 82 | 1. 83 | ![image](https://github.com/mutasim77/quick-notes/assets/96326525/9c3e53e9-21cb-4618-90f7-2d1febaa82d5) 84 | 85 | 86 | > [!NOTE] 87 | > Thank you for taking the time to explore this project. If you found it interesting or useful, I would greatly appreciate it if you could give it a star ⭐. If you have any questions, feedback, or suggestions regarding the project, please feel free to open an issue. 88 | 89 | Happy coding! 🚀 90 | -------------------------------------------------------------------------------- /admin-panel/.env.example: -------------------------------------------------------------------------------- 1 | VITE_API_URL= -------------------------------------------------------------------------------- /admin-panel/.eslintignore: -------------------------------------------------------------------------------- 1 | // .eslintignore 2 | build/* 3 | dist/* 4 | public/* 5 | **/out/* 6 | **/node_modules/* 7 | 8 | **/.next/* 9 | next.config.js 10 | 11 | vite.config.js 12 | vite.config.ts 13 | 14 | src/reportWebVitals.js 15 | src/service-worker.js 16 | src/serviceWorkerRegistration.js 17 | src/setupTests.js 18 | 19 | src/reportWebVitals.ts 20 | src/service-worker.ts 21 | src/serviceWorkerRegistration.ts 22 | src/setupTests.ts 23 | -------------------------------------------------------------------------------- /admin-panel/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { 3 | "ecmaVersion": "latest", 4 | "sourceType": "module", 5 | "ecmaFeatures": { 6 | "jsx": true 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /admin-panel/.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-detectable=false 2 | *.jsx linguist-detectable=false 3 | *.css linguist-detectable=false 4 | *.html linguist-detectable=false 5 | 6 | -------------------------------------------------------------------------------- /admin-panel/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | .pnp 6 | .pnp.js 7 | 8 | # testing 9 | coverage 10 | 11 | # production 12 | .next 13 | .swc 14 | _static 15 | out 16 | dist 17 | build 18 | 19 | # environment variables 20 | .env 21 | 22 | # misc 23 | .DS_Store 24 | .vercel 25 | .netlify 26 | .unimportedrc.json 27 | tsconfig.tsbuildinfo 28 | .vscode 29 | 30 | npm-debug.log* 31 | yarn-debug.log* 32 | yarn-error.log* 33 | -------------------------------------------------------------------------------- /admin-panel/.prettierignore: -------------------------------------------------------------------------------- 1 | build/* 2 | dist/* 3 | public/* 4 | **/out/* 5 | **/.next/* 6 | **/node_modules/* 7 | 8 | package-lock.json 9 | yarn.lock 10 | -------------------------------------------------------------------------------- /admin-panel/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "singleQuote": true, 4 | "trailingComma": "es5", 5 | "tabWidth": 2 6 | } 7 | -------------------------------------------------------------------------------- /admin-panel/README.md: -------------------------------------------------------------------------------- 1 |

👨‍💼 QuickNotes Admin Panel 📊

2 | 3 |

4 | Admin panel for QuickNotes app. Monitor users and their notes. Please note that the admin panel is still under active development, and some features may not be completed yet. 5 |

6 | 7 | ## 🛠️ Features 8 | 9 | - 🔒 Authentication: Only admin has access to the dashboard. 10 | - 💻 Responsive and user-friendly UI. 11 | - 🕵️‍♂️ Monitoring: View users' information and their notes. 12 | 13 | 14 | ## 💻 Technologies Used 15 | 16 | - 🌐 JavaScript + React.js. 17 | - 🎨 MUI library for cool UI and ready components. 18 | - 📊 React-ApexCharts for charts and visualization. (Note: The data is currently mock data and will be replaced with actual data from the database in the future) 19 | 20 | 21 | ## ℹ️ How to Use 22 | 23 | 1. 📝 Set up your `.env` file with required configurations: 24 | ``` 25 | VITE_API_URL= 26 | ``` 27 | 28 | 2. 📦 Install dependencies by running: 29 | ``` 30 | yarn 31 | ``` 32 | 33 | 3. 🏃‍♂️ Run the admin panel in development mode by executing: 34 | ``` 35 | yarn run dev 36 | ``` 37 | 38 | 4. 🌐 Access the admin panel in your browser at the provided URL. 39 | 40 | > Thank you for showing interest in this project. Happy coding! 🎉 41 | -------------------------------------------------------------------------------- /admin-panel/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | QuickNotes Admin Panel 16 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /admin-panel/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "." 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /admin-panel/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@minimal/material-kit-react", 3 | "author": "minimals.cc", 4 | "licence": "MIT", 5 | "version": "1.8.0", 6 | "private": false, 7 | "scripts": { 8 | "dev": "vite", 9 | "start": "vite preview", 10 | "build": "vite build", 11 | "lint": "eslint \"src/**/*.{js,jsx,ts,tsx}\"", 12 | "lint:fix": "eslint --fix \"src/**/*.{js,jsx,ts,tsx}\"", 13 | "prettier": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", 14 | "rm:all": "rm -rf node_modules .next out dist build", 15 | "re:start": "yarn rm:all && yarn install && yarn dev", 16 | "re:build": "yarn rm:all && yarn install && yarn build", 17 | "re:build-npm": "npm run rm:all && npm install && npm run build", 18 | "dev:host": "vite --host", 19 | "vite:start": "vite", 20 | "vite:build": "vite build" 21 | }, 22 | "dependencies": { 23 | "@emotion/react": "^11.11.1", 24 | "@emotion/styled": "^11.11.0", 25 | "@faker-js/faker": "^8.1.0", 26 | "@iconify/react": "^4.1.1", 27 | "@mui/lab": "^5.0.0-alpha.147", 28 | "@mui/material": "^5.14.12", 29 | "apexcharts": "^3.43.0", 30 | "date-fns": "^2.30.0", 31 | "dotenv": "^16.4.5", 32 | "history": "^5.3.0", 33 | "lodash": "^4.17.21", 34 | "numeral": "^2.0.6", 35 | "prop-types": "^15.8.1", 36 | "react": "^18.2.0", 37 | "react-apexcharts": "^1.4.1", 38 | "react-dom": "^18.2.0", 39 | "react-helmet-async": "^1.3.0", 40 | "react-hook-form": "^7.47.0", 41 | "react-router-dom": "^6.16.0", 42 | "simplebar-react": "^3.2.4" 43 | }, 44 | "devDependencies": { 45 | "@vitejs/plugin-react-swc": "^3.4.0", 46 | "eslint": "^8.51.0", 47 | "eslint-config-airbnb": "^19.0.4", 48 | "eslint-config-prettier": "^9.0.0", 49 | "eslint-import-resolver-alias": "^1.1.2", 50 | "eslint-plugin-import": "^2.28.1", 51 | "eslint-plugin-jsx-a11y": "^6.7.1", 52 | "eslint-plugin-perfectionist": "^2.1.0", 53 | "eslint-plugin-prettier": "^5.0.0", 54 | "eslint-plugin-react": "^7.33.2", 55 | "eslint-plugin-react-hooks": "^4.6.0", 56 | "eslint-plugin-unused-imports": "^3.0.0", 57 | "prettier": "^3.0.3", 58 | "vite": "^4.4.11", 59 | "vite-plugin-checker": "^0.6.2" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /admin-panel/public/_redirects: -------------------------------------------------------------------------------- 1 | /* /index.html 200 -------------------------------------------------------------------------------- /admin-panel/public/assets/background/overlay_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/background/overlay_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/background/overlay_2.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/background/overlay_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/background/overlay_3.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/background/overlay_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/background/overlay_4.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/glass/ic_glass_bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/icons/glass/ic_glass_bag.png -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/glass/ic_glass_buy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/icons/glass/ic_glass_buy.png -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/glass/ic_glass_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/icons/glass/ic_glass_message.png -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/glass/ic_glass_users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/icons/glass/ic_glass_users.png -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/ic_flag_de.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/ic_flag_en.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/ic_flag_fr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/ic_notification_chat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/ic_notification_mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/ic_notification_package.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/ic_notification_shipping.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/navbar/ic_analytics.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/navbar/ic_blog.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/navbar/ic_cart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/navbar/ic_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/navbar/ic_lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/navbar/ic_user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /admin-panel/public/assets/icons/shape-avatar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/illustrations/illustration_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/illustrations/illustration_avatar.png -------------------------------------------------------------------------------- /admin-panel/public/assets/illustrations/illustration_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/illustrations/illustration_login.png -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_1.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_10.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_11.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_12.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_13.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_14.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_15.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_16.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_17.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_18.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_19.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_2.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_20.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_21.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_22.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_23.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_24.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_25.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_3.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_4.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_5.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_6.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_7.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_8.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/avatars/avatar_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/avatars/avatar_9.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_1.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_10.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_11.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_12.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_13.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_14.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_15.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_16.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_17.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_18.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_19.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_2.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_20.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_21.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_22.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_23.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_24.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_3.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_4.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_5.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_6.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_7.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_8.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/covers/cover_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/covers/cover_9.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_1.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_10.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_11.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_12.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_13.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_14.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_15.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_16.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_17.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_18.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_19.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_2.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_20.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_21.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_22.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_23.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_24.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_3.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_4.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_5.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_6.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_7.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_8.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/images/products/product_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/images/products/product_9.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/placeholder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin-panel/public/assets/preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/preview.jpg -------------------------------------------------------------------------------- /admin-panel/public/assets/transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mutasim77/quick-notes/5224ebc81d3a6902c30d724a43a6a854874d0f2e/admin-panel/public/assets/transparent.png -------------------------------------------------------------------------------- /admin-panel/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Minimal App", 3 | "name": "QuickNotes Admin Panel", 4 | "icons": [ 5 | { 6 | "src": "favicon/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "favicon/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "start_url": ".", 17 | "display": "standalone", 18 | "theme_color": "#000000", 19 | "background_color": "#ffffff" 20 | } -------------------------------------------------------------------------------- /admin-panel/src/_mock/account.js: -------------------------------------------------------------------------------- 1 | // ---------------------------------------------------------------------- 2 | 3 | export const account = { 4 | displayName: 'Mutasim', 5 | email: 'mutasmi@gmail.com', 6 | photoURL: '/assets/images/avatars/avatar_15.jpg', 7 | }; 8 | -------------------------------------------------------------------------------- /admin-panel/src/_mock/blog.js: -------------------------------------------------------------------------------- 1 | import { faker } from '@faker-js/faker'; 2 | 3 | // ---------------------------------------------------------------------- 4 | 5 | const POST_TITLES = [ 6 | 'Whiteboard Templates By Industry Leaders', 7 | 'Tesla Cybertruck-inspired camper trailer for Tesla fans who can’t just wait for the truck!', 8 | 'Designify Agency Landing Page Design', 9 | '✨What is Done is Done ✨', 10 | 'Fresh Prince', 11 | 'Six Socks Studio', 12 | 'vincenzo de cotiis’ crossing over showcases a research on contamination', 13 | 'Simple, Great Looking Animations in Your Project | Video Tutorial', 14 | '40 Free Serif Fonts for Digital Designers', 15 | 'Examining the Evolution of the Typical Web Design Client', 16 | 'Katie Griffin loves making that homey art', 17 | 'The American Dream retold through mid-century railroad graphics', 18 | 'Illustration System Design', 19 | 'CarZio-Delivery Driver App SignIn/SignUp', 20 | 'How to create a client-serverless Jamstack app using Netlify, Gatsby and Fauna', 21 | 'Tylko Organise effortlessly -3D & Motion Design', 22 | 'RAYO ?? A expanded visual arts festival identity', 23 | 'Anthony Burrill and Wired mag’s Andrew Diprose discuss how they made January’s Change Everything cover', 24 | 'Inside the Mind of Samuel Day', 25 | 'Portfolio Review: Is This Portfolio Too Creative?', 26 | 'Akkers van Margraten', 27 | 'Gradient Ticket icon', 28 | 'Here’s a Dyson motorcycle concept that doesn’t ‘suck’!', 29 | 'How to Animate a SVG with border-image', 30 | ]; 31 | 32 | export const posts = [...Array(23)].map((_, index) => ({ 33 | id: faker.string.uuid(), 34 | cover: `/assets/images/covers/cover_${index + 1}.jpg`, 35 | title: POST_TITLES[index + 1], 36 | createdAt: faker.date.past(), 37 | view: faker.number.int(99999), 38 | comment: faker.number.int(99999), 39 | share: faker.number.int(99999), 40 | favorite: faker.number.int(99999), 41 | author: { 42 | name: faker.person.fullName(), 43 | avatarUrl: `/assets/images/avatars/avatar_${index + 1}.jpg`, 44 | }, 45 | })); 46 | -------------------------------------------------------------------------------- /admin-panel/src/_mock/products.js: -------------------------------------------------------------------------------- 1 | import { sample } from 'lodash'; 2 | import { faker } from '@faker-js/faker'; 3 | 4 | // ---------------------------------------------------------------------- 5 | 6 | const PRODUCT_NAME = [ 7 | 'Nike Air Force 1 NDESTRUKT', 8 | 'Nike Space Hippie 04', 9 | 'Nike Air Zoom Pegasus 37 A.I.R. Chaz Bear', 10 | 'Nike Blazer Low 77 Vintage', 11 | 'Nike ZoomX SuperRep Surge', 12 | 'Zoom Freak 2', 13 | 'Nike Air Max Zephyr', 14 | 'Jordan Delta', 15 | 'Air Jordan XXXV PF', 16 | 'Nike Waffle Racer Crater', 17 | 'Kyrie 7 EP Sisterhood', 18 | 'Nike Air Zoom BB NXT', 19 | 'Nike Air Force 1 07 LX', 20 | 'Nike Air Force 1 Shadow SE', 21 | 'Nike Air Zoom Tempo NEXT%', 22 | 'Nike DBreak-Type', 23 | 'Nike Air Max Up', 24 | 'Nike Air Max 270 React ENG', 25 | 'NikeCourt Royale', 26 | 'Nike Air Zoom Pegasus 37 Premium', 27 | 'Nike Air Zoom SuperRep', 28 | 'NikeCourt Royale', 29 | 'Nike React Art3mis', 30 | 'Nike React Infinity Run Flyknit A.I.R. Chaz Bear', 31 | ]; 32 | const PRODUCT_COLOR = [ 33 | '#00AB55', 34 | '#000000', 35 | '#FFFFFF', 36 | '#FFC0CB', 37 | '#FF4842', 38 | '#1890FF', 39 | '#94D82D', 40 | '#FFC107', 41 | ]; 42 | 43 | // ---------------------------------------------------------------------- 44 | 45 | export const products = [...Array(24)].map((_, index) => { 46 | const setIndex = index + 1; 47 | 48 | return { 49 | id: faker.string.uuid(), 50 | cover: `/assets/images/products/product_${setIndex}.jpg`, 51 | name: PRODUCT_NAME[index], 52 | price: faker.number.int({ min: 4, max: 99, precision: 0.01 }), 53 | priceSale: setIndex % 3 ? null : faker.number.int({ min: 19, max: 29, precision: 0.01 }), 54 | colors: 55 | (setIndex === 1 && PRODUCT_COLOR.slice(0, 2)) || 56 | (setIndex === 2 && PRODUCT_COLOR.slice(1, 3)) || 57 | (setIndex === 3 && PRODUCT_COLOR.slice(2, 4)) || 58 | (setIndex === 4 && PRODUCT_COLOR.slice(3, 6)) || 59 | (setIndex === 23 && PRODUCT_COLOR.slice(4, 6)) || 60 | (setIndex === 24 && PRODUCT_COLOR.slice(5, 6)) || 61 | PRODUCT_COLOR, 62 | status: sample(['sale', 'new', '', '']), 63 | }; 64 | }); 65 | -------------------------------------------------------------------------------- /admin-panel/src/_mock/user.js: -------------------------------------------------------------------------------- 1 | import { sample } from 'lodash'; 2 | import { faker } from '@faker-js/faker'; 3 | 4 | // ---------------------------------------------------------------------- 5 | 6 | export const users = [...Array(24)].map((_, index) => ({ 7 | id: faker.string.uuid(), 8 | avatarUrl: `/assets/images/avatars/avatar_${index + 1}.jpg`, 9 | name: faker.person.fullName(), 10 | company: faker.company.name(), 11 | isVerified: faker.datatype.boolean(), 12 | status: sample(['active', 'banned']), 13 | role: sample([ 14 | 'Leader', 15 | 'Hr Manager', 16 | 'UI Designer', 17 | 'UX Designer', 18 | 'UI/UX Designer', 19 | 'Project Manager', 20 | 'Backend Developer', 21 | 'Full Stack Designer', 22 | 'Front End Developer', 23 | 'Full Stack Developer', 24 | ]), 25 | })); 26 | -------------------------------------------------------------------------------- /admin-panel/src/app.jsx: -------------------------------------------------------------------------------- 1 | import 'src/global.css'; 2 | 3 | import { useScrollToTop } from 'src/hooks/use-scroll-to-top'; 4 | 5 | import Router from 'src/routes/sections'; 6 | import ThemeProvider from 'src/theme'; 7 | import AuthProvider from './providers/AuthProvider'; 8 | 9 | export default function App() { 10 | useScrollToTop(); 11 | return ( 12 | 13 | 14 | 15 | 16 | 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /admin-panel/src/components/chart/chart.js: -------------------------------------------------------------------------------- 1 | import { memo } from 'react'; 2 | import ApexChart from 'react-apexcharts'; 3 | 4 | import { alpha, styled } from '@mui/material/styles'; 5 | 6 | import { bgBlur } from 'src/theme/css'; 7 | 8 | // ---------------------------------------------------------------------- 9 | 10 | const Chart = styled(ApexChart)(({ theme }) => ({ 11 | '& .apexcharts-canvas': { 12 | // Tooltip 13 | '& .apexcharts-tooltip': { 14 | ...bgBlur({ 15 | color: theme.palette.background.default, 16 | }), 17 | color: theme.palette.text.primary, 18 | boxShadow: theme.customShadows.dropdown, 19 | borderRadius: theme.shape.borderRadius * 1.25, 20 | '&.apexcharts-theme-light': { 21 | borderColor: 'transparent', 22 | ...bgBlur({ 23 | color: theme.palette.background.default, 24 | }), 25 | }, 26 | }, 27 | '& .apexcharts-xaxistooltip': { 28 | ...bgBlur({ 29 | color: theme.palette.background.default, 30 | }), 31 | borderColor: 'transparent', 32 | color: theme.palette.text.primary, 33 | boxShadow: theme.customShadows.dropdown, 34 | borderRadius: theme.shape.borderRadius * 1.25, 35 | '&:before': { 36 | borderBottomColor: alpha(theme.palette.grey[500], 0.24), 37 | }, 38 | '&:after': { 39 | borderBottomColor: alpha(theme.palette.background.default, 0.8), 40 | }, 41 | }, 42 | '& .apexcharts-tooltip-title': { 43 | textAlign: 'center', 44 | fontWeight: theme.typography.fontWeightBold, 45 | backgroundColor: alpha(theme.palette.grey[500], 0.08), 46 | color: theme.palette.text[theme.palette.mode === 'light' ? 'secondary' : 'primary'], 47 | }, 48 | 49 | // LEGEND 50 | '& .apexcharts-legend': { 51 | padding: 0, 52 | }, 53 | '& .apexcharts-legend-series': { 54 | display: 'inline-flex !important', 55 | alignItems: 'center', 56 | }, 57 | '& .apexcharts-legend-marker': { 58 | marginRight: 8, 59 | }, 60 | '& .apexcharts-legend-text': { 61 | lineHeight: '18px', 62 | textTransform: 'capitalize', 63 | }, 64 | }, 65 | })); 66 | 67 | export default memo(Chart); 68 | -------------------------------------------------------------------------------- /admin-panel/src/components/chart/index.js: -------------------------------------------------------------------------------- 1 | // ---------------------------------------------------------------------- 2 | 3 | export { default } from './chart'; 4 | 5 | export { default as useChart } from './use-chart'; 6 | -------------------------------------------------------------------------------- /admin-panel/src/components/color-utils/color-preview.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | 3 | import Box from '@mui/material/Box'; 4 | import Stack from '@mui/material/Stack'; 5 | import { alpha } from '@mui/material/styles'; 6 | 7 | // ---------------------------------------------------------------------- 8 | 9 | export default function ColorPreview({ colors, limit = 3, sx }) { 10 | const renderColors = colors.slice(0, limit); 11 | 12 | const remainingColor = colors.length - limit; 13 | 14 | return ( 15 | 16 | {renderColors.map((color, index) => ( 17 | `solid 2px ${theme.palette.background.paper}`, 26 | boxShadow: (theme) => `inset -1px 1px 2px ${alpha(theme.palette.common.black, 0.24)}`, 27 | }} 28 | /> 29 | ))} 30 | 31 | {colors.length > limit && ( 32 | {`+${remainingColor}`} 33 | )} 34 | 35 | ); 36 | } 37 | 38 | ColorPreview.propTypes = { 39 | colors: PropTypes.arrayOf(PropTypes.string), 40 | limit: PropTypes.number, 41 | sx: PropTypes.object, 42 | }; 43 | -------------------------------------------------------------------------------- /admin-panel/src/components/color-utils/index.js: -------------------------------------------------------------------------------- 1 | export { default as ColorPicker } from './color-picker'; 2 | export { default as ColorPreview } from './color-preview'; 3 | -------------------------------------------------------------------------------- /admin-panel/src/components/iconify/iconify.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import { forwardRef } from 'react'; 3 | import { Icon } from '@iconify/react'; 4 | 5 | import Box from '@mui/material/Box'; 6 | 7 | // ---------------------------------------------------------------------- 8 | 9 | const Iconify = forwardRef(({ icon, width = 20, sx, ...other }, ref) => ( 10 | 18 | )); 19 | 20 | Iconify.propTypes = { 21 | icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]), 22 | sx: PropTypes.object, 23 | width: PropTypes.number, 24 | }; 25 | 26 | export default Iconify; 27 | -------------------------------------------------------------------------------- /admin-panel/src/components/iconify/index.js: -------------------------------------------------------------------------------- 1 | export { default } from './iconify'; 2 | -------------------------------------------------------------------------------- /admin-panel/src/components/label/index.js: -------------------------------------------------------------------------------- 1 | export { default } from './label'; 2 | -------------------------------------------------------------------------------- /admin-panel/src/components/label/label.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import { forwardRef } from 'react'; 3 | 4 | import Box from '@mui/material/Box'; 5 | import { useTheme } from '@mui/material/styles'; 6 | 7 | import { StyledLabel } from './styles'; 8 | 9 | // ---------------------------------------------------------------------- 10 | 11 | const Label = forwardRef( 12 | ({ children, color = 'default', variant = 'soft', startIcon, endIcon, sx, ...other }, ref) => { 13 | const theme = useTheme(); 14 | 15 | const iconStyles = { 16 | width: 16, 17 | height: 16, 18 | '& svg, img': { width: 1, height: 1, objectFit: 'cover' }, 19 | }; 20 | 21 | return ( 22 | 34 | {startIcon && {startIcon} } 35 | 36 | {children} 37 | 38 | {endIcon && {endIcon} } 39 | 40 | ); 41 | } 42 | ); 43 | 44 | Label.propTypes = { 45 | children: PropTypes.node, 46 | endIcon: PropTypes.object, 47 | startIcon: PropTypes.object, 48 | sx: PropTypes.object, 49 | variant: PropTypes.oneOf(['filled', 'outlined', 'ghost', 'soft']), 50 | color: PropTypes.oneOf([ 51 | 'default', 52 | 'primary', 53 | 'secondary', 54 | 'info', 55 | 'success', 56 | 'warning', 57 | 'error', 58 | ]), 59 | }; 60 | 61 | export default Label; 62 | -------------------------------------------------------------------------------- /admin-panel/src/components/label/styles.js: -------------------------------------------------------------------------------- 1 | import Box from '@mui/material/Box'; 2 | import { alpha, styled } from '@mui/material/styles'; 3 | 4 | // ---------------------------------------------------------------------- 5 | 6 | export const StyledLabel = styled(Box)(({ theme, ownerState }) => { 7 | const lightMode = theme.palette.mode === 'light'; 8 | 9 | const filledVariant = ownerState.variant === 'filled'; 10 | 11 | const outlinedVariant = ownerState.variant === 'outlined'; 12 | 13 | const softVariant = ownerState.variant === 'soft'; 14 | 15 | const defaultStyle = { 16 | ...(ownerState.color === 'default' && { 17 | // FILLED 18 | ...(filledVariant && { 19 | color: lightMode ? theme.palette.common.white : theme.palette.grey[800], 20 | backgroundColor: theme.palette.text.primary, 21 | }), 22 | // OUTLINED 23 | ...(outlinedVariant && { 24 | backgroundColor: 'transparent', 25 | color: theme.palette.text.primary, 26 | border: `2px solid ${theme.palette.text.primary}`, 27 | }), 28 | // SOFT 29 | ...(softVariant && { 30 | color: theme.palette.text.secondary, 31 | backgroundColor: alpha(theme.palette.grey[500], 0.16), 32 | }), 33 | }), 34 | }; 35 | 36 | const colorStyle = { 37 | ...(ownerState.color !== 'default' && { 38 | // FILLED 39 | ...(filledVariant && { 40 | color: theme.palette[ownerState.color].contrastText, 41 | backgroundColor: theme.palette[ownerState.color].main, 42 | }), 43 | // OUTLINED 44 | ...(outlinedVariant && { 45 | backgroundColor: 'transparent', 46 | color: theme.palette[ownerState.color].main, 47 | border: `2px solid ${theme.palette[ownerState.color].main}`, 48 | }), 49 | // SOFT 50 | ...(softVariant && { 51 | color: theme.palette[ownerState.color][lightMode ? 'dark' : 'light'], 52 | backgroundColor: alpha(theme.palette[ownerState.color].main, 0.16), 53 | }), 54 | }), 55 | }; 56 | 57 | return { 58 | height: 24, 59 | minWidth: 24, 60 | lineHeight: 0, 61 | borderRadius: 6, 62 | cursor: 'default', 63 | alignItems: 'center', 64 | whiteSpace: 'nowrap', 65 | display: 'inline-flex', 66 | justifyContent: 'center', 67 | textTransform: 'capitalize', 68 | padding: theme.spacing(0, 0.75), 69 | fontSize: theme.typography.pxToRem(12), 70 | fontWeight: theme.typography.fontWeightBold, 71 | transition: theme.transitions.create('all', { 72 | duration: theme.transitions.duration.shorter, 73 | }), 74 | ...defaultStyle, 75 | ...colorStyle, 76 | }; 77 | }); 78 | -------------------------------------------------------------------------------- /admin-panel/src/components/logo/index.js: -------------------------------------------------------------------------------- 1 | export { default } from './logo'; 2 | -------------------------------------------------------------------------------- /admin-panel/src/components/scrollbar/index.js: -------------------------------------------------------------------------------- 1 | export { default } from './scrollbar'; 2 | -------------------------------------------------------------------------------- /admin-panel/src/components/scrollbar/scrollbar.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import { memo, forwardRef } from 'react'; 3 | 4 | import Box from '@mui/material/Box'; 5 | 6 | import { StyledScrollbar, StyledRootScrollbar } from './styles'; 7 | 8 | // ---------------------------------------------------------------------- 9 | 10 | const Scrollbar = forwardRef(({ children, sx, ...other }, ref) => { 11 | const userAgent = typeof navigator === 'undefined' ? 'SSR' : navigator.userAgent; 12 | 13 | const mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent); 14 | 15 | if (mobile) { 16 | return ( 17 | 18 | {children} 19 | 20 | ); 21 | } 22 | 23 | return ( 24 | 25 | 33 | {children} 34 | 35 | 36 | ); 37 | }); 38 | 39 | Scrollbar.propTypes = { 40 | children: PropTypes.node, 41 | sx: PropTypes.object, 42 | }; 43 | 44 | export default memo(Scrollbar); 45 | -------------------------------------------------------------------------------- /admin-panel/src/components/scrollbar/styles.js: -------------------------------------------------------------------------------- 1 | import SimpleBar from 'simplebar-react'; 2 | 3 | import { alpha, styled } from '@mui/material/styles'; 4 | 5 | // ---------------------------------------------------------------------- 6 | 7 | export const StyledRootScrollbar = styled('div')(() => ({ 8 | flexGrow: 1, 9 | height: '100%', 10 | overflow: 'hidden', 11 | })); 12 | 13 | export const StyledScrollbar = styled(SimpleBar)(({ theme }) => ({ 14 | maxHeight: '100%', 15 | '& .simplebar-scrollbar': { 16 | '&:before': { 17 | backgroundColor: alpha(theme.palette.grey[600], 0.48), 18 | }, 19 | '&.simplebar-visible:before': { 20 | opacity: 1, 21 | }, 22 | }, 23 | '& .simplebar-mask': { 24 | zIndex: 'inherit', 25 | }, 26 | })); 27 | -------------------------------------------------------------------------------- /admin-panel/src/components/svg-color/index.js: -------------------------------------------------------------------------------- 1 | export { default } from './svg-color'; 2 | -------------------------------------------------------------------------------- /admin-panel/src/components/svg-color/svg-color.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import { forwardRef } from 'react'; 3 | 4 | import Box from '@mui/material/Box'; 5 | 6 | // ---------------------------------------------------------------------- 7 | 8 | const SvgColor = forwardRef(({ src, sx, ...other }, ref) => ( 9 | 24 | )); 25 | 26 | SvgColor.propTypes = { 27 | src: PropTypes.string, 28 | sx: PropTypes.object, 29 | }; 30 | 31 | export default SvgColor; 32 | -------------------------------------------------------------------------------- /admin-panel/src/global.css: -------------------------------------------------------------------------------- 1 | /* scrollbar */ 2 | @import 'simplebar-react/dist/simplebar.min.css'; 3 | -------------------------------------------------------------------------------- /admin-panel/src/hooks/use-responsive.js: -------------------------------------------------------------------------------- 1 | import { useTheme } from '@mui/material/styles'; 2 | import useMediaQuery from '@mui/material/useMediaQuery'; 3 | 4 | // ---------------------------------------------------------------------- 5 | 6 | export function useResponsive(query, start, end) { 7 | const theme = useTheme(); 8 | 9 | const mediaUp = useMediaQuery(theme.breakpoints.up(start)); 10 | 11 | const mediaDown = useMediaQuery(theme.breakpoints.down(start)); 12 | 13 | const mediaBetween = useMediaQuery(theme.breakpoints.between(start, end)); 14 | 15 | const mediaOnly = useMediaQuery(theme.breakpoints.only(start)); 16 | 17 | if (query === 'up') { 18 | return mediaUp; 19 | } 20 | 21 | if (query === 'down') { 22 | return mediaDown; 23 | } 24 | 25 | if (query === 'between') { 26 | return mediaBetween; 27 | } 28 | 29 | return mediaOnly; 30 | } 31 | 32 | // ---------------------------------------------------------------------- 33 | 34 | export function useWidth() { 35 | const theme = useTheme(); 36 | 37 | const keys = [...theme.breakpoints.keys].reverse(); 38 | 39 | return ( 40 | keys.reduce((output, key) => { 41 | const matches = useMediaQuery(theme.breakpoints.up(key)); 42 | 43 | return !output && matches ? key : output; 44 | }, null) || 'xs' 45 | ); 46 | } 47 | -------------------------------------------------------------------------------- /admin-panel/src/hooks/use-scroll-to-top.js: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | import { useLocation } from 'react-router-dom'; 3 | 4 | // ---------------------------------------------------------------------- 5 | 6 | export function useScrollToTop() { 7 | const { pathname } = useLocation(); 8 | 9 | useEffect(() => { 10 | window.scrollTo(0, 0); 11 | }, [pathname]); 12 | 13 | return null; 14 | } 15 | -------------------------------------------------------------------------------- /admin-panel/src/layouts/dashboard/common/account-popover.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import Box from '@mui/material/Box'; 4 | import Avatar from '@mui/material/Avatar'; 5 | import Divider from '@mui/material/Divider'; 6 | import Popover from '@mui/material/Popover'; 7 | import { alpha } from '@mui/material/styles'; 8 | import MenuItem from '@mui/material/MenuItem'; 9 | import Typography from '@mui/material/Typography'; 10 | import IconButton from '@mui/material/IconButton'; 11 | 12 | import { account } from 'src/_mock/account'; 13 | 14 | // ---------------------------------------------------------------------- 15 | 16 | const MENU_OPTIONS = [ 17 | { 18 | label: 'Home', 19 | icon: 'eva:home-fill', 20 | }, 21 | { 22 | label: 'Profile', 23 | icon: 'eva:person-fill', 24 | }, 25 | { 26 | label: 'Settings', 27 | icon: 'eva:settings-2-fill', 28 | }, 29 | ]; 30 | 31 | // ---------------------------------------------------------------------- 32 | 33 | export default function AccountPopover() { 34 | const [open, setOpen] = useState(null); 35 | 36 | const handleOpen = (event) => { 37 | setOpen(event.currentTarget); 38 | }; 39 | 40 | const handleClose = () => { 41 | setOpen(null); 42 | }; 43 | 44 | return ( 45 | <> 46 | alpha(theme.palette.grey[500], 0.08), 52 | ...(open && { 53 | background: (theme) => 54 | `linear-gradient(135deg, ${theme.palette.primary.light} 0%, ${theme.palette.primary.main} 100%)`, 55 | }), 56 | }} 57 | > 58 | `solid 2px ${theme.palette.background.default}`, 65 | }} 66 | > 67 | {account.displayName.charAt(0).toUpperCase()} 68 | 69 | 70 | 71 | 86 | 87 | 88 | {account.displayName} 89 | 90 | 91 | {account.email} 92 | 93 | 94 | 95 | 96 | 97 | {MENU_OPTIONS.map((option) => ( 98 | 99 | {option.label} 100 | 101 | ))} 102 | 103 | 104 | 105 | 111 | Logout 112 | 113 | 114 | 115 | ); 116 | } 117 | -------------------------------------------------------------------------------- /admin-panel/src/layouts/dashboard/common/language-popover.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import Box from '@mui/material/Box'; 4 | import Popover from '@mui/material/Popover'; 5 | import MenuItem from '@mui/material/MenuItem'; 6 | import IconButton from '@mui/material/IconButton'; 7 | 8 | // ---------------------------------------------------------------------- 9 | 10 | const LANGS = [ 11 | { 12 | value: 'en', 13 | label: 'English', 14 | icon: '/assets/icons/ic_flag_en.svg', 15 | }, 16 | { 17 | value: 'de', 18 | label: 'German', 19 | icon: '/assets/icons/ic_flag_de.svg', 20 | }, 21 | { 22 | value: 'fr', 23 | label: 'French', 24 | icon: '/assets/icons/ic_flag_fr.svg', 25 | }, 26 | ]; 27 | 28 | // ---------------------------------------------------------------------- 29 | 30 | export default function LanguagePopover() { 31 | const [open, setOpen] = useState(null); 32 | 33 | const handleOpen = (event) => { 34 | setOpen(event.currentTarget); 35 | }; 36 | 37 | const handleClose = () => { 38 | setOpen(null); 39 | }; 40 | 41 | return ( 42 | <> 43 | 53 | {LANGS[0].label} 54 | 55 | 56 | 71 | {LANGS.map((option) => ( 72 | handleClose()} 76 | sx={{ typography: 'body2', py: 1 }} 77 | > 78 | 79 | 80 | {option.label} 81 | 82 | ))} 83 | 84 | 85 | ); 86 | } 87 | -------------------------------------------------------------------------------- /admin-panel/src/layouts/dashboard/common/searchbar.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | import Slide from '@mui/material/Slide'; 4 | import Input from '@mui/material/Input'; 5 | import Button from '@mui/material/Button'; 6 | import { styled } from '@mui/material/styles'; 7 | import IconButton from '@mui/material/IconButton'; 8 | import InputAdornment from '@mui/material/InputAdornment'; 9 | import ClickAwayListener from '@mui/material/ClickAwayListener'; 10 | 11 | import { bgBlur } from 'src/theme/css'; 12 | 13 | import Iconify from 'src/components/iconify'; 14 | 15 | // ---------------------------------------------------------------------- 16 | 17 | const HEADER_MOBILE = 64; 18 | const HEADER_DESKTOP = 92; 19 | 20 | const StyledSearchbar = styled('div')(({ theme }) => ({ 21 | ...bgBlur({ 22 | color: theme.palette.background.default, 23 | }), 24 | top: 0, 25 | left: 0, 26 | zIndex: 99, 27 | width: '100%', 28 | display: 'flex', 29 | position: 'absolute', 30 | alignItems: 'center', 31 | height: HEADER_MOBILE, 32 | padding: theme.spacing(0, 3), 33 | boxShadow: theme.customShadows.z8, 34 | [theme.breakpoints.up('md')]: { 35 | height: HEADER_DESKTOP, 36 | padding: theme.spacing(0, 5), 37 | }, 38 | })); 39 | 40 | // ---------------------------------------------------------------------- 41 | 42 | export default function Searchbar() { 43 | const [open, setOpen] = useState(false); 44 | 45 | const handleOpen = () => { 46 | setOpen(!open); 47 | }; 48 | 49 | const handleClose = () => { 50 | setOpen(false); 51 | }; 52 | 53 | return ( 54 | 55 |
56 | {!open && ( 57 | 58 | 59 | 60 | )} 61 | 62 | 63 | 64 | 71 | 75 | 76 | } 77 | sx={{ mr: 1, fontWeight: 'fontWeightBold' }} 78 | /> 79 | 82 | 83 | 84 |
85 |
86 | ); 87 | } 88 | -------------------------------------------------------------------------------- /admin-panel/src/layouts/dashboard/config-layout.js: -------------------------------------------------------------------------------- 1 | // ---------------------------------------------------------------------- 2 | 3 | export const HEADER = { 4 | H_MOBILE: 64, 5 | H_DESKTOP: 80, 6 | H_DESKTOP_OFFSET: 80 - 16, 7 | }; 8 | 9 | export const NAV = { 10 | WIDTH: 280, 11 | }; 12 | -------------------------------------------------------------------------------- /admin-panel/src/layouts/dashboard/config-navigation.jsx: -------------------------------------------------------------------------------- 1 | import SvgColor from 'src/components/svg-color'; 2 | 3 | const icon = (name) => ( 4 | 5 | ); 6 | 7 | const navConfig = [ 8 | { 9 | title: 'dashboard', 10 | path: '/', 11 | icon: icon('ic_analytics'), 12 | }, 13 | { 14 | title: 'user', 15 | path: '/user', 16 | icon: icon('ic_user'), 17 | }, 18 | ]; 19 | 20 | export default navConfig; 21 | -------------------------------------------------------------------------------- /admin-panel/src/layouts/dashboard/header.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | 3 | import Box from '@mui/material/Box'; 4 | import Stack from '@mui/material/Stack'; 5 | import AppBar from '@mui/material/AppBar'; 6 | import Toolbar from '@mui/material/Toolbar'; 7 | import { useTheme } from '@mui/material/styles'; 8 | import IconButton from '@mui/material/IconButton'; 9 | 10 | import { useResponsive } from 'src/hooks/use-responsive'; 11 | 12 | import { bgBlur } from 'src/theme/css'; 13 | 14 | import Iconify from 'src/components/iconify'; 15 | 16 | import Searchbar from './common/searchbar'; 17 | import { NAV, HEADER } from './config-layout'; 18 | import AccountPopover from './common/account-popover'; 19 | import LanguagePopover from './common/language-popover'; 20 | import NotificationsPopover from './common/notifications-popover'; 21 | 22 | export default function Header({ onOpenNav }) { 23 | const theme = useTheme(); 24 | 25 | const lgUp = useResponsive('up', 'lg'); 26 | 27 | const renderContent = ( 28 | <> 29 | {!lgUp && ( 30 | 31 | 32 | 33 | )} 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | ); 46 | 47 | return ( 48 | 65 | 71 | {renderContent} 72 | 73 | 74 | ); 75 | } 76 | 77 | Header.propTypes = { 78 | onOpenNav: PropTypes.func, 79 | }; 80 | -------------------------------------------------------------------------------- /admin-panel/src/layouts/dashboard/index.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import PropTypes from 'prop-types'; 3 | 4 | import Box from '@mui/material/Box'; 5 | 6 | import Nav from './nav'; 7 | import Main from './main'; 8 | import Header from './header'; 9 | 10 | // ---------------------------------------------------------------------- 11 | 12 | export default function DashboardLayout({ children }) { 13 | const [openNav, setOpenNav] = useState(false); 14 | 15 | return ( 16 | <> 17 |
setOpenNav(true)} /> 18 | 19 | 26 |