From 4783bd084298ba64a6a8fa8dabc0e8412e0adf55 Mon Sep 17 00:00:00 2001
From: "lauren.mieczkowski"
Date: Tue, 21 Nov 2023 09:26:01 -0700
Subject: [PATCH 001/157] added material ui version 0
---
.env.development | 6 +
.env.production | 6 +
.env.staging | 6 +
.gitignore | 16 +-
CODE_OF_CONDUCT.md | 67 -
LICENSE | 7 +
LICENSE.txt | 13 -
README.md | 95 +-
components/counter.tsx | 12 -
components/icons.tsx | 147 -
components/navbar.tsx | 94 -
components/primitives.ts | 53 -
components/theme-switch.tsx | 77 -
config/fonts.ts | 11 -
config/site.ts | 25 -
eslintrc.json | 3 -
layouts/default.tsx | 62 -
layouts/head.tsx | 20 -
next-env.d.ts | 5 -
next.config.js | 4 -
package.json | 112 +-
pages/_app.tsx | 20 -
pages/api/api.ts | 16 -
pages/documentation.tsx | 10 -
pages/index.tsx | 48 -
pages/playground.tsx | 66 -
postcss.config.js | 6 -
public/404.html | 50 +
public/favicon.ico | Bin 11416 -> 23395 bytes
public/findr_red_blocky.ico | Bin 0 -> 410598 bytes
public/img/portrait-1.jpg | Bin 0 -> 26752 bytes
public/img/portrait-2.jpg | Bin 0 -> 22907 bytes
public/img/portrait-3.jpg | Bin 0 -> 20292 bytes
public/img/startup.svg | 1 +
public/img/template-dark.png | Bin 0 -> 57551 bytes
public/img/template-light.png | Bin 0 -> 56603 bytes
public/index.html | 93 +
public/locales/en/translation.json | 431 +
public/locales/fr/translation.json | 421 +
public/logo.svg | 18 +
public/logo192.png | Bin 0 -> 3498 bytes
public/logo512.png | Bin 0 -> 10444 bytes
public/manifest.json | 25 +
public/next.svg | 1 -
public/robots.txt | 3 +
public/vercel.svg | 1 -
src/App.test.tsx | 9 +
src/App.tsx | 53 +
src/AppRoutes.tsx | 107 +
src/admin/components/AdminAppBar.tsx | 27 +
src/admin/components/AdminDrawer.tsx | 207 +
src/admin/components/AdminToolbar.tsx | 37 +
src/admin/components/RecentNotifications.tsx | 140 +
src/admin/config/activity.ts | 7 +
src/admin/config/notification.ts | 4 +
src/admin/hooks/useActivityLogs.ts | 12 +
src/admin/hooks/useNotifications.ts | 14 +
src/admin/hooks/useProfileInfo.ts | 12 +
src/admin/hooks/useUpdateProfileInfo.ts | 22 +
src/admin/pages/Admin.tsx | 41 +
src/admin/pages/Dashboard.tsx | 105 +
src/admin/pages/Faq.tsx | 79 +
src/admin/pages/HelpCenter.tsx | 136 +
src/admin/pages/Home.tsx | 38 +
src/admin/pages/Profile.tsx | 117 +
src/admin/pages/ProfileActivity.tsx | 62 +
src/admin/pages/ProfileInformation.tsx | 149 +
src/admin/pages/ProfilePassword.tsx | 122 +
src/admin/types/activityLog.ts | 7 +
src/admin/types/notification.ts | 10 +
src/admin/types/profileInfo.ts | 9 +
src/admin/widgets/AchievementWidget.tsx | 49 +
src/admin/widgets/ActivityWidget.tsx | 88 +
src/admin/widgets/BudgetWidget.tsx | 77 +
src/admin/widgets/CircleProgressWidget.tsx | 63 +
src/admin/widgets/DevicesWidget.tsx | 82 +
src/admin/widgets/FollowersWidget.tsx | 72 +
src/admin/widgets/OverviewWidget.tsx | 26 +
src/admin/widgets/PersonalTargetsWidget.tsx | 61 +
src/admin/widgets/ProgressWidget.tsx | 47 +
src/admin/widgets/SalesByAgeWidget.tsx | 80 +
src/admin/widgets/SalesByCategoryWidget.tsx | 66 +
src/admin/widgets/SalesHistoryWidget.tsx | 83 +
src/admin/widgets/TeamProgressWidget.tsx | 111 +
src/admin/widgets/ViewsWidget.tsx | 117 +
src/admin/widgets/WelcomeWidget.tsx | 43 +
src/auth/contexts/AuthProvider.tsx | 82 +
src/auth/hooks/useForgotPassword.ts | 12 +
src/auth/hooks/useForgotPasswordSubmit.ts | 21 +
src/auth/hooks/useLogin.ts | 19 +
src/auth/hooks/useLogout.ts | 13 +
src/auth/hooks/useRegister.ts | 13 +
src/auth/hooks/useUpdatePassword.ts | 21 +
src/auth/hooks/useUserInfo.ts | 14 +
src/auth/pages/ForgotPassword.tsx | 96 +
src/auth/pages/ForgotPasswordSubmit.tsx | 135 +
src/auth/pages/Login.tsx | 122 +
src/auth/pages/Register.tsx | 166 +
src/auth/types/userInfo.ts | 10 +
src/core/assets/403.svg | 1 +
src/core/assets/404.svg | 1 +
src/core/assets/confirm.svg | 1 +
src/core/assets/constructions.svg | 1 +
src/core/assets/empty.svg | 1 +
src/core/assets/error.svg | 1 +
src/core/assets/findr_ash.svg | 76 +
src/core/assets/findr_cinder.svg | 76 +
src/core/assets/findr_red.svg | 76 +
src/core/assets/findr_red_blocky.svg | 15 +
src/core/assets/help.svg | 5 +
src/core/assets/logo.svg | 11 +
src/core/assets/success.svg | 1 +
src/core/assets/welcome.svg | 1 +
src/core/components/BoxedLayout.tsx | 64 +
src/core/components/ConfirmDialog.tsx | 66 +
src/core/components/Empty.tsx | 13 +
src/core/components/Footer.tsx | 25 +
src/core/components/Loader.tsx | 31 +
src/core/components/Logo.tsx | 17 +
src/core/components/PrivateRoute.tsx | 25 +
src/core/components/QueryWrapper.tsx | 38 +
src/core/components/Result.tsx | 61 +
src/core/components/SelectToolbar.tsx | 49 +
src/core/components/SettingsDrawer.tsx | 162 +
src/core/components/SvgContainer.tsx | 28 +
src/core/config/i18n.ts | 19 +
src/core/config/layout.ts | 2 +
src/core/contexts/SettingsProvider.tsx | 96 +
src/core/contexts/SnackbarProvider.tsx | 76 +
src/core/hooks/useDateLocale.ts | 18 +
src/core/hooks/useLocalStorage.ts | 40 +
src/core/hooks/usePageTracking.ts | 25 +
src/core/pages/Forbidden.tsx | 30 +
src/core/pages/NotFound.tsx | 30 +
src/core/pages/UnderConstructions.tsx | 30 +
src/core/theme/components.tsx | 316 +
src/core/theme/index.ts | 32 +
src/core/theme/mixins.ts | 13 +
src/core/theme/palette.ts | 100 +
src/core/theme/shape.ts | 5 +
src/core/theme/transitions.ts | 13 +
src/core/theme/typography.ts | 58 +
src/core/utils/crudUtils.ts | 24 +
src/core/utils/selectUtils.ts | 22 +
src/devices/components/DeviceDialog.tsx | 227 +
src/devices/components/DeviceTable.tsx | 330 +
src/devices/hooks/useAddDevice.ts | 23 +
src/devices/hooks/useDeleteDevices.ts | 23 +
src/devices/hooks/useDevices.ts | 12 +
src/devices/hooks/useUpdateDevice.ts | 23 +
src/devices/pages/DeviceManagement.tsx | 159 +
src/devices/types/device.ts | 10 +
src/index.tsx | 21 +
src/landing/components/LandingLayout.tsx | 51 +
src/landing/pages/Landing.tsx | 137 +
src/mocks/activityLogs.json | 47 +
src/mocks/devices.json | 112 +
src/mocks/events.json | 10 +
src/mocks/iotRegistration.json | 16 +
src/mocks/notifications.json | 20 +
src/mocks/profileInfo.json | 8 +
src/mocks/server.ts | 57 +
src/mocks/userInfo.json | 10 +
src/react-app-env.d.ts | 1 +
src/reportWebVitals.ts | 15 +
src/setupTests.ts | 5 +
styles/globals.css | 3 -
tailwind.config.js | 15 -
tsconfig.json | 33 +-
tsconfig.schema.json | 1286 --
types/index.ts | 5 -
yarn.lock | 12931 +++++++++++++++++
172 files changed, 20582 insertions(+), 2169 deletions(-)
create mode 100644 .env.development
create mode 100644 .env.production
create mode 100644 .env.staging
delete mode 100644 CODE_OF_CONDUCT.md
create mode 100644 LICENSE
delete mode 100644 LICENSE.txt
delete mode 100644 components/counter.tsx
delete mode 100644 components/icons.tsx
delete mode 100644 components/navbar.tsx
delete mode 100644 components/primitives.ts
delete mode 100644 components/theme-switch.tsx
delete mode 100644 config/fonts.ts
delete mode 100644 config/site.ts
delete mode 100644 eslintrc.json
delete mode 100644 layouts/default.tsx
delete mode 100644 layouts/head.tsx
delete mode 100644 next-env.d.ts
delete mode 100644 next.config.js
delete mode 100644 pages/_app.tsx
delete mode 100644 pages/api/api.ts
delete mode 100644 pages/documentation.tsx
delete mode 100644 pages/index.tsx
delete mode 100644 pages/playground.tsx
delete mode 100644 postcss.config.js
create mode 100644 public/404.html
create mode 100644 public/findr_red_blocky.ico
create mode 100644 public/img/portrait-1.jpg
create mode 100644 public/img/portrait-2.jpg
create mode 100644 public/img/portrait-3.jpg
create mode 100644 public/img/startup.svg
create mode 100644 public/img/template-dark.png
create mode 100644 public/img/template-light.png
create mode 100644 public/index.html
create mode 100644 public/locales/en/translation.json
create mode 100644 public/locales/fr/translation.json
create mode 100644 public/logo.svg
create mode 100644 public/logo192.png
create mode 100644 public/logo512.png
create mode 100644 public/manifest.json
delete mode 100644 public/next.svg
create mode 100644 public/robots.txt
delete mode 100644 public/vercel.svg
create mode 100644 src/App.test.tsx
create mode 100644 src/App.tsx
create mode 100644 src/AppRoutes.tsx
create mode 100644 src/admin/components/AdminAppBar.tsx
create mode 100644 src/admin/components/AdminDrawer.tsx
create mode 100644 src/admin/components/AdminToolbar.tsx
create mode 100644 src/admin/components/RecentNotifications.tsx
create mode 100644 src/admin/config/activity.ts
create mode 100644 src/admin/config/notification.ts
create mode 100644 src/admin/hooks/useActivityLogs.ts
create mode 100644 src/admin/hooks/useNotifications.ts
create mode 100644 src/admin/hooks/useProfileInfo.ts
create mode 100644 src/admin/hooks/useUpdateProfileInfo.ts
create mode 100644 src/admin/pages/Admin.tsx
create mode 100644 src/admin/pages/Dashboard.tsx
create mode 100644 src/admin/pages/Faq.tsx
create mode 100644 src/admin/pages/HelpCenter.tsx
create mode 100644 src/admin/pages/Home.tsx
create mode 100644 src/admin/pages/Profile.tsx
create mode 100644 src/admin/pages/ProfileActivity.tsx
create mode 100644 src/admin/pages/ProfileInformation.tsx
create mode 100644 src/admin/pages/ProfilePassword.tsx
create mode 100644 src/admin/types/activityLog.ts
create mode 100644 src/admin/types/notification.ts
create mode 100644 src/admin/types/profileInfo.ts
create mode 100644 src/admin/widgets/AchievementWidget.tsx
create mode 100644 src/admin/widgets/ActivityWidget.tsx
create mode 100644 src/admin/widgets/BudgetWidget.tsx
create mode 100644 src/admin/widgets/CircleProgressWidget.tsx
create mode 100644 src/admin/widgets/DevicesWidget.tsx
create mode 100644 src/admin/widgets/FollowersWidget.tsx
create mode 100644 src/admin/widgets/OverviewWidget.tsx
create mode 100644 src/admin/widgets/PersonalTargetsWidget.tsx
create mode 100644 src/admin/widgets/ProgressWidget.tsx
create mode 100644 src/admin/widgets/SalesByAgeWidget.tsx
create mode 100644 src/admin/widgets/SalesByCategoryWidget.tsx
create mode 100644 src/admin/widgets/SalesHistoryWidget.tsx
create mode 100644 src/admin/widgets/TeamProgressWidget.tsx
create mode 100644 src/admin/widgets/ViewsWidget.tsx
create mode 100644 src/admin/widgets/WelcomeWidget.tsx
create mode 100644 src/auth/contexts/AuthProvider.tsx
create mode 100644 src/auth/hooks/useForgotPassword.ts
create mode 100644 src/auth/hooks/useForgotPasswordSubmit.ts
create mode 100644 src/auth/hooks/useLogin.ts
create mode 100644 src/auth/hooks/useLogout.ts
create mode 100644 src/auth/hooks/useRegister.ts
create mode 100644 src/auth/hooks/useUpdatePassword.ts
create mode 100644 src/auth/hooks/useUserInfo.ts
create mode 100644 src/auth/pages/ForgotPassword.tsx
create mode 100644 src/auth/pages/ForgotPasswordSubmit.tsx
create mode 100644 src/auth/pages/Login.tsx
create mode 100644 src/auth/pages/Register.tsx
create mode 100644 src/auth/types/userInfo.ts
create mode 100644 src/core/assets/403.svg
create mode 100644 src/core/assets/404.svg
create mode 100644 src/core/assets/confirm.svg
create mode 100644 src/core/assets/constructions.svg
create mode 100644 src/core/assets/empty.svg
create mode 100644 src/core/assets/error.svg
create mode 100644 src/core/assets/findr_ash.svg
create mode 100644 src/core/assets/findr_cinder.svg
create mode 100644 src/core/assets/findr_red.svg
create mode 100644 src/core/assets/findr_red_blocky.svg
create mode 100644 src/core/assets/help.svg
create mode 100644 src/core/assets/logo.svg
create mode 100644 src/core/assets/success.svg
create mode 100644 src/core/assets/welcome.svg
create mode 100644 src/core/components/BoxedLayout.tsx
create mode 100644 src/core/components/ConfirmDialog.tsx
create mode 100644 src/core/components/Empty.tsx
create mode 100644 src/core/components/Footer.tsx
create mode 100644 src/core/components/Loader.tsx
create mode 100644 src/core/components/Logo.tsx
create mode 100644 src/core/components/PrivateRoute.tsx
create mode 100644 src/core/components/QueryWrapper.tsx
create mode 100644 src/core/components/Result.tsx
create mode 100644 src/core/components/SelectToolbar.tsx
create mode 100644 src/core/components/SettingsDrawer.tsx
create mode 100644 src/core/components/SvgContainer.tsx
create mode 100644 src/core/config/i18n.ts
create mode 100644 src/core/config/layout.ts
create mode 100644 src/core/contexts/SettingsProvider.tsx
create mode 100644 src/core/contexts/SnackbarProvider.tsx
create mode 100644 src/core/hooks/useDateLocale.ts
create mode 100644 src/core/hooks/useLocalStorage.ts
create mode 100644 src/core/hooks/usePageTracking.ts
create mode 100644 src/core/pages/Forbidden.tsx
create mode 100644 src/core/pages/NotFound.tsx
create mode 100644 src/core/pages/UnderConstructions.tsx
create mode 100644 src/core/theme/components.tsx
create mode 100644 src/core/theme/index.ts
create mode 100644 src/core/theme/mixins.ts
create mode 100644 src/core/theme/palette.ts
create mode 100644 src/core/theme/shape.ts
create mode 100644 src/core/theme/transitions.ts
create mode 100644 src/core/theme/typography.ts
create mode 100644 src/core/utils/crudUtils.ts
create mode 100644 src/core/utils/selectUtils.ts
create mode 100644 src/devices/components/DeviceDialog.tsx
create mode 100644 src/devices/components/DeviceTable.tsx
create mode 100644 src/devices/hooks/useAddDevice.ts
create mode 100644 src/devices/hooks/useDeleteDevices.ts
create mode 100644 src/devices/hooks/useDevices.ts
create mode 100644 src/devices/hooks/useUpdateDevice.ts
create mode 100644 src/devices/pages/DeviceManagement.tsx
create mode 100644 src/devices/types/device.ts
create mode 100644 src/index.tsx
create mode 100644 src/landing/components/LandingLayout.tsx
create mode 100644 src/landing/pages/Landing.tsx
create mode 100644 src/mocks/activityLogs.json
create mode 100644 src/mocks/devices.json
create mode 100644 src/mocks/events.json
create mode 100644 src/mocks/iotRegistration.json
create mode 100644 src/mocks/notifications.json
create mode 100644 src/mocks/profileInfo.json
create mode 100644 src/mocks/server.ts
create mode 100644 src/mocks/userInfo.json
create mode 100644 src/react-app-env.d.ts
create mode 100644 src/reportWebVitals.ts
create mode 100644 src/setupTests.ts
delete mode 100644 styles/globals.css
delete mode 100644 tailwind.config.js
delete mode 100644 tsconfig.schema.json
delete mode 100644 types/index.ts
create mode 100644 yarn.lock
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..ff0a4d4
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,6 @@
+REACT_APP_NAME=FINDR (Dev)
+REACT_APP_CONTACT_MAIL=mss@dish.com
+REACT_APP_SOURCE_LINK=https://github.com/DISHDevEx/findr-orchestrator
+REACT_APP_SUPPORT_LINK=https://github.com/DISHDevEx/findr
+REACT_APP_GA_TRACKING_ID=
+REACT_APP_SENTRY_DSN=
\ No newline at end of file
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000..081a129
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,6 @@
+REACT_APP_NAME=FINDR
+REACT_APP_CONTACT_MAIL=m6v3l9@gmail.com
+REACT_APP_SOURCE_LINK=https://github.com/DISHDevEx/findr-orchestrator
+REACT_APP_SUPPORT_LINK=https://github.com/DISHDevEx/findr
+REACT_APP_GA_TRACKING_ID=
+REACT_APP_SENTRY_DSN=
\ No newline at end of file
diff --git a/.env.staging b/.env.staging
new file mode 100644
index 0000000..bec588d
--- /dev/null
+++ b/.env.staging
@@ -0,0 +1,6 @@
+REACT_APP_NAME=FINDR (Staging)
+REACT_APP_CONTACT_MAIL=m6v3l9@gmail.com
+REACT_APP_SOURCE_LINK=https://github.com/DISHDevEx/findr-orchestrator
+REACT_APP_SUPPORT_LINK=https://github.com/DISHDevEx/findr
+REACT_APP_GA_TRACKING_ID=
+REACT_APP_SENTRY_DSN=
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 5a9f3c0..bdee10e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,13 +1,10 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
-package-lock.json
-dist/
node_modules
+/node_modules
/.pnp
.pnp.js
-.next
-.npmrc
# testing
/coverage
@@ -16,18 +13,7 @@ node_modules
/build
# misc
-# Editors
-.vscode/
-.idea/
-
-# Vagrant
-.vagrant/
-
-# Mac/OSX
.DS_Store
-
-# Windows
-Thumbs.db
.env.local
.env.development.local
.env.test.local
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index 0eede75..0000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,67 +0,0 @@
-Contributor Covenant Code of Conduct
-
-Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
-
-Our Standards
-
-Examples of behavior that contributes to a positive environment for our community include:
-
-Demonstrating empathy and kindness toward other people
-Being respectful of differing opinions, viewpoints, and experiences
-Giving and gracefully accepting constructive feedback
-Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
-Focusing on what is best not just for us as individuals, but for the overall community
-Examples of unacceptable behavior include:
-
-The use of sexualized language or imagery, and sexual attention or advances of any kind
-Trolling, insulting or derogatory comments, and personal or political attacks
-Public or private harassment
-Publishing others’ private information, such as a physical or email address, without their explicit permission
-Other conduct which could reasonably be considered inappropriate in a professional setting
-Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
-
-Scope
-
-This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
-
-Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at devex@dish.com.
-
-All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident.
-
-Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
-
-Correction Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
-Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
-
-Warning
-Community Impact: A violation through a single incident or series of Actions.
-
-Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
-
-Temporary Ban
-Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
-
-Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period.
-
-Violating these terms may lead to a permanent ban.
-
-Permanent Ban
-Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
-
-Consequence: A permanent ban from any sort of public interaction within the Community.
-
-Attribution
-
-This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder. For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8999da7
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,7 @@
+Copyright 2021 Vaniya
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/LICENSE.txt b/LICENSE.txt
deleted file mode 100644
index 80f654d..0000000
--- a/LICENSE.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-© 2023, DISH Network L.L.C. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/README.md b/README.md
index 5c655d4..192fa2d 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,84 @@
-# FINDR-UI
-User Interface for FINDR service
+
+
+
-## Technologies Used
+React Material Admin
+
+react-material-admin is a free and open-source admin application including many real-world examples. It is based on React and Material-UI.
+
-- [Next.js 13](https://nextjs.org/docs/getting-started)
-- [NextUI v2](https://nextui.org/)
-- [Tailwind CSS](https://tailwindcss.com/)
-- [Tailwind Variants](https://tailwind-variants.org)
-- [TypeScript](https://www.typescriptlang.org/)
-- [Framer Motion](https://www.framer.com/motion/)
-- [next-themes](https://github.com/pacocoursey/next-themes)
+[![react-material-admin-demo](https://cdn.dribbble.com/users/6538082/screenshots/15805144/media/5687464c7190019afb748863ac6957d3.png?compress=1&resize=1200x900)](https://m6v3l9.github.io/react-material-admin/)
-## How to Use
-### Install dependencies
+## Getting Started
-```bash
-npm install
```
+#Clone repo, navigate to root and run:
+rm -rf node_modules
+rm -rf package-lock.json
+yarn config set "strict-ssl" false -g
+yarn install
+export NODE_OPTIONS=--openssl-legacy-provider
+yarn run start
-### Run the development server
+```
+
+This will automatically open [http://localhost:3000](http://localhost:3000).
+
+## Features
+
+```
+- Admin
+ - Home
+ - Dashboard
+ - FAQ
+ - Help Center
+ - Profile Activity
+ - Profile Information
+ - Profile Password
+- Auth
+ - Forgot Password
+ - Forgot Password Submit
+ - Login
+ - Register
+- Core
+ - Forbidden
+ - Not Found
+ - Under Constructions
+- Landing
+- User Management
+```
+
+## Technologies
+
+| Package | Description | Docs |
+| --------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------- |
+| Analytics | Google Analytics | [Docs](https://analytics.google.com/analytics/web/react-ga) |
+| Bundle Size Analyzer | Source map explorer | [Docs](https://create-react-app.dev/docs/analyzing-the-bundle-size) |
+| Charts | Recharts | [Docs](https://recharts.org/) |
+| CI | Github CI | [Docs]() |
+| Code Splitting | Route-based code splitting (included in React) | [Docs](https://reactjs.org/docs/code-splitting.html#route-based-code-splitting) |
+| Components | Material-UI | [Docs](https://material-ui.com/) |
+| Data Fetching | React Query Toolkit | [Docs](https://react-query.tanstack.com/) |
+| Deployment | Github Pages | [Docs](https://create-react-app.dev/docs/deployment#github-pages) |
+| Environment Variables | Dotenv (included in Create React App) | [Docs](https://create-react-app.dev/docs/adding-custom-environment-variables) |
+| Error Monitoring | Sentry | [Docs](https://docs.sentry.io/platforms/javascript/guides/react/) |
+| Form | Formik | [Docs](https://formik.org/) |
+| I18N | react-i18next | [Docs](https://react.i18next.com/) |
+| Routing | React Router | [Docs](https://reactrouter.com/) |
+| Theming (+ dark mode) | Material-UI | [Docs](https://material-ui.com/customization/theming/) |
+| Toolchain | Create React App | [Docs](https://create-react-app.dev/) |
+| TypeScript | TypeScript | [Docs](https://create-react-app.dev/docs/adding-typescript/) |
+| Validation | Yup | [Docs](https://github.com/jquense/yup) |
+
+## Coming Soon
+
+| Package | Description | Docs |
+| ------------ | ------------------------------------------- | ------------------------------- |
+| Drag & Drop | Add Projects page with Drag & Drop features | |
+| E2E Testing | Cypress | [Docs](https://www.cypress.io/) |
+| Unit Testing | Jest | [Docs](https://jestjs.io/) |
+
+## License
-```bash
-npm run dev
-```
\ No newline at end of file
+This project is licensed under the terms of the
+[MIT license](/LICENSE).
diff --git a/components/counter.tsx b/components/counter.tsx
deleted file mode 100644
index a7d9429..0000000
--- a/components/counter.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import { useState } from "react";
-import { Button } from "@nextui-org/react";
-
-export const Counter = () => {
- const [count, setCount] = useState(0);
-
- return (
- setCount(count + 1)}>
- Count is {count}
-
- );
-};
\ No newline at end of file
diff --git a/components/icons.tsx b/components/icons.tsx
deleted file mode 100644
index 35baf48..0000000
--- a/components/icons.tsx
+++ /dev/null
@@ -1,147 +0,0 @@
-import * as React from "react";
-import { IconSvgProps } from "../types";
-
-export const Logo: React.FC = ({
- size = 36,
- width,
- height,
- ...props
-}) => (
-
-
-
-);
-
-export const GithubIcon: React.FC = ({
- size = 24,
- width,
- height,
- ...props
-}) => {
- return (
-
-
-
- );
-};
-
-export const MoonFilledIcon = ({
- size = 24,
- width,
- height,
- ...props
-}: IconSvgProps) => (
-
-
-
-);
-
-export const SunFilledIcon = ({
- size = 24,
- width,
- height,
- ...props
-}: IconSvgProps) => (
-
-
-
-
-
-
-);
-
-export const SearchIcon = (props: IconSvgProps) => (
-
-
-
-
-);
-
-export const NextUILogo: React.FC = (props) => {
- const { width, height = 40 } = props;
-
- return (
-
-
-
-
-
- );
-};
diff --git a/components/navbar.tsx b/components/navbar.tsx
deleted file mode 100644
index 5454889..0000000
--- a/components/navbar.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import React from "react";
-import {
- Navbar as NextUINavbar,
- NavbarContent,
- NavbarMenu,
- NavbarMenuToggle,
- NavbarBrand,
- NavbarItem,
-} from "@nextui-org/navbar";
-import { Link } from "@nextui-org/link";
-import { Input } from "@nextui-org/input";
-import { link as linkStyles } from "@nextui-org/theme";
-import { siteConfig } from "../config/site";
-import NextLink from "next/link";
-import clsx from "clsx";
-
-import { ThemeSwitch } from "./theme-switch";
-import {
- GithubIcon,
- SearchIcon,
- Logo
-} from "./icons";
-
-export const Navbar = () => {
- const searchInput = (
-
- }
- type="search"
- />
- );
-
- return (
-
-
-
-
-
- FINDR
-
-
-
- {siteConfig.navItems.map((item) => (
-
-
- {item.label}
-
-
- ))}
-
-
-
-
-
-
-
-
-
-
- {searchInput}
-
-
-
-
-
-
-
-
-
-
-
- {searchInput}
-
-
- );
-};
diff --git a/components/primitives.ts b/components/primitives.ts
deleted file mode 100644
index 5388287..0000000
--- a/components/primitives.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { tv } from "tailwind-variants";
-
-export const title = tv({
- base: "tracking-tight inline font-semibold",
- variants: {
- color: {
- violet: "from-[#FF1CF7] to-[#b249f8]",
- yellow: "from-[#FF705B] to-[#FFB457]",
- blue: "from-[#5EA2EF] to-[#0072F5]",
- cyan: "from-[#00b7fa] to-[#01cfea]",
- green: "from-[#6FEE8D] to-[#17c964]",
- pink: "from-[#FF72E1] to-[#F54C7A]",
- foreground: "dark:from-[#FFFFFF] dark:to-[#4B4B4B]",
- },
- size: {
- sm: "text-3xl lg:text-4xl",
- md: "text-[2.3rem] lg:text-5xl leading-9",
- lg: "text-4xl lg:text-6xl",
- },
- fullWidth: {
- true: "w-full block",
- },
- },
- defaultVariants: {
- size: "md",
- },
- compoundVariants: [
- {
- color: [
- "violet",
- "yellow",
- "blue",
- "cyan",
- "green",
- "pink",
- "foreground",
- ],
- class: "bg-clip-text text-transparent bg-gradient-to-b",
- },
- ],
-});
-
-export const subtitle = tv({
- base: "w-full md:w-1/2 my-2 text-lg lg:text-xl text-default-600 block max-w-full",
- variants: {
- fullWidth: {
- true: "!w-full",
- },
- },
- defaultVariants:{
- fullWidth: true
- }
-});
diff --git a/components/theme-switch.tsx b/components/theme-switch.tsx
deleted file mode 100644
index a9fa69e..0000000
--- a/components/theme-switch.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-"use client";
-
-import { FC } from "react";
-import { VisuallyHidden } from "@react-aria/visually-hidden";
-import { SwitchProps, useSwitch } from "@nextui-org/switch";
-import { useTheme } from "next-themes";
-import {useIsSSR} from "@react-aria/ssr";
-import clsx from "clsx";
-
-import { SunFilledIcon, MoonFilledIcon } from "./icons";
-
-export interface ThemeSwitchProps {
- className?: string;
- classNames?: SwitchProps["classNames"];
-}
-
-export const ThemeSwitch: FC = ({
- className,
- classNames,
-}) => {
- const { theme, setTheme } = useTheme();
- const isSSR = useIsSSR();
-
- const onChange = () => {
- theme === "light" ? setTheme("dark") : setTheme("light");
- };
-
- const {
- Component,
- slots,
- isSelected,
- getBaseProps,
- getInputProps,
- getWrapperProps,
- } = useSwitch({
- isSelected: theme === "light",
- "aria-label": `Switch to ${theme === "light" ? "dark" : "light"} mode`,
- onChange,
- });
-
- return (
-
-
-
-
-
- {!isSelected || isSSR ? : }
-
-
- );
-};
diff --git a/config/fonts.ts b/config/fonts.ts
deleted file mode 100644
index b4411e2..0000000
--- a/config/fonts.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Fira_Code as FontMono, Inter as FontSans } from "next/font/google"
-
-export const fontSans = FontSans({
- subsets: ["latin"],
- variable: "--font-sans",
-})
-
-export const fontMono = FontMono({
- subsets: ["latin"],
- variable: "--font-mono",
-})
diff --git a/config/site.ts b/config/site.ts
deleted file mode 100644
index 2f093b1..0000000
--- a/config/site.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-export type SiteConfig = typeof siteConfig;
-
-export const siteConfig = {
- name: "FINDR - Unified connectivity service",
- description: "simple-to-use unified connectivity service to observe, interact, and onboard industry-specific devices across a wide range of network & data protocols",
- navItems: [
- {
- label: "Home",
- href: "/app",
- },
- {
- label: "Documentation",
- href: "/documentation",
- },
- {
- label: "Product",
- href: "/product",
- },
- ],
- links: {
- github: "https://github.com/DISHDevEx/findr",
- docs: "https://github.com/DISHDevEx/findr/wiki",
- playground: "/playground"
- },
-};
diff --git a/eslintrc.json b/eslintrc.json
deleted file mode 100644
index bffb357..0000000
--- a/eslintrc.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "next/core-web-vitals"
-}
diff --git a/layouts/default.tsx b/layouts/default.tsx
deleted file mode 100644
index c49005d..0000000
--- a/layouts/default.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-//import "../styles/globals.css";
-import React from "react";
-import { Metadata } from "next";
-import { siteConfig } from "../config/site";
-import { fontSans } from "../config/fonts";
-import { Navbar } from "../components/navbar";
-import { Link } from "@nextui-org/link";
-import clsx from "clsx";
-
-export const metadata: Metadata = {
- title: {
- default: siteConfig.name,
- template: `%s - ${siteConfig.name}`,
- },
- description: siteConfig.description,
- themeColor: [
- { media: "(prefers-color-scheme: light)", color: "white" },
- { media: "(prefers-color-scheme: dark)", color: "black" },
- ],
- icons: {
- icon: "/favicon.ico",
- shortcut: "/favicon-16x16.png",
- apple: "/apple-touch-icon.png",
- },
-};
-
-export default function DefaultLayout({
- children,
-}: {
- children: React.ReactNode;
-}) {
- return (
-
-
-
-
-
-
- {children}
-
-
-
- Powered by
- DISH Wireless
-
-
-
-
-
-
- );
-}
diff --git a/layouts/head.tsx b/layouts/head.tsx
deleted file mode 100644
index beb6fff..0000000
--- a/layouts/head.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-import NextHead from "next/head";
-import { siteConfig } from "../config/site";
-
-export const Head = () => {
- return (
-
- {siteConfig.name}
-
-
-
-
-
-
- );
-};
\ No newline at end of file
diff --git a/next-env.d.ts b/next-env.d.ts
deleted file mode 100644
index 4f11a03..0000000
--- a/next-env.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-///
-///
-
-// NOTE: This file should not be edited
-// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/next.config.js b/next.config.js
deleted file mode 100644
index 767719f..0000000
--- a/next.config.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/** @type {import('next').NextConfig} */
-const nextConfig = {}
-
-module.exports = nextConfig
diff --git a/package.json b/package.json
index c31d1b2..2818db2 100644
--- a/package.json
+++ b/package.json
@@ -1,48 +1,76 @@
{
- "name": "next-app-template",
- "version": "0.0.1",
- "private": true,
+ "name": "react-material-admin",
+ "version": "0.1.0-alpha",
+ "description": "Free and open-source admin application made with React",
+ "author": "m6v3l9 ",
+ "homepage": "https://m6v3l9.github.io/react-material-admin",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/react": "^11.11.1",
+ "@emotion/styled": "^11.11.0",
+ "@material-ui/core": "^5.0.0-alpha.35",
+ "@material-ui/icons": "^5.0.0-alpha.35",
+ "@material-ui/lab": "5.0.0-alpha.35",
+ "@mui/icons-material": "^5.14.16",
+ "@mui/material": "^5.14.17",
+ "@sentry/react": "^6.4.1",
+ "@testing-library/jest-dom": "^5.11.4",
+ "@testing-library/react": "^11.1.0",
+ "@testing-library/user-event": "^12.1.10",
+ "@types/jest": "^26.0.15",
+ "@types/node": "^12.0.0",
+ "@types/react": "^17.0.0",
+ "@types/react-dom": "^17.0.0",
+ "axios": "^0.21.1",
+ "axios-mock-adapter": "^1.19.0",
+ "date-fns": "^2.19.0",
+ "env-cmd": "^10.1.0",
+ "formik": "^2.2.6",
+ "gh-pages": "^3.1.0",
+ "history": "^5.0.0",
+ "i18next": "^20.1.0",
+ "i18next-browser-languagedetector": "^6.1.0",
+ "i18next-xhr-backend": "^3.2.2",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2",
+ "react-error-boundary": "^3.1.3",
+ "react-i18next": "^11.8.11",
+ "react-query": "^3.16.0",
+ "react-router": "6.0.0-beta.0",
+ "react-router-dom": "6.0.0-beta.0",
+ "react-scripts": "^4.0.3",
+ "recharts": "^2.0.9",
+ "source-map-explorer": "^2.5.2",
+ "typescript": "^4.1.2",
+ "web-vitals": "^1.0.1",
+ "yup": "^0.32.9"
+ },
"scripts": {
- "dev": "next dev",
- "build": "next build",
- "start": "next start",
- "lint": "next lint"
+ "analyze": "source-map-explorer 'build/static/js/*.js'",
+ "build": "react-scripts build",
+ "build:staging": "env-cmd -f .env.staging npm run build",
+ "build:production": "env-cmd -f .env.production npm run build",
+ "predeploy": "yarn run build:production",
+ "deploy": "gh-pages -d build",
+ "start": "react-scripts start",
+ "test": "react-scripts test"
},
- "dependencies": {
- "@nextui-org/button": "^2.0.21",
- "@nextui-org/code": "2.0.7",
- "@nextui-org/input": "2.0.10",
- "@nextui-org/kbd": "2.0.8",
- "@nextui-org/link": "^2.0.9",
- "@nextui-org/navbar": "2.0.9",
- "@nextui-org/react": "^2.1.13",
- "@nextui-org/snippet": "2.0.10",
- "@nextui-org/switch": "2.0.9",
- "@nextui-org/system": "2.0.5",
- "@nextui-org/theme": "^2.0.4",
- "@react-aria/ssr": "^3.7.1",
- "@react-aria/visually-hidden": "^3.8.3",
- "@types/node": "20.4.9",
- "@types/react": "18.2.20",
- "@types/react-dom": "18.2.7",
- "autoprefixer": "10.4.14",
- "clsx": "^2.0.0",
- "eslint": "8.41.0",
- "eslint-config-next": "13.4.4",
- "framer-motion": "^10.16.2",
- "intl-messageformat": "^10.1.0",
- "next": "^13.3.4",
- "next-themes": "^0.2.1",
- "next-ui": "^0.9.0",
- "postcss": "^8.4.31",
- "react": "^18.2.0",
- "react-dom": "18.2.0",
- "react-tools": "^0.13.3",
- "tailwind-variants": "^0.1.13",
- "tailwindcss": "3.3.3",
- "typescript": "^5.0.4"
+ "eslintConfig": {
+ "extends": [
+ "react-app",
+ "react-app/jest"
+ ]
},
- "devDependencies": {
- "@types/next": "^9.0.0"
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
}
}
diff --git a/pages/_app.tsx b/pages/_app.tsx
deleted file mode 100644
index 7de5b7a..0000000
--- a/pages/_app.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import "../styles/globals.css";
-import { NextUIProvider } from "@nextui-org/react";
-import { ThemeProvider as NextThemesProvider } from "next-themes";
-import { fontSans, fontMono } from "../config/fonts";
-import type { AppProps } from "next/app";
-
-export default function App({ Component, pageProps }: AppProps) {
- return (
-
-
-
-
-
- );
-}
-
-export const fonts = {
- sans: fontSans.style.fontFamily,
- mono: fontMono.style.fontFamily,
-};
\ No newline at end of file
diff --git a/pages/api/api.ts b/pages/api/api.ts
deleted file mode 100644
index e5ba4df..0000000
--- a/pages/api/api.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-export async function fetchGraphQL(query: string) {
- const response = await fetch('http://localhost:4000/graphql', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({ query }),
- });
-
- if (!response.ok) {
- throw new Error('Network response was not ok');
- }
-
- const { data } = await response.json();
- return data;
- }
\ No newline at end of file
diff --git a/pages/documentation.tsx b/pages/documentation.tsx
deleted file mode 100644
index b7ec068..0000000
--- a/pages/documentation.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-import { title } from "../components/primitives";
-
-export default function DocsPage() {
- return (
-
-
How to Use and Contribute
-
- );
-}
diff --git a/pages/index.tsx b/pages/index.tsx
deleted file mode 100644
index 1bdaf74..0000000
--- a/pages/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from "react";
-import NextLink from "next/link";
-import { Link } from "@nextui-org/link";
-import { button as buttonStyles } from "@nextui-org/theme";
-import { siteConfig } from "../config/site";
-import { title, subtitle } from "../components/primitives";
-import { GithubIcon } from "../components/icons";
-import DefaultLayout from "../layouts/default";
-
-
-export default function IndexPage() {
- return (
-
-
-
-
Simple-to-use
- unified connectivity service
-
-
- for industry-specific devices, across a wide range of network and data protocols
-
-
- onboard, observe and interact
-
-
-
-
- Playground
-
-
-
- GitHub
-
-
-
-
- );
-}
diff --git a/pages/playground.tsx b/pages/playground.tsx
deleted file mode 100644
index 3931bd5..0000000
--- a/pages/playground.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import React, { useState } from 'react';
-import { title } from '../components/primitives';
-import { fetchGraphQL } from './api/api';
-
-export default function PlaygroundPage() {
- /**
- * useState hook to manage the query and response states of the PlaygroundPage component.
- * query: string - the GraphQL query entered by the user.
- * setQuery: function - updates the query state.
- * response: string - the response received from the GraphQL API.
- * setResponse: function - updates the response state.
- */
-
- const [query, setQuery] = useState('');
- const [response, setResponse] = useState('');
-
- /**
- * Event handler function that updates the query state when the user types in the query textarea.
- * @param event - the change event triggered by the user typing in the query textarea.
- */
- const handleQueryChange = (event: React.ChangeEvent) => {
- setQuery(event.target.value);
- };
-
- /**
- * Event handler function that updates the response state when the user types in the response textarea.
- * @param event - the change event triggered by the user typing in the response textarea.
- */
- const handleResponseChange = (event: React.ChangeEvent) => {
- setResponse(event.target.value);
- };
-
- /**
- * Event handler function that makes an API call to fetch data from the GraphQL API and updates the response state.
- */
- const handleApiCall = async () => {
- try {
- const data = await fetchGraphQL(query);
- setResponse(data);
- } catch (error) {
- console.error(error);
- }
- };
-
- return (
-
-
Let's Play
-
-
- Boom
-
- );
-}
diff --git a/postcss.config.js b/postcss.config.js
deleted file mode 100644
index 33ad091..0000000
--- a/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-}
diff --git a/public/404.html b/public/404.html
new file mode 100644
index 0000000..ddefb08
--- /dev/null
+++ b/public/404.html
@@ -0,0 +1,50 @@
+
+
+
+
+ Single Page Apps for GitHub Pages
+
+
+
+
diff --git a/public/favicon.ico b/public/favicon.ico
index 0d2dd347113cb4cd7da335fd5f0a222e59a286ae..ba55c2d92c5af50fdd9a7c846cf43319f23a4df1 100644
GIT binary patch
literal 23395
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
diff --git a/public/findr_red_blocky.ico b/public/findr_red_blocky.ico
new file mode 100644
index 0000000000000000000000000000000000000000..ab7721f2ab928e5da078c31c9c3039d79d020715
GIT binary patch
literal 410598
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