├── .editorconfig
├── .env
├── .eslintignore
├── .eslintrc
├── .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
│ ├── cyan-blur.png
│ ├── icons
│ │ ├── app
│ │ │ ├── ic_chrome.svg
│ │ │ ├── ic_drive.svg
│ │ │ ├── ic_dropbox.svg
│ │ │ ├── ic_evernote.svg
│ │ │ ├── ic_github.svg
│ │ │ └── ic_onedrive.svg
│ │ ├── auth
│ │ │ ├── ic_amplify.svg
│ │ │ ├── ic_auth0.svg
│ │ │ ├── ic_firebase.svg
│ │ │ └── ic_jwt.svg
│ │ ├── brands
│ │ │ ├── ic_brand_amazon.svg
│ │ │ ├── ic_brand_hbo.svg
│ │ │ ├── ic_brand_ibm.svg
│ │ │ ├── ic_brand_lya.svg
│ │ │ ├── ic_brand_netflix.svg
│ │ │ └── ic_brand_spotify.svg
│ │ ├── components
│ │ │ ├── ic_accordion.svg
│ │ │ ├── ic_alert.svg
│ │ │ ├── ic_autocomplete.svg
│ │ │ ├── ic_avatar.svg
│ │ │ ├── ic_badge.svg
│ │ │ ├── ic_breadcrumbs.svg
│ │ │ ├── ic_buttons.svg
│ │ │ ├── ic_checkbox.svg
│ │ │ ├── ic_chip.svg
│ │ │ ├── ic_colors.svg
│ │ │ ├── ic_data_grid.svg
│ │ │ ├── ic_dialog.svg
│ │ │ ├── ic_extra_animate.svg
│ │ │ ├── ic_extra_carousel.svg
│ │ │ ├── ic_extra_chart.svg
│ │ │ ├── ic_extra_copy_to_clipboard.svg
│ │ │ ├── ic_extra_editor.svg
│ │ │ ├── ic_extra_form_validation.svg
│ │ │ ├── ic_extra_image.svg
│ │ │ ├── ic_extra_label.svg
│ │ │ ├── ic_extra_lightbox.svg
│ │ │ ├── ic_extra_map.svg
│ │ │ ├── ic_extra_markdown.svg
│ │ │ ├── ic_extra_mega_menu.svg
│ │ │ ├── ic_extra_multi_language.svg
│ │ │ ├── ic_extra_navigation_bar.svg
│ │ │ ├── ic_extra_organization_chart.svg
│ │ │ ├── ic_extra_scroll.svg
│ │ │ ├── ic_extra_scroll_progress.svg
│ │ │ ├── ic_extra_snackbar.svg
│ │ │ ├── ic_extra_text_max_line.svg
│ │ │ ├── ic_extra_upload.svg
│ │ │ ├── ic_grid.svg
│ │ │ ├── ic_icons.svg
│ │ │ ├── ic_list.svg
│ │ │ ├── ic_menu.svg
│ │ │ ├── ic_pagination.svg
│ │ │ ├── ic_pickers.svg
│ │ │ ├── ic_popover.svg
│ │ │ ├── ic_progress.svg
│ │ │ ├── ic_radio_button.svg
│ │ │ ├── ic_rating.svg
│ │ │ ├── ic_shadows.svg
│ │ │ ├── ic_slider.svg
│ │ │ ├── ic_stepper.svg
│ │ │ ├── ic_switch.svg
│ │ │ ├── ic_table.svg
│ │ │ ├── ic_tabs.svg
│ │ │ ├── ic_textfield.svg
│ │ │ ├── ic_timeline.svg
│ │ │ ├── ic_tooltip.svg
│ │ │ ├── ic_transfer_list.svg
│ │ │ ├── ic_tree_view.svg
│ │ │ └── ic_typography.svg
│ │ ├── empty
│ │ │ ├── ic_cart.svg
│ │ │ ├── ic_content.svg
│ │ │ ├── ic_email_disabled.svg
│ │ │ ├── ic_email_selected.svg
│ │ │ ├── ic_folder_empty.svg
│ │ │ └── ic_mail.svg
│ │ ├── faqs
│ │ │ ├── ic_account.svg
│ │ │ ├── ic_assurances.svg
│ │ │ ├── ic_delivery.svg
│ │ │ ├── ic_package.svg
│ │ │ ├── ic_payment.svg
│ │ │ └── ic_refund.svg
│ │ ├── files
│ │ │ ├── ic_ai.svg
│ │ │ ├── ic_audio.svg
│ │ │ ├── ic_document.svg
│ │ │ ├── ic_excel.svg
│ │ │ ├── ic_file.svg
│ │ │ ├── ic_folder.svg
│ │ │ ├── ic_img.svg
│ │ │ ├── ic_js.svg
│ │ │ ├── ic_pdf.svg
│ │ │ ├── ic_power_point.svg
│ │ │ ├── ic_pts.svg
│ │ │ ├── ic_txt.svg
│ │ │ ├── ic_video.svg
│ │ │ ├── ic_word.svg
│ │ │ └── ic_zip.svg
│ │ ├── glass
│ │ │ ├── ic_glass_bag.png
│ │ │ ├── ic_glass_buy.png
│ │ │ ├── ic_glass_message.png
│ │ │ └── ic_glass_users.png
│ │ ├── home
│ │ │ ├── ic_design.svg
│ │ │ ├── ic_development.svg
│ │ │ └── ic_make_brand.svg
│ │ ├── navbar
│ │ │ ├── ic_analytics.svg
│ │ │ ├── ic_banking.svg
│ │ │ ├── ic_blank.svg
│ │ │ ├── ic_blog.svg
│ │ │ ├── ic_booking.svg
│ │ │ ├── ic_calendar.svg
│ │ │ ├── ic_chat.svg
│ │ │ ├── ic_dashboard.svg
│ │ │ ├── ic_disabled.svg
│ │ │ ├── ic_ecommerce.svg
│ │ │ ├── ic_external.svg
│ │ │ ├── ic_file.svg
│ │ │ ├── ic_folder.svg
│ │ │ ├── ic_invoice.svg
│ │ │ ├── ic_job.svg
│ │ │ ├── ic_kanban.svg
│ │ │ ├── ic_label.svg
│ │ │ ├── ic_lock.svg
│ │ │ ├── ic_mail.svg
│ │ │ ├── ic_menu_item.svg
│ │ │ ├── ic_order.svg
│ │ │ ├── ic_product.svg
│ │ │ ├── ic_tour.svg
│ │ │ └── ic_user.svg
│ │ ├── notification
│ │ │ ├── ic_chat.svg
│ │ │ ├── ic_delivery.svg
│ │ │ ├── ic_mail.svg
│ │ │ └── ic_order.svg
│ │ ├── platforms
│ │ │ ├── ic_figma.svg
│ │ │ ├── ic_js.svg
│ │ │ ├── ic_nextjs.svg
│ │ │ ├── ic_ts.svg
│ │ │ └── ic_vite.svg
│ │ └── setting
│ │ │ ├── ic_align_left.svg
│ │ │ ├── ic_align_right.svg
│ │ │ ├── ic_collapse.svg
│ │ │ ├── ic_contrast.svg
│ │ │ ├── ic_contrast_bold.svg
│ │ │ ├── ic_exit_full_screen.svg
│ │ │ ├── ic_full_screen.svg
│ │ │ ├── ic_moon.svg
│ │ │ ├── ic_setting.svg
│ │ │ └── ic_sun.svg
│ ├── illustrations
│ │ ├── characters
│ │ │ ├── character_1.png
│ │ │ ├── character_10.png
│ │ │ ├── character_11.png
│ │ │ ├── character_2.png
│ │ │ ├── character_3.png
│ │ │ ├── character_4.png
│ │ │ ├── character_5.png
│ │ │ ├── character_6.png
│ │ │ ├── character_7.png
│ │ │ ├── character_8.png
│ │ │ └── character_9.png
│ │ └── illustration_dashboard.png
│ ├── images
│ │ ├── about
│ │ │ ├── hero.jpg
│ │ │ ├── testimonials.jpg
│ │ │ ├── vision.jpg
│ │ │ ├── what_1.png
│ │ │ └── what_2.png
│ │ ├── contact
│ │ │ └── hero.jpg
│ │ ├── faqs
│ │ │ └── hero.jpg
│ │ └── home
│ │ │ ├── clean
│ │ │ ├── page_1.webp
│ │ │ ├── page_10.webp
│ │ │ ├── page_2.webp
│ │ │ ├── page_3.webp
│ │ │ ├── page_4.webp
│ │ │ ├── page_5.webp
│ │ │ ├── page_6.webp
│ │ │ ├── page_7.webp
│ │ │ ├── page_8.webp
│ │ │ └── page_9.webp
│ │ │ ├── darkmode.webp
│ │ │ ├── for_designer.webp
│ │ │ ├── hero
│ │ │ ├── dark_1.webp
│ │ │ ├── dark_2.webp
│ │ │ ├── light_1.webp
│ │ │ └── light_2.webp
│ │ │ ├── presets
│ │ │ ├── block_blue.webp
│ │ │ ├── block_cyan.webp
│ │ │ ├── block_default.webp
│ │ │ ├── block_orange.webp
│ │ │ ├── block_purple.webp
│ │ │ ├── block_red.webp
│ │ │ ├── chart_blue.webp
│ │ │ ├── chart_cyan.webp
│ │ │ ├── chart_default.webp
│ │ │ ├── chart_orange.webp
│ │ │ ├── chart_purple.webp
│ │ │ ├── chart_red.webp
│ │ │ ├── grid.webp
│ │ │ ├── screen_blue.webp
│ │ │ ├── screen_cyan.webp
│ │ │ ├── screen_default.webp
│ │ │ ├── screen_orange.webp
│ │ │ ├── screen_purple.webp
│ │ │ ├── screen_red.webp
│ │ │ ├── sidebar_blue.webp
│ │ │ ├── sidebar_cyan.webp
│ │ │ ├── sidebar_default.webp
│ │ │ ├── sidebar_orange.webp
│ │ │ ├── sidebar_purple.webp
│ │ │ └── sidebar_red.webp
│ │ │ ├── rocket.webp
│ │ │ └── zone_landing.webp
│ ├── logo-mini.png
│ ├── logo.png
│ ├── logo_mini.png
│ ├── placeholder.svg
│ ├── red-blur.png
│ └── transparent.png
├── favicon
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ └── favicon.ico
├── fonts
│ ├── CircularStd-Bold.otf
│ ├── CircularStd-Book.otf
│ ├── CircularStd-Medium.otf
│ ├── Roboto-Bold.ttf
│ ├── Roboto-Regular.ttf
│ └── index.css
├── logo
│ ├── logo_full.svg
│ ├── logo_single.png
│ └── logo_single.svg
├── manifest.json
└── robots.txt
├── setup_proxy.js
├── src
├── _mock
│ ├── _blog.js
│ ├── _calendar.js
│ ├── _files.js
│ ├── _invoice.js
│ ├── _job.js
│ ├── _mock.js
│ ├── _order.js
│ ├── _others.js
│ ├── _overview.js
│ ├── _product.js
│ ├── _tour.js
│ ├── _user.js
│ ├── assets.js
│ ├── index.js
│ └── map
│ │ ├── cities.js
│ │ ├── countries.js
│ │ └── map-style-basic-v8.json
├── app.jsx
├── assets
│ ├── data
│ │ ├── countries.js
│ │ └── index.js
│ ├── icons
│ │ ├── email-inbox-icon.jsx
│ │ ├── index.js
│ │ ├── password-icon.jsx
│ │ ├── plan-free-icon.jsx
│ │ ├── plan-premium-icon.jsx
│ │ ├── plan-starter-icon.jsx
│ │ └── sent-icon.jsx
│ ├── illustrations
│ │ ├── avatar-shape.jsx
│ │ ├── background-shape.jsx
│ │ ├── booking-illustration.jsx
│ │ ├── check-in-illustration.jsx
│ │ ├── check-out-illustration.jsx
│ │ ├── coming-soon-illustration.jsx
│ │ ├── forbidden-illustration.jsx
│ │ ├── index.js
│ │ ├── maintenance-illustration.jsx
│ │ ├── motivation-illustration.jsx
│ │ ├── order-complete-illustration.jsx
│ │ ├── page-not-found-illustration.jsx
│ │ ├── seo-illustration.jsx
│ │ ├── sever-error-illustration.jsx
│ │ ├── upgrade-storage-illustration.jsx
│ │ └── upload-illustration.jsx
│ └── img
│ │ ├── logo.png
│ │ └── logo_mini.png
├── auth
│ ├── context
│ │ └── jwt
│ │ │ ├── auth-consumer.jsx
│ │ │ ├── auth-context.js
│ │ │ ├── auth-provider.jsx
│ │ │ ├── index.js
│ │ │ └── utils.js
│ ├── guard
│ │ ├── auth-guard.jsx
│ │ ├── guest-guard.jsx
│ │ ├── index.js
│ │ └── role-based-guard.jsx
│ └── hooks
│ │ ├── index.js
│ │ └── use-auth-context.js
├── components
│ ├── animate
│ │ ├── index.js
│ │ ├── motion-container.jsx
│ │ ├── motion-lazy.jsx
│ │ ├── motion-viewport.jsx
│ │ └── variants
│ │ │ ├── actions.js
│ │ │ ├── background.js
│ │ │ ├── bounce.js
│ │ │ ├── container.js
│ │ │ ├── fade.js
│ │ │ ├── flip.js
│ │ │ ├── index.js
│ │ │ ├── path.js
│ │ │ ├── rotate.js
│ │ │ ├── scale.js
│ │ │ ├── slide.js
│ │ │ ├── transition.js
│ │ │ └── zoom.js
│ ├── chart
│ │ ├── index.js
│ │ └── use-chart.js
│ ├── component-block.jsx
│ ├── custom-popover
│ │ ├── custom-popover.jsx
│ │ ├── index.js
│ │ ├── styles.js
│ │ ├── use-popover.js
│ │ └── utils.js
│ ├── empty-content
│ │ ├── empty-content.jsx
│ │ └── index.js
│ ├── file-thumbnail
│ │ ├── download-button.jsx
│ │ ├── file-thumbnail.jsx
│ │ ├── index.js
│ │ └── utils.js
│ ├── hook-form
│ │ ├── form-provider.jsx
│ │ ├── index.js
│ │ ├── rhf-select.jsx
│ │ └── rhf-text-field.jsx
│ ├── iconify
│ │ ├── iconify.jsx
│ │ └── index.js
│ ├── label
│ │ ├── index.js
│ │ ├── label.jsx
│ │ └── styles.js
│ ├── loading-screen
│ │ ├── index.js
│ │ ├── loading-screen.jsx
│ │ └── splash-screen.jsx
│ ├── logo
│ │ ├── index.js
│ │ └── logo.jsx
│ ├── nav-section
│ │ ├── horizontal
│ │ │ ├── index.js
│ │ │ ├── nav-item.jsx
│ │ │ ├── nav-list.jsx
│ │ │ └── nav-section-horizontal.jsx
│ │ ├── index.js
│ │ ├── mini
│ │ │ ├── index.js
│ │ │ ├── nav-item.jsx
│ │ │ ├── nav-list.jsx
│ │ │ └── nav-section-mini.jsx
│ │ └── vertical
│ │ │ ├── index.js
│ │ │ ├── nav-item.jsx
│ │ │ ├── nav-list.jsx
│ │ │ └── nav-section-vertical.jsx
│ ├── progress-bar
│ │ ├── index.js
│ │ ├── progress-bar.jsx
│ │ └── styles.jsx
│ ├── scrollbar
│ │ ├── index.js
│ │ ├── scrollbar.jsx
│ │ └── styles.js
│ ├── search-not-found
│ │ ├── index.js
│ │ └── search-not-found.jsx
│ ├── settings
│ │ ├── context
│ │ │ ├── index.js
│ │ │ ├── settings-context.js
│ │ │ └── settings-provider.jsx
│ │ ├── drawer
│ │ │ ├── base-option.jsx
│ │ │ ├── fullscreen-option.jsx
│ │ │ ├── index.js
│ │ │ ├── layout-options.jsx
│ │ │ ├── presets-options.jsx
│ │ │ ├── settings-drawer.jsx
│ │ │ └── stretch-options.jsx
│ │ └── index.js
│ ├── snackbar
│ │ ├── index.js
│ │ ├── snackbar-provider.jsx
│ │ └── styles.js
│ ├── svg-color
│ │ ├── index.js
│ │ └── svg-color.jsx
│ └── table
│ │ ├── index.js
│ │ ├── table-empty-rows.jsx
│ │ ├── table-head-custom.jsx
│ │ ├── table-no-data.jsx
│ │ ├── table-pagination-custom.jsx
│ │ ├── table-selected-action.jsx
│ │ ├── table-skeleton.jsx
│ │ ├── use-table.js
│ │ └── utils.js
├── config-global.js
├── global.css
├── hooks
│ ├── use-boolean.js
│ ├── use-event-listener.js
│ ├── use-local-storage.js
│ ├── use-mocked-user.js
│ ├── use-off-set-top.js
│ ├── use-responsive.js
│ └── use-scroll-to-top.js
├── layouts
│ ├── auth
│ │ └── classic.jsx
│ ├── common
│ │ ├── account-popover.jsx
│ │ ├── contacts-popover.jsx
│ │ ├── header-shadow.jsx
│ │ ├── header-simple.jsx
│ │ ├── language-popover.jsx
│ │ ├── nav-toggle-button.jsx
│ │ ├── nav-upgrade.jsx
│ │ ├── notifications-popover
│ │ │ ├── index.jsx
│ │ │ └── notification-item.jsx
│ │ ├── searchbar
│ │ │ ├── index.jsx
│ │ │ ├── result-item.jsx
│ │ │ └── utils.js
│ │ └── settings-button.jsx
│ ├── compact
│ │ └── index.jsx
│ ├── config-layout.js
│ └── dashboard
│ │ ├── config-navigation.jsx
│ │ ├── header.jsx
│ │ ├── index.jsx
│ │ ├── main.jsx
│ │ ├── nav-horizontal.jsx
│ │ ├── nav-mini.jsx
│ │ └── nav-vertical.jsx
├── main.jsx
├── pages
│ ├── 404.jsx
│ ├── auth
│ │ └── jwt
│ │ │ ├── login.jsx
│ │ │ └── register.jsx
│ └── dashboard
│ │ ├── Address.jsx
│ │ ├── CashOut.jsx
│ │ ├── Dashboard.jsx
│ │ ├── Profile.jsx
│ │ ├── Transaction.jsx
│ │ ├── User.jsx
│ │ ├── Withdraw.jsx
│ │ └── six.jsx
├── routes
│ ├── components
│ │ ├── index.js
│ │ └── router-link.jsx
│ ├── hooks
│ │ ├── index.js
│ │ ├── use-active-link.js
│ │ ├── use-params.js
│ │ ├── use-pathname.js
│ │ ├── use-router.js
│ │ └── use-search-params.js
│ ├── paths.js
│ └── sections
│ │ ├── auth.jsx
│ │ ├── dashboard.jsx
│ │ ├── index.jsx
│ │ └── main.jsx
├── sections
│ ├── address
│ │ ├── Table.jsx
│ │ └── view.jsx
│ ├── auth
│ │ └── jwt
│ │ │ ├── index.js
│ │ │ ├── jwt-login-view.jsx
│ │ │ └── jwt-register-view.jsx
│ ├── cashout
│ │ ├── Table.jsx
│ │ └── view.jsx
│ ├── dashboard
│ │ ├── app-welcome.jsx
│ │ ├── app-widget-summary.jsx
│ │ └── view.jsx
│ ├── error
│ │ ├── 403-view.jsx
│ │ ├── 500-view.jsx
│ │ ├── index.js
│ │ └── not-found-view.jsx
│ ├── profile
│ │ ├── Table.jsx
│ │ └── View.jsx
│ ├── six
│ │ └── view.jsx
│ ├── transaction
│ │ ├── Table.jsx
│ │ └── view.jsx
│ ├── user
│ │ ├── Table.jsx
│ │ ├── UserModal.jsx
│ │ ├── UserModal_.jsx
│ │ └── view.jsx
│ └── withdraw
│ │ ├── Table.jsx
│ │ └── view.jsx
├── theme
│ ├── css.js
│ ├── custom-shadows.js
│ ├── index.jsx
│ ├── options
│ │ ├── contrast.js
│ │ ├── presets.js
│ │ └── right-to-left.jsx
│ ├── overrides
│ │ ├── components
│ │ │ ├── accordion.js
│ │ │ ├── alert.js
│ │ │ ├── appbar.js
│ │ │ ├── autocomplete.js
│ │ │ ├── avatar.js
│ │ │ ├── backdrop.js
│ │ │ ├── badge.js
│ │ │ ├── breadcrumbs.js
│ │ │ ├── button-group.js
│ │ │ ├── button.js
│ │ │ ├── card.js
│ │ │ ├── checkbox.js
│ │ │ ├── chip.js
│ │ │ ├── css-baseline.js
│ │ │ ├── data-grid.js
│ │ │ ├── date-picker.jsx
│ │ │ ├── dialog.js
│ │ │ ├── drawer.js
│ │ │ ├── fab.js
│ │ │ ├── list.js
│ │ │ ├── loading-button.js
│ │ │ ├── menu.js
│ │ │ ├── pagination.js
│ │ │ ├── paper.js
│ │ │ ├── popover.js
│ │ │ ├── progress.js
│ │ │ ├── radio.js
│ │ │ ├── rating.js
│ │ │ ├── select.js
│ │ │ ├── skeleton.js
│ │ │ ├── slider.js
│ │ │ ├── stepper.js
│ │ │ ├── svg-icon.js
│ │ │ ├── switch.js
│ │ │ ├── table.js
│ │ │ ├── tabs.js
│ │ │ ├── textfield.js
│ │ │ ├── timeline.js
│ │ │ ├── toggle-button.js
│ │ │ ├── tooltip.js
│ │ │ ├── tree-view.js
│ │ │ └── typography.js
│ │ ├── default-props.jsx
│ │ └── index.js
│ ├── palette.js
│ ├── shadows.js
│ └── typography.js
└── utils
│ ├── axios.js
│ ├── flatten-array.js
│ ├── format-number.js
│ ├── format-time.js
│ ├── storage-available.js
│ └── useUserData.js
├── vercel.json
├── vite.config.js
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | indent_style = space
7 | indent_size = 2
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/.env:
--------------------------------------------------------------------------------
1 | # HOST
2 | # VITE_HOST_API=https://api-dev-minimal-v510.vercel.app
3 | VITE_HOST_API=https://test.paycrypto.money/v2
4 |
5 | # ASSETS
6 | VITE_ASSETS_API=https://api-dev-minimal-v510.vercel.app
7 |
8 | # MAP
9 | VITE_MAPBOX_API=
10 |
11 | # FIREBASE
12 | VITE_FIREBASE_API_KEY=
13 | VITE_FIREBASE_AUTH_DOMAIN=
14 | VITE_FIREBASE_PROJECT_ID=
15 | VITE_FIREBASE_STORAGE_BUCKET=
16 | VITE_FIREBASE_MESSAGING_SENDER_ID=
17 | VITE_FIREBASE_APPID=
18 |
19 | # AWS AMPLIFY
20 | VITE_AWS_AMPLIFY_USER_POOL_ID=
21 | VITE_AWS_AMPLIFY_USER_POOL_WEB_CLIENT_ID=
22 | VITE_AWS_AMPLIFY_REGION=
23 |
24 | # AUTH0
25 | VITE_AUTH0_CALLBACK_URL=
26 | VITE_AUTH0_DOMAIN=
27 | VITE_AUTH0_CLIENT_ID=
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.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 | .env.local
22 | .env.development.local
23 | .env.test.local
24 | .env.production.local
25 |
26 | # misc
27 | .DS_Store
28 | .vercel
29 | .netlify
30 | .unimportedrc.json
31 | tsconfig.tsbuildinfo
32 | .vscode
33 |
34 | npm-debug.log*
35 | yarn-debug.log*
36 | yarn-error.log*
37 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | build/*
2 | dist/*
3 | public/*
4 | **/out/*
5 | **/.next/*
6 | **/node_modules/*
7 |
8 | package-lock.json
9 | yarn.lock
10 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 100,
3 | "singleQuote": true,
4 | "trailingComma": "es5",
5 | "tabWidth": 2
6 | }
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## NODE.JS
2 |
3 | - Node 16.x || 18.x
4 |
5 | ## USING YARN (Recommend)
6 |
7 | - yarn install
8 | - yarn dev
9 |
10 | ## USING NPM
11 |
12 | - npm i OR npm i --legacy-peer-deps
13 | - npm run dev
14 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": "."
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/public/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/public/assets/background/overlay_1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/background/overlay_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/background/overlay_2.jpg
--------------------------------------------------------------------------------
/public/assets/background/overlay_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/background/overlay_3.jpg
--------------------------------------------------------------------------------
/public/assets/background/overlay_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/background/overlay_4.jpg
--------------------------------------------------------------------------------
/public/assets/cyan-blur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/cyan-blur.png
--------------------------------------------------------------------------------
/public/assets/icons/app/ic_chrome.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/assets/icons/app/ic_drive.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/app/ic_dropbox.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/assets/icons/app/ic_github.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/assets/icons/app/ic_onedrive.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/auth/ic_amplify.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/public/assets/icons/auth/ic_auth0.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/auth/ic_firebase.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/public/assets/icons/auth/ic_jwt.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/public/assets/icons/brands/ic_brand_hbo.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/assets/icons/brands/ic_brand_lya.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/assets/icons/brands/ic_brand_netflix.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_alert.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_autocomplete.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_avatar.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_breadcrumbs.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_buttons.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_checkbox.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_chip.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_data_grid.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_dialog.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_grid.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_icons.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_list.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_menu.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_pagination.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_popover.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_progress.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_radio_button.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_shadows.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_slider.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_switch.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_table.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_textfield.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_timeline.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_tooltip.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/public/assets/icons/components/ic_tree_view.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/public/assets/icons/files/ic_file.svg:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/public/assets/icons/files/ic_folder.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/glass/ic_glass_bag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/icons/glass/ic_glass_bag.png
--------------------------------------------------------------------------------
/public/assets/icons/glass/ic_glass_buy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/icons/glass/ic_glass_buy.png
--------------------------------------------------------------------------------
/public/assets/icons/glass/ic_glass_message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/icons/glass/ic_glass_message.png
--------------------------------------------------------------------------------
/public/assets/icons/glass/ic_glass_users.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/icons/glass/ic_glass_users.png
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_blank.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_blog.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_dashboard.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_disabled.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_ecommerce.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_kanban.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_label.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_mail.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_menu_item.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_tour.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/navbar/ic_user.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/platforms/ic_figma.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/public/assets/icons/platforms/ic_ts.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/setting/ic_collapse.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/setting/ic_contrast.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/public/assets/icons/setting/ic_contrast_bold.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/setting/ic_moon.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/assets/icons/setting/ic_setting.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_1.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_10.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_11.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_2.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_3.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_4.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_5.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_6.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_7.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_8.png
--------------------------------------------------------------------------------
/public/assets/illustrations/characters/character_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/characters/character_9.png
--------------------------------------------------------------------------------
/public/assets/illustrations/illustration_dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/illustrations/illustration_dashboard.png
--------------------------------------------------------------------------------
/public/assets/images/about/hero.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/about/hero.jpg
--------------------------------------------------------------------------------
/public/assets/images/about/testimonials.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/about/testimonials.jpg
--------------------------------------------------------------------------------
/public/assets/images/about/vision.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/about/vision.jpg
--------------------------------------------------------------------------------
/public/assets/images/about/what_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/about/what_1.png
--------------------------------------------------------------------------------
/public/assets/images/about/what_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/about/what_2.png
--------------------------------------------------------------------------------
/public/assets/images/contact/hero.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/contact/hero.jpg
--------------------------------------------------------------------------------
/public/assets/images/faqs/hero.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/faqs/hero.jpg
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_1.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_10.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_10.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_2.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_3.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_4.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_4.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_5.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_5.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_6.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_6.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_7.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_7.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_8.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_8.webp
--------------------------------------------------------------------------------
/public/assets/images/home/clean/page_9.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/clean/page_9.webp
--------------------------------------------------------------------------------
/public/assets/images/home/darkmode.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/darkmode.webp
--------------------------------------------------------------------------------
/public/assets/images/home/for_designer.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/for_designer.webp
--------------------------------------------------------------------------------
/public/assets/images/home/hero/dark_1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/hero/dark_1.webp
--------------------------------------------------------------------------------
/public/assets/images/home/hero/dark_2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/hero/dark_2.webp
--------------------------------------------------------------------------------
/public/assets/images/home/hero/light_1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/hero/light_1.webp
--------------------------------------------------------------------------------
/public/assets/images/home/hero/light_2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/hero/light_2.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/block_blue.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/block_blue.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/block_cyan.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/block_cyan.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/block_default.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/block_default.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/block_orange.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/block_orange.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/block_purple.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/block_purple.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/block_red.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/block_red.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/chart_blue.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/chart_blue.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/chart_cyan.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/chart_cyan.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/chart_default.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/chart_default.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/chart_orange.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/chart_orange.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/chart_purple.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/chart_purple.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/chart_red.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/chart_red.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/grid.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/grid.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/screen_blue.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/screen_blue.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/screen_cyan.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/screen_cyan.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/screen_default.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/screen_default.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/screen_orange.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/screen_orange.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/screen_purple.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/screen_purple.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/screen_red.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/screen_red.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/sidebar_blue.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/sidebar_blue.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/sidebar_cyan.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/sidebar_cyan.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/sidebar_default.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/sidebar_default.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/sidebar_orange.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/sidebar_orange.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/sidebar_purple.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/sidebar_purple.webp
--------------------------------------------------------------------------------
/public/assets/images/home/presets/sidebar_red.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/presets/sidebar_red.webp
--------------------------------------------------------------------------------
/public/assets/images/home/rocket.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/rocket.webp
--------------------------------------------------------------------------------
/public/assets/images/home/zone_landing.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/images/home/zone_landing.webp
--------------------------------------------------------------------------------
/public/assets/logo-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/logo-mini.png
--------------------------------------------------------------------------------
/public/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/logo.png
--------------------------------------------------------------------------------
/public/assets/logo_mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/logo_mini.png
--------------------------------------------------------------------------------
/public/assets/placeholder.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/public/assets/red-blur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/red-blur.png
--------------------------------------------------------------------------------
/public/assets/transparent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/assets/transparent.png
--------------------------------------------------------------------------------
/public/favicon/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/favicon/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/favicon/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/favicon/android-chrome-512x512.png
--------------------------------------------------------------------------------
/public/favicon/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/favicon/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/favicon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/favicon/favicon-16x16.png
--------------------------------------------------------------------------------
/public/favicon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/favicon/favicon-32x32.png
--------------------------------------------------------------------------------
/public/favicon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/favicon/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/CircularStd-Bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/fonts/CircularStd-Bold.otf
--------------------------------------------------------------------------------
/public/fonts/CircularStd-Book.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/fonts/CircularStd-Book.otf
--------------------------------------------------------------------------------
/public/fonts/CircularStd-Medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/fonts/CircularStd-Medium.otf
--------------------------------------------------------------------------------
/public/fonts/Roboto-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/fonts/Roboto-Bold.ttf
--------------------------------------------------------------------------------
/public/fonts/Roboto-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/fonts/Roboto-Regular.ttf
--------------------------------------------------------------------------------
/public/fonts/index.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'CircularStd';
3 | font-weight: 400;
4 | font-style: normal;
5 | src: local('CircularStd'), url('CircularStd-Book.otf') format('opentype');
6 | }
7 |
8 | @font-face {
9 | font-family: 'CircularStd';
10 | font-weight: 500;
11 | font-style: normal;
12 | src: local('CircularStd'), url('CircularStd-Medium.otf') format('opentype');
13 | }
14 |
15 | @font-face {
16 | font-family: 'CircularStd';
17 | font-weight: 700;
18 | font-style: normal;
19 | src: local('CircularStd'), url('CircularStd-Bold.otf') format('opentype');
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/public/logo/logo_single.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/public/logo/logo_single.png
--------------------------------------------------------------------------------
/public/logo/logo_single.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Minimal UI",
3 | "short_name": "Minimal UI",
4 | "display": "standalone",
5 | "start_url": "/",
6 | "theme_color": "#000000",
7 | "background_color": "#ffffff",
8 | "icons": [
9 | {
10 | "src": "favicon/android-chrome-192x192.png",
11 | "sizes": "192x192",
12 | "type": "image/png"
13 | },
14 | {
15 | "src": "favicon/android-chrome-512x512.png",
16 | "sizes": "512x512",
17 | "type": "image/png"
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/setup_proxy.js:
--------------------------------------------------------------------------------
1 | const { createProxyMiddleware } = require('http-proxy-middleware');
2 |
3 | module.exports = function (app) {
4 | app.use(
5 | '/v2',
6 | createProxyMiddleware({
7 | target: 'https://test.paycrypto.money',
8 | changeOrigin: true,
9 | secure: false,
10 | })
11 | );
12 | };
13 |
--------------------------------------------------------------------------------
/src/_mock/_blog.js:
--------------------------------------------------------------------------------
1 | export const POST_PUBLISH_OPTIONS = [
2 | {
3 | value: 'published',
4 | label: 'Published',
5 | },
6 | {
7 | value: 'draft',
8 | label: 'Draft',
9 | },
10 | ];
11 |
12 | export const POST_SORT_OPTIONS = [
13 | { value: 'latest', label: 'Latest' },
14 | { value: 'popular', label: 'Popular' },
15 | { value: 'oldest', label: 'Oldest' },
16 | ];
17 |
--------------------------------------------------------------------------------
/src/_mock/_calendar.js:
--------------------------------------------------------------------------------
1 | import { info, error, primary, success, warning, secondary } from 'src/theme/palette';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export const CALENDAR_COLOR_OPTIONS = [
6 | primary.main,
7 | secondary.main,
8 | info.main,
9 | info.darker,
10 | success.main,
11 | warning.main,
12 | error.main,
13 | error.darker,
14 | ];
15 |
--------------------------------------------------------------------------------
/src/_mock/index.js:
--------------------------------------------------------------------------------
1 | export * from './assets';
2 | export * from './_mock';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export * from './_job';
7 | export * from './_user';
8 | export * from './_tour';
9 | export * from './_blog';
10 | export * from './_files';
11 | export * from './_order';
12 | export * from './_others';
13 | export * from './_invoice';
14 | export * from './_product';
15 | export * from './_overview';
16 | export * from './_calendar';
17 |
--------------------------------------------------------------------------------
/src/app.jsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable perfectionist/sort-imports */
2 | import 'src/global.css';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | import Router from 'src/routes/sections';
7 |
8 | import ThemeProvider from 'src/theme';
9 |
10 | import { useScrollToTop } from 'src/hooks/use-scroll-to-top';
11 |
12 | import ProgressBar from 'src/components/progress-bar';
13 | import { MotionLazy } from 'src/components/animate/motion-lazy';
14 | import { SettingsDrawer, SettingsProvider } from 'src/components/settings';
15 |
16 | import { AuthProvider } from 'src/auth/context/jwt';
17 |
18 | // ----------------------------------------------------------------------
19 |
20 | export default function App() {
21 |
22 | useScrollToTop();
23 |
24 | return (
25 |
26 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | );
46 | }
47 |
--------------------------------------------------------------------------------
/src/assets/data/index.js:
--------------------------------------------------------------------------------
1 | export * from './countries';
2 |
--------------------------------------------------------------------------------
/src/assets/icons/index.js:
--------------------------------------------------------------------------------
1 | export { default as SentIcon } from './sent-icon';
2 | export { default as PasswordIcon } from './password-icon';
3 | export { default as PlanFreeIcon } from './plan-free-icon';
4 | export { default as EmailInboxIcon } from './email-inbox-icon';
5 | export { default as PlanStarterIcon } from './plan-starter-icon';
6 | export { default as PlanPremiumIcon } from './plan-premium-icon';
7 |
--------------------------------------------------------------------------------
/src/assets/illustrations/avatar-shape.jsx:
--------------------------------------------------------------------------------
1 | import { memo } from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | import Box from '@mui/material/Box';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | function AvatarShape({ sx, ...other }) {
9 | return (
10 |
23 |
28 |
29 | );
30 | }
31 |
32 | AvatarShape.propTypes = {
33 | sx: PropTypes.object,
34 | };
35 |
36 | export default memo(AvatarShape);
37 |
--------------------------------------------------------------------------------
/src/assets/illustrations/background-shape.jsx:
--------------------------------------------------------------------------------
1 | import { memo } from 'react';
2 |
3 | import { useTheme } from '@mui/material/styles';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | function BackgroundShape() {
8 | const theme = useTheme();
9 |
10 | const PRIMARY_MAIN = theme.palette.primary.main;
11 |
12 | return (
13 | <>
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 | >
28 | );
29 | }
30 |
31 | export default memo(BackgroundShape);
32 |
--------------------------------------------------------------------------------
/src/assets/illustrations/index.js:
--------------------------------------------------------------------------------
1 | export { default as AvatarShape } from './avatar-shape';
2 |
3 | export { default as SeoIllustration } from './seo-illustration';
4 | export { default as UploadIllustration } from './upload-illustration';
5 | export { default as BookingIllustration } from './booking-illustration';
6 | export { default as CheckInIllustration } from './check-in-illustration';
7 | export { default as CheckoutIllustration } from './check-out-illustration';
8 | export { default as ForbiddenIllustration } from './forbidden-illustration';
9 | export { default as MotivationIllustration } from './motivation-illustration';
10 | export { default as SeverErrorIllustration } from './sever-error-illustration';
11 | export { default as ComingSoonIllustration } from './coming-soon-illustration';
12 | export { default as MaintenanceIllustration } from './maintenance-illustration';
13 | export { default as PageNotFoundIllustration } from './page-not-found-illustration';
14 | export { default as OrderCompleteIllustration } from './order-complete-illustration';
15 | export { default as UpgradeStorageIllustration } from './upgrade-storage-illustration';
16 |
--------------------------------------------------------------------------------
/src/assets/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/src/assets/img/logo.png
--------------------------------------------------------------------------------
/src/assets/img/logo_mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/smartcoder0402/react-paycrypto-dashboard/40ee007e7dcd30614a9492f64bd1ff2daaa7ce71/src/assets/img/logo_mini.png
--------------------------------------------------------------------------------
/src/auth/context/jwt/auth-consumer.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import { SplashScreen } from 'src/components/loading-screen';
4 |
5 | import { AuthContext } from './auth-context';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | export function AuthConsumer({ children }) {
10 | return (
11 |
12 | {(auth) => (auth.loading ? : children)}
13 |
14 | );
15 | }
16 |
17 | AuthConsumer.propTypes = {
18 | children: PropTypes.node,
19 | };
20 |
--------------------------------------------------------------------------------
/src/auth/context/jwt/auth-context.js:
--------------------------------------------------------------------------------
1 | import { createContext } from 'react';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export const AuthContext = createContext({});
6 |
--------------------------------------------------------------------------------
/src/auth/context/jwt/index.js:
--------------------------------------------------------------------------------
1 | export { AuthContext } from './auth-context';
2 | export { AuthConsumer } from './auth-consumer';
3 | export { AuthProvider } from './auth-provider';
4 |
--------------------------------------------------------------------------------
/src/auth/guard/guest-guard.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { useEffect, useCallback } from 'react';
3 |
4 | import { paths } from 'src/routes/paths';
5 | import { useRouter, useSearchParams } from 'src/routes/hooks';
6 |
7 | import { SplashScreen } from 'src/components/loading-screen';
8 |
9 | import { useAuthContext } from '../hooks';
10 |
11 | // ----------------------------------------------------------------------
12 |
13 | export default function GuestGuard({ children }) {
14 | const { loading } = useAuthContext();
15 |
16 | return <>{loading ? : {children}}>;
17 | }
18 |
19 | GuestGuard.propTypes = {
20 | children: PropTypes.node,
21 | };
22 |
23 | // ----------------------------------------------------------------------
24 |
25 | function Container({ children }) {
26 | const router = useRouter();
27 |
28 | const searchParams = useSearchParams();
29 |
30 | const returnTo = searchParams.get('returnTo') || paths.dashboard.root;
31 |
32 | const { authenticated } = useAuthContext();
33 |
34 | const check = useCallback(() => {
35 | if (authenticated) {
36 | router.replace(returnTo);
37 | }
38 | }, [authenticated, returnTo, router]);
39 |
40 | useEffect(() => {
41 | check();
42 | }, [check]);
43 |
44 | return <>{children}>;
45 | }
46 |
47 | Container.propTypes = {
48 | children: PropTypes.node,
49 | };
50 |
--------------------------------------------------------------------------------
/src/auth/guard/index.js:
--------------------------------------------------------------------------------
1 | export { default as AuthGuard } from './auth-guard';
2 | export { default as GuestGuard } from './guest-guard';
3 | export { default as RoleBasedGuard } from './role-based-guard';
4 |
--------------------------------------------------------------------------------
/src/auth/hooks/index.js:
--------------------------------------------------------------------------------
1 | export { useAuthContext } from './use-auth-context';
2 |
--------------------------------------------------------------------------------
/src/auth/hooks/use-auth-context.js:
--------------------------------------------------------------------------------
1 | import { useContext } from 'react';
2 |
3 | import { AuthContext } from '../context/jwt/auth-context';
4 |
5 | export const useAuthContext = () => {
6 | const context = useContext(AuthContext);
7 |
8 | if (!context) throw new Error('useAuthContext context must be use inside AuthProvider');
9 |
10 | return context;
11 | };
12 |
--------------------------------------------------------------------------------
/src/components/animate/index.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export * from './variants';
4 |
5 | export { default as MotionViewport } from './motion-viewport';
6 | export { default as MotionContainer } from './motion-container';
7 |
--------------------------------------------------------------------------------
/src/components/animate/motion-container.jsx:
--------------------------------------------------------------------------------
1 | import { m } from 'framer-motion';
2 | import PropTypes from 'prop-types';
3 |
4 | import Box from '@mui/material/Box';
5 |
6 | import { varContainer } from './variants';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export default function MotionContainer({ animate, action = false, children, ...other }) {
11 | if (action) {
12 | return (
13 |
20 | {children}
21 |
22 | );
23 | }
24 |
25 | return (
26 |
34 | {children}
35 |
36 | );
37 | }
38 |
39 | MotionContainer.propTypes = {
40 | action: PropTypes.bool,
41 | animate: PropTypes.bool,
42 | children: PropTypes.node,
43 | };
44 |
--------------------------------------------------------------------------------
/src/components/animate/motion-lazy.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { m, domMax, LazyMotion } from 'framer-motion';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function MotionLazy({ children }) {
7 | return (
8 |
9 | {children}
10 |
11 | );
12 | }
13 |
14 | MotionLazy.propTypes = {
15 | children: PropTypes.node,
16 | };
17 |
--------------------------------------------------------------------------------
/src/components/animate/motion-viewport.jsx:
--------------------------------------------------------------------------------
1 | import { m } from 'framer-motion';
2 | import PropTypes from 'prop-types';
3 |
4 | import Box from '@mui/material/Box';
5 |
6 | import { useResponsive } from 'src/hooks/use-responsive';
7 |
8 | import { varContainer } from './variants';
9 |
10 | // ----------------------------------------------------------------------
11 |
12 | export default function MotionViewport({ children, disableAnimatedMobile = true, ...other }) {
13 | const smDown = useResponsive('down', 'sm');
14 |
15 | if (smDown && disableAnimatedMobile) {
16 | return {children};
17 | }
18 |
19 | return (
20 |
28 | {children}
29 |
30 | );
31 | }
32 |
33 | MotionViewport.propTypes = {
34 | children: PropTypes.node,
35 | disableAnimatedMobile: PropTypes.bool,
36 | };
37 |
--------------------------------------------------------------------------------
/src/components/animate/variants/actions.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export const varHover = (hover = 1.09, tap = 0.97) => ({
4 | hover: { scale: hover },
5 | tap: { scale: tap },
6 | });
7 |
--------------------------------------------------------------------------------
/src/components/animate/variants/container.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export const varContainer = (props) => {
4 | const staggerIn = props?.staggerIn || 0.05;
5 | const delayIn = props?.staggerIn || 0.05;
6 | const staggerOut = props?.staggerIn || 0.05;
7 |
8 | return {
9 | animate: {
10 | transition: {
11 | staggerChildren: staggerIn,
12 | delayChildren: delayIn,
13 | },
14 | },
15 | exit: {
16 | transition: {
17 | staggerChildren: staggerOut,
18 | staggerDirection: -1,
19 | },
20 | },
21 | };
22 | };
23 |
--------------------------------------------------------------------------------
/src/components/animate/variants/index.js:
--------------------------------------------------------------------------------
1 | export * from './path';
2 | export * from './fade';
3 | export * from './zoom';
4 | export * from './flip';
5 | export * from './slide';
6 | export * from './scale';
7 | export * from './bounce';
8 | export * from './rotate';
9 | export * from './actions';
10 | export * from './container';
11 | export * from './transition';
12 | export * from './background';
13 |
--------------------------------------------------------------------------------
/src/components/animate/variants/path.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export const TRANSITION = {
4 | duration: 2,
5 | ease: [0.43, 0.13, 0.23, 0.96],
6 | };
7 |
8 | export const varPath = {
9 | animate: {
10 | fillOpacity: [0, 0, 1],
11 | pathLength: [1, 0.4, 0],
12 | transition: TRANSITION,
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/src/components/animate/variants/rotate.js:
--------------------------------------------------------------------------------
1 | import { varTranExit, varTranEnter } from './transition';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export const varRotate = (props) => {
6 | const durationIn = props?.durationIn;
7 | const durationOut = props?.durationOut;
8 | const easeIn = props?.easeIn;
9 | const easeOut = props?.easeOut;
10 |
11 | return {
12 | // IN
13 | in: {
14 | initial: { opacity: 0, rotate: -360 },
15 | animate: {
16 | opacity: 1,
17 | rotate: 0,
18 | transition: varTranEnter({ durationIn, easeIn }),
19 | },
20 | exit: {
21 | opacity: 0,
22 | rotate: -360,
23 | transition: varTranExit({ durationOut, easeOut }),
24 | },
25 | },
26 |
27 | // OUT
28 | out: {
29 | initial: { opacity: 1, rotate: 0 },
30 | animate: {
31 | opacity: 0,
32 | rotate: -360,
33 | transition: varTranExit({ durationOut, easeOut }),
34 | },
35 | },
36 | };
37 | };
38 |
--------------------------------------------------------------------------------
/src/components/animate/variants/scale.js:
--------------------------------------------------------------------------------
1 | import { varTranExit, varTranEnter } from './transition';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export const varScale = (props) => {
6 | const durationIn = props?.durationIn;
7 | const durationOut = props?.durationOut;
8 | const easeIn = props?.easeIn;
9 | const easeOut = props?.easeOut;
10 |
11 | return {
12 | // IN
13 | inX: {
14 | initial: { scaleX: 0, opacity: 0 },
15 | animate: {
16 | scaleX: 1,
17 | opacity: 1,
18 | transition: varTranEnter({ durationIn, easeIn }),
19 | },
20 | exit: {
21 | scaleX: 0,
22 | opacity: 0,
23 | transition: varTranExit({ durationOut, easeOut }),
24 | },
25 | },
26 | inY: {
27 | initial: { scaleY: 0, opacity: 0 },
28 | animate: {
29 | scaleY: 1,
30 | opacity: 1,
31 | transition: varTranEnter({ durationIn, easeIn }),
32 | },
33 | exit: {
34 | scaleY: 0,
35 | opacity: 0,
36 | transition: varTranExit({ durationOut, easeOut }),
37 | },
38 | },
39 |
40 | // OUT
41 | outX: {
42 | initial: { scaleX: 1, opacity: 1 },
43 | animate: {
44 | scaleX: 0,
45 | opacity: 0,
46 | transition: varTranEnter({ durationIn, easeIn }),
47 | },
48 | },
49 | outY: {
50 | initial: { scaleY: 1, opacity: 1 },
51 | animate: {
52 | scaleY: 0,
53 | opacity: 0,
54 | transition: varTranEnter({ durationIn, easeIn }),
55 | },
56 | },
57 | };
58 | };
59 |
--------------------------------------------------------------------------------
/src/components/animate/variants/transition.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export const varTranHover = (props) => {
4 | const duration = props?.duration || 0.32;
5 | const ease = props?.ease || [0.43, 0.13, 0.23, 0.96];
6 |
7 | return { duration, ease };
8 | };
9 |
10 | export const varTranEnter = (props) => {
11 | const duration = props?.durationIn || 0.64;
12 | const ease = props?.easeIn || [0.43, 0.13, 0.23, 0.96];
13 |
14 | return { duration, ease };
15 | };
16 |
17 | export const varTranExit = (props) => {
18 | const duration = props?.durationOut || 0.48;
19 | const ease = props?.easeOut || [0.43, 0.13, 0.23, 0.96];
20 |
21 | return { duration, ease };
22 | };
23 |
--------------------------------------------------------------------------------
/src/components/chart/index.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | // export { default } from './chart';
4 |
5 | export { default as useChart } from './use-chart';
6 |
--------------------------------------------------------------------------------
/src/components/component-block.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import Paper from '@mui/material/Paper';
4 | import Stack from '@mui/material/Stack';
5 | import { alpha } from '@mui/material/styles';
6 | import CardHeader from '@mui/material/CardHeader';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export default function ComponentBlock({ title, sx, children, ...other }) {
11 | return (
12 | alpha(theme.palette.grey[500], 0.04),
18 | }}
19 | >
20 | {title && }
21 |
22 |
35 | {children}
36 |
37 |
38 | );
39 | }
40 |
41 | ComponentBlock.propTypes = {
42 | children: PropTypes.node,
43 | sx: PropTypes.object,
44 | title: PropTypes.string,
45 | };
46 |
--------------------------------------------------------------------------------
/src/components/custom-popover/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './custom-popover';
2 |
3 | export { default as usePopover } from './use-popover';
4 |
--------------------------------------------------------------------------------
/src/components/custom-popover/use-popover.js:
--------------------------------------------------------------------------------
1 | import { useState, useCallback } from 'react';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export default function usePopover() {
6 | const [open, setOpen] = useState(null);
7 |
8 | const onOpen = useCallback((event) => {
9 | setOpen(event.currentTarget);
10 | }, []);
11 |
12 | const onClose = useCallback(() => {
13 | setOpen(null);
14 | }, []);
15 |
16 | return {
17 | open,
18 | onOpen,
19 | onClose,
20 | setOpen,
21 | };
22 | }
23 |
--------------------------------------------------------------------------------
/src/components/empty-content/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './empty-content';
2 |
--------------------------------------------------------------------------------
/src/components/file-thumbnail/download-button.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import { useTheme } from '@mui/material/styles';
4 | import IconButton from '@mui/material/IconButton';
5 |
6 | import { bgBlur } from 'src/theme/css';
7 |
8 | import Iconify from '../iconify';
9 |
10 | // ----------------------------------------------------------------------
11 |
12 | export default function DownloadButton({ onDownload }) {
13 | const theme = useTheme();
14 |
15 | return (
16 |
42 |
43 |
44 | );
45 | }
46 |
47 | DownloadButton.propTypes = {
48 | onDownload: PropTypes.func,
49 | };
50 |
--------------------------------------------------------------------------------
/src/components/file-thumbnail/index.js:
--------------------------------------------------------------------------------
1 | export * from './utils';
2 |
3 | export { default } from './file-thumbnail';
4 |
5 | export { default as DownloadButton } from './download-button';
6 |
--------------------------------------------------------------------------------
/src/components/hook-form/form-provider.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { FormProvider as Form } from 'react-hook-form';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export default function FormProvider({ children, onSubmit, methods }) {
7 | return (
8 |
10 |
11 | );
12 | }
13 |
14 | FormProvider.propTypes = {
15 | children: PropTypes.node,
16 | methods: PropTypes.object,
17 | onSubmit: PropTypes.func,
18 | };
19 |
--------------------------------------------------------------------------------
/src/components/hook-form/index.js:
--------------------------------------------------------------------------------
1 | export * from './rhf-select';
2 | export { default } from './form-provider';
3 |
4 | export { default as RHFTextField } from './rhf-text-field';
5 |
--------------------------------------------------------------------------------
/src/components/hook-form/rhf-text-field.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { Controller, useFormContext } from 'react-hook-form';
3 |
4 | import TextField from '@mui/material/TextField';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export default function RHFTextField({ name, helperText, type, ...other }) {
9 | const { control } = useFormContext();
10 |
11 | return (
12 | (
16 | {
22 | if (type === 'number') {
23 | field.onChange(Number(event.target.value));
24 | } else {
25 | field.onChange(event.target.value);
26 | }
27 | }}
28 | error={!!error}
29 | helperText={error ? error?.message : helperText}
30 | {...other}
31 | />
32 | )}
33 | />
34 | );
35 | }
36 |
37 | RHFTextField.propTypes = {
38 | helperText: PropTypes.object,
39 | name: PropTypes.string,
40 | type: PropTypes.string,
41 | };
42 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/components/iconify/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './iconify';
2 |
--------------------------------------------------------------------------------
/src/components/label/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './label';
2 |
--------------------------------------------------------------------------------
/src/components/loading-screen/index.js:
--------------------------------------------------------------------------------
1 | export { default as SplashScreen } from './splash-screen';
2 | export { default as LoadingScreen } from './loading-screen';
3 |
--------------------------------------------------------------------------------
/src/components/loading-screen/loading-screen.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import Box from '@mui/material/Box';
4 | import LinearProgress from '@mui/material/LinearProgress';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export default function LoadingScreen({ sx, ...other }) {
9 | return (
10 |
23 |
24 |
25 | );
26 | }
27 |
28 | LoadingScreen.propTypes = {
29 | sx: PropTypes.object,
30 | };
31 |
--------------------------------------------------------------------------------
/src/components/logo/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './logo';
2 |
--------------------------------------------------------------------------------
/src/components/nav-section/horizontal/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './nav-section-horizontal';
2 |
--------------------------------------------------------------------------------
/src/components/nav-section/horizontal/nav-section-horizontal.jsx:
--------------------------------------------------------------------------------
1 | import { memo } from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | import Stack from '@mui/material/Stack';
5 |
6 | import NavList from './nav-list';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | function NavSectionHorizontal({ data, slotProps, sx, ...other }) {
11 | return (
12 |
24 | {data.map((group, index) => (
25 |
26 | ))}
27 |
28 | );
29 | }
30 |
31 | NavSectionHorizontal.propTypes = {
32 | data: PropTypes.array,
33 | sx: PropTypes.object,
34 | slotProps: PropTypes.object,
35 | };
36 |
37 | export default memo(NavSectionHorizontal);
38 |
39 | // ----------------------------------------------------------------------
40 |
41 | function Group({ items, slotProps }) {
42 | return (
43 | <>
44 | {items.map((list) => (
45 |
46 | ))}
47 | >
48 | );
49 | }
50 |
51 | Group.propTypes = {
52 | items: PropTypes.array,
53 | slotProps: PropTypes.object,
54 | };
55 |
--------------------------------------------------------------------------------
/src/components/nav-section/index.js:
--------------------------------------------------------------------------------
1 | export { default as NavSectionMini } from './mini';
2 | export { default as NavSectionVertical } from './vertical';
3 | export { default as NavSectionHorizontal } from './horizontal';
4 |
--------------------------------------------------------------------------------
/src/components/nav-section/mini/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './nav-section-mini';
2 |
--------------------------------------------------------------------------------
/src/components/nav-section/mini/nav-section-mini.jsx:
--------------------------------------------------------------------------------
1 | import { memo } from 'react';
2 | import PropTypes from 'prop-types';
3 |
4 | import Stack from '@mui/material/Stack';
5 |
6 | import NavList from './nav-list';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | function NavSectionMini({ data, slotProps, ...other }) {
11 | return (
12 |
13 | {data.map((group, index) => (
14 |
15 | ))}
16 |
17 | );
18 | }
19 |
20 | NavSectionMini.propTypes = {
21 | data: PropTypes.array,
22 | slotProps: PropTypes.object,
23 | };
24 |
25 | export default memo(NavSectionMini);
26 |
27 | // ----------------------------------------------------------------------
28 |
29 | function Group({ items, slotProps }) {
30 | return (
31 | <>
32 | {items.map((list) => (
33 |
34 | ))}
35 | >
36 | );
37 | }
38 |
39 | Group.propTypes = {
40 | items: PropTypes.array,
41 | slotProps: PropTypes.object,
42 | };
43 |
--------------------------------------------------------------------------------
/src/components/nav-section/vertical/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './nav-section-vertical';
2 |
--------------------------------------------------------------------------------
/src/components/progress-bar/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './progress-bar';
2 |
3 | export { default as StyledProgressBar } from './styles';
4 |
--------------------------------------------------------------------------------
/src/components/progress-bar/progress-bar.jsx:
--------------------------------------------------------------------------------
1 | import NProgress from 'nprogress';
2 | import { useState, useEffect } from 'react';
3 |
4 | import { usePathname } from 'src/routes/hooks';
5 |
6 | import StyledProgressBar from './styles';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export default function ProgressBar() {
11 | const pathname = usePathname();
12 |
13 | const [mounted, setMounted] = useState(false);
14 |
15 | const [visible, setVisible] = useState(false);
16 |
17 | useEffect(() => {
18 | setMounted(true);
19 | }, []);
20 |
21 | useEffect(() => {
22 | if (!visible) {
23 | NProgress.start();
24 | setVisible(true);
25 | }
26 |
27 | if (visible) {
28 | NProgress.done();
29 | setVisible(false);
30 | }
31 |
32 | if (!visible && mounted) {
33 | setVisible(false);
34 | NProgress.done();
35 | }
36 |
37 | return () => {
38 | NProgress.done();
39 | };
40 | // eslint-disable-next-line react-hooks/exhaustive-deps
41 | }, [pathname, mounted]);
42 |
43 | if (!mounted) {
44 | return null;
45 | }
46 |
47 | return ;
48 | }
49 |
--------------------------------------------------------------------------------
/src/components/progress-bar/styles.jsx:
--------------------------------------------------------------------------------
1 | import { useTheme } from '@mui/material/styles';
2 | import GlobalStyles from '@mui/material/GlobalStyles';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export default function StyledProgressBar() {
7 | const theme = useTheme();
8 |
9 | const inputGlobalStyles = (
10 |
37 | );
38 |
39 | return inputGlobalStyles;
40 | }
41 |
--------------------------------------------------------------------------------
/src/components/scrollbar/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './scrollbar';
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/components/search-not-found/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './search-not-found';
2 |
--------------------------------------------------------------------------------
/src/components/search-not-found/search-not-found.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import Paper from '@mui/material/Paper';
4 | import Typography from '@mui/material/Typography';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export default function SearchNotFound({ query, sx, ...other }) {
9 | return query ? (
10 |
18 |
19 | Not Found
20 |
21 |
22 |
23 | No results found for
24 | "{query}".
25 |
Try checking for typos or using complete words.
26 |
27 |
28 | ) : (
29 |
30 | Please enter keywords
31 |
32 | );
33 | }
34 |
35 | SearchNotFound.propTypes = {
36 | query: PropTypes.string,
37 | sx: PropTypes.object,
38 | };
39 |
--------------------------------------------------------------------------------
/src/components/settings/context/index.js:
--------------------------------------------------------------------------------
1 | export { SettingsProvider } from './settings-provider';
2 | export { useSettingsContext } from './settings-context';
3 |
--------------------------------------------------------------------------------
/src/components/settings/context/settings-context.js:
--------------------------------------------------------------------------------
1 | import { useContext, createContext } from 'react';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export const SettingsContext = createContext({});
6 |
7 | export const useSettingsContext = () => {
8 | const context = useContext(SettingsContext);
9 |
10 | if (!context) throw new Error('useSettingsContext must be use inside SettingsProvider');
11 |
12 | return context;
13 | };
14 |
--------------------------------------------------------------------------------
/src/components/settings/drawer/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './settings-drawer';
2 |
--------------------------------------------------------------------------------
/src/components/settings/index.js:
--------------------------------------------------------------------------------
1 | export * from './context';
2 |
3 | export { default as SettingsDrawer } from './drawer';
4 |
--------------------------------------------------------------------------------
/src/components/snackbar/index.js:
--------------------------------------------------------------------------------
1 | export * from 'notistack';
2 |
3 | export { default as SnackbarProvider } from './snackbar-provider';
4 |
--------------------------------------------------------------------------------
/src/components/svg-color/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './svg-color';
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/components/table/index.js:
--------------------------------------------------------------------------------
1 | export * from './utils';
2 |
3 | export { default as useTable } from './use-table';
4 |
5 | export { default as TableNoData } from './table-no-data';
6 | export { default as TableSkeleton } from './table-skeleton';
7 | export { default as TableEmptyRows } from './table-empty-rows';
8 | export { default as TableHeadCustom } from './table-head-custom';
9 | export { default as TableSelectedAction } from './table-selected-action';
10 | export { default as TablePaginationCustom } from './table-pagination-custom';
11 |
--------------------------------------------------------------------------------
/src/components/table/table-empty-rows.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import TableRow from '@mui/material/TableRow';
4 | import TableCell from '@mui/material/TableCell';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export default function TableEmptyRows({ emptyRows, height }) {
9 | if (!emptyRows) {
10 | return null;
11 | }
12 |
13 | return (
14 |
21 |
22 |
23 | );
24 | }
25 |
26 | TableEmptyRows.propTypes = {
27 | emptyRows: PropTypes.number,
28 | height: PropTypes.number,
29 | };
30 |
--------------------------------------------------------------------------------
/src/components/table/table-no-data.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import TableRow from '@mui/material/TableRow';
4 | import TableCell from '@mui/material/TableCell';
5 |
6 | import EmptyContent from '../empty-content';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export default function TableNoData({ notFound, sx, title }) {
11 | return (
12 |
13 | {notFound ? (
14 |
15 |
23 |
24 | ) : (
25 |
26 | )}
27 |
28 | );
29 | }
30 |
31 | TableNoData.propTypes = {
32 | notFound: PropTypes.bool,
33 | sx: PropTypes.object,
34 | title: PropTypes.string
35 | };
36 |
--------------------------------------------------------------------------------
/src/components/table/table-pagination-custom.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import Box from '@mui/material/Box';
4 | import Switch from '@mui/material/Switch';
5 | import TablePagination from '@mui/material/TablePagination';
6 | import FormControlLabel from '@mui/material/FormControlLabel';
7 |
8 | export default function TablePaginationCustom({
9 | dense,
10 | onChangeDense,
11 | rowsPerPageOptions = [5, 10, 25, 50],
12 | sx,
13 | ...other
14 | }) {
15 | return (
16 |
17 |
25 |
26 | {onChangeDense && (
27 | }
30 | sx={{
31 | pl: 2,
32 | py: 1.5,
33 | top: 0,
34 | position: {
35 | sm: 'absolute',
36 | },
37 | }}
38 | />
39 | )}
40 |
41 | );
42 | }
43 |
44 | TablePaginationCustom.propTypes = {
45 | dense: PropTypes.bool,
46 | onChangeDense: PropTypes.func,
47 | rowsPerPageOptions: PropTypes.arrayOf(PropTypes.number),
48 | sx: PropTypes.object,
49 | };
50 |
--------------------------------------------------------------------------------
/src/components/table/table-skeleton.jsx:
--------------------------------------------------------------------------------
1 | import Stack from '@mui/material/Stack';
2 | import Skeleton from '@mui/material/Skeleton';
3 | import TableRow from '@mui/material/TableRow';
4 | import TableCell from '@mui/material/TableCell';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export default function TableSkeleton({ ...other }) {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/table/utils.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function emptyRows(page, rowsPerPage, arrayLength) {
4 | return page ? Math.max(0, (1 + page) * rowsPerPage - arrayLength) : 0;
5 | }
6 |
7 | function descendingComparator(a, b, orderBy) {
8 | if (a[orderBy] === null) {
9 | return 1;
10 | }
11 | if (b[orderBy] === null) {
12 | return -1;
13 | }
14 | if (b[orderBy] < a[orderBy]) {
15 | return -1;
16 | }
17 | if (b[orderBy] > a[orderBy]) {
18 | return 1;
19 | }
20 | return 0;
21 | }
22 |
23 | export function getComparator(order, orderBy) {
24 | return order === 'desc'
25 | ? (a, b) => descendingComparator(a, b, orderBy)
26 | : (a, b) => -descendingComparator(a, b, orderBy);
27 | }
28 |
--------------------------------------------------------------------------------
/src/config-global.js:
--------------------------------------------------------------------------------
1 | import { paths } from 'src/routes/paths';
2 |
3 | // API
4 | // ----------------------------------------------------------------------
5 |
6 | export const HOST_API = import.meta.env.VITE_HOST_API;
7 | export const ASSETS_API = import.meta.env.VITE_ASSETS_API;
8 |
9 | export const FIREBASE_API = {
10 | apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
11 | authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
12 | projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
13 | storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET,
14 | messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID,
15 | appId: import.meta.env.VITE_FIREBASE_APPID,
16 | measurementId: import.meta.env.VITE_FIREBASE_MEASUREMENT_ID,
17 | };
18 |
19 | export const AMPLIFY_API = {
20 | userPoolId: import.meta.env.VITE_AWS_AMPLIFY_USER_POOL_ID,
21 | userPoolWebClientId: import.meta.env.VITE_AWS_AMPLIFY_USER_POOL_WEB_CLIENT_ID,
22 | region: import.meta.env.VITE_AWS_AMPLIFY_REGION,
23 | };
24 |
25 | export const AUTH0_API = {
26 | clientId: import.meta.env.VITE_AUTH0_CLIENT_ID,
27 | domain: import.meta.env.VITE_AUTH0_DOMAIN,
28 | callbackUrl: import.meta.env.VITE_AUTH0_CALLBACK_URL,
29 | };
30 |
31 | export const MAPBOX_API = import.meta.env.VITE_MAPBOX_API;
32 |
33 | // ROOT PATH AFTER LOGIN SUCCESSFUL
34 | export const PATH_AFTER_LOGIN = paths.dashboard.root; // as '/dashboard'
35 |
--------------------------------------------------------------------------------
/src/global.css:
--------------------------------------------------------------------------------
1 | /* scrollbar */
2 | @import 'simplebar-react/dist/simplebar.min.css';
3 |
--------------------------------------------------------------------------------
/src/hooks/use-boolean.js:
--------------------------------------------------------------------------------
1 | import { useState, useCallback } from 'react';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function useBoolean(defaultValue) {
6 | const [value, setValue] = useState(!!defaultValue);
7 |
8 | const onTrue = useCallback(() => {
9 | setValue(true);
10 | }, []);
11 |
12 | const onFalse = useCallback(() => {
13 | setValue(false);
14 | }, []);
15 |
16 | const onToggle = useCallback(() => {
17 | setValue((prev) => !prev);
18 | }, []);
19 |
20 | return {
21 | value,
22 | onTrue,
23 | onFalse,
24 | onToggle,
25 | setValue,
26 | };
27 | }
28 |
--------------------------------------------------------------------------------
/src/hooks/use-event-listener.js:
--------------------------------------------------------------------------------
1 | import { useRef, useEffect, useLayoutEffect } from 'react';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
6 |
7 | export function useEventListener(eventName, handler, element, options) {
8 | // Create a ref that stores handler
9 | const savedHandler = useRef(handler);
10 |
11 | useIsomorphicLayoutEffect(() => {
12 | savedHandler.current = handler;
13 | }, [handler]);
14 |
15 | useEffect(() => {
16 | // Define the listening target
17 | const targetElement = element?.current || window;
18 | if (!(targetElement && targetElement.addEventListener)) {
19 | return;
20 | }
21 |
22 | // Create event listener that calls handler function stored in ref
23 | const eventListener = (event) => savedHandler.current(event);
24 |
25 | targetElement.addEventListener(eventName, eventListener, options);
26 |
27 | // Remove event listener on cleanup
28 | // eslint-disable-next-line consistent-return
29 | return () => {
30 | targetElement.removeEventListener(eventName, eventListener);
31 | };
32 | }, [eventName, element, options]);
33 | }
34 |
--------------------------------------------------------------------------------
/src/hooks/use-mocked-user.js:
--------------------------------------------------------------------------------
1 | import { _mock } from 'src/_mock';
2 |
3 | // TO GET THE USER FROM THE AUTHCONTEXT, YOU CAN USE
4 |
5 | // CHANGE:
6 | // import { useMockedUser } from 'src/hooks/use-mocked-user';
7 | // const { user } = useMockedUser();
8 |
9 | // TO:
10 | // import { useAuthContext } from 'src/auth/hooks';
11 | // const { user } = useAuthContext();
12 |
13 | // ----------------------------------------------------------------------
14 |
15 | export function useMockedUser() {
16 | const user = {
17 | id: '8864c717-587d-472a-929a-8e5f298024da-0',
18 | displayName: 'Jaydon Frankie',
19 | email: 'demo@minimals.cc',
20 | password: 'demo1234',
21 | photoURL: _mock.image.avatar(24),
22 | phoneNumber: '+40 777666555',
23 | country: 'United States',
24 | address: '90210 Broadway Blvd',
25 | state: 'California',
26 | city: 'San Francisco',
27 | zipCode: '94116',
28 | about: 'Praesent turpis. Phasellus viverra nulla ut metus varius laoreet. Phasellus tempus.',
29 | role: 'admin',
30 | isPublic: true,
31 | };
32 |
33 | return { user };
34 | }
35 |
--------------------------------------------------------------------------------
/src/hooks/use-off-set-top.js:
--------------------------------------------------------------------------------
1 | import { useScroll } from 'framer-motion';
2 | import { useMemo, useState, useEffect, useCallback } from 'react';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function useOffSetTop(top = 0, options) {
7 | const { scrollY } = useScroll(options);
8 |
9 | const [value, setValue] = useState(false);
10 |
11 | const onOffSetTop = useCallback(() => {
12 | scrollY.on('change', (scrollHeight) => {
13 | if (scrollHeight > top) {
14 | setValue(true);
15 | } else {
16 | setValue(false);
17 | }
18 | });
19 | }, [scrollY, top]);
20 |
21 | useEffect(() => {
22 | onOffSetTop();
23 | }, [onOffSetTop]);
24 |
25 | const memoizedValue = useMemo(() => value, [value]);
26 |
27 | return memoizedValue;
28 | }
29 |
30 | // Usage
31 | // const offset = useOffSetTop(100);
32 |
33 | // Or
34 | // const offset = useOffSetTop(100, {
35 | // container: ref,
36 | // });
37 |
--------------------------------------------------------------------------------
/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 | // eslint-disable-next-line react-hooks/rules-of-hooks
42 | const matches = useMediaQuery(theme.breakpoints.up(key));
43 |
44 | return !output && matches ? key : output;
45 | }, null) || 'xs'
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/layouts/common/header-shadow.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import Box from '@mui/material/Box';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export default function HeaderShadow({ sx, ...other }) {
8 | return (
9 | theme.customShadows.z8,
22 | ...sx,
23 | }}
24 | {...other}
25 | />
26 | );
27 | }
28 |
29 | HeaderShadow.propTypes = {
30 | sx: PropTypes.object,
31 | };
32 |
--------------------------------------------------------------------------------
/src/layouts/compact/index.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | import Stack from '@mui/material/Stack';
4 | import Container from '@mui/material/Container';
5 |
6 | import Header from '../common/header-simple';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export default function CompactLayout({ children }) {
11 | return (
12 | <>
13 |
14 |
15 |
16 |
26 | {children}
27 |
28 |
29 | >
30 | );
31 | }
32 |
33 | CompactLayout.propTypes = {
34 | children: PropTypes.node,
35 | };
36 |
--------------------------------------------------------------------------------
/src/layouts/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 | W_VERTICAL: 280,
11 | W_MINI: 88,
12 | };
13 |
--------------------------------------------------------------------------------
/src/layouts/dashboard/nav-mini.jsx:
--------------------------------------------------------------------------------
1 | import Box from '@mui/material/Box';
2 | import Stack from '@mui/material/Stack';
3 |
4 | import { useMockedUser } from 'src/hooks/use-mocked-user';
5 |
6 | import { hideScroll } from 'src/theme/css';
7 |
8 | import Logo from 'src/components/logo';
9 | import { NavSectionMini } from 'src/components/nav-section';
10 |
11 | import { NAV } from '../config-layout';
12 | import { useNavData } from './config-navigation';
13 | import NavToggleButton from '../common/nav-toggle-button';
14 |
15 | // ----------------------------------------------------------------------
16 |
17 | export default function NavMini() {
18 | const { user } = useMockedUser();
19 |
20 | const navData = useNavData();
21 |
22 | return (
23 |
29 |
35 |
36 | `dashed 1px ${theme.palette.divider}`,
43 | ...hideScroll.x,
44 | }}
45 | >
46 |
47 |
48 |
54 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import { Suspense } from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import { BrowserRouter } from 'react-router-dom';
4 | import { HelmetProvider } from 'react-helmet-async';
5 |
6 | import App from './app';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | const root = ReactDOM.createRoot(document.getElementById('root'));
11 |
12 | root.render(
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/src/pages/404.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import { NotFoundView } from 'src/sections/error';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export default function NotFoundPage() {
8 | return (
9 | <>
10 |
11 | 404 Page Not Found!
12 |
13 |
14 |
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/auth/jwt/login.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import { JwtLoginView } from 'src/sections/auth/jwt';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export default function LoginPage() {
8 | return (
9 | <>
10 |
11 | Jwt: Login
12 |
13 |
14 |
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/auth/jwt/register.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import { JwtRegisterView } from 'src/sections/auth/jwt';
4 |
5 | export default function RegisterPage() {
6 | return (
7 | <>
8 |
9 | Jwt: Register
10 |
11 |
12 |
13 | >
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/pages/dashboard/Address.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import AddressPanel from 'src/sections/address/view';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | const Address = () => (
8 | <>
9 |
10 | Pay Crypto | Address
11 |
12 |
13 |
14 | >
15 | )
16 |
17 | export default Address;
--------------------------------------------------------------------------------
/src/pages/dashboard/CashOut.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import Cashout from 'src/sections/cashout/view';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export default function Page() {
8 | return (
9 | <>
10 |
11 | Dashboard: CashOut
12 |
13 |
14 |
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/dashboard/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import Home from 'src/sections/dashboard/view';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | const Dashboard = () => (
8 | <>
9 |
10 | Dashboard: Home
11 |
12 |
13 |
14 | >
15 | )
16 |
17 | export default Dashboard;
--------------------------------------------------------------------------------
/src/pages/dashboard/Profile.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import ProfilePanel from 'src/sections/profile/View';
4 |
5 | const Address = () => (
6 | <>
7 |
8 | Pay Crypto | Profile
9 |
10 |
11 |
12 | >
13 | )
14 |
15 | export default Address;
--------------------------------------------------------------------------------
/src/pages/dashboard/Transaction.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import FourView from 'src/sections/transaction/view';
4 |
5 | const Transaction = () => (
6 | <>
7 |
8 | Dashboard: Transactions
9 |
10 |
11 |
12 | >
13 | )
14 |
15 | export default Transaction;
--------------------------------------------------------------------------------
/src/pages/dashboard/User.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import UserPanel from 'src/sections/user/view';
4 |
5 | const User = () => (
6 | <>
7 |
8 | Pay Crypto | User
9 |
10 |
11 |
12 | >
13 | )
14 |
15 | export default User;
--------------------------------------------------------------------------------
/src/pages/dashboard/Withdraw.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import TwoView from 'src/sections/withdraw/view';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export default function Page() {
8 | return (
9 | <>
10 |
11 | Dashboard: Withdraw
12 |
13 |
14 |
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/pages/dashboard/six.jsx:
--------------------------------------------------------------------------------
1 | import { Helmet } from 'react-helmet-async';
2 |
3 | import SixView from 'src/sections/six/view';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export default function Page() {
8 | return (
9 | <>
10 |
11 | Dashboard: Six
12 |
13 |
14 |
15 | >
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/routes/components/index.js:
--------------------------------------------------------------------------------
1 | export { default as RouterLink } from './router-link';
2 |
--------------------------------------------------------------------------------
/src/routes/components/router-link.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { forwardRef } from 'react';
3 | import { Link } from 'react-router-dom';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | const RouterLink = forwardRef(({ href, ...other }, ref) => );
8 |
9 | RouterLink.propTypes = {
10 | href: PropTypes.string,
11 | };
12 |
13 | export default RouterLink;
14 |
--------------------------------------------------------------------------------
/src/routes/hooks/index.js:
--------------------------------------------------------------------------------
1 | //
2 | export { useParams } from './use-params';
3 | export { useRouter } from './use-router';
4 | export { usePathname } from './use-pathname';
5 | export { useActiveLink } from './use-active-link';
6 | export { useSearchParams } from './use-search-params';
7 |
--------------------------------------------------------------------------------
/src/routes/hooks/use-active-link.js:
--------------------------------------------------------------------------------
1 | import { matchPath, useLocation } from 'react-router-dom';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function useActiveLink(path, deep = true) {
6 | const { pathname } = useLocation();
7 |
8 | const normalActive = path ? !!matchPath({ path, end: true }, pathname) : false;
9 |
10 | const deepActive = path ? !!matchPath({ path, end: false }, pathname) : false;
11 |
12 | return deep ? deepActive : normalActive;
13 | }
14 |
--------------------------------------------------------------------------------
/src/routes/hooks/use-params.js:
--------------------------------------------------------------------------------
1 | import { useMemo } from 'react';
2 | import { useParams as _useParams } from 'react-router-dom';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function useParams() {
7 | const params = _useParams();
8 |
9 | return useMemo(() => params, [params]);
10 | }
11 |
--------------------------------------------------------------------------------
/src/routes/hooks/use-pathname.js:
--------------------------------------------------------------------------------
1 | import { useMemo } from 'react';
2 | import { useLocation } from 'react-router-dom';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function usePathname() {
7 | const { pathname } = useLocation();
8 |
9 | return useMemo(() => pathname, [pathname]);
10 | }
11 |
--------------------------------------------------------------------------------
/src/routes/hooks/use-router.js:
--------------------------------------------------------------------------------
1 | import { useMemo } from 'react';
2 | import { useNavigate } from 'react-router-dom';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function useRouter() {
7 | const navigate = useNavigate();
8 |
9 | const router = useMemo(
10 | () => ({
11 | back: () => navigate(-1),
12 | forward: () => navigate(1),
13 | reload: () => window.location.reload(),
14 | push: (href) => navigate(href),
15 | replace: (href) => navigate(href, { replace: true }),
16 | }),
17 | [navigate]
18 | );
19 |
20 | return router;
21 | }
22 |
--------------------------------------------------------------------------------
/src/routes/hooks/use-search-params.js:
--------------------------------------------------------------------------------
1 | import { useMemo } from 'react';
2 | import { useSearchParams as _useSearchParams } from 'react-router-dom';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function useSearchParams() {
7 | const [searchParams] = _useSearchParams();
8 |
9 | return useMemo(() => searchParams, [searchParams]);
10 | }
11 |
--------------------------------------------------------------------------------
/src/routes/paths.js:
--------------------------------------------------------------------------------
1 | const ROOTS = {
2 | AUTH: '/auth',
3 | DASHBOARD: '/dashboard',
4 | };
5 |
6 | export const paths = {
7 | // AUTH
8 | auth: {
9 | jwt: {
10 | login: `${ROOTS.AUTH}/jwt/login`,
11 | },
12 | },
13 |
14 | // DASHBOARD
15 | dashboard: {
16 | root: ROOTS.DASHBOARD,
17 | profile: `${ROOTS.DASHBOARD}/profile`,
18 | address: `${ROOTS.DASHBOARD}/address`,
19 | transaction: `${ROOTS.DASHBOARD}/transaction`,
20 | withdraw: `${ROOTS.DASHBOARD}/withdraw`,
21 | cashout: `${ROOTS.DASHBOARD}/cashout`,
22 | user: `${ROOTS.DASHBOARD}/user`,
23 | },
24 | };
25 |
--------------------------------------------------------------------------------
/src/routes/sections/auth.jsx:
--------------------------------------------------------------------------------
1 | import { lazy, Suspense } from 'react';
2 | import { Outlet } from 'react-router-dom';
3 |
4 | import { GuestGuard } from 'src/auth/guard';
5 | import AuthClassicLayout from 'src/layouts/auth/classic';
6 |
7 | import { SplashScreen } from 'src/components/loading-screen';
8 |
9 | // JWT
10 | const JwtLoginPage = lazy(() => import('src/pages/auth/jwt/login'));
11 |
12 | const authJwt = {
13 | path: 'jwt',
14 | element: (
15 |
16 | }>
17 |
18 |
19 |
20 | ),
21 | children: [
22 | {
23 | path: 'login',
24 | element: (
25 |
26 |
27 |
28 | ),
29 | }
30 | ],
31 | };
32 |
33 | export const authRoutes = [
34 | {
35 | path: 'auth',
36 | children: [authJwt],
37 | },
38 | ];
39 |
--------------------------------------------------------------------------------
/src/routes/sections/index.jsx:
--------------------------------------------------------------------------------
1 | import { Navigate, useRoutes } from 'react-router-dom';
2 |
3 | import { PATH_AFTER_LOGIN } from 'src/config-global';
4 |
5 | import { mainRoutes } from './main';
6 | import { authRoutes } from './auth';
7 | import { dashboardRoutes } from './dashboard';
8 |
9 | // ----------------------------------------------------------------------
10 |
11 | export default function Router() {
12 | return useRoutes([
13 | {
14 | path: '/',
15 | element: ,
16 | },
17 |
18 | // Auth routes
19 | ...authRoutes,
20 |
21 | // Dashboard routes
22 | ...dashboardRoutes,
23 |
24 | // Main routes
25 | ...mainRoutes,
26 |
27 | // No match 404
28 | { path: '*', element: },
29 | ]);
30 | }
31 |
--------------------------------------------------------------------------------
/src/routes/sections/main.jsx:
--------------------------------------------------------------------------------
1 | import { lazy } from 'react';
2 | import { Outlet } from 'react-router-dom';
3 |
4 | import CompactLayout from 'src/layouts/compact';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | const Page404 = lazy(() => import('src/pages/404'));
9 |
10 | // ----------------------------------------------------------------------
11 |
12 | export const mainRoutes = [
13 | {
14 | element: (
15 |
16 |
17 |
18 | ),
19 | children: [{ path: '404', element: }],
20 | },
21 | ];
22 |
--------------------------------------------------------------------------------
/src/sections/address/view.jsx:
--------------------------------------------------------------------------------
1 | import Card from '@mui/material/Card';
2 | import Stack from '@mui/material/Stack';
3 | import Container from '@mui/material/Container';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import ComponentBlock from 'src/components/component-block';
7 | import { useSettingsContext } from 'src/components/settings';
8 |
9 | import Table from 'src/sections/address/Table';
10 |
11 | const AddressPanel = () => {
12 | const settings = useSettingsContext();
13 |
14 | return (
15 |
16 | Address
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
29 | export default AddressPanel;
--------------------------------------------------------------------------------
/src/sections/auth/jwt/index.js:
--------------------------------------------------------------------------------
1 | export { default as JwtLoginView } from './jwt-login-view';
2 | export { default as JwtRegisterView } from './jwt-register-view';
3 |
--------------------------------------------------------------------------------
/src/sections/cashout/view.jsx:
--------------------------------------------------------------------------------
1 | import Card from '@mui/material/Card';
2 | import Stack from '@mui/material/Stack';
3 | import Container from '@mui/material/Container';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import ComponentBlock from 'src/components/component-block';
7 | import { useSettingsContext } from 'src/components/settings';
8 |
9 | import Table from 'src/sections/cashout/Table';
10 |
11 | const CashOutPanel = () => {
12 | const settings = useSettingsContext();
13 |
14 | return (
15 |
16 | CashOut
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
29 | export default CashOutPanel;
--------------------------------------------------------------------------------
/src/sections/error/403-view.jsx:
--------------------------------------------------------------------------------
1 | import { m } from 'framer-motion';
2 |
3 | import Button from '@mui/material/Button';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import { RouterLink } from 'src/routes/components';
7 |
8 | import CompactLayout from 'src/layouts/compact';
9 | import { ForbiddenIllustration } from 'src/assets/illustrations';
10 |
11 | import { varBounce, MotionContainer } from 'src/components/animate';
12 |
13 | // ----------------------------------------------------------------------
14 |
15 | export default function View403() {
16 | return (
17 |
18 |
19 |
20 |
21 | No permission
22 |
23 |
24 |
25 |
26 |
27 | The page you're trying access has restricted access.
28 |
29 | Please refer to your system administrator
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/src/sections/error/500-view.jsx:
--------------------------------------------------------------------------------
1 | import { m } from 'framer-motion';
2 |
3 | import Button from '@mui/material/Button';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import { RouterLink } from 'src/routes/components';
7 |
8 | import CompactLayout from 'src/layouts/compact';
9 | import { SeverErrorIllustration } from 'src/assets/illustrations';
10 |
11 | import { varBounce, MotionContainer } from 'src/components/animate';
12 |
13 | // ----------------------------------------------------------------------
14 |
15 | export default function Page500() {
16 | return (
17 |
18 |
19 |
20 |
21 | 500 Internal Server Error
22 |
23 |
24 |
25 |
26 |
27 | There was an error, please try again later.
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
39 |
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/src/sections/error/index.js:
--------------------------------------------------------------------------------
1 | export { default as View403 } from './403-view';
2 | export { default as View500 } from './500-view';
3 | export { default as NotFoundView } from './not-found-view';
4 |
--------------------------------------------------------------------------------
/src/sections/error/not-found-view.jsx:
--------------------------------------------------------------------------------
1 | import { m } from 'framer-motion';
2 |
3 | import Button from '@mui/material/Button';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import { RouterLink } from 'src/routes/components';
7 |
8 | import CompactLayout from 'src/layouts/compact';
9 | import { PageNotFoundIllustration } from 'src/assets/illustrations';
10 |
11 | import { varBounce, MotionContainer } from 'src/components/animate';
12 |
13 | // ----------------------------------------------------------------------
14 |
15 | export default function NotFoundView() {
16 | return (
17 |
18 |
19 |
20 |
21 | Sorry, Page Not Found!
22 |
23 |
24 |
25 |
26 |
27 | Sorry, we couldn’t find the page you’re looking for. Perhaps you’ve mistyped the URL? Be
28 | sure to check your spelling.
29 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
44 |
45 |
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/src/sections/profile/View.jsx:
--------------------------------------------------------------------------------
1 | import Stack from '@mui/material/Stack';
2 | import Container from '@mui/material/Container';
3 | import Typography from '@mui/material/Typography';
4 |
5 | import ComponentBlock from 'src/components/component-block';
6 | import { useSettingsContext } from 'src/components/settings';
7 |
8 | import Table from 'src/sections/profile/Table';
9 |
10 | const CashOutPanel = () => {
11 | const settings = useSettingsContext();
12 |
13 | return (
14 |
15 | Account Overview
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 | }
25 |
26 | export default CashOutPanel;
--------------------------------------------------------------------------------
/src/sections/six/view.jsx:
--------------------------------------------------------------------------------
1 | import Box from '@mui/material/Box';
2 | import { alpha } from '@mui/material/styles';
3 | import Container from '@mui/material/Container';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import { useSettingsContext } from 'src/components/settings';
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export default function SixView() {
11 | const settings = useSettingsContext();
12 |
13 | return (
14 |
15 | Page Six
16 |
17 | alpha(theme.palette.grey[500], 0.04),
24 | border: (theme) => `dashed 1px ${theme.palette.divider}`,
25 | }}
26 | />
27 |
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/sections/transaction/view.jsx:
--------------------------------------------------------------------------------
1 | import Card from '@mui/material/Card';
2 | import Stack from '@mui/material/Stack';
3 | import Container from '@mui/material/Container';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import ComponentBlock from 'src/components/component-block';
7 | import { useSettingsContext } from 'src/components/settings';
8 |
9 | import TransactionTable from "src/sections/transaction/Table";
10 |
11 | const TransactionPanel = () => {
12 | const settings = useSettingsContext();
13 |
14 | return (
15 |
16 | Transaction
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
29 | export default TransactionPanel;
--------------------------------------------------------------------------------
/src/sections/user/view.jsx:
--------------------------------------------------------------------------------
1 | import Card from "@mui/material/Card";
2 | import Stack from "@mui/material/Stack";
3 | import Container from '@mui/material/Container';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import ComponentBlock from 'src/components/component-block';
7 | import { useSettingsContext } from 'src/components/settings';
8 |
9 | import UserTable from "src/sections/user/Table";
10 |
11 | const UserPanel = () => {
12 | const settings = useSettingsContext();
13 |
14 | return (
15 |
16 | User
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | )
27 | }
28 |
29 | export default UserPanel;
--------------------------------------------------------------------------------
/src/sections/withdraw/view.jsx:
--------------------------------------------------------------------------------
1 | import Card from '@mui/material/Card';
2 | import Stack from '@mui/material/Stack';
3 | import Container from '@mui/material/Container';
4 | import Typography from '@mui/material/Typography';
5 |
6 | import ComponentBlock from 'src/components/component-block';
7 | import { useSettingsContext } from 'src/components/settings';
8 |
9 | import Withdraw from "src/sections/withdraw/Table";
10 |
11 | const WithdrawPanel = () => {
12 | const settings = useSettingsContext();
13 |
14 | return (
15 |
16 | Withdraw
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
29 | export default WithdrawPanel;
--------------------------------------------------------------------------------
/src/theme/custom-shadows.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 |
3 | import { grey, info, error, common, primary, success, warning, secondary } from './palette';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export function customShadows(mode) {
8 | const color = mode === 'light' ? grey[500] : common.black;
9 |
10 | const transparent = alpha(color, 0.16);
11 |
12 | return {
13 | z1: `0 1px 2px 0 ${transparent}`,
14 | z4: `0 4px 8px 0 ${transparent}`,
15 | z8: `0 8px 16px 0 ${transparent}`,
16 | z12: `0 12px 24px -4px ${transparent}`,
17 | z16: `0 16px 32px -4px ${transparent}`,
18 | z20: `0 20px 40px -4px ${transparent}`,
19 | z24: `0 24px 48px 0 ${transparent}`,
20 | //
21 | card: `0 0 2px 0 ${alpha(color, 0.2)}, 0 12px 24px -4px ${alpha(color, 0.12)}`,
22 | dropdown: `0 0 2px 0 ${alpha(color, 0.24)}, -20px 20px 40px -4px ${alpha(color, 0.24)}`,
23 | dialog: `-40px 40px 80px -8px ${alpha(common.black, 0.24)}`,
24 | //
25 | primary: `0 8px 16px 0 ${alpha(primary.main, 0.24)}`,
26 | info: `0 8px 16px 0 ${alpha(info.main, 0.24)}`,
27 | secondary: `0 8px 16px 0 ${alpha(secondary.main, 0.24)}`,
28 | success: `0 8px 16px 0 ${alpha(success.main, 0.24)}`,
29 | warning: `0 8px 16px 0 ${alpha(warning.main, 0.24)}`,
30 | error: `0 8px 16px 0 ${alpha(error.main, 0.24)}`,
31 | };
32 | }
33 |
--------------------------------------------------------------------------------
/src/theme/options/contrast.js:
--------------------------------------------------------------------------------
1 | import { grey } from '../palette';
2 | import { customShadows } from '../custom-shadows';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | export function createContrast(contrast, mode) {
7 | const theme = {
8 | ...(contrast === 'bold' &&
9 | mode === 'light' && {
10 | palette: {
11 | background: {
12 | default: grey[200],
13 | },
14 | },
15 | }),
16 | };
17 |
18 | const components = {
19 | ...(contrast === 'bold' && {
20 | MuiCard: {
21 | styleOverrides: {
22 | root: {
23 | boxShadow: customShadows(mode).z1,
24 | },
25 | },
26 | },
27 | }),
28 | };
29 |
30 | return {
31 | ...theme,
32 | components,
33 | };
34 | }
35 |
--------------------------------------------------------------------------------
/src/theme/options/right-to-left.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 | import PropTypes from 'prop-types';
3 | import createCache from '@emotion/cache';
4 | import rtlPlugin from 'stylis-plugin-rtl';
5 | import { CacheProvider } from '@emotion/react';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | export default function RTL({ children, themeDirection }) {
10 | useEffect(() => {
11 | document.dir = themeDirection;
12 | }, [themeDirection]);
13 |
14 | const cacheRtl = createCache({
15 | key: 'rtl',
16 | prepend: true,
17 | // https://github.com/styled-components/stylis-plugin-rtl/issues/35
18 | stylisPlugins: [rtlPlugin],
19 | });
20 |
21 | if (themeDirection === 'rtl') {
22 | return {children};
23 | }
24 |
25 | return <>{children}>;
26 | }
27 |
28 | RTL.propTypes = {
29 | children: PropTypes.node,
30 | themeDirection: PropTypes.oneOf(['rtl', 'ltr']),
31 | };
32 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/accordion.js:
--------------------------------------------------------------------------------
1 | import { accordionClasses } from '@mui/material/Accordion';
2 | import { typographyClasses } from '@mui/material/Typography';
3 | import { accordionSummaryClasses } from '@mui/material/AccordionSummary';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export function accordion(theme) {
8 | return {
9 | MuiAccordion: {
10 | styleOverrides: {
11 | root: {
12 | backgroundColor: 'transparent',
13 | [`&.${accordionClasses.expanded}`]: {
14 | boxShadow: theme.customShadows.z8,
15 | borderRadius: theme.shape.borderRadius,
16 | backgroundColor: theme.palette.background.paper,
17 | },
18 | [`&.${accordionClasses.disabled}`]: {
19 | backgroundColor: 'transparent',
20 | },
21 | },
22 | },
23 | },
24 | MuiAccordionSummary: {
25 | styleOverrides: {
26 | root: {
27 | paddingLeft: theme.spacing(2),
28 | paddingRight: theme.spacing(1),
29 | [`&.${accordionSummaryClasses.disabled}`]: {
30 | opacity: 1,
31 | color: theme.palette.action.disabled,
32 | [`& .${typographyClasses.root}`]: {
33 | color: 'inherit',
34 | },
35 | },
36 | },
37 | expandIconWrapper: {
38 | color: 'inherit',
39 | },
40 | },
41 | },
42 | };
43 | }
44 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/appbar.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function appBar(theme) {
4 | return {
5 | MuiAppBar: {
6 | styleOverrides: {
7 | root: {
8 | boxShadow: 'none',
9 | },
10 | },
11 | },
12 | };
13 | }
14 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/autocomplete.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 | import { svgIconClasses } from '@mui/material/SvgIcon';
3 | import { autocompleteClasses } from '@mui/material/Autocomplete';
4 |
5 | import { paper, menuItem } from '../../css';
6 |
7 | // ----------------------------------------------------------------------
8 |
9 | export function autocomplete(theme) {
10 | return {
11 | MuiAutocomplete: {
12 | styleOverrides: {
13 | root: {
14 | [`& span.${autocompleteClasses.tag}`]: {
15 | ...theme.typography.subtitle2,
16 | height: 24,
17 | minWidth: 24,
18 | lineHeight: '24px',
19 | textAlign: 'center',
20 | padding: theme.spacing(0, 0.75),
21 | color: theme.palette.text.secondary,
22 | borderRadius: theme.shape.borderRadius,
23 | backgroundColor: alpha(theme.palette.grey[500], 0.16),
24 | },
25 | },
26 | paper: {
27 | ...paper({ theme, dropdown: true }),
28 | },
29 | listbox: {
30 | padding: 0,
31 | [`& .${autocompleteClasses.option}`]: {
32 | ...menuItem(theme),
33 | },
34 | },
35 | endAdornment: {
36 | [`& .${svgIconClasses.root}`]: {
37 | width: 18,
38 | height: 18,
39 | },
40 | },
41 | },
42 | },
43 | };
44 | }
45 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/backdrop.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function backdrop(theme) {
6 | return {
7 | MuiBackdrop: {
8 | styleOverrides: {
9 | root: {
10 | backgroundColor: alpha(theme.palette.grey[900], 0.8),
11 | },
12 | invisible: {
13 | background: 'transparent',
14 | },
15 | },
16 | },
17 | };
18 | }
19 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/breadcrumbs.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function breadcrumbs(theme) {
4 | return {
5 | MuiBreadcrumbs: {
6 | styleOverrides: {
7 | separator: {
8 | marginLeft: theme.spacing(2),
9 | marginRight: theme.spacing(2),
10 | },
11 | li: {
12 | display: 'inline-flex',
13 | margin: theme.spacing(0.25, 0),
14 | '& > *': {
15 | ...theme.typography.body2,
16 | },
17 | },
18 | },
19 | },
20 | };
21 | }
22 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/card.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function card(theme) {
4 | return {
5 | MuiCard: {
6 | styleOverrides: {
7 | root: {
8 | position: 'relative',
9 | boxShadow: theme.customShadows.card,
10 | borderRadius: theme.shape.borderRadius * 2,
11 | zIndex: 0, // Fix Safari overflow: hidden with border radius
12 | },
13 | },
14 | },
15 | MuiCardHeader: {
16 | styleOverrides: {
17 | root: {
18 | padding: theme.spacing(3, 3, 0),
19 | },
20 | },
21 | },
22 | MuiCardContent: {
23 | styleOverrides: {
24 | root: {
25 | padding: theme.spacing(3),
26 | },
27 | },
28 | },
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/checkbox.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function checkbox(theme) {
4 | return {
5 | MuiCheckbox: {
6 | styleOverrides: {
7 | root: {
8 | padding: theme.spacing(1),
9 | },
10 | },
11 | },
12 | };
13 | }
14 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/css-baseline.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function cssBaseline(theme) {
4 | return {
5 | MuiCssBaseline: {
6 | styleOverrides: {
7 | '*': {
8 | boxSizing: 'border-box',
9 | },
10 | html: {
11 | margin: 0,
12 | padding: 0,
13 | width: '100%',
14 | height: '100%',
15 | WebkitOverflowScrolling: 'touch',
16 | },
17 | body: {
18 | margin: 0,
19 | padding: 0,
20 | width: '100%',
21 | height: '100%',
22 | },
23 | '#root, #__next': {
24 | width: '100%',
25 | height: '100%',
26 | },
27 | input: {
28 | '&[type=number]': {
29 | MozAppearance: 'textfield',
30 | '&::-webkit-outer-spin-button': {
31 | margin: 0,
32 | WebkitAppearance: 'none',
33 | },
34 | '&::-webkit-inner-spin-button': {
35 | margin: 0,
36 | WebkitAppearance: 'none',
37 | },
38 | },
39 | },
40 | img: {
41 | maxWidth: '100%',
42 | display: 'inline-block',
43 | verticalAlign: 'bottom',
44 | },
45 | },
46 | },
47 | };
48 | }
49 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/dialog.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function dialog(theme) {
4 | return {
5 | MuiDialog: {
6 | styleOverrides: {
7 | paper: ({ ownerState }) => ({
8 | boxShadow: theme.customShadows.dialog,
9 | borderRadius: theme.shape.borderRadius * 2,
10 | ...(!ownerState.fullScreen && {
11 | margin: theme.spacing(2),
12 | }),
13 | }),
14 | paperFullScreen: {
15 | borderRadius: 0,
16 | },
17 | },
18 | },
19 | MuiDialogTitle: {
20 | styleOverrides: {
21 | root: {
22 | padding: theme.spacing(3),
23 | },
24 | },
25 | },
26 | MuiDialogContent: {
27 | styleOverrides: {
28 | root: {
29 | padding: theme.spacing(0, 3),
30 | },
31 | dividers: {
32 | borderTop: 0,
33 | borderBottomStyle: 'dashed',
34 | paddingBottom: theme.spacing(3),
35 | },
36 | },
37 | },
38 | MuiDialogActions: {
39 | styleOverrides: {
40 | root: {
41 | padding: theme.spacing(3),
42 | '& > :not(:first-of-type)': {
43 | marginLeft: theme.spacing(1.5),
44 | },
45 | },
46 | },
47 | },
48 | };
49 | }
50 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/drawer.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 | import { drawerClasses } from '@mui/material/Drawer';
3 |
4 | import { paper } from '../../css';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export function drawer(theme) {
9 | const lightMode = theme.palette.mode === 'light';
10 |
11 | return {
12 | MuiDrawer: {
13 | styleOverrides: {
14 | root: ({ ownerState }) => ({
15 | ...(ownerState.variant === 'temporary' && {
16 | [`& .${drawerClasses.paper}`]: {
17 | ...paper({ theme }),
18 | ...(ownerState.anchor === 'left' && {
19 | boxShadow: `40px 40px 80px -8px ${alpha(
20 | lightMode ? theme.palette.grey[500] : theme.palette.common.black,
21 | 0.24
22 | )}`,
23 | }),
24 | ...(ownerState.anchor === 'right' && {
25 | boxShadow: `-40px 40px 80px -8px ${alpha(
26 | lightMode ? theme.palette.grey[500] : theme.palette.common.black,
27 | 0.24
28 | )}`,
29 | }),
30 | },
31 | }),
32 | }),
33 | },
34 | },
35 | };
36 | }
37 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/list.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function list(theme) {
4 | return {
5 | MuiListItemIcon: {
6 | styleOverrides: {
7 | root: {
8 | color: 'inherit',
9 | minWidth: 'auto',
10 | marginRight: theme.spacing(2),
11 | },
12 | },
13 | },
14 | MuiListItemAvatar: {
15 | styleOverrides: {
16 | root: {
17 | minWidth: 'auto',
18 | marginRight: theme.spacing(2),
19 | },
20 | },
21 | },
22 | MuiListItemText: {
23 | styleOverrides: {
24 | root: {
25 | margin: 0,
26 | },
27 | multiline: {
28 | margin: 0,
29 | },
30 | },
31 | },
32 | };
33 | }
34 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/loading-button.js:
--------------------------------------------------------------------------------
1 | import { loadingButtonClasses } from '@mui/lab/LoadingButton';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function loadingButton(theme) {
6 | return {
7 | MuiLoadingButton: {
8 | styleOverrides: {
9 | root: ({ ownerState }) => ({
10 | ...(ownerState.variant === 'soft' && {
11 | [`& .${loadingButtonClasses.loadingIndicatorStart}`]: {
12 | left: 10,
13 | },
14 | [`& .${loadingButtonClasses.loadingIndicatorEnd}`]: {
15 | right: 14,
16 | },
17 | ...(ownerState.size === 'small' && {
18 | [`& .${loadingButtonClasses.loadingIndicatorStart}`]: {
19 | left: 10,
20 | },
21 | [`& .${loadingButtonClasses.loadingIndicatorEnd}`]: {
22 | right: 10,
23 | },
24 | }),
25 | }),
26 | }),
27 | },
28 | },
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/menu.js:
--------------------------------------------------------------------------------
1 | import { menuItem } from '../../css';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function menu(theme) {
6 | return {
7 | MuiMenuItem: {
8 | styleOverrides: {
9 | root: {
10 | ...menuItem(theme),
11 | },
12 | },
13 | },
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/paper.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function paper(theme) {
6 | return {
7 | MuiPaper: {
8 | styleOverrides: {
9 | root: {
10 | backgroundImage: 'none',
11 | },
12 | outlined: {
13 | borderColor: alpha(theme.palette.grey[500], 0.16),
14 | },
15 | },
16 | },
17 | };
18 | }
19 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/popover.js:
--------------------------------------------------------------------------------
1 | import { listClasses } from '@mui/material/List';
2 |
3 | import { paper } from '../../css';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export function popover(theme) {
8 | return {
9 | MuiPopover: {
10 | styleOverrides: {
11 | paper: {
12 | ...paper({ theme, dropdown: true }),
13 | [`& .${listClasses.root}`]: {
14 | paddingTop: 0,
15 | paddingBottom: 0,
16 | },
17 | },
18 | },
19 | },
20 | };
21 | }
22 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/progress.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 | import { linearProgressClasses } from '@mui/material/LinearProgress';
3 |
4 | // ----------------------------------------------------------------------
5 |
6 | const COLORS = ['primary', 'secondary', 'info', 'success', 'warning', 'error'];
7 |
8 | // ----------------------------------------------------------------------
9 |
10 | export function progress(theme) {
11 | const rootStyles = (ownerState) => {
12 | const bufferVariant = ownerState.variant === 'buffer';
13 |
14 | const defaultStyle = {
15 | borderRadius: 4,
16 | [`& .${linearProgressClasses.bar}`]: {
17 | borderRadius: 4,
18 | },
19 | ...(bufferVariant && {
20 | backgroundColor: 'transparent',
21 | }),
22 | };
23 |
24 | const colorStyle = COLORS.map((color) => ({
25 | ...(ownerState.color === color && {
26 | backgroundColor: alpha(theme.palette[color].main, 0.24),
27 | }),
28 | }));
29 |
30 | return [defaultStyle, ...colorStyle];
31 | };
32 |
33 | return {
34 | MuiLinearProgress: {
35 | styleOverrides: {
36 | root: ({ ownerState }) => rootStyles(ownerState),
37 | },
38 | },
39 | };
40 | }
41 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/radio.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function radio(theme) {
4 | return {
5 | // CHECKBOX, RADIO, SWITCH
6 | MuiFormControlLabel: {
7 | styleOverrides: {
8 | label: {
9 | ...theme.typography.body2,
10 | },
11 | },
12 | },
13 |
14 | MuiRadio: {
15 | styleOverrides: {
16 | root: {
17 | padding: theme.spacing(1),
18 | },
19 | },
20 | },
21 | };
22 | }
23 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/rating.js:
--------------------------------------------------------------------------------
1 | import { alpha } from '@mui/material/styles';
2 | import { ratingClasses } from '@mui/material/Rating';
3 | import { svgIconClasses } from '@mui/material/SvgIcon';
4 |
5 | // ----------------------------------------------------------------------
6 |
7 | export function rating(theme) {
8 | return {
9 | MuiRating: {
10 | styleOverrides: {
11 | root: {
12 | [`&.${ratingClasses.disabled}`]: {
13 | opacity: 0.48,
14 | },
15 | },
16 | iconEmpty: {
17 | color: alpha(theme.palette.grey[500], 0.48),
18 | },
19 | sizeSmall: {
20 | [`& .${svgIconClasses.root}`]: {
21 | width: 20,
22 | height: 20,
23 | },
24 | },
25 | sizeMedium: {
26 | [`& .${svgIconClasses.root}`]: {
27 | width: 24,
28 | height: 24,
29 | },
30 | },
31 | sizeLarge: {
32 | [`& .${svgIconClasses.root}`]: {
33 | width: 28,
34 | height: 28,
35 | },
36 | },
37 | },
38 | },
39 | };
40 | }
41 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/select.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function select(theme) {
4 | return {
5 | MuiSelect: {
6 | styleOverrides: {
7 | icon: {
8 | right: 10,
9 | width: 18,
10 | height: 18,
11 | top: 'calc(50% - 9px)',
12 | },
13 | },
14 | },
15 | MuiNativeSelect: {
16 | styleOverrides: {
17 | icon: {
18 | right: 10,
19 | width: 18,
20 | height: 18,
21 | top: 'calc(50% - 9px)',
22 | },
23 | },
24 | },
25 | };
26 | }
27 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/skeleton.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function skeleton(theme) {
4 | return {
5 | MuiSkeleton: {
6 | styleOverrides: {
7 | root: {
8 | backgroundColor: theme.palette.background.neutral,
9 | },
10 | rounded: {
11 | borderRadius: theme.shape.borderRadius * 2,
12 | },
13 | },
14 | },
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/slider.js:
--------------------------------------------------------------------------------
1 | import { sliderClasses } from '@mui/material/Slider';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function slider(theme) {
6 | const lightMode = theme.palette.mode === 'light';
7 |
8 | return {
9 | MuiSlider: {
10 | styleOverrides: {
11 | root: {
12 | [`&.${sliderClasses.disabled}`]: {
13 | color: theme.palette.action.disabled,
14 | },
15 | },
16 | rail: {
17 | opacity: 0.32,
18 | },
19 | markLabel: {
20 | fontSize: 13,
21 | color: theme.palette.text.disabled,
22 | },
23 | valueLabel: {
24 | borderRadius: 8,
25 | backgroundColor: theme.palette.grey[lightMode ? 800 : 700],
26 | },
27 | },
28 | },
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/stepper.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function stepper(theme) {
4 | return {
5 | MuiStepConnector: {
6 | styleOverrides: {
7 | line: {
8 | borderColor: theme.palette.divider,
9 | },
10 | },
11 | },
12 | };
13 | }
14 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/svg-icon.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function svgIcon(theme) {
4 | return {
5 | MuiSvgIcon: {
6 | styleOverrides: {
7 | fontSizeLarge: {
8 | width: 32,
9 | height: 32,
10 | fontSize: 'inherit',
11 | },
12 | },
13 | },
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/tabs.js:
--------------------------------------------------------------------------------
1 | import { tabClasses } from '@mui/material/Tab';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function tabs(theme) {
6 | return {
7 | MuiTabs: {
8 | styleOverrides: {
9 | indicator: {
10 | backgroundColor: theme.palette.text.primary,
11 | },
12 | scrollButtons: {
13 | width: 48,
14 | borderRadius: '50%',
15 | },
16 | },
17 | },
18 | MuiTab: {
19 | styleOverrides: {
20 | root: {
21 | padding: 0,
22 | opacity: 1,
23 | minWidth: 48,
24 | minHeight: 48,
25 | fontWeight: theme.typography.fontWeightSemiBold,
26 | '&:not(:last-of-type)': {
27 | marginRight: theme.spacing(3),
28 | [theme.breakpoints.up('sm')]: {
29 | marginRight: theme.spacing(5),
30 | },
31 | },
32 | [`&:not(.${tabClasses.selected})`]: {
33 | color: theme.palette.text.secondary,
34 | },
35 | },
36 | },
37 | },
38 | };
39 | }
40 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/timeline.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function timeline(theme) {
4 | return {
5 | MuiTimelineDot: {
6 | styleOverrides: {
7 | root: {
8 | boxShadow: 'none',
9 | },
10 | },
11 | },
12 | MuiTimelineConnector: {
13 | styleOverrides: {
14 | root: {
15 | backgroundColor: theme.palette.divider,
16 | },
17 | },
18 | },
19 | };
20 | }
21 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/tooltip.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function tooltip(theme) {
4 | const lightMode = theme.palette.mode === 'light';
5 |
6 | return {
7 | MuiTooltip: {
8 | styleOverrides: {
9 | tooltip: {
10 | backgroundColor: theme.palette.grey[lightMode ? 800 : 700],
11 | },
12 | arrow: {
13 | color: theme.palette.grey[lightMode ? 800 : 700],
14 | },
15 | },
16 | },
17 | };
18 | }
19 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/tree-view.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function treeView(theme) {
4 | return {
5 | MuiTreeItem: {
6 | styleOverrides: {
7 | label: {
8 | ...theme.typography.body2,
9 | },
10 | iconContainer: {
11 | width: 'auto',
12 | },
13 | },
14 | },
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/src/theme/overrides/components/typography.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function typography(theme) {
4 | return {
5 | MuiTypography: {
6 | styleOverrides: {
7 | paragraph: {
8 | marginBottom: theme.spacing(2),
9 | },
10 | gutterBottom: {
11 | marginBottom: theme.spacing(1),
12 | },
13 | },
14 | },
15 | };
16 | }
17 |
--------------------------------------------------------------------------------
/src/utils/flatten-array.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function flattenArray(list, key = 'children') {
4 | let children = [];
5 |
6 | const flatten = list?.map((item) => {
7 | if (item[key] && item[key].length) {
8 | children = [...children, ...item[key]];
9 | }
10 | return item;
11 | });
12 |
13 | return flatten?.concat(children.length ? flattenArray(children, key) : children);
14 | }
15 |
--------------------------------------------------------------------------------
/src/utils/format-number.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line import/no-extraneous-dependencies
2 | import numeral from 'numeral';
3 |
4 | export function fNumber(number) {
5 | return numeral(number).format();
6 | }
7 |
8 | export function fCurrency(number) {
9 | const format = number ? numeral(number).format('$0,0.00') : '';
10 |
11 | return result(format, '.00');
12 | }
13 |
14 | export function fPercent(number) {
15 | const format = number ? numeral(Number(number) / 100).format('0.0%') : '';
16 |
17 | return result(format, '.0');
18 | }
19 |
20 | export function fShortenNumber(number) {
21 | const format = number ? numeral(number).format('0.00a') : '';
22 |
23 | return result(format, '.00');
24 | }
25 |
26 | export function fData(number) {
27 | const format = number ? numeral(number).format('0.0 b') : '';
28 |
29 | return result(format, '.0');
30 | }
31 |
32 | function result(format, key = '.00') {
33 | const isInteger = format.includes(key);
34 |
35 | return isInteger ? format.replace(key, '') : format;
36 | }
37 |
--------------------------------------------------------------------------------
/src/utils/format-time.js:
--------------------------------------------------------------------------------
1 | import { format, getTime, formatDistanceToNow } from 'date-fns';
2 |
3 | // ----------------------------------------------------------------------
4 |
5 | export function fDate(date, newFormat) {
6 | const fm = newFormat || 'dd MMM yyyy';
7 |
8 | return date ? format(new Date(date), fm) : '';
9 | }
10 |
11 | export function fDateTime(date, newFormat) {
12 | const fm = newFormat || 'dd MMM yyyy p';
13 |
14 | return date ? format(new Date(date), fm) : '';
15 | }
16 |
17 | export function fTimestamp(date) {
18 | return date ? getTime(new Date(date)) : '';
19 | }
20 |
21 | export function fToNow(date) {
22 | return date
23 | ? formatDistanceToNow(new Date(date), {
24 | addSuffix: true,
25 | })
26 | : '';
27 | }
28 |
--------------------------------------------------------------------------------
/src/utils/storage-available.js:
--------------------------------------------------------------------------------
1 | // ----------------------------------------------------------------------
2 |
3 | export function localStorageAvailable() {
4 | try {
5 | const key = '__some_random_key_you_are_not_going_to_use__';
6 | window.localStorage.setItem(key, key);
7 | window.localStorage.removeItem(key);
8 | return true;
9 | } catch (error) {
10 | return false;
11 | }
12 | }
13 |
14 | export function localStorageGetItem(key, defaultValue = '') {
15 | const storageAvailable = localStorageAvailable();
16 |
17 | let value;
18 |
19 | if (storageAvailable) {
20 | value = localStorage.getItem(key) || defaultValue;
21 | }
22 |
23 | return value;
24 | }
25 |
--------------------------------------------------------------------------------
/src/utils/useUserData.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/no-unresolved */
2 | import { useState, useEffect } from 'react';
3 |
4 | import axios, { endpoints } from './axios';
5 |
6 | const useUserData = (id) => {
7 | const [userData, setUserData] = useState();
8 |
9 | useEffect(() => {
10 | axios
11 | .get(endpoints.user.list)
12 | .then((response) => {
13 | setUserData(response.data.items);
14 | })
15 | .catch((error) => {
16 | console.log(error);
17 | });
18 | }, []);
19 |
20 | return {
21 | userData,
22 | };
23 | };
24 |
25 | export default useUserData;
26 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "rewrites": [
3 | {
4 | "source": "/(.*)",
5 | "destination": "/"
6 | }
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig } from 'vite';
3 | import react from '@vitejs/plugin-react-swc';
4 | import checker from 'vite-plugin-checker';
5 |
6 | // ----------------------------------------------------------------------
7 |
8 | export default defineConfig({
9 | plugins: [
10 | react(),
11 | checker({
12 | eslint: {
13 | lintCommand: 'eslint "./src/**/*.{js,jsx,ts,tsx}"',
14 | },
15 | }),
16 | ],
17 | resolve: {
18 | alias: [
19 | {
20 | find: /^~(.+)/,
21 | replacement: path.join(process.cwd(), 'node_modules/$1'),
22 | },
23 | {
24 | find: /^src(.+)/,
25 | replacement: path.join(process.cwd(), 'src/$1'),
26 | },
27 | ],
28 | },
29 | server: {
30 | port: 3031,
31 | },
32 | preview: {
33 | port: 3031,
34 | },
35 | });
36 |
--------------------------------------------------------------------------------